US Building Permits Scraper: Construction Leads
Pricing
from $1.60 / 1,000 permits
US Building Permits Scraper: Construction Leads
Building permits scraper for 25 US city and county open-data portals, including New York City, Los Angeles, Chicago, Miami and Austin. Building permit data with type, trade, valuation, address and contractor. Contractor leads for roofing, solar and HVAC. Monitor mode returns new permits.
Pricing
from $1.60 / 1,000 permits
Rating
0.0
(0)
Developer
Malik Said
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
15 hours ago
Last modified
Categories
Share
This US building permits scraper returns newly issued building permits from 25 US city and county sources in one table. The data comes from each city's official open-data portal. Each permit is a construction lead with the permit type, a normalised trade category, project value, address and contractor.
Contractors, suppliers, solar and roofing sales teams, and property researchers use it to find new construction work. Schedule it daily with monitor mode on, and each run returns only new permits.
US building permits: cities covered
Counts are permits issued from 14 to 20 October 2026, counted on 21 October 2026.
| City | Source dataset | Permits in 7 days |
|---|---|---|
| New York City, NY | DOB NOW: Build, Approved Permits | 2,581 |
| Los Angeles, CA | LADBS Building Permits Issued from 2020 to Present | 850 |
| Austin, TX | Issued Construction Permits | 847 |
| Boston, MA | Approved Building Permits | 672 |
| Chicago, IL | Building Permits | 573 |
| New Orleans, LA | Permits | 295 |
| San Francisco, CA | DBI Building Permits | 230 |
| Cincinnati, OH | Cincinnati Building Permits | 144 |
| Baton Rouge, LA | EBR Building Permits | 97 |
| Seattle, WA | SDCI Building Permits | 84 |
Cities and counties added on 21 October 2026. Counts are permits issued from 14 to 21 October 2026.
| City or county | Source dataset | Permits in 7 days |
|---|---|---|
| Miami, FL | City of Miami Building Permits Since 2014 | 604 |
| Orlando, FL | Permit Applications (issued permits only) | 528 |
| Louisville, KY | Louisville Metro Active Construction Permits | 285 |
| Norfolk, VA | Permits | 253 |
| Nashville, TN | Building Permits Issued | 248 |
| Everett, WA | Trakit Permits | 215 |
| Detroit, MI | BSEED Building Permits | 173 |
| Montgomery County, MD | Residential Permit and Commercial Permits (two sources) | 151 |
| Marin County, CA | Building Permit (unincorporated county) | 107 |
| Mesa, AZ | Building Permits | 69 |
| Pierce County, WA | Permits - Pierce County (unincorporated county) | 55 |
| Corona, CA | CorStat - Building Permits | 37 |
| College Station, TX | Permits - Master Dataset | 24 |
| Memphis, TN | DPD Building Permits (updated about once a month) | 0 |
Cities added on 23 October 2026. Counts are permits issued from 16 to 22 October 2026.
| City | Source dataset | Permits in 7 days |
|---|---|---|
| Philadelphia, PA | Licenses and Inspections Building and Zoning Permits | 996 |
| Raleigh, NC | Building Permits | 66 |
| Washington, DC | Building Permits - Last 30 Days (newest permit 15 October; the feed runs about a week behind) | 0 |
Washington, DC publishes the last 30 days only, and its feed runs about a week behind. Use Days back 14 or more for DC.
Memphis publishes about once a month, so a 7-day window is often empty. Use Days back 45 for Memphis. Louisville publishes active permits only, so closed permits drop out of its source.
New York City electrical and elevator permits sit in separate city datasets. This Actor does not read them yet.
Building permit data you get
| Field | Meaning |
|---|---|
city, cityName, state | City code, city name and state |
permitNumber | Permit number as the city publishes it |
issuedDate | Issue date, YYYY-MM-DD |
daysSinceIssued | Whole days from the issue date to the run date. Sort by it to call the freshest permits first |
appliedDate | Application or filing date, where published |
permitType | Permit type as the city names it |
workClass | Work class, trade or sub-type, where published |
useCategory | Property use or residential/commercial class, where published |
description | Work description from the permit |
valuation | Declared project value in USD, where published |
address, zipCode | Work site address and ZIP code |
latitude, longitude | Coordinates, where published |
contractorName | Contractor or permittee business, where published |
status | Permit status as the city names it |
tradeCategories | Normalised trades: roofing, solar, hvac, electrical, plumbing, new-construction, addition-remodel, demolition, pool, fence, sign, fire-protection or other |
sourceUrl | Link to the permit on the city's permit site, or to the record in the city's API |
datasetUrl | Link to the city's dataset |
id | Stable ID used by monitor mode |
scrapedAt | When the Actor collected the record |
Sample record from a test run on 21 October 2026:
{"id": "seattle:7109400-CN","city": "seattle","cityName": "Seattle","state": "WA","permitNumber": "7109400-CN","issuedDate": "2026-10-16","daysSinceIssued": 5,"appliedDate": "2026-09-01","permitType": "Building","workClass": "Addition/Alteration","useCategory": "Non-Residential","description": "Construct alterations to existing minor telecommunication array (AT&T) on roof of multifamily building (ADRIATIC) per plan.","valuation": 30000,"address": "3200 NW 65TH ST","zipCode": "98117","latitude": 47.67599988,"longitude": -122.39862497,"contractorName": null,"status": "Issued","tradeCategories": ["addition-remodel"],"sourceUrl": "https://services.seattle.gov/portal/customize/LinkToRecord.aspx?altId=7109400-CN","datasetUrl": "https://data.seattle.gov/d/76t5-zqzr","scrapedAt": "2026-10-21T08:39:32.916Z"}
Trade categories
The Actor sets tradeCategories itself, so one filter works in every city. It reads the permit type, work class and description and looks for trade words. For example, "re-roof" gives roofing, "heat pump" gives hvac and "service upgrade" gives electrical. One permit can have several categories. A permit with no trade word gets other. The category is a keyword match. Check the description before you act on a lead.
Empty fields
Each city publishes different columns. The Actor leaves a field empty when the city does not publish it. It never guesses a value.
contractorName: Los Angeles, San Francisco, Boston, Nashville, Detroit, Memphis, Norfolk, Corona, College Station, Montgomery County, Pierce County, Philadelphia and Washington, DC do not publish a contractor, or the Actor does not read it because it can hold a person's name. Seattle and Louisville fill it for few permits.valuation: Philadelphia and Washington, DC do not publish one. Austin fills it mainly for building permits. Trade permits often have no value. Pierce County fills it for few permits.appliedDate: New York City and Boston do not publish one.zipCode: Chicago, New Orleans, Miami, Orlando, Mesa, Norfolk and Pierce County do not publish one. The Actor reads a ZIP code from the end of the address when the city puts it there.description: Norfolk, Orlando and Louisville do not publish a work description.latitudeandlongitude: Orlando leaves recent permits without coordinates.workClass: San Francisco, New Orleans and Baton Rouge do not publish one.status: Baton Rouge, Marin County, Everett, Nashville, Detroit and Memphis do not publish one.latitudeandlongitude: Cincinnati and Austin leave many permits without coordinates.
Building permits scraper: how to use it
- Pick the cities.
- Set Days back, or set Issued from and Issued to.
- Optional: pick Trade categories, such as Roofing, Solar or HVAC. Or type words under Permit types or trades, such as
electricalordemolition. - Optional: add Keywords to search the work description, such as
roof,pooloradu. - Optional: set Minimum valuation and Maximum valuation to keep jobs of the size you want.
- Optional: add ZIP codes to keep your service area only.
- Turn on Monitor mode and schedule the Actor daily to receive only new permits.
Building permits input options
| Option | Default | Meaning |
|---|---|---|
| Cities | The first ten | Cities and counties to read. Clear the list to read all 28 |
| Days back | 7 | Read permits issued in the last N days |
| Issued from / Issued to | Empty | Exact date range. Overrides Days back |
| Permit types or trades | None | Match against permit type and work class |
| Trade categories | None | Keep permits in at least one chosen category |
| Keywords | None | Match against description, type, work class and contractor |
| Minimum valuation (USD) | 0 | Drop permits below this value. Permits without a value are dropped when this is above 0 |
| Maximum valuation (USD) | 0 (none) | Drop permits above this value. Permits without a value are dropped when this is above 0 |
| ZIP codes | None | Keep permits whose ZIP code starts with one of these values. Permits without a ZIP code are dropped |
| Monitor mode | Off | Return only permits not returned before |
Monitor name (monitorName) | default | Name of the monitor memory. Use one key per watch list. The old field name stateKey still works |
| Maximum permits | 100 | Stop after this many permits. Set 0 for no limit |
| Maximum pages per city | 0 (all) | Each page holds up to 1,000 permits |
| Your own Socrata permit datasets | None | Read any Socrata permit dataset on a .gov, .org or .us portal. See below |
Your own Socrata permit datasets
Your town may publish permits on a Socrata portal that this Actor does not list. Add it under Your own Socrata permit datasets. Find the dataset ID (four letters, a dash, four letters) in the dataset's address, and the names of its columns on its page. Example:
{"customSources": [{"name": "Austin check","state": "TX","domain": "data.austintexas.gov","dataset": "3syk-w9eu","dateField": "issue_date","fields": {"permitNumber": "permit_number","permitType": "permit_type_desc","description": "description","valuation": "total_job_valuation","address": "original_address1","zipCode": "original_zip"}}]}
Rows from this dataset get city "custom-austin-check". Columns whose names contain owner, applicant, phone, email, contact or tenant are refused, so the Actor never reads personal contact data. A wrong entry is skipped with a warning in the log.
Words in the two filter lists match the start of a word. For example, roof matches "roofing" and "re-roof".
Maximum permits is shared evenly across the selected cities. With ten cities and a limit of 100, each city gives up to 10 permits. A city with fewer matching permits leaves its share unused. Set 0 to get every matching permit.
Building permits pricing
The Actor uses pay-per-event pricing:
| Event | Free plan | GOLD plan and higher |
|---|---|---|
| Run start | $0.02 | $0.02 |
| Permit | $0.002 ($2.00 per 1,000) | $0.0016 ($1.60 per 1,000) |
| Permits in one run | Free plan | GOLD plan and higher |
|---|---|---|
| 100 | $0.22 | $0.18 |
| 1,000 | $2.02 | $1.62 |
Costs include the run start fee.
Permits skipped by your filters or by monitor mode cost nothing. Check the Pricing tab for the current price.
Building permits example: input and output
This input reads the last 7 days of permits from Chicago, Boston and Seattle and stops at 12 permits:
{"cities": ["chicago", "boston", "seattle"],"daysBack": 7,"maxItems": 12}
One record from that run on 21 October 2026:
{"id": "boston:G1910419","city": "boston","cityName": "Boston","state": "MA","permitNumber": "G1910419","issuedDate": "2026-10-20","daysSinceIssued": 1,"appliedDate": null,"permitType": "Gas Permit","workClass": "Gas","useCategory": "1-3FAM","description": "Relocating gas meter from inside to exterior… adding a new on demand tankless water heater and gas line for a stove","valuation": 8000,"address": "960 Bennington ST, East Boston","zipCode": "02128","latitude": 42.38626999967974,"longitude": -71.0087000013072,"contractorName": null,"status": "Open","sourceUrl": "https://data.boston.gov/api/3/action/datastore_search?resource_id=6ddcd912-32a0-43df-9908-63574f8c7e77&filters=%7B%22permitnumber%22%3A%22G1910419%22%7D","datasetUrl": "https://data.boston.gov/dataset/approved-building-permits","scrapedAt": "2026-10-21T08:55:41.049Z"}
Building permits FAQ
Which US cities does it cover?
New York City, Los Angeles, Chicago, San Francisco, Austin, Seattle, Boston, New Orleans, Cincinnati, Baton Rouge, Miami, Nashville, Detroit, Louisville, Memphis, Orlando, Mesa, Norfolk, Everett, Corona and College Station. It also covers Marin County (CA), Montgomery County (MD) and Pierce County (WA), Philadelphia, Raleigh and Washington, DC. You can also add any Socrata permit dataset yourself. The tables above show the source dataset for each one.
Can I use it for roofing, solar or HVAC leads?
Yes. Pick Roofing, Solar or HVAC under Trade categories. Add ZIP codes for your service area. Set Minimum valuation to keep larger jobs only.
How do I get only new permits each day?
Turn on Monitor mode and schedule the Actor daily. The Actor remembers the permits it returned before and skips them. Skipped permits are free.
Does it return owner names or phone numbers?
No. The Actor reads permit facts only. It returns the contractor or permittee business when the city publishes it.
How fresh is the data?
Each city updates its open-data portal on its own schedule. The Actor reads the portal at run time, so each run gets the latest published permits.
Can an AI agent use it?
Yes. Agents can find and run it through the Apify MCP server or the Apify API. All cities share one output schema.
Building permits data sources and use
- All data comes from official city and county open-data APIs that need no login. They run on Socrata, CKAN, ArcGIS or Carto.
- The Actor reads up to five portals at a time and sends at most one request per 1.1 seconds to each portal.
- The Actor does not request owner names, applicant names, contact persons, project names, phone numbers or e-mail addresses.
contractorNameholds the contractor or permittee as the city publishes it. Some small contractors trade under a personal name.- Philadelphia data: City of Philadelphia open data, used under its terms of use. Addresses are back in the data since October 2026.
- Washington, DC data: District of Columbia open data, licensed under CC BY 4.0.
- Maricopa County, San Antonio and Pittsburgh are not included. Their terms or robots.txt do not allow this use. Fort Worth and San Diego County are not included: Fort Worth's open table has no issue date, and San Diego County's newest record is from 2023.
- Miami data: City of Miami, licensed under CC BY 4.0.
City of Chicago notice: This site provides applications using data that has been modified for use from its original source, www.cityofchicago.org, the official website of the City of Chicago. The City of Chicago makes no claims as to the content, accuracy, timeliness, or completeness of any of the data provided at this site. The data provided at this site is subject to change at any time. It is understood that the data provided at this site is being used at one's own risk.
Related Actors
- Gulf Tenders Radar: public tenders from Oman, Jordan and the UAE.
- Technical SEO Audit: crawl a site and find broken links and SEO issues.
- Drug Approvals Monitor: new drug approvals from the FDA, EMA and Health Canada.
Support
Report a problem in the Issues tab. Include the run link.