Building Permit Monitor — 30 US Cities, New Permits, No Login
Pricing
from $10.00 / 1,000 permits
Building Permit Monitor — 30 US Cities, New Permits, No Login
Watch 30 US cities (NYC, LA, Chicago, SF, Seattle, Denver, Boston and more) and get only NEW building permits since the last run, filtered by type, keyword, value or contractor, with address, coordinates, value and contractor license. Daily schedule. No login. MCP-ready. $10 per 1,000 permits.
Pricing
from $10.00 / 1,000 permits
Rating
0.0
(0)
Developer
Khrystyna Skotte
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
2 days ago
Last modified
Categories
Share
Building Permit Monitor — new permits daily across 30 US cities
Get a daily feed of only the NEW building permits (and status changes) issued across NYC, Los Angeles, Chicago, San Francisco, Seattle, Denver, Boston, Philadelphia, Nashville, Washington DC, Detroit, Miami and 18 more cities, filtered by permit type, job value, description keywords and contractor. The monitor remembers every permit it has already reported, so a scheduled run emits just the delta, posts a summary to your webhook, and costs you only for what is actually new. One actor instead of 30 single-city scrapers.
Built for contractors, building-material suppliers, and solar / roofing / HVAC / plumbing lead-gen teams who need to know today which jobs were just permitted, where, for how much, and by whom.
Coverage
All sources are official open-data feeds (Socrata, ArcGIS FeatureServer, CKAN, Carto). Every one was verified
live on 2026-09-28. "Typical lag" is how far behind the calendar the newest published permit usually is — set
lookbackDays above the lag for slow cities.
| Key | City | Source | Issue-date field | Typical lag | Contractor | Value |
|---|---|---|---|---|---|---|
nyc | New York City, NY | DOB NOW: Build Approved Permits (Socrata rbx6-tga4) | issued_date | daily | yes + license | yes |
los-angeles | Los Angeles, CA | LADBS Permits (Socrata pi9x-tg5x) | issue_date | daily | no | yes |
chicago | Chicago, IL | Building Permits (Socrata ydr8-5enu) | issue_date | daily | yes | yes |
san-francisco | San Francisco, CA | DBI Building Permits (Socrata i98e-djp9) | issued_date | daily | no | yes |
seattle | Seattle, WA | SDCI Building Permits (Socrata 76t5-zqzr) | issueddate | daily | no | yes |
austin | Austin, TX | Issued Construction Permits (Socrata quv8-5ckq) | issue_date | 2–4 weeks | no | yes |
denver | Denver, CO | Residential + Commercial Construction Permits (ArcGIS) | DATE_ISSUED | daily | yes | yes |
boston | Boston, MA | Approved Building Permits (CKAN) | issued_date | daily | applicant | yes |
philadelphia | Philadelphia, PA | L&I Permits (Carto permits) | permitissuedate | daily | yes | no |
nashville | Nashville, TN | Building Permits Issued (ArcGIS) | Date_Issued | daily | contact | yes |
washington-dc | Washington, DC | Building Permits in Last 30 Days (ArcGIS) | ISSUE_DATE | daily, 30-day window | applicant | no |
detroit | Detroit, MI | BSEED Building Permits (ArcGIS) | issued_date | daily | no | yes |
fort-worth | Fort Worth, TX | Development Permits, status = Issued (ArcGIS) | Status_Date | daily | no | yes |
charlotte | Charlotte / Mecklenburg County, NC | Building Permits (ArcGIS) | issuedate | daily | no | yes |
raleigh | Raleigh, NC | Building Permits (ArcGIS) | issueddate | daily | yes + license | yes |
columbus | Columbus, OH | Building Permits (ArcGIS) | ISSUED_DT | daily | applicant business | yes |
cleveland | Cleveland, OH | Building Permits (ArcGIS) | ISSUE_DATE | daily | yes + license | yes |
minneapolis | Minneapolis, MN | CCS Permits (ArcGIS) | issueDate | daily | applicant | yes |
miami | Miami, FL | Building Permits Since 2014 (ArcGIS) | IssuedDate | daily | yes | yes |
san-antonio | San Antonio, TX | Building Permits (CKAN) | DATE ISSUED | daily | no | yes |
pittsburgh | Pittsburgh, PA | PLI Permits (WPRDC CKAN) | issue_date | weekly | yes | yes |
cincinnati | Cincinnati, OH | Building Permits (Socrata uhjb-xac9) | issueddate | daily | yes | yes |
mesa | Mesa, AZ | Building Permits (Socrata dzpk-hxfb) | issued_date | daily | yes + license | yes |
tucson | Tucson, AZ | Permits (ArcGIS) | ISSUEDATE | daily | no | yes |
tacoma | Tacoma, WA | Accela Permits (ArcGIS) | issued_date | daily | no | yes |
tempe | Tempe, AZ | Building Permits (ArcGIS) | IssuedDateDtm | daily | yes + license | yes |
scottsdale | Scottsdale, AZ | Permits (ArcGIS) | IssueDate | daily | builder | yes |
memphis | Memphis, TN | DPD Building Permits (ArcGIS) | Issued_Date | 2–4 weeks | no | yes |
montgomery-county-md | Montgomery County, MD | Residential Building Permits (Socrata m88u-pqki) | issueddate | daily | no | yes |
portland | Portland, OR | Building Permits (PortlandMaps ArcGIS) | ISSUEDATE | 4–8 weeks | no | yes |
dallas | Dallas, TX | Permits 2008–2024 (ArcGIS) | ISSUE_DATE | stale — feed stopped Nov 2024 | no | yes |
cities: ["all"] runs every live city. dallas is excluded from all and from the defaults; request it
explicitly only if you want historical data. Houston and Phoenix publish no machine-readable permit feed and
are not covered (Mesa, Tempe and Scottsdale cover much of the Phoenix metro).
How it works
- For each selected city, queries the official feed for permits issued in the last
lookbackDays(server-side date filter, newest first, up to 5,000 per city per run). - Normalises every row into the same 20-field record (see Output) and applies your filters.
- Compares each permit against the monitor's saved state (
city → permitNumber → status). - Emits a record when the permit is unseen (
changeType: "new") or its status changed since last seen (changeType: "status_change", withpreviousStatus). - Saves the state, then POSTs a run summary to
webhookUrlif set.
State lives in a named key-value store permit-monitor-<hash of monitorId> in your Apify account, capped at
50,000 permits (oldest are dropped first). Delete the store to reset a monitor.
Input
| Field | Default | Notes |
|---|---|---|
cities | ["nyc","los-angeles","chicago"] | City keys from the table above, or ["all"] |
permitTypes | [] | Case-insensitive substrings matched against permit type and work class, e.g. ["electrical","roof","demolition"]. OR-ed |
minValue | 0 | Minimum estimated/declared job value in USD. When set, permits with no published value are dropped, so Philadelphia and DC (no value field) will not match |
keywords | [] | Case-insensitive substrings matched against the work description (plus type/class), e.g. ["solar","PV","photovoltaic"] |
contractors | [] | Case-insensitive substrings matched against the contractor name |
lookbackDays | 7 | Permits issued within N days. Raise it for Austin, Memphis, Portland (see lag column) |
maxNewPerCity | 5 | Cap per city per run. Also bounded by maxItems / number of cities so one big city cannot starve the others. Permits beyond the cap stay unseen and come out next run |
maxItems | 10 | Overall cap per run |
firstRunMode | emitAll | emitAll reports every current match on the first run; baseline records them silently |
webhookUrl | "" | Optional POST target for the run summary |
monitorId | default | One state store per ID, so several watchlists can run side by side |
Where a city encodes the trade in its type or work class (Tucson Solar, Chicago Electrical Work,
Philadelphia Electrical), use permitTypes. Where it only appears in the free-text description (Los Angeles,
Mesa, Boston), use keywords. Using both with the same terms is safe: a permit matches if it passes each
filter you set.
Recommended setup for a daily feed
- Create a task with your cities and filters and set
monitorId(solar-southwest,roofing-tx). - First run: set
firstRunModetobaselinewithlookbackDays30. This records everything current and emits nothing, so day one is not a 5,000-row backlog. - Set
lookbackDaysback to 7 (or 30 for the slow cities),maxNewPerCityandmaxItemshigh enough for your cities (NYC alone issues ~3,000 permits a week; Chicago ~500; Seattle ~50). - Schedule the task daily at 07:00 in your local time zone. Most cities refresh their feed overnight.
- Point
webhookUrlat Slack (incoming webhook), Zapier, Make, or your own endpoint.
The default input ({}) runs in emitAll mode on NYC, Los Angeles and Chicago so you see real permits on the
first try.
Example: solar and roofing leads in the Southwest, jobs over $10,000
{"cities": ["los-angeles", "mesa", "tempe", "scottsdale", "tucson"],"keywords": ["solar", "photovoltaic", "PV", "reroof", "re-roof", "roofing"],"minValue": 10000,"lookbackDays": 7,"maxNewPerCity": 200,"maxItems": 1000,"firstRunMode": "baseline","webhookUrl": "https://hooks.slack.com/services/XXX/YYY/ZZZ","monitorId": "solar-southwest"}
Other quick profiles:
- Commercial general contractors, big jobs:
cities: ["nyc","chicago","denver","nashville","miami"],permitTypes: ["new building","commercial","new construction"],minValue: 250000 - Track a competitor:
cities: ["all"],contractors: ["renewal by andersen"] - Demolition (site-prep, hauling, salvage):
permitTypes: ["demolition","demo"],cities: ["all"]
Output
One record per new or changed permit:
{"city": "New York City","state": "NY","permitNumber": "B01358922-S2-GC-CX","permitType": "General Construction","workClass": "Initial Permit","description": "This subsequent filing SI MS/GC (Job B01358922-S1) to correct and update plan for legalization ...","status": "Permit Issued","issuedDate": "2026-09-25","appliedDate": "2026-09-03","address": "147 DIAMOND STREET, Brooklyn","zip": "11222","latitude": 40.727487,"longitude": -73.947937,"estimatedValue": 6050,"contractorName": "CLIFF REFRIGERATION & A/C","contractorLicense": "GC 614451","ownerName": "Maureen Marsh","sourceUrl": "https://data.cityofnewyork.us/resource/rbx6-tga4.json","changeType": "new","previousStatus": null,"firstSeenAt": "2026-09-29T00:17:40.009Z","monitorId": "default"}
Fields a city does not publish are null (see the Contractor / Value columns above). sourceUrl is the
permit's own page where the city provides one (Austin, Seattle, Columbus, Cleveland, Cincinnati, Tacoma,
Tucson), otherwise the dataset endpoint. Descriptions are truncated to 300 characters.
Webhook payload
{"monitorId": "solar-southwest","runAt": "2026-09-29T07:00:12.000Z","since": "2026-09-22","newCount": 14,"statusChangeCount": 2,"emitted": 16,"seenTotal": 1830,"baseline": false,"cities": { "tucson": { "fetched": 141, "matched": 18, "new": 12, "statusChange": 0, "emitted": 12, "deferred": 6, "latestIssuedDate": "2026-09-27", "error": null } },"permits": [ "...first 50 records..." ]}
The same summary is saved as SUMMARY in the run's default key-value store.
Pricing
$0.005 per run start plus $0.01 per emitted permit ($10 per 1,000). Baseline runs and runs with nothing new cost only the start fee.
Notes and limits
- Only permits with an issue date inside the lookback window are considered; applications not yet issued are not reported (except Fort Worth, where the window is the date the status became Issued).
- Washington DC's feed only holds the last 30 days, so
lookbackDaysabove 30 has no extra effect there. - Pittsburgh publishes weekly; Austin and Memphis run 2–4 weeks behind; Portland 4–8 weeks.
- Permit numbers are unique within a city; the state is keyed per city so the same number in two cities does not collide.
- No login, API key or proxy is needed. The actor is MCP-ready for AI agents.