Building Permits Scraper - 12 US Cities Open Data avatar

Building Permits Scraper - 12 US Cities Open Data

Pricing

from $1.00 / 1,000 permit extracteds

Go to Apify Store
Building Permits Scraper - 12 US Cities Open Data

Building Permits Scraper - 12 US Cities Open Data

Scrape building & construction permits from 12 US cities' open-data portals (Socrata + ArcGIS) into one clean schema: permit number, type, status, issue date, address, work description, valuation, contractor & applicant. Free JSON APIs, no key. Filter by city, date & permit type.

Pricing

from $1.00 / 1,000 permit extracteds

Rating

0.0

(0)

Developer

Oaida Adrian

Oaida Adrian

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

3 days ago

Last modified

Share

Building Permits Scraper — 12 US Cities Open Data

Pull building & construction permits from 12 US cities into one clean, normalized schema — no API key, no account, no anti-bot. Every city publishes permits on its own open-data portal with its own column names; this actor translates all of them into the same record, so you can query a dozen jurisdictions as one feed.

Built for contractors, roofers, solar & HVAC installers, remodelers, suppliers and real-estate investors who want fresh permit leads and market intelligence — and for analysts tracking construction activity.

Why this actor

  • No API keys, no login, no proxy budget — every source is an official government open-data API (Socrata or ArcGIS FeatureServer).
  • 12 cities, one schemacity, permit_number, permit_type, status, issue_date, application_date, address, work_description, valuation, contractor_name, applicant, latitude, longitude, source, source_type, source_url, scraped_at.
  • Server-side filtering — date and permit-type filters are applied by the source APIs, so runs are fast and cheap.
  • Honest nulls — not every city publishes every field (e.g. Chicago has no status column, Cincinnati has no coordinates). Missing values come back as null, never faked.
  • Pay per permit — a single low per-result price, plus a one-time start fee.

Supported cities

CitySourcePortal
Chicago, ILSocratadata.cityofchicago.org
New York, NYSocratadata.cityofnewyork.us (DOB NOW)
Los Angeles, CASocratadata.lacity.org
San Francisco, CASocratadata.sfgov.org
Austin, TXSocratadata.austintexas.gov
Seattle, WASocratadata.seattle.gov
Cincinnati, OHSocratadata.cincinnati-oh.gov
Mesa, AZSocratacitydata.mesaaz.gov
Montgomery County, MDSocratadata.montgomerycountymd.gov
Baton Rouge, LASocratadata.brla.gov
Washington, DCArcGISmaps2.dcgis.dc.gov
West Sacramento, CAArcGISgis.cityofwestsacramento.org

Input

{
"cities": ["austin", "los_angeles", "baton_rouge"],
"dateFrom": "2025-01-01",
"permitType": "roof",
"maxItems": 500
}
FieldTypeDescription
citiesarrayCity keys to scrape (multi-select). Leave empty to scrape all supported cities.
dateFromdateOnly permits issued on/after this date (YYYY-MM-DD). Applied server-side per city.
permitTypestringKeyword filter matched against permit type and work description — e.g. roof, solar, pool, electrical, demolition, new construction.
maxItemsintegerMax permits per city (3 cities × 500 = up to 1,500 rows). Default 1,000.

Output (one item per permit)

{
"city": "Austin, TX",
"cityKey": "austin",
"permit_number": "2026-104132 BP",
"permit_type": "Building Permit - New",
"status": "Active",
"issue_date": "2026-07-10",
"application_date": "2026-04-20",
"address": "4102 CAT HOLLOW DR AUSTIN TX 78731",
"work_description": "New construction in-ground pool and spa.",
"valuation": 0.0,
"contractor_name": "LOHR Homes",
"applicant": "Gil Lohr",
"latitude": 30.3623778,
"longitude": -97.76570347,
"source": "data.austintexas.gov",
"source_type": "socrata",
"source_url": "https://data.austintexas.gov/d/3syk-w9eu",
"scraped_at": "2026-07-10T21:56:20Z"
}

Use cases

  • 📈 Lead generation — a roofing company pulls every roofing permit issued since January across Austin, LA and Baton Rouge: a ready-made call list.
  • 🏗️ Market intelligence — track construction activity and valuations by city, type and time.
  • 🕵️ Property research — enrich addresses with permit history for due diligence.
  • Automation — run on a schedule (e.g. weekly) to watch new permits in your territory, pipe results into a CRM or a Telegram alert.

Run it from your code

Python (Apify SDK):

from apify_client import ApifyClient
client = ApifyClient("YOUR-APIFY-TOKEN")
run_input = {
"cities": ["austin", "baton_rouge"],
"dateFrom": "2026-01-01",
"permitType": "roof",
}
run = client.actor("darknezz/building-permits-scraper").call(run_input=run_input)
for permit in client.dataset(run["defaultDatasetId"]).iterate_items():
print(permit["permit_number"], permit["address"], permit["contractor_name"])

cURL (one-liner, sync):

curl -X POST "https://api.apify.com/v2/acts/darknezz~building-permits-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cities":["austin"],"dateFrom":"2026-06-01","permitType":"solar"}'

Worked example — a real run for permitType: "pool" in Austin returns rows such as 2026-104132 BP — "New construction in-ground pool and spa." at 4102 Cat Hollow Dr, contractor LOHR Homes, valuation $0.0 (city-reported), issued 2026-07-10. Every row carries the source portal URL so you can verify it in one click.

FAQ

Do I need an API key? No. All 12 sources are public government open-data APIs.

Why is a field null? That city does not publish it in a machine-readable form (e.g. Cincinnati has no coordinates, Chicago no status column). Nothing is invented.

How fresh is the data? Each city refreshes its own portal on its own schedule — most are daily. scraped_at on every row tells you exactly when the record was pulled.

Can I add a city? Yes — the actor is built as a config table. Point a new city at its Socrata dataset or ArcGIS FeatureServer, list the date field and map columns; no fetch-layer changes needed.

Which permit types can I filter by? Any text that appears in the city's permit-type or work-description columns — roof, solar, pool, electrical, demolition, new construction, alteration, etc. Filtering is a keyword match, so combine it with dateFrom to scope tightly.

Is this a consumer report? No. This data is aggregated from public government records for market research and lead generation. It must not be used for any FCRA-covered purpose (credit, employment, insurance, or tenant screening).

Limitations

  • Not every city is covered — the actor ships with 12 cities; other jurisdictions need a config entry (see "Can I add a city?").
  • Some old ArcGIS servers are slow — a few cities respond best with lighter query parameters; the actor automatically falls back to a simpler query when a server rejects the first form.
  • Placeholder permits — some cities pre-issue "not yet issued" placeholder rows; these are detected and skipped.
  • Empty results are free — if your filter matches nothing, the run succeeds with zero items and you are charged nothing beyond the start fee.

Pricing

Pay per permit extracted (permit-extracted event) + a one-time start fee. No charge for empty results.