Berkeley zoning districts and what you can actually build
Every zoning district in Berkeley, California, with the rules that decide what fits on a lot: allowed housing types, height limit, density, setbacks, parking, and the section of the Berkeley Municipal Code the numbers come from.
What to deliver
- 2 minimum · 6 preferred · 32 maximum files
- How much of each field to fill is spelled out below
- 220 MB total, at most
- Every file gets a tamper-proof fingerprint on upload
- 1+ “documentation” file
- 1+ “evidence” file
Accepted formats
What each record needs
district_codetextRequired
Zoning district code. The official short code for the zoning district.
Produce it: Exactly as the Berkeley Municipal Code writes it, uppercase. Examples: R-1, R-2A, MU-LI, C-DMU. One row per district; do not merge districts.
Output path: district_code
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: districtzonecode
Example: R-2A
Missing values: Not allowed.
Source: Cite the Berkeley Municipal Code section that establishes the district.
Buyer review: Reject invented or merged district codes.
district_nametextRequired
District name. The full written name of the district.
Produce it: The name as the code gives it, for example 'Restricted Two-Family Residential District'. Plain text, no abbreviations of your own.
Output path: district_name
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: namedistrict_name
Example: Restricted Two-Family Residential District
Missing values: Not allowed.
Source: Same code section as the district code.
Buyer review: Name must match the code text.
district_categorytextRequired
District category. The broad family the district belongs to.
Produce it: Exactly one of: residential, commercial, manufacturing, mixed_use, open_space, institutional, overlay.
Output path: district_category
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: categorytype
Example: residential
Missing values: Not allowed.
Buyer review: Category must be defensible from the district's purpose statement.
max_height_feetdecimalOptional
Maximum building height (feet). The base height limit for the district in feet, before any bonus.
Produce it: The by-right base limit in feet. If the code gives only stories, convert and say how in the methodology file. If the district has no numeric limit, leave blank rather than guessing.
Output path: max_height_feet
Coverage: 22 minimum populated · 34 preferred · 60 maximum · 70% minimum · 90% target
Flat-file columns: heightmax_height
Example: 35
Missing values: Allowed When the code sets no numeric height limit for the district..
Source: Cite the code section giving the height limit.
Buyer review: Re-read the cited section. A number that is not in the code fails the submission.
max_storiesintegerOptional
Maximum stories. Base story limit for the district.
Produce it: Whole number as written in the code. Blank if the code sets no story limit.
Output path: max_stories
Coverage: 16 minimum populated · 30 preferred · 60 maximum · 50% minimum · 80% target
Flat-file columns: storiesmax_stories
Example: 3
Missing values: Allowed When the code sets no story limit..
Source: Cite the code section.
Buyer review: Must match the cited section.
min_lot_area_sqftdecimalOptional
Minimum lot area (square feet). Smallest permitted lot size in the district.
Produce it: In square feet, as the code states. Blank if the code sets none.
Output path: min_lot_area_sqft
Coverage: 16 minimum populated · 30 preferred · 60 maximum · 50% minimum · 80% target
Flat-file columns: min_lotlot_area
Example: 5000
Missing values: Allowed When the code sets no minimum lot area..
Source: Cite the code section.
Buyer review: Must match the cited section.
multifamily_allowedtextRequired
Multifamily housing permitted. Whether housing with three or more units is allowed in the district, and on what terms.
Produce it: Exactly one of: by_right, use_permit, conditional, not_allowed. Read the district's use table, not the district name.
Output path: multifamily_allowed
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: multifamilymf_allowed
Example: use_permit
Missing values: Not allowed.
Source: Cite the use-table section you read.
Buyer review: Re-read the use table for sampled districts. A wrong permission value fails the submission.
parking_min_per_unitdecimalOptional
Minimum parking spaces per dwelling unit. Required off-street parking per unit in the district.
Produce it: Spaces per dwelling unit. Enter 0 where parking minimums have been removed. Blank only if the code genuinely does not address it.
Output path: parking_min_per_unit
Coverage: 16 minimum populated · 30 preferred · 60 maximum · 50% minimum · 80% target
Flat-file columns: parkingparking_ratio
Example: 1
Missing values: Allowed When the code does not set a residential parking ratio for the district..
Source: Cite the parking section.
Buyer review: Zero is a real answer and must not be confused with blank.
code_citationtextRequired
Code citation. The Berkeley Municipal Code sections the row was read from.
Produce it: Section numbers, semicolon separated. Example: BMC 23.202.020; BMC 23.304.030. Must be the sections you actually read.
Output path: code_citation
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: citationsection
Example: BMC 23.202.020; BMC 23.304.030
Missing values: Not allowed.
Source: This column is the source attribution.
Buyer review: Open the cited section. If it does not say what the row says, the row fails.
source_urlurlRequired
Source URL. Public link to the code section or zoning page the row came from.
Produce it: A working public URL on codepublishing.com, berkeleyca.gov, or another official host. No paywalled or login-gated links.
Output path: source_url
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: urllink
Example: https://berkeley.municipal.codes/BMC/23.202.020
Missing values: Not allowed.
Source: This column is the source link.
Buyer review: Sampled links must resolve and must contain the cited text.
captured_atdateRequired
Date captured. The date the row was read from the code.
Produce it: ISO 8601, YYYY-MM-DD. Zoning changes; we need to know how current the read is.
Output path: captured_at
Coverage: 30 minimum populated · 38 preferred · 60 maximum · 100% minimum · 100% target
Flat-file columns: datecaptured_at
Example: 2026-08-10
Missing values: Not allowed.
Buyer review: Reject dates more than 60 days before submission.
View the full field spec
{
"type": "array",
"items": {
"type": "object",
"required": [
"district_code",
"district_name",
"district_category",
"multifamily_allowed",
"code_citation",
"source_url",
"captured_at"
],
"properties": {
"source_url": {
"type": "string",
"title": "Source URL",
"format": "uri",
"examples": [
"https://berkeley.municipal.codes/BMC/23.202.020"
],
"maxLength": 500,
"description": "Public link to the code section or zoning page the row came from."
},
"captured_at": {
"type": "string",
"title": "Date captured",
"format": "date",
"examples": [
"2026-08-10"
],
"description": "The date the row was read from the code."
},
"max_stories": {
"type": "integer",
"title": "Maximum stories",
"maximum": 40,
"minimum": 0,
"examples": [
"3"
],
"description": "Base story limit for the district."
},
"code_citation": {
"type": "string",
"title": "Code citation",
"examples": [
"BMC 23.202.020; BMC 23.304.030"
],
"maxLength": 300,
"minLength": 5,
"description": "The Berkeley Municipal Code sections the row was read from."
},
"district_code": {
"type": "string",
"title": "Zoning district code",
"examples": [
"R-2A"
],
"maxLength": 20,
"minLength": 1,
"description": "The official short code for the zoning district."
},
"district_name": {
"type": "string",
"title": "District name",
"examples": [
"Restricted Two-Family Residential District"
],
"maxLength": 200,
"minLength": 3,
"description": "The full written name of the district."
},
"max_height_feet": {
"type": "number",
"title": "Maximum building height (feet)",
"maximum": 400,
"minimum": 0,
"examples": [
"35"
],
"description": "The base height limit for the district in feet, before any bonus."
},
"district_category": {
"type": "string",
"title": "District category",
"examples": [
"residential"
],
"description": "The broad family the district belongs to."
},
"min_lot_area_sqft": {
"type": "number",
"title": "Minimum lot area (square feet)",
"minimum": 0,
"examples": [
"5000"
],
"description": "Smallest permitted lot size in the district."
},
"multifamily_allowed": {
"type": "string",
"title": "Multifamily housing permitted",
"examples": [
"use_permit"
],
"description": "Whether housing with three or more units is allowed in the district, and on what terms."
},
"parking_min_per_unit": {
"type": "number",
"title": "Minimum parking spaces per dwelling unit",
"maximum": 10,
"minimum": 0,
"examples": [
"1"
],
"description": "Required off-street parking per unit in the district."
}
},
"additionalProperties": false
},
"$schema": "https://json-schema.org/draft/2020-12/schema",
"minItems": 30
}Record relationships
No cross-field rules are required.
Files and relationships
Methodology write-up
One file, plain prose is fine.
1 minimum · 1 preferred · 2 maximum files · .md, .pdf, .txt · 10 MB eachCode excerpts
Must collectively cover at least 20 percent of submitted rows.
1 minimum · 5 preferred · 30 maximum files · .pdf, .png, .jpg, .jpeg · 25 MB eachRights and sourcing
- Must be free to use commercially
- Whoever delivers it confirms they have the right to share it
CC0-1.0CC-BY-4.0ODC-BY-1.0Additional instructions
Anyone evaluating a Berkeley site has to read the zoning ordinance district by district to learn what is buildable. We want that turned into one clean table so a site can be screened in seconds instead of an afternoon.