US Building Permits Scraper - Construction & Contractor Leads
Pricing
$3.00 / 1,000 permit records
US Building Permits Scraper - Construction & Contractor Leads
Scrape US building permits from official city & county open data: contractor/owner contacts, project value, description, trade (solar, roofing, HVAC, electrical, plumbing), geo & lead score. Filter by city, date, trade & value for fresh construction leads, plus monitoring. No browser.
Pricing
$3.00 / 1,000 permit records
Rating
0.0
(0)
Developer
Scrape Sage
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
US Building Permits Scraper — Construction & Contractor Leads (Solar, Roofing, HVAC)
Pull fresh US building permits from official city & county open-data portals and turn them into ready-to-work construction leads — with contractor & owner contacts, project value, work description, trade category, geo coordinates and a 0–100 lead score. Filter by city, date, trade and project size; schedule it to deliver only new permits every day.
Permits are public government records, so there is no login, no API key, no browser, and no anti-bot — just fast, clean JSON with 99%+ reliability.
Why this building permits scraper?
A building permit is one of the strongest buying signals in construction: a homeowner or developer just got approval to spend money, and the contractor on the job is named. This actor reads each city's authoritative open-data API, normalizes every source into one rich schema, and adds the lead-gen fields most scrapers drop:
| Data | Typical scrapers | This actor |
|---|---|---|
| Contractor / builder / applicant name | partial | ✅ |
| Contractor phone (where the city publishes it) | ❌ | ✅ |
| Property owner name / business | ❌ | ✅ where available |
| Project / construction value (USD) | partial | ✅ |
| Trade category (solar, roofing, HVAC, electrical, plumbing…) | ❌ | ✅ derived |
| Work description, permit type & work class | partial | ✅ |
| Geo coordinates (lat/lng) + full address | partial | ✅ |
| Lead score 0–100 | ❌ | ✅ |
Full original record (raw) | ❌ | ✅ every field |
| Monitor mode — only new permits | ❌ | ✅ |
Supported sources (more added over time, and you can add any Socrata portal yourself): Chicago IL, New York City NY, Los Angeles CA, San Francisco CA, Austin TX, Cincinnati OH, Mesa AZ, Baton Rouge LA, Montgomery County MD, Collin County TX, Marin County CA, Corona CA, Howard County MD.
Use cases
- Construction lead generation — solar, roofing, HVAC, electrical, plumbing, remodeling, pool and demolition companies: find homeowners who just pulled a permit and the contractor named on it. Filter by
tradeCategoriesandminProjectValue, score byleadScore, and reach out. - Sub-contractor & supplier prospecting — building-material suppliers, equipment rental, and trade subs can target active projects by city, value and trade.
- Proptech & real-estate intelligence — track new construction, additions and renovations by neighborhood; enrich property records with permit activity and project value.
- Market & competitor analysis — see which contractors are pulling the most permits, in which cities, for what project values — a live view of construction demand.
- Fresh daily feeds — combine monitor mode with a schedule to push only newly issued permits into your CRM, sales sequence, or data warehouse.
How to use
- Sign up for Apify — the free plan is enough to try this actor.
- Open the US Building Permits Scraper, pick the cities you want, and add filters (trade, date, project value).
- Click Start and watch permits stream into the dataset table.
- Export as JSON, CSV, Excel, or XML — or pull results programmatically via the Apify API.
Input
{"cities": ["austin", "chicago", "los-angeles"],"lastNDays": 30,"tradeCategories": ["solar", "roofing", "hvac"],"minProjectValue": 10000,"onlyWithContractorContact": true,"maxResultsPerCity": 500,"maxResults": 2000,"monitorMode": false}
- cities — which supported city/county portals to pull from. Leave empty or include
allfor every source. - lastNDays — only permits issued in the last N days (great for daily lead pulls). Ignored if
issuedAfteris set. - issuedAfter / issuedBefore — explicit issue-date window (
YYYY-MM-DD). - tradeCategories — keep only matching trades:
solar,roofing,hvac,electrical,plumbing,pool_spa,demolition,new_construction,addition_remodel,fence,sign,grading. - keyword — free-text search in the permit description/type (e.g.
solar pv,kitchen remodel). - minProjectValue — only permits at or above this reported/estimated value (USD).
- zipCodes — restrict to specific ZIP codes (where the source publishes a ZIP field).
- onlyWithContractorContact (default false) — keep only permits that name a contractor/builder/applicant.
- maxResultsPerCity / maxResults — caps; permits are returned newest-issued first.
- monitorMode (default false) — emit only permits not seen on previous runs (see below).
- customSocrataSources — add any other government Socrata permit portal (see Tips).
Output
One record per permit. Every original source field is preserved under raw:
{"permitId": "austin:2026-075288 BP","permitNumber": "2026-075288 BP","city": "Austin","state": "TX","country": "US","permitType": "Building Permit · R- 435 Renovations/Remodel","workClass": "Remodel","tradeCategories": ["roofing", "addition_remodel"],"description": "Express: Roof replacement with new decking","status": "Active","dateApplied": "2026-06-02T00:00:00.000Z","dateIssued": "2026-06-14T00:00:00.000Z","dateExpires": null,"address": "8506 STILLWOOD LN","addressFull": "8506 STILLWOOD LN Austin, TX, 78757","addressCity": "Austin","addressState": "TX","zip": "78757","latitude": 30.357,"longitude": -97.738,"projectValue": 18500,"squareFeet": null,"units": null,"contractor": {"role": "Contractor","name": "Cole Shiflet","company": "Lone Star Roofing","phone": "5126628181","license": null,"trade": "General Contractor","address": "16808 Radho","city": "Round Rock"},"owner": null,"hasContractorContact": true,"permitUrl": "https://abc.austintexas.gov/web/permit/public-search-other?...","source": {"portal": "data.austintexas.gov","datasetId": "3syk-w9eu","datasetName": "Issued Construction Permits","datasetUrl": "https://data.austintexas.gov/d/3syk-w9eu"},"leadScore": 70,"scrapedAt": "2026-06-16T00:00:00.000Z","raw": { "...": "every original column from the source dataset" }}
Fields are null only when the source doesn't publish them (e.g. not every city exposes contractor phone or project value), never because the scraper skipped them.
Monitor only new permits
Turn this scraper into a continuous lead feed:
- Set
monitorMode: true. The actor remembers every permit it has already returned (in a named key-value store) and emits only permits it hasn't seen before. - Create an Apify Schedule (e.g. daily). Monitor mode and the scheduler are complementary: the schedule controls when the run starts, monitor mode controls what's new — so each scheduled run delivers only fresh permits.
- Use
monitorKeyto keep separate seen-lists per saved search (e.g.solar-texasvsroofing-california) so different scheduled runs don't share state.
Automate & schedule
- Apify API — start runs, fetch datasets, manage schedules over REST.
- apify-client for JavaScript and Python — official SDKs.
- Schedules — run it hourly/daily/weekly for a fresh construction-lead pipeline.
- Webhooks — trigger CRM imports, Slack alerts, or email sequences the moment a run finishes.
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'MY_APIFY_TOKEN' });const run = await client.actor('scrapesage/us-building-permits-scraper').call({cities: ['austin', 'mesa', 'marin-county'],tradeCategories: ['solar', 'roofing', 'hvac'],lastNDays: 7,onlyWithContractorContact: true,monitorMode: true,});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(`Got ${items.length} fresh construction leads`);
Integrate with any app
Connect the dataset to 5,000+ apps — no code required:
- Make — multi-step automation scenarios.
- Zapier — push new permits straight into your CRM.
- Slack — get pinged when a monitored search finds new permits.
- Google Drive / Sheets — auto-export every run to a spreadsheet.
- Airbyte — pipe results into your data warehouse.
- GitHub — trigger runs from commits or releases.
Use with AI assistants (MCP)
The output is clean, LLM-ready JSON. Call this actor from Claude, ChatGPT, or any agent through the Apify MCP server — ask your assistant to "find solar permits issued in Austin this week with a contractor contact" and let it run this scraper for you.
Agent-ready: autonomous payments (x402 & Skyfire)
This actor is agent-ready — AI agents can discover it, run it, and pay for it autonomously, with no Apify account and no human in the loop. It uses pay-per-event pricing and limited permissions, so it qualifies for Apify's agentic-payment standards:
- x402 — an open, HTTP-native payment protocol. Agents pay per run in USDC on the Base network directly through the Apify MCP server — no account, no API key.
- Skyfire — agent-to-service payments for fully autonomous AI-agent workflows.
Building an AI agent, MCP tool, or autonomous data pipeline? This scraper is ready to plug in and pay as it goes.
More scrapers from scrapesage
Build a full B2B lead-gen and market-intelligence stack:
- FMCSA Trucking Scraper — US motor carriers with phone, email, fleet & authority leads.
- US Business Formation Scraper — newly registered LLCs & companies as fresh B2B leads.
- Hipages Scraper — Australian tradie & home-services business leads.
- Houzz Scraper — home-improvement pros, contacts & reviews.
- Rent.com Scraper — apartments, rentals & property-management leads.
- FastExpert Scraper — real-estate agent leads, stats & reviews.
- Redfin Scraper — listings, sold comps & home estimates.
- USAspending Scraper — federal awards & contractor leads.
Tips
- Add any city. Most US cities publish permits on a Socrata portal. Find the dataset, then add it via
customSocrataSources:{ "domain": "data.x.gov", "datasetId": "abcd-1234", "dateField": "issued_date", "city": "Springfield", "state": "IL", "descField": "description", "valueField": "valuation", "addressField": "address", "zipField": "zip" }. Onlydomain,datasetIdanddateFieldare required. - Daily lead feed. Use
monitorMode: true+lastNDays: 2+ a daily Schedule to get just-issued permits each morning. - High-value only. Set
minProjectValue(e.g.50000) and sort/filter byleadScoreto focus on big jobs. - Cost control. Caps (
maxResults,maxResultsPerCity) and the trade/date filters keep runs small and cheap — these are government APIs, so there are no proxy costs.
FAQ
Where does the data come from? Each city/county's official open-data portal (Socrata) — the same public records anyone can browse, served as structured JSON.
Do I need an API key or proxy? No. These are public government APIs. A proxy is optional and only helps avoid per-IP rate limits on very large pulls.
Which cities are supported? Chicago, New York City, Los Angeles, San Francisco, Austin, Cincinnati, Mesa, Baton Rouge, Montgomery County (MD), Collin County (TX), Marin County (CA), Corona (CA) and Howard County (MD) — and you can add any other Socrata permit portal yourself.
Does every permit include a contractor phone? No — only where the city publishes it (e.g. Austin). Others provide the contractor/builder/applicant name, the owner, or both. Use onlyWithContractorContact to keep only permits that name someone.
How do I get only new permits? Turn on monitorMode and schedule the actor. Each run returns only permits not seen before.
Can I export to Google Sheets, CSV, or Excel? Yes — one click in the dataset view, or automatically on every run via the Google Drive integration.
Is this legal? Building permits are public records. You're responsible for using the data in compliance with applicable laws (e.g. CCPA/GDPR for personal data) and each portal's terms of use.
Need help?
Open an issue on the actor's Issues tab, or visit the Apify help center. Feature requests — including new cities — are welcome; this actor is actively maintained.