US Building Permits Scraper - Contractor Leads, Verified Cities
Pricing
from $3.00 / 1,000 permits
US Building Permits Scraper - Contractor Leads, Verified Cities
Contractor leads from building permits: roofing, HVAC, solar, electrical, plumbing, remodel & new construction, classified by trade and lead-scored. 16 verified city feeds checked daily; contractor names, owner names, valuations, phones where published. From $3/1,000, source-direct government data.
Pricing
from $3.00 / 1,000 permits
Rating
0.0
(0)
Developer
PermitData
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 hours ago
Last modified
Categories
Share
US Building Permits Scraper: Contractor Leads from 16 Verified Cities
Turn building permits into contractor leads. Every permit comes straight from 16 cities' official open-data APIs, normalized to one schema, classified by trade (roofing, HVAC, solar, electrical, plumbing, pool & spa, demolition, remodel, new construction) and lead-scored so sales teams work the hottest jobs first. Monitor mode turns it into a daily permit alert feed for schedules and webhooks. No proxies, no fragile HTML scraping, no reseller feed. Government APIs only.
Which lead list do you want?
| Lead list | How to get it |
|---|---|
| Roofing leads (storm chasers, re-roof jobs) | trades: ["roofing"] |
| HVAC leads | trades: ["hvac"] |
| Solar leads (who's installing, which contractors win) | trades: ["solar"] |
| Electrical / plumbing job feed | trades: ["electrical", "plumbing"] |
| Pool & outdoor-living prospects | trades: ["pool_spa", "fence_deck"] |
| New construction & remodel activity (investors, suppliers) | trades: ["new_construction", "remodel_addition"] |
| High-value projects only | minValuation: 50000 |
| Daily new-permit alert feed | monitor mode on an Apify schedule + webhook |
Who uses it: building-product suppliers and distributors selling to contractors (permits show who's pulling jobs right now), subcontractors prospecting GCs, home-services companies (a remodel permit predicts follow-on purchases), real-estate investors tracking construction activity by block, and market researchers measuring construction trends from primary data.
Why this one
- Verified coverage, not claimed coverage. Every listed city passes an automated daily canary check. If a source breaks, it gets flagged here and in your run's health report, so you never pay for a silently broken city. Each city shows its last-verified date below.
- One honest schema. A field that a city doesn't publish is
null, never guessed. The per-city availability matrix below tells you exactly what you'll get before you run. - Contractor names where cities publish them. In Austin you also get the contractor's phone number, straight from the permit record.
- Monitor mode. Run it on a schedule and get only new permits since your last run: watermarked, deduplicated, webhook-ready. Ideal for lead-gen pipelines.
- Health report with every run. Per-source status, record counts, freshness, and
latency in the
HEALTH_REPORTkey-value record. - Works with AI agents. Call it via MCP from Claude, Cursor, or any MCP client.
Coverage
| City | Status | Last verified | Contractor name | Valuation | Geo |
|---|---|---|---|---|---|
| Chicago, IL | ✅ verified | 2026-07-02 | ✅ (by contact type) | ✅ reported cost | ✅ |
| Detroit, MI | ✅ verified | 2026-07-02 | ❌ not published by city | ✅ estimated cost | ✅ |
| Austin, TX | ✅ verified | 2026-07-03 | ✅ company + name + phone | ✅ (often null on trade permits) | ✅ |
| New York City, NY | ✅ verified | 2026-07-03 | ⚠️ permittee business (varies) | ✅ estimated cost | ✅ |
| San Francisco, CA | ✅ verified | 2026-07-03 | ❌ not published by city | ✅ revised cost | ❌ (v1) |
| New Orleans, LA | ✅ verified | 2026-07-03 | ❌ not published by city | ✅ est. project cost | ❌ (v1) |
| Cincinnati, OH | ✅ verified | 2026-07-03 | ✅ company name | ✅ est. project cost | ✅ |
| Baton Rouge, LA | ✅ verified | 2026-07-03 | ✅ contractor + owner | ✅ project value | ✅ |
| Buffalo, NY | ✅ verified | 2026-07-03 | ✅ applicant/contractor | ✅ value of work | ✅ |
| Montgomery County, MD | ✅ verified | 2026-07-03 | ❌ not published | ✅ declared valuation | ❌ (v1) |
| Seattle, WA | ✅ verified | 2026-07-03 | ❌ not published | ✅ est. project cost | ✅ |
| San Jose, CA | ✅ verified | 2026-07-04 | ✅ contractor + owner name | ✅ permit valuation + sq ft | ❌ (address string) |
| Philadelphia, PA (L&I) | ✅ verified | 2026-07-04 | ✅ contractor + address, owner name | ❌ not published | ✅ |
| Columbus, OH | ✅ verified | 2026-07-04 | ✅ applicant business name | ✅ total value + sq ft | ❌ (parcel number) |
| Washington, DC | ✅ verified | 2026-07-04 | ✅ applicant + owner name | ❌ (fees only) | ✅ |
| Nashville, TN (Metro) | ✅ verified | 2026-07-04 | ✅ permit contact | ✅ construction cost | ✅ |
| More cities | 🔜 rolling out weekly | — | varies | varies | varies |
New cities ship weekly. Want a specific city or county? Open an issue and it goes to the top of the queue.
Dodge / ConstructConnect / Construction Monitor alternative?
If you're paying an enterprise construction-data subscription just to see who pulled permits this week, this Actor covers that slice for pennies:
| This Actor | Dodge / ConstructConnect / Construction Monitor | |
|---|---|---|
| Access | API-first (Apify, schedules, webhooks, MCP) | Web portals, sales-led contracts |
| Price | $0.003/permit, $0.02/scored lead, no subscription | $100s–$1,000s per month |
| Data path | Source-direct city open data, same-day | Aggregated, often delayed |
| Coverage honesty | Per-city matrix + daily verified badge | Opaque |
| Plan rooms, bid docs | ❌ permits only | Included at enterprise prices |
Honest trade-off: this is a permit data feed, not a plan room. If you need bid documents and project managers' cell numbers, keep the enterprise tool. If you need fresh permit activity classified by trade, with contractor names where published, this does it at commodity prices.
Output schema (one row per permit)
{"permit_id": "chicago:B200471904","permit_number": "B200471904","source": "chicago","source_label": "Chicago, IL","state": "IL","issued_date": "2026-05-25","applied_date": "2026-05-25","status_raw": "ACTIVE","permit_type_raw": "PERMIT – EXPRESS PERMIT PROGRAM","work_class_raw": "Electrical Work","trade": "electrical","trades_all": ["electrical"],"description": "LINE VOLTAGE ELECTRICAL WORK. ...","address": "77 W WACKER DR","latitude": 41.8867,"longitude": -87.6308,"valuation": 21200.0,"permit_fee": 75.0,"contractor_name": "LOMBARDI ELECTRIC, INC.","owner_name": "CORONADO MYRNA","lead_score": 80,"scoring_reasons": ["trade:electrical", "valuation:$21,200", "age:5d", "contractor-known"],"dedupe_key": "…","first_seen_at": "2026-07-02T14:00:00Z"}
Trades classified: roofing, HVAC/mechanical, electrical, plumbing, solar, demolition, pool & spa, fence/deck, new construction, remodel/addition, fire systems, signs. Classification is deterministic keyword matching on the permit type + description. Reproducible, no LLM randomness.
Modes
- Scrape: pull a date range (
sinceDaysor explicitsinceDate/untilDate). - Monitor: stateful, emits only permits you haven't seen, with a 3-day overlap re-check for late-published records. Point a schedule + webhook at it and you have a permit alert feed.
- Canary: free self-test of all sources; optionally posts the health summary to a Discord webhook. I run it daily myself, you can too.
How to use
- Click Try for free (first 25 permits are free).
- Pick
sources(e.g.["chicago", "austin"]) andtrades(e.g.["roofing", "hvac"]). - Set
sinceDays: 14and optionallyminValuation+leadScoring: true. - Save & Start, then export JSON/CSV/Excel from the Output tab, ready for your CRM.
From Python:
from apify_client import ApifyClientclient = ApifyClient("<APIFY_TOKEN>")run = client.actor("permitdata/us-building-permits-scraper").call(run_input={"mode": "scrape","sources": ["chicago", "austin"],"trades": ["roofing", "hvac", "solar"],"sinceDays": 14,"leadScoring": True,})for row in client.dataset(run["defaultDatasetId"]).iterate_items():print(row["lead_score"], row["trade"], row["address"], row.get("contractor_name"))
Pricing
- First 25 permits free (per account, ever). Try before you buy.
- $0.003 per permit (raw normalized record), $3.00 per 1,000.
- $0.02 per scored lead when
leadScoringis on. Replaces the per-permit charge, so you're never double-billed for the same row. - Lead scoring is a documented deterministic heuristic (trade match, valuation bucket,
recency, contractor identified); see
scoring_reasonson every row.
Example: a weekly two-city roofing + HVAC pull of ~300 scored leads costs about $6.
FAQ
How do I get building permit leads for my city?
If your city is in the coverage table, select it in sources and run. If it isn't, open
an issue; cities with open data get added quickly.
Which cities include contractor names or phone numbers?
See the coverage matrix. Austin publishes company + name + phone; Chicago, Cincinnati, Baton Rouge, and Buffalo publish contractor/applicant names. Cities that don't publish contractor data are marked ❌ so you know before you run.
Can I get a daily feed of new roofing permits?
Yes: monitor mode with trades: ["roofing"] on a daily Apify schedule + webhook emits
only permits you haven't seen.
Is this legal to use?
Yes. The data comes from official government open-data portals published for public use under open/public-domain licenses. No login-walled sources are used.
Does it work with AI agents?
Yes, callable via MCP from Claude, Cursor, or any MCP client.
Fair use & data provenance
All data comes from official government open-data portals published for public use. No login-walled sources, no personal-data enrichment, no skip-tracing. Owner names appear only where the government source itself publishes them.
Support
Issues tab, or the contact form on my profile. Broken-source reports are typically fixed within 24-48h; my own daily canary usually catches breakage before users hit it.
If this Actor saves you time, a quick review on this page helps other contractors and suppliers find it, and city requests from reviewers get built first.