Construction & Contractor Leads — US Building Permits Scraper avatar

Construction & Contractor Leads — US Building Permits Scraper

Pricing

from $5.00 / 1,000 permit records

Go to Apify Store
Construction & Contractor Leads — US Building Permits Scraper

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

Steven Carleton

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

0

Monthly active users

6 days ago

Last modified

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 pullRecordsCost
A look at the output before buying25$0.13
A weekly lead pull for one city500$2.50
A capped multi-city sweep2,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:

FieldExample
city / stateNew York City, NY / NY
permitNumberM01129209-I1
permitType / permitClass / workTypeGeneral Construction / Initial Permit / ...
descriptionWork description as filed
statusIssued, Active, ...
appliedDate / issuedDate / expirationDate2026-07-10 (ISO dates)
address / zipJob site address
valuationDeclared project value in USD, e.g. 2507920
squareFootage / feesWhen published
contractorName / contractorLicenseContractor / permittee, when published (NYC, Chicago, Austin, Baton Rouge)
applicantName / ownerNameWhen published
latitude / longitudeJob site coordinates
rawOptional: every extra field the city publishes

Supported cities (verified sources)

CitySource dataset
New York City, NYDOB NOW: Build — Approved Permits (data.cityofnewyork.us)
Chicago, ILBuilding Permits (data.cityofchicago.org)
Los Angeles, CABuilding Permits Issued 2020+ (data.lacity.org)
Austin, TXIssued Construction Permits (data.austintexas.gov)
San Francisco, CABuilding Permits (data.sfgov.org)
New Orleans, LABuilding Permits (data.nola.gov)
Baton Rouge, LAEBR Building Permits (data.brla.gov)
Montgomery County, MDResidential + Commercial Permits (data.montgomerycountymd.gov)
Norfolk, VAPermits (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 issuedAfter set 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.