Construction & Contractor Leads — US Building Permits Scraper
Pricing
from $5.00 / 1,000 permit records
Construction & Contractor Leads — US Building Permits Scraper
Extract building permits from official city open-data APIs — NYC, Chicago, Los Angeles, Austin, San Francisco, New Orleans, and more. Filter by date, permit type, valuation, and keyword. Normalized schema, contractor names where published. Pay per record.
Pricing
from $5.00 / 1,000 permit records
Rating
0.0
(0)
Developer
Steven Carleton
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
0
Monthly active users
6 days ago
Last modified
Categories
Share
US Building Permits Scraper — Construction Leads from Official City Open Data
Get every building permit issued in your city last week — address, work description, declared value, and the contractor's name — as a clean spreadsheet. A new permit is the earliest public buying signal in construction: the property owner has committed money and the work has not started yet. Suppliers, rental, roofing, solar, HVAC, and insurance teams sell to these addresses.
Data comes from each city's own open-data API (Socrata/SODA). No login, no API key, no HTML scraping, no captchas.
See real permits for 13 cents before you commit
Set maxResultsPerCity to 25 and run it once against one city. You are charged $0.005 per permit record — so a 25-record look costs $0.125, and a run that matches nothing costs only Apify's fraction-of-a-cent start event. Check the fields your city actually publishes, then scale up.
That check matters: each city decides which fields it publishes, so contractor name is present in some cities and absent in others (see the note below). A nickel-and-dime test run tells you exactly what you would be buying for your city.
What one record actually looks like
Real output from a live run — an Austin commercial remodel, trimmed to the fields most people check first:
{"city": "Austin, TX","permitNumber": "2026-097423 BP","permitClass": "C-1000 Commercial Remodel","description": "868 sqft of nurses stations in an existing 34 chair outpatient dialysis clinic in an existing one-story multi-tenant building. Work includes arch plumbing electrical.","status": "Active","issuedDate": "2026-07-30","address": "1701 W BEN WHITE BLVD SVRD EB UNIT 180 AUSTIN TX","zip": "78745","contractorName": "Driftwood Commercial, LLC","applicantName": "Erin Morgan","latitude": 30.2268757,"longitude": -97.78461889}
Note that valuation is null on this particular permit — Austin does not publish a declared value on every record. That is the real data, not a polished sample. Where a city publishes valuation, square footage, or fees, you get them.
What a real job costs
Pricing is $5.00 per 1,000 permit records ($0.005 each), charged only on records actually returned:
| What you pull | Records | Cost |
|---|---|---|
| A look at the output before buying | 25 | $0.13 |
| A weekly lead pull for one city | 500 | $2.50 |
| A capped multi-city sweep | 2,000 | $10.00 maximum |
maxResultsPerCity is a hard per-city ceiling, so a run can never cost more than (cities × cap) × $0.005 plus Apify's fraction-of-a-cent platform events (about 0.2% on top). There is no subscription.
On very large pulls: Apify caps each run with a maximum-charge limit. If a run reaches it, the run stops early and returns fewer records than your
maxResults— the run's status message will tell you when this happens. For big pulls, raise the maximum-charge setting on the run (or your plan limit) before starting it.
What data do you get?
One result per permit, in the same schema for every city:
| Field | Example |
|---|---|
city / state | New York City, NY / NY |
permitNumber | M01129209-I1 |
permitType / permitClass / workType | General Construction / Initial Permit / ... |
description | Work description as filed |
status | Issued, Active, ... |
appliedDate / issuedDate / expirationDate | 2026-07-10 (ISO dates) |
address / zip | Job site address |
valuation | Declared project value in USD, e.g. 2507920 |
squareFootage / fees | When published |
contractorName / contractorLicense | Contractor / permittee, when published (NYC, Chicago, Austin, Baton Rouge) |
applicantName / ownerName | When published |
latitude / longitude | Job site coordinates |
raw | Optional: every extra field the city publishes |
Supported cities (verified sources)
| City | Source dataset |
|---|---|
| New York City, NY | DOB NOW: Build — Approved Permits (data.cityofnewyork.us) |
| Chicago, IL | Building Permits (data.cityofchicago.org) |
| Los Angeles, CA | Building Permits Issued 2020+ (data.lacity.org) |
| Austin, TX | Issued Construction Permits (data.austintexas.gov) |
| San Francisco, CA | Building Permits (data.sfgov.org) |
| New Orleans, LA | Building Permits (data.nola.gov) |
| Baton Rouge, LA | EBR Building Permits (data.brla.gov) |
| Montgomery County, MD | Residential + Commercial Permits (data.montgomerycountymd.gov) |
| Norfolk, VA | Permits (data.norfolk.gov) |
Need another city? Open an issue on the Actor's Issues tab — adding a city with a public open-data permits feed is usually a same-week change.
Use cases
- Construction lead generation — new permits are the earliest public buying signal in construction. Schedule the Actor weekly with
issuedAfterset to last week and feed fresh permits (with valuations and contractor names) into your CRM. Building-material suppliers, dumpster/equipment rental, insurance, solar, and HVAC companies all sell to the addresses on these permits. - Contractor prospecting — permits name the contractor doing the work: build lists of active roofers, electricians, or GCs by city and volume of recent permits.
- Market intelligence — track construction activity by neighborhood, permit type, and declared value; benchmark competitors' project pipelines.
- Real-estate due diligence — pull the full permit history of an address before buying or underwriting.
- AI agents / MCP — the normalized cross-city schema means one tool call answers "what was just permitted near X?" in any supported city.
How to use it
Fresh high-value construction leads in two cities:
{"cities": ["austin", "chicago"],"issuedAfter": "2026-07-01","minValuation": 50000,"maxResultsPerCity": 1000}
Find all recent solar work in Los Angeles:
{"cities": ["los-angeles"],"searchQuery": "solar","issuedAfter": "2026-06-01","maxResultsPerCity": 500}
Leave cities empty to query all supported cities in one run. permitTypeContains filters by trade (electrical, roof, plumbing...). Set includeRawData to true to also get every city-specific extra field. You are only charged for records actually returned.
Data source & freshness
Every record comes from the city's own open-data portal (Socrata SODA API) — official public records published by the municipalities themselves, refreshed daily or near-daily. No HTML scraping, no captchas, no blocked requests, no stale mirrors. Date filtering and full-text search run server-side on the portal, so runs are fast and cheap even against multi-million-row datasets.
Because the Actor reads the cities' own APIs instead of scraping permit-search websites, it does not break when a city redesigns its search page — the most common failure mode of other permit scrapers.
Pricing
Pay per result: $0.005 per permit record ($5.00 per 1,000). You are charged per record actually returned, plus Apify's small platform events: a fraction-of-a-cent Actor start event and $0.00001 per dataset item — about 0.2% on top of the per-record price. No subscription; a run that finds nothing costs only the fraction-of-a-cent start event.
FAQ
How current is the data? Most of the cities refresh these datasets daily (we verified issue dates from the last 24–48 hours at publication). Schedule the Actor daily or weekly for a continuous feed.
Do I get contractor phone numbers? No — phone numbers and email addresses are not part of the output. Each record carries what the cities' permit feeds publish, normalized into a consistent shape: permit number, type and class, work description, status, applied/issued/expiration dates, address, valuation and fees, and contractor, applicant and owner names — plus contractor license numbers where the city includes them (e.g. NYC). Set includeRawData: true to also receive each city's raw row exactly as the portal publishes it. No fabricated enrichment.
Can I pull a full permit history? Yes — omit the date filters and raise maxResultsPerCity (up to 200,000 per city per run). For pulls this large, check the maximum-charge setting on the run so the platform does not stop it early.
Why is a permit missing? If the city hasn't loaded it into its open-data feed yet, it won't be here; feeds typically lag the permit office by 0–2 days.