Building permits are one of the few public records that say, in writing, “this homeowner is about to spend money on this house.” For roofers and HVAC companies, they can be a steady source of leads. They can also waste a lot of time, because most permits are filed after the homeowner already hired someone. The skill is knowing which permits signal a buyer and which signal a job you already lost.
1. Where permit data lives
Most mid-size and large U.S. cities publish permits in one of three ways:
- Open-data portals (often Socrata), where you can filter a permit table by type, date and ZIP and download it. Examples include Chicago’s data portal and Austin’s open data portal, both of which publish building permit datasets.
- Permit lookup systems such as Accela Citizen Access, where you search one address or permit number at a time.
- County building departments for unincorporated areas, which vary from searchable to “call the office.”
Before you build anything, spend ten minutes learning your portal’s quirks. How far back does it go? How often is it refreshed: daily, weekly, monthly? Does it include applications or only issued permits? A dataset that updates monthly is fine for remodel follow-ups but too slow for an active reroof bid.
Start by searching “[your city] building permits open data.” If your city has no portal, the county may. If neither does, this channel is not worth much for you, and that is useful to know.
2. The fields that matter
Every portal names them differently, but you are looking for:
| Field | Why it matters |
|---|---|
| Permit type / work class | Filters roofing, re-roof, mechanical, HVAC change-out |
| Work description | Free text: “tear off and reroof,” “replace furnace and AC” |
| Contractor / applicant | The single most important filter (see below) |
| Status and dates | Applied vs issued vs finaled; how old it is |
| Address and ZIP | Keep only ZIPs you serve |
| Valuation | Rough job size, when listed |
3. Which permits signal a buyer, and which mean too late
| Permit you see | What it usually means | Keep or drop |
|---|---|---|
| Reroof or mechanical permit, contractor field names a company | They hired someone | Drop |
| Owner-builder permit (homeowner is the applicant) | Doing it themselves or still collecting bids | Keep; offer a second quote or inspection |
| Permit applied, no contractor listed yet | Early in the process | Keep |
| Old permit, never finaled | Stalled or abandoned job | Keep with care; ask, don’t assume |
| Recent change-out finaled | New equipment installed | Drop for replacement; maybe a maintenance plan later |
| Remodel or addition permit | A bigger project that may need HVAC or roof work | Keep if the scope mentions it |
Be honest about coverage. Some cities do not require a permit for a same-material reroof, and plenty of HVAC swaps happen without one. Permits are one signal, not the whole market.
4. Combine permits with other public signals
A permit list on its own is small. It gets useful next to two other sources:
- Weather. For roofers, storm reports narrow which neighborhoods to check. We cover that in how roofers find homeowners who need a new roof after a storm.
- Home age and recent sales. For HVAC, an older house with no mechanical permit on record is a candidate. See furnace replacement leads from older homes and new owners.
The permit search then works in both directions: it adds candidates (owner-pulled permits) and removes them (a recent change-out means skip that house).
5. A one-ZIP workflow (EXAMPLE)
- Open your city’s permit dataset. Filter to your ZIP, the last 60 days, and permit types containing “roof” or “mechanical.”
- Sort by contractor field. Delete every row with a company named.
- For the rest, read the work description. Keep reroofs, tear-offs, furnace or condenser replacements, and remodels that mention either.
- Check each remaining address for a recent sale or a public post that adds context.
- Write one short note per address that names the permit plainly: “Saw the reroof permit on [street]. Happy to give a second quote this week.”
- Send by mail or a hanger on a street you are already working. One follow-up after a week, then stop.
This is an example workflow, not a promise of results. In a quiet ZIP you might keep five rows out of fifty. That is normal.
6. Keep a simple tracking sheet
Permit leads are slow to convert, so the sheet matters more than the search. One row per address with these columns is enough:
- Address and ZIP.
- Permit number and date, so you can cite it and check it again later.
- Signal type: owner-builder, no contractor yet, stalled, or remodel scope.
- Date of first touch and channel (letter, hanger, email).
- Follow-up date, one week after the first touch.
- Outcome: no reply, not interested, inspection or estimate booked, signed.
Re-run the same permit search every two weeks. A permit that was “applied, no contractor” last time and now names a company tells you the window closed, and helps you learn how long that window usually is in your city. That timing is worth more than any single lead, because it tells you how fast you have to move next time.
7. Rules and courtesy
- Permits are public records, but write like a neighbor. Name the permit; do not recite the valuation back to them.
- If you call, scrub numbers against the National Do Not Call Registry first.
- Do not imply the city sent you or that the permit has a problem.
- Roofers in storm states: no deductible or claim language. Check your state’s solicitation rules.
- Do not scrape a portal against its terms. Use the download or API the city provides.
8. Is it worth your time?
Run the math the same way you would for any lead source: hours spent plus cost, divided by jobs signed. We lay that out with published lead prices in shared leads vs a researched buyer list. If permit digging is not how you want to spend evenings, that is what we do: see the roofing and HVAC buyer pack pages, or test one ZIP with the $37 Starter Spark.
Want a two-week sample for one town?
Email sam@buyers-radar.com with your trade and one ZIP, or send the same ZIP through the contact form. That free pilot is a short list and a few scripts, not a promise of booked jobs. Look at the free sample first. If the format is useful, Starter Spark is $37 for 25 researched candidates in one ZIP.
- Starter Spark $37 — 25 candidates + scripts
- Growth $197 — 100 candidates
- DFY Radar $497 — 250 candidates + follow-ups
- Monthly Radar $297/mo
100% money-back within 14 days of payment if the pack is not useful. Figures in this article come from the public sources named in the text, not from BuyersRadar customers. We do not publish testimonials.