US Building Permits API — 10 Cities, Construction Lead Data avatar

US Building Permits API — 10 Cities, Construction Lead Data

Pricing

$2.00 / 1,000 results

Go to Apify Store
US Building Permits API — 10 Cities, Construction Lead Data

US Building Permits API — 10 Cities, Construction Lead Data

Search recently issued building permits across 10 US cities from official open-data portals: NYC, LA, Chicago, SF, Seattle, Austin, Boston, Philadelphia, New Orleans and San Jose. Permit type, description, address, issue date and status as clean JSON. Built for contractors, suppliers and lead gen.

Pricing

$2.00 / 1,000 results

Rating

0.0

(0)

Developer

Nick

Nick

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

4 days ago

Last modified

Share

Search recently issued building permits across 10 major US cities from the cities' own official open-data portals. Permit type, work description, address, issue date and status, normalized into one schema — so a Seattle permit and a Philadelphia permit land in the same table.

What does this Actor do?

Every large US city publishes its permit data, and every one of them publishes it differently. New York calls the permit number work_permit; Chicago calls it permit_; San Jose shouts it as FOLDERNUMBER. The issue date is issued_date, issue_date, issueddate, permitissuedate or ISSUEDATE depending on which city you ask. There is no standard, and that is the actual work this Actor does: a hand-written field mapper per city, so you get one shape instead of ten.

The original portal record is always kept intact in raw, so nothing is lost in translation — if a city publishes a valuation, a contractor name or coordinates that the shared schema has no slot for, it is still there.

Why this instead of a building permits scraper

If you searched for a "building permits scraper", this Actor does that job through the official route. It reads each city's public open-data API rather than scraping a permit-search web page, so it cannot be blocked, does not need a browser, and does not break when a city redesigns its site. Cities publish this data specifically for reuse. That also means no CAPTCHA-solving and no terms-restricted portals.

Who is it for?

  • Roofing, HVAC, solar and remodeling contractors looking for properties with active permitted work.
  • Building-materials suppliers and subcontractors who want to reach a general contractor early in a job.
  • Real-estate investors and agents watching renovation and new-construction activity by neighbourhood.
  • Proptech and market-research teams building a permit dataset across several metros at once.
  • AI agent builders who need a construction-activity tool with a stable output schema.

Use cases

  • Pull this week's residential remodel permits in two cities and route them to a sales team.
  • Track new-construction starts in a metro to time a supplier outreach campaign.
  • Filter by keyword (solar, roof, pool) to find only the work types you actually sell into.
  • Build a multi-city permit time series for market analysis, keeping each city's original record.
  • Give an agent a tool that answers "what construction was permitted at this address recently?"

What you get

One row per permit. Any value a city does not publish is null — the field is always present, and the untouched source record stays in raw.

FieldTypeDescription
citystringWhich city the record came from: nyc, chicago, sf, austin, seattle, la, nola, boston, philly, sanjose
permitIdstringThe city's own permit or job-filing number
permitTypestringPermit or work type as the city classifies it
descriptionstringDescription of the permitted work
addressstringStreet address, assembled from the city's separate address components
issuedDatestringISO 8601 issue date
statusstringPermit status as the city publishes it
valuationnumber | nullBroadest project valuation the city publishes, when available
contractorstring | nullContractor business name, with person-name fallback where available
applicantstring | nullApplicant business or organization name, with person-name fallback where available
rawobjectThe complete original record from the city's portal, unmodified
newSinceLastRunbooleanWhether this permit is newer than the saved watermark
retrievedAtstringISO 8601 timestamp of when this row was fetched

Sample output record

{
"city": "seattle",
"permitId": "7125741-CN",
"permitType": "Residential",
"description": "Establish use as housing and construct 4-unit townhouse…",
"address": "1024 5TH AVE W",
"issuedDate": "2026-08-21T00:00:00.000Z",
"status": "Issued",
"valuation": 524637,
"contractor": null,
"applicant": null,
"raw": { "permitnum": "7125741-CN", "…": "…" },
"newSinceLastRun": true,
"retrievedAt": "2026-08-22T14:40:11.204Z"
}

City field coverage

Sources are official city open-data portals. Records can omit fields, so a missing source value is emitted as null while the original record remains available in raw.

CityValuationContractorApplicant
Bostondeclared_valuationnullapplicant
Philadelphianullnullnull
San JosePERMITVALUATIONCONTRACTORAPPLICANT
New York Cityestimated_job_costsnullapplicant_business_name, fallback applicant_first_name + applicant_last_name
Chicagonullnullnull
San Franciscoestimated_costnullnull
Austintotal_valuation_remodelcontractor_company_name, fallback contractor_full_nameapplicant_org, fallback applicant_full_name
Seattleestprojectcost when publishedcontractorcompanyname when publishednull
Los Angelesnullnullnull
New Orleansnullnullnull

How to use it

Search two cities for a work type

{
"cities": ["seattle", "austin"],
"keywords": ["residential", "remodel"],
"maxResults": 20
}

Everything issued since a date

{
"cities": ["nyc", "chicago", "philly"],
"issuedSince": "2026-08-01T00:00:00.000Z",
"maxResults": 500
}

Keywords are matched case-insensitively against the permit description and type fields.

Input parameters

InputTypeDescription
citiesarrayCities to search. Allowed values: nyc, chicago, sf, austin, seattle, la, nola, boston, philly, sanjose. Unknown values fail the run with a clear error. Default: ["nyc"]
issuedSincestringISO 8601 start time. Defaults to the previous successful run's watermark
keywordsarrayCase-insensitive matches against permit description and type fields
maxResultsintegerMaximum records per run (1–1000). Default: 20

How monitoring works (first run and scheduling)

The first run establishes a baseline and returns the current window of records. To get only-new records on every subsequent run, schedule this Actor as a saved Task so runs share the same storage — the watermark lives in the task's key-value store. A fresh unsaved run starts a fresh baseline.

Honest limitations

  • Ten cities, not the whole country. There is no national US permit database; each city must be integrated individually. The supported list is exactly the ten above.
  • Field coverage varies by city, as the table shows. Where a city does not publish a value into its open dataset, the normalized field is null and the original record stays in raw.
  • San Jose publishes a rolling last-30-days dataset, so historical San Jose permits are not available from that source.
  • Field coverage varies by city. Valuation, contractor and applicant are normalized only where the source publishes them; the city coverage table identifies each available source field.
  • Portals update on their own schedules. Some refresh continuously, others in daily batches, so "issued yesterday" does not always mean "available this morning".

Reliability

Every record carries retrievedAt and keeps the untouched source record in raw, so you can check any row against the city's own portal yourself. Unknown city codes fail the run immediately with a clear error rather than silently returning nothing.

Maintained against the upstream portals. If a city changes its dataset schema or moves an endpoint, report it through the Issues tab and it gets fixed.

Integrations

Connect this Actor to Make, Zapier, n8n, Slack, Google Sheets, Airtable or any HTTP endpoint through Apify integrations. A scheduled run can drop new permits straight into a CRM or a spreadsheet, or fire a webhook so a downstream job starts the moment the data lands. Datasets export as JSON, CSV, Excel, XML, RSS or HTML.

API usage

curl -X POST "https://api.apify.com/v2/acts/oneshotventure~permits-search/runs?token=YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"cities": ["seattle", "austin"], "keywords": ["residential"], "maxResults": 20}'

Python, JavaScript, PHP and CLI clients are documented under Apify API clients.

Use with AI agents (MCP)

This Actor is callable from any MCP-compatible client — Claude, Cursor, VS Code or your own agent — through the Apify MCP server. The input schema is fully described and every record uses one stable, flat JSON shape, so an agent can call it and read the result without a parsing step. Because it reads official city open-data APIs rather than a rendered page, the answer an agent gets is the same one the source publishes.

Frequently asked questions

Where can I get building permit data for free?

From the cities themselves — each of the ten supported cities publishes permits as open data for public reuse. This Actor is the normalization, filtering and scheduling layer that turns ten incompatible datasets into one.

How do I find new construction leads in my city?

Select your city, set keywords to the work types you sell into, and schedule the Actor as a saved Task. Each run returns the permits issued since the last one.

Which cities are supported?

Ten: New York City, Los Angeles, Chicago, San Francisco, Seattle, Austin, Boston, Philadelphia, New Orleans and San Jose. Passing any other city code fails the run with a clear error rather than returning nothing.

How fresh is the permit data?

Each run reads the city portal live at that moment, so the data is as fresh as the portal itself. Cities refresh on their own schedules — some continuously, some in daily batches.

Can I filter permits by keyword or work type?

Yes. keywords is matched case-insensitively against both the permit description and the permit type fields, so solar, roof or demolition all work.

Does this include contractor names and phone numbers?

Where a city publishes one, contractor is included in the normalized schema. Coverage varies by city, and this Actor does not append phone numbers or emails from any third-party source.

Does it cover the whole United States?

No. Permits are issued city by city and there is no national register. Ten cities are supported today; more are added as official open-data endpoints are validated.

Disclaimer

Unofficial independent tool. Not affiliated with or endorsed by any city government. Data is retrieved from official public open-data portals.