Chicago Building Permits - Contractors, Costs & Timeline avatar

Chicago Building Permits - Contractors, Costs & Timeline

Pricing

$0.10 / 1,000 chicago permit records

Go to Apify Store
Chicago Building Permits - Contractors, Costs & Timeline

Chicago Building Permits - Contractors, Costs & Timeline

Chicago building permits (public open data, 846k records, live): the city's full permit register with the contractor / owner / architect behind each job, the fee schedule and reported cost, and the application-to-issue timeline. Filter by type/status/contractor/cost/ward.

Pricing

$0.10 / 1,000 chicago permit records

Rating

0.0

(0)

Developer

Wenhao Yang

Wenhao Yang

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Categories

Share

Chicago Building Permits - Contractors, Costs & Full Timeline

Chicago publishes its entire building-permit register - every permit the city has issued since 2006, across every lane it processes - as open data. This actor turns that register into a charged-per-record lookup, filter and aggregate tool: find the permits a contractor has pulled, list the jobs above a cost threshold, pull this month's issuances, or read the register by ward.

Built for: contractors and suppliers researching a competitor or a market, developers and GCs sizing a pipeline, and anyone doing property or market diligence who needs the party behind the permit, not just the address.

What it covers

846,660 permits - the city's full file, one row per permit, spanning every processing lane:

LanePermits
Express Permit Program323,001
Easy Permit Process207,655
Renovation / Alteration167,499
Signs54,985
New Construction31,882
Elevator (Conveyance Device)22,293
Wrecking / Demolition21,903
Scaffolding / Porch / Reinstate / Extension~17,400

Each permit carries the parties behind the job - the city's contact slots resolved to named roles:

  • contractor (general / electrical / plumbing / masonry / wrecking / sign / elevator / ventilation / ...) - named on ~98% of the file
  • owner and owner-as-general-contractor
  • architect, engineer, and expeditor
  • the full contact list on the record (role, name, city, state, ZIP per party)

plus the fee schedule (total fee, reported project cost, paid / unpaid / waived subtotals - cost and fee are real numeric columns, so they range-filter), the application -> issue timeline (application date, issue date, processing time), the work description, and location (street address, community area, census tract, ward, PIN, latitude/longitude).

The fine print that matters

Chicago's permit status is blank by design on the express, easy, sign, elevator and scaffolding lanes - the city does not status-track them, so a third of the register carries no status word. Those permits are live and complete; the status filter matches blank as its own explicit value, so you can pull them deliberately instead of losing them.

The city's role vocabulary overlaps on purpose: "OWNER AS GENERAL CONTRACTOR" names a party who is both, so a contractor search and an owner search both return those jobs, and the record's contractor / owner fields may resolve to the same person. That is the city's own classification, kept verbatim - the full contacts list on every record carries each party's exact role if you need to separate them.

Typical questions

  • "Every permit contractor X has pulled - and where."
  • "New-construction permits over $5M issued this year."
  • "This month's issuances by type and ward."
  • "Permits in ward 42 / community area 49."
  • "Signs, demolitions and the blank-status express lane."
  • "Aggregate the register by status, permit type or ward."

Inputs

InputWhat it does
moderows (default) / recent (last 30 days) / aggregate
permitType / status / reviewType / workTypewhat kind of permit
contractor / ownerthe party behind it (searches every contact slot)
address / communityArea / wardwhere
keywordsfree text over the work description
costMin/Max / feeMin/Maxreported cost & permit fee ranges
issuedFrom/Toissue-date range
groupByaggregate over status / permitType / reviewType / workType / communityArea / ward
maxResultscap records (default 200)

Default run = the 200 most recently issued permits - fast for the daily auto-test. For a targeted query add a filter; for a broad view use aggregate.

Low cost

From $0.0001 per record - billed only for the rows you use, at the platform floor. Cost scales with what you pull, not with the size of the register, and because each record is metered individually there's no per-run charge cap to hit on a big pull.

Chicago's permit file is a 122-column table where the interesting part - who did the work - is not a column at all. It is spread across fifteen contact slots, each holding a role, a name and a city/state/ZIP, and the roles are free-form strings ("CONTRACTOR-GENERAL CONTRACTOR", "OWNER AS GENERAL CONTRACTOR", "CONTRACTOR-PLUMBER/PLUMBING", "SELF CERT ARCHITECT"), so "find this contractor's permits" means scanning every slot of every permit and understanding the role vocabulary - which a thin scraper simply does not do. On top of that the status column is empty on a third of the register (the city's express / sign / elevator lanes are never status-tracked), so a naive status filter silently drops a third of Chicago's permits; the permit types carry a mix of hyphen and en-dash characters that defeats exact matching; and the fee columns are comma-free numerics with negative values that a text comparison would sort wrong. Normalizing the roles, the blank-status lane and the numeric ranges into a schema where a contractor / status=blank / costMin query returns exactly the permits you mean is the actual product. Every pull is integrity-checked against the register's known shape, so a degraded source fails loudly instead of returning bad rows.

Source

  • City of Chicago: Building Permits - the full city permit register, live. Public open data. Records are the city's own published fields; not an endorsement of any contractor or property.