A newly issued building permit is a dated, addressed buying signal: a roof is coming off, a kitchen is going in, a building is going up. This recipe puts new permits from 16 US cities into a Clay table with Clay's native Run Apify Actor action, then turns contractor names into decision makers with Clay's own enrichment providers.
One Clay table that fills itself with permits issued since the last run, one row per permit, with the address, work description, valuation and the contractor on the job. Each run returns only permits you have not received before, so re-running it every morning never charges you twice for the same permit. 1,000 permits cost $8.00 plus a $0.02 start fee per run.
The data comes from US Building Permits API (make_no_mistakes/us-building-permits-scraper on Apify), which reads each city's official open-data portal and normalizes all 16 onto one schema.
Create a table called Permit feeds with three text columns and one row per city group you want to watch:
| City | Keywords | Delta store |
|---|---|---|
austin | roof, solar, hvac | clay-austin |
raleigh | roof, solar, hvac | clay-raleigh |
nashville | new | clay-nashville |
Each row is one independent daily feed. The Delta store name is what lets the actor remember what it already sent you for that row, so give every row its own.
make_no_mistakes/us-building-permits-scraper.{
"cities": [ /City ],
"daysBack": 3,
"maxItems": 500,
"permitTypes": /Keywords,
"onlyNewSinceLastRun": true,
"deltaStateName": /Delta store
}
If you would rather not use tokens, these are the complete inputs for the two most common feeds, ready to paste as-is. Both validate against the actor's published input schema.
Dialable contractor leads (Austin and Raleigh only). These are the only two of the 16 cities that publish contractor phone numbers (about 92% and 80% of rows). contractorPhoneOnly drops phone-less permits before they are written, so you are never charged for them.
{
"cities": ["austin", "raleigh"],
"daysBack": 3,
"maxItems": 500,
"permitTypes": "roof, solar, hvac",
"contractorPhoneOnly": true,
"onlyNewSinceLastRun": true,
"deltaStateName": "clay-austin-raleigh-phones"
}
Everything new in a set of cities (no phone filter). Leave contractorPhoneOnly off for the other 14 cities: with it on they return nothing, because their feeds have no phone column.
{
"cities": ["chicago", "nashville", "denver", "cincinnati"],
"daysBack": 3,
"maxItems": 500,
"onlyNewSinceLastRun": true,
"deltaStateName": "clay-midwest-south-feed"
}
daysBack: 3 with delta mode on: the window is only an upper bound on what gets fetched. Delta mode drops every permit already delivered under that store name before it is written and charged, and it re-checks a 3-day tail on every run to catch permits cities back-fill late. The first run returns the whole window; after that, a quiet day costs $0.02. maxItems caps one run, not the feed: anything over 500 is still new to you and comes on the next run.The Apify column returns the run's dataset, a list of permits, into one cell. Click into that cell to see the items, then use Clay's Write to Table to send each list item to a second table, Permits, as its own row. Map the fields like this:
| Actor field | Clay column | Type | Notes |
|---|---|---|---|
permit_number | Permit # | Text | Not unique on its own. Dedupe on Permit # + Permit type + Address for one row per trade. |
city | City | Text | "Austin, TX" style. |
issued_date | Issued | Date | All date filters run on this field. |
permit_type, permit_class | Permit type, Class | Text | City vocabulary, not standardized across cities. |
work_description | Scope | Long text | Free text. Thin in DC and Louisville. |
address, zip | Address, ZIP | Text | Denver publishes no ZIP. |
lat, lng | Lat, Lng | Number | About 56% in Austin, 95% or more elsewhere. |
valuation | Job value | Currency | Null in DC and Philadelphia. Zero on some trade permits. |
contractor_name | Contractor | Text | Start of the enrichment waterfall below. Not published in LA, Seattle, San Francisco. |
contractor_phone | Contractor phone | Phone | Austin and Raleigh only. |
owner_name | Owner | Text | Mostly NYC, Chicago, DC, Baton Rouge, Raleigh. Often an LLC. |
status, applied_date | Status, Applied | Text, Date | Applied date is missing in a few cities. |
source_url | City record | URL | Link to the official city record where one exists. |
raw | (optional) Raw | JSON | The untouched city record, for any field we do not normalize. |
Counts are real permits per week for the week ending 2026-08-31, after administrative records (garage sales, tent permits and similar) are dropped. Use the slug in cities.
| City | Slug | Permits/week | Lag | Contractor name | Contractor phone |
|---|---|---|---|---|---|
| New York, NY | new-york | ~3,600 | same day | 100% | no |
| Los Angeles, CA | los-angeles | ~2,750 | 1-2 days | not published | no |
| Austin, TX | austin | ~1,150 | same day | 94% | yes, ~92% |
| San Antonio, TX | san-antonio | ~1,070 | 2-4 days | 98% | no |
| Washington, DC | washington-dc | ~920 | 3-5 days | 55% (applicant) | no |
| Chicago, IL | chicago | ~730 | same day | 98% | no |
| Boston, MA | boston | ~650 | same day, pauses | 95% | no |
| Philadelphia, PA | philadelphia | ~470 | same day | 87% | no |
| San Francisco, CA | san-francisco | ~380 | same day | not published | no |
| Louisville, KY | louisville | ~285 | 0-1 day | 11% | no |
| Nashville, TN | nashville | ~205 | 1-2 days | 100% (applicant) | no |
| Cincinnati, OH | cincinnati | ~200 | 1-3 days | 99% | no |
| Baton Rouge, LA | baton-rouge | ~160 | 1-3 days, pauses | 100% | no |
| Denver, CO | denver | ~120 | 2-3 days | 97% | no |
| Raleigh, NC | raleigh | ~100 | 3-5 days | 89% | yes, ~80% |
| Seattle, WA | seattle | ~80 | 1-3 days | not published | no |
For contractor outreach, start with the cities that name the contractor on nearly every permit: Austin, San Antonio, New York, Chicago, Cincinnati, Baton Rouge, Denver, Nashville and Raleigh. For homeowner-side signals (where work is happening, at what value), Los Angeles, San Francisco and Seattle still work, but there is no contractor to enrich.
All of these run on Clay's own providers in the Permits table. We do not supply contact data; the permit is the trigger, Clay does the rest.
contractor_name gives better matches.permitTypes to roof, count permits per contractor per week, and hand the top of the list to a supplier's reps.owner_name is often a property-holding company. Enrich the company, not a person, to reach the property manager or developer.Shovels is the permit data provider most GTM teams use inside Clay, connected through Clay's HTTP API column. It is a stronger product in several ways, and you should know which before you pick.
| This recipe | Shovels | |
|---|---|---|
| Coverage | 16 city portals, about 13,000 permits a week | National. Thousands of jurisdictions; they cite 170 million permits and 3 million contractors |
| Price | $0.008 per permit + $0.02 per run, no subscription. 25,000 permits is about $200 | Free tier: 500 credits a month. Basic: $599 a month for 25,000 credits. Pro: $999 a month for 50,000 |
| History | Years back in most cities; Raleigh only the last 180 days | Full history on paid plans |
| Freshness | Re-read from the city on every run; cities post same day to 5 days after issue (table above) | Varies by jurisdiction; see their coverage dashboard |
| Permit categories | City wording plus a keyword filter | Standardized tags (roofing, solar, HVAC and more) across every jurisdiction |
| Contractor data | Name on the permit; phone in Austin and Raleigh only | Resolved contractor profiles with permit counts, inspection pass rates and project durations |
| Homeowner / resident data | No. Owner name only where the city publishes it | Resident lookups on paid plans |
| Paying only for new records | Built-in delta mode: already-delivered permits are skipped and not charged | You filter by date in each request |
| Clay connection | Native Run Apify Actor action, your own Apify account | HTTP API column with your Shovels key |
Pick Shovels if your clients are outside these 16 cities, if you need standardized permit categories across markets, contractor-level history and quality metrics, or resident data. Pick this recipe if your clients are in these cities, you mostly need fresh permits and the contractor's name, and you would rather pay about $8 per 1,000 permits than a monthly subscription. Shovels pricing is from shovels.ai/pricing, checked October 3, 2026.
If you run outbound for a home-services, construction, solar or real-estate client in one of these 16 cities, email hello@makenomistakesllc.com with the city and the trade. We will send four weekly permit files for that city free, in the same columns as above, so you can test the list before wiring up Clay.