Get alerted the moment a matching building permit is issued in Chicago, Austin, San Francisco, Seattle or NYC. Filter by keywords, permit type and valuation; alerts only on never-seen permits via official city open-data APIs. Project and contractor business data, no homeowner identities.
$2.00 / 1,000 · 100.0% success over 29 public runs in the last 30 days.
Run it on Apify → Free to try - runs bill per result on your own account.
Every field is optional unless marked; sensible defaults do the rest.
| Field | Type | What it does | Default |
|---|---|---|---|
portals |
array | Which city permit portals to monitor. All five are official open-data APIs - no keys needed. | ["chicago", "austin", "san-francisco", "seattle", "nyc"] |
keywords |
array | Alert on permits whose description or type contains ANY of these words (case-insensitive). Example: ["solar", "roof", "HVAC"]. Leave empty to match everything and filter by permit type or valuation instead. | [] |
permitTypes |
array | Only alert on permits whose type or class label contains any of these (case-insensitive substring - portal vocabularies differ). Example: ["electrical", "demolition", "new construction"]. Every dataset item carries its portal's own labels, reusable here. | [] |
minValuationUsd |
integer | Only alert on permits with a reported project cost of at least this many dollars. Permits without a published valuation always pass - portals make the field optional, and dropping them would hide real leads. | - |
lookbackDays |
integer | How many days of already-issued permits the FIRST run of a profile loads as its baseline. Later runs automatically query from the previous run with one day of overlap - re-alerting a seen permit is impossible. | 14 |
alertOn |
string | "new" alerts once per permit. "new-and-updated" also alerts when a seen permit's status changes (marked isUpdate: true), e.g. issued to finaled. | new |
emitBaseline |
boolean | On the very first run of a profile, push the currently matching permits (flagged isBaseline: true, charged at the lower baseline price) so you start with the recent picture. Turn off to seed silently and only ever receive new alerts. | True |
resetState |
boolean | Discard this profile's memory of already-seen permits and start over with a fresh baseline run. One-shot switch: turn it back off afterwards. | False |
maxItems |
integer | Upper bound on items pushed per run (baseline or alerts). Matches beyond the cap are not lost: they alert on the next run. | 500 |
stateStoreName |
string | Named key-value store holding the monitor's seen-permit memory. Only change this to run fully isolated monitor instances. | permit-monitor-state |
One JSON object per result, with exactly these fields - no seller identities, no contact data, ever.
| Field | Type | Meaning |
|---|---|---|
portal |
string | Which city portal issued the permit. |
permitNumber |
string | The permit's number on its portal - its stable public identifier. |
permitType |
string | The portal's permit-type label, unnormalized. Reusable in the permitTypes input. |
permitClass |
string | Residential/commercial class where the portal publishes one. |
workClass |
string | The portal's work-class or review-type label. |
description |
string | Work description as filed with the city. |
status |
string | Current permit status on the portal. |
address |
string | Project address - where the work happens. Owner and applicant identities are never included (see the compliance section). |
city |
string | Project city. |
state |
string | Project state, two-letter code. |
zip |
string | Project ZIP code. |
latitude |
number | Project latitude where the portal publishes coordinates. |
longitude |
number | Project longitude where the portal publishes coordinates. |
valuationUsd |
number | Reported project cost in USD, when published. Absence does not mean small. |
appliedDate |
string | Date the permit was applied for, YYYY-MM-DD. |
issuedDate |
string | Date the permit was issued, YYYY-MM-DD. |
expiresDate |
string | Permit expiry date where published, YYYY-MM-DD. |
contractorName |
string | Contractor's business name, where the portal publishes one. Organization-level data only - no person names, phones or emails. |
contractorTrade |
string | Contractor's trade or role label. |
contractors |
array | All contractor parties on the permit ({trade, name}), where the portal lists several (Chicago). |
url |
string | Link to the permit record on its portal, where one exists. |
isBaseline |
boolean | True on items from a profile's first run (the recent baseline). False on real new-permit alerts. |
isUpdate |
boolean | True when the alert is a status change on an already-seen permit (alertOn: new-and-updated). |
100.0% success over 29 public runs in the last 30 days. Live record, failures included: status page.
Full documentation, examples and the AI-assistant prompt live on the store page.