Construction & Engineering · Chicago Data Portal

Chicago Building Permits

Datadory delivers chicago building permits data covering every permit the City of Chicago has issued from January 2006 to the present: about 845,000 records across 122 fields, each carrying permit type and status, a full fee ledger, free-text work descriptions, up to fifteen named contact blocks, applicant-reported cost of work, and lat/long coordinates with computed boundary joins to ward, community area, census tract, ZIP and property index numbers. Delivered daily, weekly, or hourly as an API, files, or straight into your warehouse.

API, files, or your warehouse. Daily, weekly, or hourly.

Where it covers
City of Chicago, geocoded to the property's primary address with lat/long and State Plane coordinates plus computed boundary joins to ward, community area, census tract, ZIP code and property index numbers
How far back
Permits issued January 3, 2006 through the present; updated continuously as permits are issued, with issue dates running through August 20, 2026 at last verification
How fine
One row per permit, with up to fifteen associated contact records flattened into numbered columns on the same row; no aggregation, no rollups

What is the Chicago Building Permits dataset?

The City of Chicago issues thousands of building permits a year - for new construction, renovations, electrical work, signs, fences, porches - and every one that survives issuance lands in this table. About 845,000 records across 122 fields, running from January 3, 2006 through the present, excluding only permits voided or revoked after issuance.

What makes it unusual among municipal registries is depth. A single row carries the permit number, status and milestone, permit type and review type (the Express Permit Program gets its own codes), application start date and issue date with processing time computed between them in days, address components plus geocoded latitude and longitude, work type, a free-text work description specific enough to count receptacle outlets, and a complete fee ledger split into building/zoning paid, other paid, unpaid and waived amounts with subtotals rolling up to total_fee. Then there are the people: up to fifteen numbered contact blocks per permit - type, name, city, state, ZIP - spanning owners, applicants, contractors and their representatives.

The geography ships precomputed. Every record carries property index numbers, community area, census tract and ward assignments, State Plane and lat/long coordinates, and point geometry with boundary joins already resolved - so a query like "all electrical permits in ward 34 since March" is a filter, not a spatial join project. Work under a permit may not begin until applicable fees are paid, which makes the paid/unpaid split a usable signal on its own.

What do sample rows look like?

One row per permit, straight from the archive:

permit_      : B200507916        id : N2964633
status       : ACTIVE            milestone : INSPECTION ELIGIBLE
type         : PERMIT - EXPRESS PERMIT PROGRAM   review : EXPRESS PERMIT PROGRAM
applied      : 2026-08-19        issued : 2026-08-20   processing_time: 1 day
address      : 737 W WASHINGTON BLVD          ward : 34
work_type    : Electrical Work
description  : LINE VOLTAGE ELECTRICAL WORK. REPAIR OR ALTER DEVICES ON EXISTING
               CIRCUITS. RECEPTACLE OUTLETS: 15. LIGHTING OUTLETS: 1.
               SPECIFIC LOCATION: UNIT 2307.
fees         : total_fee $100    reported_cost $6,000
contact_1    : OWNER / SOUGANDH KALLURI
pin          : 1709337092        lat/long : 41.88304, -87.63200

That single row answers questions most datasets cannot: what kind of work, authorized under which program, applied for and issued one day apart, on which block, in whose name as owner, at what reported cost, against what fee. Multiply by 845,000 and twenty years, and the table becomes a census of who builds what in Chicago and how long the city takes to approve it. Request a sample and rows come back cut to whichever wards, permit types and years you name.

Which fields does the dataset include?

Fifteen core fields carry most analytical weight; definitions below were verified against live query responses during Datadory's August 2026 research pass, not inferred from documentation. The remaining columns - fee components and subtotals, additional contact slots two through fifteen, boundary identifiers and geometry - fold out on request with your sample.

What does coverage look like across geography, time and granularity?

Geography - City of Chicago only, but deep inside it: every record is geocoded to the property's primary address with both lat/long and State Plane coordinates, plus precomputed joins to ward (city council district), community area, census tract, ZIP code and property index numbers. Neighborhood-scale analysis needs no external crosswalk file.

Temporal - permits issued from January 3, 2006 through the present, roughly twenty years of continuous issuance. The table updates continuously rather than on a release calendar, so newly issued permits appear as they are cut - issue dates ran through August 20, 2026 at last verification.

Granularity - strictly one row per permit. There are no aggregates, rollups or pre-summed views; if you want monthly totals by ward you compute them, which is exactly why the table stays trustworthy when the city redraws a boundary join. Contact records flatten into numbered columns on the same row rather than a separate table, keeping a permit and its parties in one read.

For the national frame around these numbers, pair this feed with New Residential Construction (Building Permits, Housing Starts & Completions) or Value of Construction Put in Place (VIP) - metro detail versus national series, on our construction engineering data hub.

How is the data delivered?

API, files, or your warehouse. Daily, weekly, or hourly.

Name the wards, permit types and date range when you request the sample; the sample ships first either way, with the full field dictionary attached so your engineers can validate all 122 columns before anything recurring starts.

Cadence is yours to set - tighten it during construction season, loosen it when the ground freezes.

Who uses this data, and for what?

  • Neighborhood demand mapping - chart permit volume and reported cost by ward, community area or census tract to see where renovation money concentrates before retail demographics confirm it. See market researchers use cases.
  • Contractor activity tracking - the numbered contact blocks turn the table into a who-does-what ledger: which electrical contractors pull permits in which wards, and how often their jobs go Express.
  • Processing-time benchmarks - processing time arrives computed between application start and issue dates, so approval-speed comparisons across permit types and eras need no derived date math. See data scientists use cases.
  • Leading-indicator feeds - weekly permit counts by work type feed distributor demand models months ahead of put-in-place value. See investors quants use cases.
  • Address-level product features - geocoded rows with PINs slot directly into property-intelligence lookups: "what permits exist for this address" becomes one filtered read. See developers builders use cases.
  • Citation-grade reporting - quote permit numbers and fee ledgers rather than summaries, with every claim traceable to a specific issued document. See journalists academics use cases.
  • Cross-city comparison - line Chicago's schema up against NYC DOB Job Application Filings for a two-city view of big-city permitting, or read the head-to-head method on USGS Earthquake API vs Chicago Building Permits.

Which personas get the most value?

Market researchers and consultants, investors and quant researchers, data scientists and ML engineers and developers and data-product builders rate this feed at top relevance - one maps neighborhoods, one trades the construction cycle, one trains duration and valuation models on two decades of geocoded rows, one pipes address-level lookups into products. Competitive intelligence teams mine the contractor contact blocks for market-share evidence, and journalists and academics cite permit-level facts instead of aldermanic press releases. Persona-by-persona workflows sit on our construction engineering data hub, and the ranked shortlist lives on best construction engineering datasets.

How does it compare within construction engineering data?

It is the deepest municipal permit registry in Datadory's catalog - 845,000 rows, 122 columns, twenty years, one city. NYC DOB Job Application Filings is its New York counterpart, trading Chicago's flattened contact blocks for per-milestone dates on job applications since 2000; together they make honest two-city permitting studies possible. At the opposite end of the geographic zoom, New Residential Construction (Building Permits, Housing Starts & Completions) covers the whole United States in units, and Eurostat Construction Statistics & Building Permits harmonizes Europe - neither names a street address. FRED Economic Data (Housing Starts & Construction Series) redistributes the federal series, and OECD Data Explorer (Building Permits & Construction Indicators) adds cross-country permit counts. Rule of thumb: national series size the market, municipal registries like this one tell you which block, which contractor and how many days it took.

What should I know before requesting a sample?

Four things worth knowing upfront.

First, reported_cost is the applicant's estimate, not an appraisal - it is missing on roughly 38,000 permits and self-reported elsewhere, so treat it as a scale indicator rather than a valuation. The fee ledger, by contrast, is the city's own arithmetic and reconciles to subtotals.

Second, permit_status and permit_milestone are populated on about 542,000 of the 845,000 rows - coverage is partial for older records, so status-based filtering works best from the mid-period onward. The permit number and issue date never go missing.

Third, the table excludes permits voided or revoked after issuance, which is a feature for demand analysis and a caveat if you are reconstructing the full application funnel - applications denied before issuance are not here at all.

Fourth, work_description is free text entered by applicants: superb for reading what actually got built, messy for keyword counting until you normalize trade terms. All fifteen core field definitions above carry verified confidence, so the schema itself is not among the open questions.

Get a sample of this dataset and we route rows scoped to your wards, permit types and date range, with the full field dictionary attached.

Field dictionary

Every field below is documented against real records. The full dictionary ships with the sample.

Field dictionary - fifteen verified core fields, one row per permit
fieldtypedefinitionexample
idstringUnique database record identifier.N2964633
permit_stringTracking number assigned at the beginning of the permit application process; the permit's public identity.B200507916
permit_statusstringCurrent status of the permit; populated on about 542,000 of 845,000 rows and unavailable for some older permit types.ACTIVE
permit_milestonestringLatest milestone reached in the permit lifecycle, such as inspection eligibility.INSPECTION ELIGIBLE
permit_typestringType of permit issued, including program-specific codes such as the Express Permit Program.PERMIT - EXPRESS PERMIT PROGRAM
application_start_datedatetimeDate when the City began reviewing the permit application.2026-08-19T00:00:00.000
issue_datedatetimeDate the City determined the permit was ready to issue, subject to payment of fees.2026-08-20T00:00:00.000
processing_timenumberNumber of days between APPLICATION_START_DATE and ISSUE_DATE, computed upstream.1
work_descriptiontextFree-text description of the work authorized, often detailed enough to count fixtures and outlets.LINE VOLTAGE ELECTRICAL WORK. REPAIR OR ALTER DEVICES ON EXISTING CIRCUITS.
total_feenumberSum of SUBTOTAL_PAID, SUBTOTAL_UNPAID and SUBTOTAL_WAIVED from the fee ledger.100
contact_1_namestringContact 1's full name, typed by CONTACT_1_TYPE (owner, electrical contractor, and so on); slots run through contact 15.SOUGANDH KALLURI
reported_costnumberApplicant-supplied estimate of the cost of work; missing on roughly 38,000 permits.6000
pin_liststringProperty index number(s) disclosed by the applicant and verified by city staff.1709337092
wardintegerWard (city council district) of the property's primary address at time of issuance.34
latitudenumberLatitude of the property's primary address.41.883039342376286

Questions buyers ask

How far back does the Chicago building permits data go?

January 3, 2006 - roughly twenty years of continuous issuance through the present. About 845,000 permits survive in the table after voided and revoked records are excluded, with issue dates running through August 20, 2026 at last verification. Two decades spans the pre-crisis bust, the downtown tower boom and the post-pandemic renovation wave in one consistent schema.

Does the data include the cost of each project?

Two different numbers ship side by side: reported_cost is the applicant's own estimate of the work and is absent on roughly 38,000 permits, while the fee ledger - building/zoning and other fees, split into paid, unpaid and waived with subtotals - is the city's own calculation and sums to total_fee on every row. Read them together and you get both what the owner claimed and what the city actually charged.

Can I measure permit approval times?

Yes - processing_time is computed for you as the number of days between application start and issue date, and the underlying dates ship alongside so you can recompute or segment it by permit type, review type and era. Express Permit Program reviews show up as their own codes, making fast-track versus standard-track comparison a group-by rather than a guessing exercise.

Is the data geocoded?

Every record carries the latitude and longitude of the property's primary address plus State Plane coordinates, and the boundary joins - ward, community area, census tract, ZIP code, property index numbers - arrive precomputed on the row. Point geometry is included, so mapping and spatial filtering need no separate crosswalk or geocoding step.

How many contacts are recorded per permit?

Up to fifteen numbered contact blocks per permit, each holding a contact type (owner, applicant, electrical contractor, plumber, mason and so on), name, city, state and ZIP, flattened into columns on the permit row. That structure turns the table into a contractor activity ledger: count permits by contact name and type to see who is actually working which neighborhoods.

Are voided or revoked permits included?

No - permits that were voided or revoked after issuance are excluded from the published table, and applications denied before issuance never enter it. What remains is the population of permits actually authorized, which is what makes issuance counts a clean demand signal; just do not expect the table to reconstruct a denial funnel.

How current is the data?

The table updates continuously rather than on a publication calendar - newly issued permits appear as the city cuts them, and issue dates ran through August 20, 2026 during Datadory's August 2026 verification pass. On a daily delivery cadence your copy trails the counter by hours, not quarters.

Who uses Chicago building permits data?

Six Datadory persona packs carry it, four at top relevance: market researchers mapping neighborhood demand, investors feeding construction-cycle indicators, data scientists training duration and valuation models, and developers wiring address-level permit lookups into products. Competitive intelligence teams track contractor activity through the contact blocks, and journalists and academics cite permit numbers rather than press releases.

Notes on this record

  • One flat table holds every City of Chicago building permit issued since January 3, 2006 - permit identity, fee ledger, contacts, geography and description on a single row, no joins required.
  • The table runs continuously from 2006 to the present with issue dates current within days of issuance, so a model trained on 2015 rows still parses 2026 rows without migration work.
  • Days between application start and issue date ship as a column beside both raw dates - approval-speed benchmarks across permit types need no derived date math.
  • Paid, unpaid and waived amounts with subtotals reconcile to total_fee on every permit, separating what the city assessed from what the applicant actually settled - remember work cannot begin until fees are paid.
  • Owners, applicants, contractors and representatives each get typed contact blocks, turning a permit registry into a who-builds-where ledger for contractor intelligence.
  • Lat/long, State Plane coordinates, property index numbers and precomputed ward, community area, census tract and ZIP joins ride on every row - neighborhood analysis starts with filters, not spatial joins.
  • All fifteen core definitions were checked against live query responses during Datadory's August 2026 research pass; the dictionary above describes arriving data, not advertised data.

See the rows before you pay anything.

Name this dataset and we send real records from it — scoped to the fields you asked for.

See pricing