How Chicago contractors find new projects in building permit data
Every building permit the City of Chicago issues is a public record, published on the city's open-data portal where anyone can read it. That's the raw material. What most contractors don't have is a repeatable way to turn thousands of raw rows into a short list of jobs worth calling about. Here's the workflow.
Start with what the data actually contains
Each permit record the city publishes carries roughly the same fields: a permit number, a permit type, a status, the project address, the contractor's name and license number, the reported estimated cost, and the date the permit was issued. That's the whole record — it's not a dossier, and it's not a bid invitation. It's a one-row announcement that someone is allowed to do a specific kind of work at a specific address.
You can see exactly what a record looks like in the sample alert on our homepage — a real Chicago filing, shown field by field: address, work description, estimated cost, contractor, issue date, permit number. If you can read that sample, you can read the city's data. There is no secret second dataset hiding behind it.
The important mental shift is this: one permit row is a potential project, not a guaranteed bid. Some of these jobs already have a contractor. Some owners won't take your call. The permit doesn't tell you who's decided what — it tells you that work is authorized to begin. Your job is to filter thousands of these rows down to the ones where a phone call has a real chance of turning into work.
Step 1 — Read the work description first
The single most useful field on a permit record is the plain-language work description: one to three sentences describing what the permit covers. Everything else on the record is metadata. The work description is where the job lives.
When you read it, sort what you see into two piles. We call them strong matches and possible matches — the same two buckets we use in the live permit preview on our homepage. A strong match is a permit whose description names your trade directly: a roof replacement for a roofer, an HVAC changeout for a mechanical contractor. A possible match is adjacent work that might still involve you — new construction, an addition, a dormer, parapet or chimney work. The permit doesn't say a roofer is needed, but a roofer often ends up involved.
The strong-match pile is your call list. The possible-match pile is your question list: each one needs one qualifying question before it earns a call. Working the strong pile first and the possible pile second is the whole discipline. Most contractors who say "permit data doesn't work" are calling the possible pile first, or calling both piles with the same script.
Step 2 — Filter by permit type, but don't stop there
The permit-type field is broad by design — new construction, renovation/alteration, and similar high-level categories. It tells you the shape of the project, not the details. A "renovation/alteration" permit can be anything from a kitchen remodel to a full gut rehab with a new roof and new mechanicals.
Use the type field as a coarse filter and pair it with the work description. General contractors typically watch new construction and renovation/alteration permits in their territory. Subcontractors should care less about the type field and more about their trade keywords in the description: an electrician wants to see panel upgrades and service work whether the type says new construction or alteration. If you filter on type alone, you'll miss most of the jobs that actually fit you.
Step 3 — Cut by territory until the list is short
The address field is the only geographic signal you get, and it's the filter that makes permit data usable. Chicago issues enough permits that the unfiltered feed is noise; filtered to the ZIP codes or neighborhoods you actually serve, it becomes a list you can work in an hour.
Be honest with yourself about your service area. A list of 200 permits across the whole city is a list you won't work. A list of 30 permits in the ZIPs where your crews already are is a list you'll call. If your territory is small, consider watching it more often rather than widening it — frequency beats geography for speed.
One caution on addresses: the permit address is the property where the work happens, in general. It is not necessarily the owner's mailing address, and it doesn't come with a phone number. The public record gives you name and address — getting from an address to a conversation is still your job. (This is also the honest limit we explain on our pricing page: verified phone numbers are a separate, paid enrichment step, not something the city's data includes.)
Step 4 — Size the job from the reported estimated cost
Every permit carries a reported estimated cost — the number the applicant put on the application. Treat it as what it is: a rough size band, not a budget. A $400,000 alteration and a $4,000 alteration are different phone calls, and the number is good enough to tell you which is which. It is not the contract price, it is not what the owner will pay you, and applicants generally fill it in quickly rather than precisely.
Use it to sort, not to decide. Put the big-ticket strong matches at the top of the day's list and the small ones at the bottom. Don't delete small permits from your world entirely — a $6,000 roof repair from a permit you called on is a real job, and repair work is how you meet the owners who later need replacements. But your morning should start with the jobs that can pay for the morning.
Step 5 — Read the contractor field before you pick up the phone
Before you call about any permit, read the contractor name and license on the record. This field tells you who pulled the permit — often a general contractor, sometimes the owner, sometimes a subcontractor for a specific scope.
Why it matters: if a general contractor is already named, the job may already be staffed, and calling the owner to offer the same work is a waste of everyone's time. But the same field also tells a subcontractor exactly who to call: the GC who pulled the permit is the person who hires your trade. Read it first, and your call goes to the right person with the right pitch. Skip it, and you're guessing.
Step 6 — Build the list, then work it on a schedule
Your working list needs six columns: address, permit number, work description, issue date, contractor, and estimated cost. Sorted by issue date, newest first. That's it. Anything fancier is procrastination.
Then pick a cadence you can actually keep. A daily ten-minute scan of new filings beats a monthly three-hour binge every time, because permit leads decay: the longer a permit sits, the more likely the work is staffed, started, or finished. Work the new ones first.
One honest note on timing: the date stamped on the permit is the issue date, but the date you can act on is the date you saw it. Public portals publish on their own schedule, and there's often a gap between issuance and publication. When we built LeadFiling, we made this distinction explicit — our "detected" date is when our pipeline first saw the record, and we never backdate a detection to look faster than we were. Whoever you get your data from, ask them which date they're showing you. It matters.
The honest version
Permit data is a head start, not a closed deal. Some permits on your list will already have a contractor. Some addresses will be stale. Some owners are doing the work themselves and don't want your call. Nobody sells you a guaranteed bid — anyone who says otherwise is selling something else.
What the data does give you is something most contractors don't have: a daily, public, timestamped list of projects that are authorized to begin, in the exact territory you serve, matched to the exact work you do. Worked on a schedule, that's a standing bid list. Most of your competitors are still waiting for the phone to ring.
If you'd rather not run the filters yourself every morning, that's the job we built LeadFiling to do — the same workflow above, run daily against the city's feeds, with only the new matches for your trade and territory landing in your inbox. See what the alerts look like, or compare the plans to find the speed that fits how you sell.
And here's what makes this workflow worth more than the sum of its steps: the job you filter on Monday morning is public before it's ever a lead. The contractors who run this routine quit paying for shared leads — they'd rather read the record themselves than buy a resold version of it, split with the competitors they're racing. That's the whole point of the morning scan: first eyes on public data, not first bidder on a shared list. Start a 14-day Foreman trial and find out how many mornings you were overpaying for.