Open Due August 31, 2026 0 submitted

How long Berkeley entitlements actually take

Berkeley, California development applications traced from filing to decision: hearing dates, decision dates, days elapsed, appeals filed, and which body decided, so the real timeline of getting approved is visible.

What to deliver

  • 2 minimum · 6 preferred · 42 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

.MD.PDF.TXT.PNG.JPG.JPEG.CSV.XLSX

What each record needs

case_numbertextRequired

City case number. The identifier the City of Berkeley uses for this application.

Produce it: Exactly as the city writes it. One row per case.

Output path: case_number

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: casecase_number

Example: ZP2023-0088

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: A case number that does not exist in the city's records fails the row.

project_addresstextRequired

Project address. Street address of the application site.

Produce it: Street number and street name plus 'Berkeley, CA'. No owner or applicant names.

Output path: project_address

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: address

Example: 2211 Harold Way, Berkeley, CA

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: Address must match the city record for the case.

units_proposedintegerRequired

Dwelling units proposed. Units in the application as filed, so timing can be read against project size.

Produce it: Whole number from the record. Enter 0 for a non-residential application. Never estimate.

Output path: units_proposed

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: units

Example: 12

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: Must match the record.

application_datedateRequired

Date filed. Date the application was submitted.

Produce it: ISO 8601, YYYY-MM-DD, as recorded by the city. This is the clock start.

Output path: application_date

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: filedapplication_date

Example: 2023-02-08

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: A wrong start date makes the whole row useless. Re-check sampled rows.

first_hearing_datedateOptional

First public hearing. Date of the first public hearing on the application.

Produce it: ISO 8601, YYYY-MM-DD, from the agenda. Blank where the application was decided at staff level with no hearing.

Output path: first_hearing_date

Coverage: 60 minimum populated · 100 preferred · 150 maximum · 50% minimum · 80% target

Flat-file columns: hearing_date

Example: 2023-09-14

Missing values: Allowed When the application was decided administratively with no public hearing..

Source: Cite where the value came from.

Buyer review: Must match a published agenda.

decision_datedateRequired

Decision date. Date the deciding body acted on the application.

Produce it: ISO 8601, YYYY-MM-DD. This is the clock stop. Use the original decision date, not an appeal outcome date.

Output path: decision_date

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: decision_date

Example: 2023-11-09

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: Must match the minutes or notice of decision.

days_to_decisionintegerRequired

Days from filing to decision. Calendar days between application_date and decision_date.

Produce it: Whole number. Must equal the difference between the two date columns; do not round or adjust it.

Output path: days_to_decision

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: daysduration

Example: 274

Missing values: Not allowed.

Buyer review: Recompute from the dates. Any mismatch fails the row.

decisiontextRequired

Decision. What the deciding body decided.

Produce it: Exactly one of: approved, approved_with_conditions, denied, withdrawn, continued_indefinitely.

Output path: decision

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: decisionoutcome

Example: approved_with_conditions

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: Must match the minutes or notice of decision.

deciding_bodytextRequired

Deciding body. Who made the decision.

Produce it: Exactly one of: staff, zoning_adjustments_board, design_review_committee, landmarks_preservation_commission, city_council, planning_commission.

Output path: deciding_body

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: bodydeciding_body

Example: zoning_adjustments_board

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: Must match the agenda or minutes that carry the decision.

appeal_filedtextRequired

Appeal filed. Whether the decision was appealed.

Produce it: Exactly one of: yes, no, unknown. Use 'unknown' only where the record genuinely does not say.

Output path: appeal_filed

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: appealappeal_filed

Example: no

Missing values: Not allowed.

Source: Cite where the value came from.

Buyer review: An appeal recorded in the city file but marked 'no' fails the row.

appeal_resolved_datedateOptional

Appeal resolved. Date the appeal was finally resolved.

Produce it: ISO 8601, YYYY-MM-DD. Blank where no appeal was filed or it is still open.

Output path: appeal_resolved_date

Coverage: 0 minimum populated · 40 preferred · 150 maximum · 0% minimum · 30% target

Flat-file columns: appeal_resolved

Example: 2024-02-20

Missing values: Allowed When no appeal was filed or the appeal is still pending..

Source: Cite where the value came from.

Buyer review: Only rows with appeal_filed = yes may carry a date here.

ceqa_pathwaytextOptional

CEQA pathway. How the application cleared environmental review.

Produce it: Exactly one of: exempt_categorical, exempt_statutory, negative_declaration, mitigated_negative_declaration, eir, not_stated.

Output path: ceqa_pathway

Coverage: 60 minimum populated · 100 preferred · 150 maximum · 50% minimum · 80% target

Flat-file columns: ceqa

Example: exempt_statutory

Missing values: Allowed Use 'not_stated' rather than leaving blank where the record is silent..

Source: Cite where the value came from.

Buyer review: Must match the staff report or notice of determination.

source_urlurlRequired

Source URL. Public link to the record this row was read from.

Produce it: A working public URL on berkeleyca.gov, an official permit portal, the state legislature site, or another official host. No paywalled or login-gated links.

Output path: source_url

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: urllinksource

Example: https://berkeleyca.gov/construction-development/land-use-development/zoning-adjustments-board

Missing values: Not allowed.

Source: This column is the source link.

Buyer review: Sampled links must resolve publicly and must contain the claimed information.

captured_atdateRequired

Date captured. The date this row was read from its source.

Produce it: ISO 8601, YYYY-MM-DD. Must be within 60 days of submission.

Output path: captured_at

Coverage: 100 minimum populated · 125 preferred · 150 maximum · 100% minimum · 100% target

Flat-file columns: datecaptured_at

Example: 2026-08-12

Missing values: Not allowed.

Buyer review: Reject rows captured more than 60 days before submission.

View the full field spec
{
  "type": "array",
  "items": {
    "type": "object",
    "required": [
      "case_number",
      "project_address",
      "units_proposed",
      "application_date",
      "decision_date",
      "days_to_decision",
      "decision",
      "deciding_body",
      "appeal_filed",
      "source_url",
      "captured_at"
    ],
    "properties": {
      "decision": {
        "type": "string",
        "title": "Decision",
        "examples": [
          "approved_with_conditions"
        ],
        "description": "What the deciding body decided."
      },
      "source_url": {
        "type": "string",
        "title": "Source URL",
        "format": "uri",
        "examples": [
          "https://berkeleyca.gov/construction-development/land-use-development/zoning-adjustments-board"
        ],
        "maxLength": 500,
        "description": "Public link to the record this row was read from."
      },
      "captured_at": {
        "type": "string",
        "title": "Date captured",
        "format": "date",
        "examples": [
          "2026-08-12"
        ],
        "description": "The date this row was read from its source."
      },
      "case_number": {
        "type": "string",
        "title": "City case number",
        "examples": [
          "ZP2023-0088"
        ],
        "maxLength": 50,
        "minLength": 3,
        "description": "The identifier the City of Berkeley uses for this application."
      },
      "appeal_filed": {
        "type": "string",
        "title": "Appeal filed",
        "examples": [
          "no"
        ],
        "description": "Whether the decision was appealed."
      },
      "ceqa_pathway": {
        "type": "string",
        "title": "CEQA pathway",
        "examples": [
          "exempt_statutory"
        ],
        "description": "How the application cleared environmental review."
      },
      "deciding_body": {
        "type": "string",
        "title": "Deciding body",
        "examples": [
          "zoning_adjustments_board"
        ],
        "description": "Who made the decision."
      },
      "decision_date": {
        "type": "string",
        "title": "Decision date",
        "format": "date",
        "examples": [
          "2023-11-09"
        ],
        "description": "Date the deciding body acted on the application."
      },
      "units_proposed": {
        "type": "integer",
        "title": "Dwelling units proposed",
        "maximum": 2000,
        "minimum": 0,
        "examples": [
          "12"
        ],
        "description": "Units in the application as filed, so timing can be read against project size."
      },
      "project_address": {
        "type": "string",
        "title": "Project address",
        "examples": [
          "2211 Harold Way, Berkeley, CA"
        ],
        "maxLength": 200,
        "minLength": 8,
        "description": "Street address of the application site."
      },
      "application_date": {
        "type": "string",
        "title": "Date filed",
        "format": "date",
        "examples": [
          "2023-02-08"
        ],
        "description": "Date the application was submitted."
      },
      "days_to_decision": {
        "type": "integer",
        "title": "Days from filing to decision",
        "maximum": 5000,
        "minimum": 0,
        "examples": [
          "274"
        ],
        "description": "Calendar days between application_date and decision_date."
      },
      "first_hearing_date": {
        "type": "string",
        "title": "First public hearing",
        "format": "date",
        "examples": [
          "2023-09-14"
        ],
        "description": "Date of the first public hearing on the application."
      },
      "appeal_resolved_date": {
        "type": "string",
        "title": "Appeal resolved",
        "format": "date",
        "examples": [
          "2024-02-20"
        ],
        "description": "Date the appeal was finally resolved."
      }
    },
    "additionalProperties": false
  },
  "$schema": "https://json-schema.org/draft/2020-12/schema",
  "minItems": 100
}

Record relationships

No cross-field rules are required.

Files and relationships

documentation

Methodology write-up

One file, plain prose is fine.

1 minimum · 1 preferred · 2 maximum files · .md, .pdf, .txt · 10 MB each
evidence

Agenda, minutes, and notice evidence

Must collectively cover at least 15 percent of submitted rows.

1 minimum · 5 preferred · 40 maximum files · .pdf, .png, .jpg, .jpeg, .csv, .xlsx · 25 MB each

Rights and sourcing

  • Must be free to use commercially
  • Whoever delivers it confirms they have the right to share it
AcceptedCC0-1.0CC-BY-4.0ODC-BY-1.0

Additional instructions

Everyone quotes a different number for how long Berkeley entitlement takes, and nobody can show their work. Tracing real cases from filing to decision turns that argument into a measurable distribution.