OrbTop

Building Permits Scraper - National Permit Aggregator

REAL ESTATELEAD GENERATIONBUSINESS

Building Permits Scraper - National Construction Permit Aggregator

Aggregate US building and construction permits across 15 major jurisdictions — NYC, LA, Chicago, Austin, San Francisco, Seattle, Dallas, Philadelphia, and more — into one normalized dataset. Returns permit type, valuation, geocoded address, contractor, owner, and large-project / new-construction flags drawn from roughly 10 million public records.


Building Permits Aggregator Features

  • Covers 15 US jurisdictions out of the box, spanning every major region from the Northeast to the Pacific. The registry grows by adding one entry per city.
  • Normalizes disparate open-data schemas (Socrata SODA v2, CARTO SQL) into a single 25-field output model. No per-city post-processing.
  • Round-robin pagination distributes results across jurisdictions — you see permits from every requested metro before any one dominates the budget.
  • Filters by issue date range, minimum valuation, new-construction-only, and state. Tags large projects above a configurable threshold.
  • Geocoded output: latitude/longitude on every record that the source portal publishes them on.
  • Pure API access — no browser, no proxies, no CAPTCHA. Just JSON.

What Can You Do With National Permit Data?

  • Construction lead generation — Pull issued residential or commercial permits by metro, filter by valuation, and feed them into a CRM the same day.
  • Contractor sales (roofing, solar, HVAC) — Target homeowners whose permit descriptions reference re-roofing, solar installation, or HVAC replacement. The raw description field makes this easy.
  • PropTech and real-estate intelligence — Track building-activity trends by ZIP, by contractor, or by owner across metros without maintaining 15 separate ETL pipelines.
  • Commercial GC market intel — Use the is_large_project flag and minValuationUsd filter to isolate commercial-scale permits in a region.
  • Insurance and appraisal workflows — Pair permit history with property records to validate improvements, flag unpermitted work, or score risk.

How the Aggregator Works

  1. Pick a set of jurisdictions by slug (nyc, los-angeles, chicago, austin, ...) or by state (CA, TX, NY) — or leave both empty to pull from every supported metro.
  2. Optionally set an issuedAfter / issuedBefore date range. The aggregator adds the appropriate $where clause per jurisdiction.
  3. It round-robins through the jurisdictions, fetching a page of permits from each in turn. Pagination, rate limiting, and per-city transformation all happen automatically.
  4. Records come back in a single flat schema, ready for a warehouse, a CRM, or a CSV export.

Input

{
    "jurisdictions": ["nyc", "los-angeles", "chicago"],
    "issuedAfter": "2025-01-01",
    "minValuationUsd": 50000,
    "maxItems": 500
}
Field Type Default Description
jurisdictions array[string] (all) City/metro slugs. See supported list below.
states array[string] 2-letter state codes. Expands to every supported metro in the state.
issuedAfter string 2025-01-01 YYYY-MM-DD lower bound on issue date.
issuedBefore string "" YYYY-MM-DD upper bound on issue date. Empty = no upper bound.
minValuationUsd integer 0 Drop permits with declared valuation below this.
onlyNewConstruction boolean false Keep only permits normalized as new (excludes repairs, alterations, demolitions).
largeProjectThresholdUsd integer 100000 Sets the is_large_project tag threshold. Does not filter.
maxItems integer 100 Maximum records to return across all jurisdictions.
proxyConfiguration object (off) Optional Apify proxy. Not needed for any supported portal.

Supported Jurisdictions

Slug Metro State
nyc New York City (DOB NOW Approved Permits) NY
los-angeles Los Angeles CA
chicago Chicago IL
austin Austin TX
san-francisco San Francisco CA
seattle Seattle WA
dallas Dallas TX
philadelphia Philadelphia (CARTO SQL API) PA
new-orleans New Orleans LA
baton-rouge Baton Rouge LA
cincinnati Cincinnati OH
mesa Mesa AZ
san-diego-county San Diego County CA
montgomery-county-md Montgomery County MD
fort-collins Fort Collins CO

Example: pull one metro, high-value projects only

{
    "jurisdictions": ["los-angeles"],
    "issuedAfter": "2024-01-01",
    "minValuationUsd": 500000,
    "maxItems": 1000
}

Example: sweep every California jurisdiction

{
    "states": ["CA"],
    "issuedAfter": "2025-01-01",
    "maxItems": 5000
}

Building Permits Output Fields

{
    "permit_id": "M01370970-S1-PL",
    "source_jurisdiction": "nyc",
    "source_url": "https://data.cityofnewyork.us/Housing-Development/DOB-NOW-Build-Approved-Permits/rbx6-tga4",
    "permit_type": "alteration",
    "permit_type_raw": "Plumbing",
    "sub_type": "",
    "work_class": "Plumbing",
    "description": "PLUMBING WORK IN CONJUNCTION WITH INTERIOR RENOVATION OF APARTMENT 15CD.",
    "status": "Permit Issued",
    "issued_date": "2026-04-17",
    "application_date": "2026-04-12",
    "finaled_date": "2026-05-19",
    "valuation_usd": 18000,
    "address": "400 WEST 12 STREET",
    "city": "New York",
    "state": "NY",
    "zip": "10014",
    "lat": 40.7371,
    "lng": -74.009934,
    "parcel_apn": "640-7501",
    "owner_name": "Justin Minskoff",
    "applicant_name": "EDUART KULLA",
    "contractor_name": "AQUEDUCT MECHANICAL CORP",
    "contractor_license": "002532",
    "is_new_construction": false,
    "is_large_project": false
}
Field Type Description
permit_id string Jurisdiction-assigned permit number (primary key within source).
source_jurisdiction string Slug of the jurisdiction that produced this record (nyc, los-angeles, etc.).
source_url string Human-readable URL for the source dataset on the city portal.
permit_type string Normalized type: new, addition, alteration, demolition, repair, or other.
permit_type_raw string Raw permit-type string from the source (useful when you need the original city taxonomy).
sub_type string commercial, residential, or mixed when the source exposes it.
work_class string Work-class / scope category straight from the source.
description string Free-text description of the work.
status string Permit status (issued, finaled, expired, etc.) as reported by the source.
issued_date string Date the permit was issued (YYYY-MM-DD).
application_date string Date the permit was filed / applied for.
finaled_date string Date the permit reached final status, when available.
valuation_usd number Declared project valuation in USD. 0 if the source doesn't publish it.
address string Street address of the project.
city string City of the project.
state string Two-letter state code.
zip string ZIP / postal code.
lat number Latitude (WGS84).
lng number Longitude (WGS84).
parcel_apn string Parcel / APN / tax-assessor ID when available.
owner_name string Property owner name when published.
applicant_name string Permit applicant name when published.
contractor_name string General contractor / business name when published.
contractor_license string Contractor state license number when published.
is_new_construction boolean true when permit_type normalizes to new.
is_large_project boolean true when valuation_usd meets or exceeds largeProjectThresholdUsd.

FAQ

How do I scrape building permits across multiple US cities?

Building Permits Aggregator ships with a registry of 15 jurisdictions and normalizes them into a single schema. Pick jurisdictions by slug, by state, or leave both empty to hit every supported metro in a single run.

How much does Building Permits Aggregator cost to run?

Building Permits Aggregator runs on pay-per-event pricing: $0.10 per actor start plus $0.001 per record. A 10K-permit metro sweep is about $10 including start. A 500K-permit national pull is about $500.

Does Building Permits Aggregator need proxies?

No. All supported portals (Socrata, CARTO) are public open-data services designed for third-party consumption. The actor defaults to direct requests — no proxy configuration needed.

Can I filter by valuation or project type?

Yes. minValuationUsd drops records below a threshold. onlyNewConstruction restricts to permits normalized as new construction. largeProjectThresholdUsd controls the is_large_project tag that commercial-GC users typically filter on downstream.

What's the difference between permit_type and permit_type_raw?

permit_type is the normalized value — one of new, addition, alteration, demolition, repair, or other — so you can query consistently across cities. permit_type_raw is whatever the source portal shipped, for when you need the original taxonomy.

Which cities are coming next?

The most-requested additions are Boston, Houston, San Jose, Miami, and Denver. Boston is currently blocked by Cloudflare on its CKAN endpoint; the rest depend on per-city API research. File a request for the metro you need.


Need More Features?

Need a city that isn't in the registry, contractor-license cross-references, or a custom field? File an issue or get in touch.

Why Use the Building Permits Aggregator?

  • One schema, fifteen cities — You write one query and get normalized results from NYC, LA, Chicago, and a dozen more. No per-city ETL.
  • Cheap to run — $0.001 per record. A full metro sweep is coffee money, not a budget line item.
  • Built for the lead-gen workflowis_new_construction, is_large_project, minValuationUsd, and geocoded addresses cover the filters that construction, roofing, solar, and insurance vendors ask for.