Chicago Building Permits - Contractors, Costs & Timeline
Pricing
$0.10 / 1,000 chicago permit records
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
Maintained by CommunityActor 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:
| Lane | Permits |
|---|---|
| Express Permit Program | 323,001 |
| Easy Permit Process | 207,655 |
| Renovation / Alteration | 167,499 |
| Signs | 54,985 |
| New Construction | 31,882 |
| Elevator (Conveyance Device) | 22,293 |
| Wrecking / Demolition | 21,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
| Input | What it does |
|---|---|
mode | rows (default) / recent (last 30 days) / aggregate |
permitType / status / reviewType / workType | what kind of permit |
contractor / owner | the party behind it (searches every contact slot) |
address / communityArea / ward | where |
keywords | free text over the work description |
costMin/Max / feeMin/Max | reported cost & permit fee ranges |
issuedFrom/To | issue-date range |
groupBy | aggregate over status / permitType / reviewType / workType / communityArea / ward |
maxResults | cap 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.