US Building Permits API - Normalized Construction Leads avatar

US Building Permits API - Normalized Construction Leads

Pricing

from $2.00 / 1,000 permit records

Go to Apify Store
US Building Permits API - Normalized Construction Leads

US Building Permits API - Normalized Construction Leads

[💵 $3.00 / 1K] One normalized schema for US building permits across major cities (Austin, Chicago, San Francisco, NYC). Unified permit type, status, valuation, geocoded address, dates, and contractor/owner contact - not a raw per-city dump.

Pricing

from $2.00 / 1,000 permit records

Rating

0.0

(0)

Developer

WebData Labs

WebData Labs

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

a day ago

Last modified

Share

One clean schema for US building permits across major cities. Pick a city, filter by issue date, permit type, valuation, or keyword, and get analysis-ready permit rows: normalized permit category, status, construction valuation, geocoded address, key dates, and contractor / owner contact - including phone numbers where the city publishes them.

Every US city posts building permits on its own open-data portal, and every portal has a different schema. Chicago names contractors in contact_1_name and reports cost in reported_cost; New York City buries the licensed contractor in permittee_s_business_name with a phone in permittee_s_phone__ and stores dates as text; San Francisco uses estimated_cost and a GeoJSON point; Austin splits out contractor_company_name, contractor_phone, and contractor_trade. Most "permit scrapers" hand you one city's raw columns. This Actor does the hard part: it maps each city onto one unified schema, normalizes dates to ISO, coerces valuation to a number, classifies the permit into a cross-city category, composes a single clean address, and pulls contractor/owner contacts into the same fields every time.

✅ What you get / ❌ what this isn't

This Actor gives youThis Actor is not
One normalized row per permit, identical shape across every cityNot a raw per-city column dump
Cross-city permitCategory (SOLAR, ROOFING, ELECTRICAL, NEW_CONSTRUCTION...)Not affiliated with or endorsed by any city or government
Contractor name, trade, license, and phone where the city publishes itNot a guarantee every city exposes contractor or valuation data
Construction valuation coerced to a number, dates normalized to ISONot real-time - reflects each portal's publishing cadence
Geocoded address (street, locality, region, postal, lat/lng)Not a credit, licensing, or legal-status check on any contractor
Reliable official open-data reads (no anti-bot, no proxy needed)Not a national database - supported cities are listed below

🔎 Why use this Actor

  • Build fresh construction lead lists - solar, roofing, remodeling, HVAC - filtered by city, date, and trade.
  • Monitor new permits weekly for a sales territory without learning four different city APIs.
  • Track high-value projects by filtering on minimum construction valuation.
  • Feed one consistent permit schema into a CRM, dashboard, model, or LLM pipeline.
  • Skip the plumbing - date parsing, valuation coercion, address composition, and contact extraction are done.

👥 Who it's for

  • Contractors and trade businesses (solar, roofing, HVAC, remodeling) buying local permit leads.
  • Building-material suppliers and manufacturers tracking new construction activity.
  • Proptech, construction-tech, and market-research teams needing normalized permit data.
  • Sales and go-to-market teams building territory lead lists.
  • Data teams that want one schema instead of a per-city ETL project.

🗂️ What data you get

One row per permit:

FieldTypeDescription
source, city, statestringWhich city portal the row came from
permitNumber, permitUrlstringCity permit identifier and its detail page (where available)
permitTypestringThe city's raw permit-type label
permitCategorystringNormalized cross-city category (SOLAR, ROOFING, ELECTRICAL, PLUMBING, MECHANICAL_HVAC, NEW_CONSTRUCTION, ADDITION_ALTERATION, DEMOLITION, SIGN, POOL_SPA, FENCE_WALL, DRIVEWAY_SITE, OTHER)
workClass, descriptionstringSecondary work classification and work description
status, statusNormalizedstringRaw status and normalized status (ISSUED, COMPLETED, IN_PROCESS, INACTIVE)
appliedDate, issuedDate, expirationDate, completedDatestringKey dates, normalized to YYYY-MM-DD
valuation, valuationTypenumber / stringConstruction value coerced to a number, and which field it came from
address, street, locality, region, postalCodestringComposed address plus components
latitude, longitudenumberGeocoordinates where published
contractorName, contractorTrade, contractorLicense, contractorPhone, contractorLocationstringContractor contact where the city publishes it
ownerName, ownerBusinessName, applicantNamestringOwner / applicant where published
contactsarrayAll parties on the permit, each with role, name, and (where present) phone / license

Example tasks

🌎 Supported cities

CitySource portalContractor dataValuation
Austin, TXdata.austintexas.govName, trade, phone-
Chicago, ILdata.cityofchicago.orgTyped contacts (name, location)Reported cost
San Francisco, CAdata.sfgov.org-Estimated cost
New York City, NYdata.cityofnewyork.usPermittee business, phone, license-

More cities are added over time. Request a city via an Actor issue.

⚙️ How to get building permit data

  1. Open the Actor on Apify.
  2. Choose a city.
  3. Optionally filter by issuedAfter / issuedBefore, permitTypeContains, minValuation, or searchText.
  4. Set how many permits to return (maxItems).
  5. Run the Actor.
  6. Open the Permits dataset view.
  7. Export JSON, CSV, Excel, HTML, or XML, or call the Actor through the Apify API.

📥 Input

{
"city": "austin",
"searchText": "solar",
"issuedAfter": "2026-01-01",
"maxItems": 500
}

📤 Output

{
"recordType": "permit",
"source": "austin",
"city": "Austin",
"state": "TX",
"permitNumber": "2026-064893 EP",
"permitType": "Electrical Permit",
"permitCategory": "SOLAR",
"status": "Active",
"statusNormalized": "ISSUED",
"issuedDate": "2026-06-26",
"valuation": null,
"address": "715 E 32ND ST, AUSTIN, TX 78705",
"latitude": 30.29,
"longitude": -97.72,
"contractorName": "Freedom Solar Power",
"contractorTrade": "Electrical Contractor",
"contractorPhone": "5125967031",
"contacts": [
{"role": "contractor", "name": "Freedom Solar Power", "trade": "Electrical Contractor", "phone": "5125967031"}
]
}

💵 How much does it cost?

The launch price is about $3.00 / 1,000 permits, tier-discounted for higher Apify plans. One permit row is one charged result. A run returning 500 permits is 500 results. Error rows are not charged.

🔁 Run it on the Apify platform

Schedule a weekly run per city to keep a fresh lead feed, call it from the Apify API, export to CSV/JSON/Excel, or connect the dataset to Make, Zapier, webhooks, a warehouse, a CRM, or an LLM pipeline.

⚠️ Limits and caveats

  • This Actor reads each city's public open-data portal. It is not affiliated with any city or government, and it does not check a contractor's license validity, credit, or legal status.
  • Field coverage varies by city. Not every city publishes contractor contact, phone, or valuation; missing fields are returned as null rather than guessed. See the supported-cities table.
  • NYC ordering caveat. NYC stores issuance_date as unsortable text, so results are ordered (and issuedAfter / issuedBefore filtered) on the DOB processing date dobrundate. The permit's own issuance date is still parsed into issuedDate.
  • permitCategory is best-effort keyword classification over each city's raw type/description vocabulary; the raw permitType is always preserved.
  • Data reflects each portal's publishing cadence, which can lag the permit office by days.
  • Website Contact Extractor - emails, phones, and socials from any domain.
  • Lead List Deduplicator - dedupe and normalize messy lead lists.
  • Shopify Store Analyzer - catalog and contacts from any Shopify store.
  • SEC Financials API - normalized income, balance sheet, and cash flow from EDGAR.

❓ FAQ

Which cities are supported?

Austin, Chicago, San Francisco, and New York City at launch. Each is sourced from that city's official open-data portal and normalized to the same schema. More cities are added over time.

Where does the data come from?

Each city's public open-data portal (Socrata). These are the same datasets the cities publish for free; this Actor's value is normalizing them into one consistent, lead-ready schema.

Which cities include contractor phone numbers?

Austin and NYC publish a contractor/permittee phone on most records. Chicago publishes typed contacts (name and location, no phone). San Francisco does not publish contractor contact. The contractorPhone field is populated wherever the city provides it.

Why are some fields null?

Because that city does not publish that field for that permit. Coverage differs by city and by record type; nothing is guessed.

Does it need a proxy?

No. City open-data portals are public and served reliably to datacenter IPs. Enable Apify Proxy only for very large batches.

🛠️ Support

For bugs, missing fields, or a city request, open an Actor issue with the run URL, the city and filters used, and the field or behavior you expected.

⭐ Rate this Actor

If this Actor saved you time, please take 30 seconds to leave a review on the Reviews tab of US Building Permits API - Normalized Construction Leads - reviews are the main trust signal other users see, and they directly decide which features get built next. If something is broken or a field is missing, please open an issue first - we typically respond within a day and would love the chance to fix it before you rate.