Docs / US building permits leads

Building Permit Leads API (6 US cities, one schema)

Newly issued building permits from official open-data portals in Austin, Seattle, San Francisco, Cincinnati, Baton Rouge and Marin County, normalized to one schema: permit type, work description, address, ZIP, valuation, contractor, owner (where published), lat/lon.

Run it on Apify ↗ API tab ↗ Compare alternatives

Facts on this page were checked against the live Apify listing on 2026-10-22. The Apify Store page is the source of truth for price.

Who it is for

Solar, roofing, pool, ADU, HVAC, remodeling and building-supply sales teams, insurers, and AI agents answering permit questions.

Pricing (pay per event)

EventChargedPrice (USD)
permitper permit returned$0.003
apify-actor-startper run$0.005

The prefilled input (up to 100 permits) costs at most about $0.31. No subscription. Paid Apify plans get Store tier discounts automatically, and you can set a maximum total charge per run.

Data sources

Freshness: As fresh as each city's portal at run time. Baton Rouge lags about a week.

Coverage: 6 cities/counties. Field coverage varies by city (test run, Oct 2026): contractor names in Cincinnati 99% and Austin 91% (with phone ~90%); none in SF or Marin.

Inputs

FieldTypeDefaultWhat it does
citiesarray["austin"]City slugs to pull: ["austin","seattle","san-francisco","cincinnati","baton-rouge","marin-county"].
daysBackinteger7Only permits issued within this many days.
keywordsarrayMatch in permit type or work description, e.g. ["solar","roof","pool","ADU","demolition"]. Empty = all permits.
minValuationinteger0Skip permits below this declared job value (where the city reports one).
maxItemsinteger100Maximum permits per city; each is one charged result ($0.003). Use 10-50 for a quick answer.
onlyNewbooleanfalseRemember results across runs (per account) and return only items not seen before. Ideal for scheduled runs: you pay only for new records.
webhookUrlstringOptional. POSTs the new items as JSON with a 'text'/'content' summary (Slack, Discord, Zapier, Make, n8n compatible).

Output fields

city, permitNumber, issueDate, permitType, workDescription, address, zip, valuation, status, contractorName, contractorLicense, ownerName, lat, lon, sourceUrl.

Example input

{
  "cities": ["austin"],
  "daysBack": 7,
  "keywords": ["solar"],
  "maxItems": 25
}

Example output row

{ "city": "austin", "permitNumber": "2026-135600 BP", "issueDate": "2026-10-20T00:00:00.000",
  "permitType": "Building Permit / Addition and Remodel", "workDescription": "Interior remodel and addition...",
  "address": "10015 ESTANCIA LN", "zip": "78739", "status": "Active", "contractorName": "CROSSROADS CONSTRUCTION",
  "contractorTrade": "General Contractor", "ownerName": null, "sourceUrl": "https://abc.austintexas.gov/..." }

Real row from Apify run Ax8XEvvXnhGBGeGl1 (build 0.2.12, 2026-10-22), shortened.

Call it from code or an AI agent

REST (one call, returns JSON rows):

curl -X POST "https://api.apify.com/v2/acts/johto.data~us-city-building-permits-leads/run-sync-get-dataset-items" \
  -H "Authorization: Bearer $APIFY_TOKEN" -H "Content-Type: application/json" \
  -d '{"cities":["austin"],"daysBack":7,"keywords":["solar"],"maxItems":25}'

Python: ApifyClient(token).actor("johto.data/us-city-building-permits-leads").call(run_input={...})

MCP (Claude, Cursor, any MCP client): https://mcp.apify.com/?tools=johto.data/us-city-building-permits-leads

Limits and notes

FAQ

Which cities are covered?

Austin, Seattle, San Francisco, Cincinnati, Baton Rouge and Marin County.

Can I filter to solar or roofing permits?

Yes. keywords matches permit type or work description, e.g. ["solar","roof","pool","ADU"]; minValuation filters by declared job value.

Where is the data from?

Each city's official open-data portal (mostly Socrata APIs). Public data published for reuse.

Apify Store listing: https://apify.com/johto.data/us-city-building-permits-leads. Questions: [email protected].