How it works
1. Source
The system pulls projects weekly from five feeds.
- Grading and foundation permits. From the city or county permit portal, or its Socrata open data API.
- Approved site plans and plats. From planning commission agendas.
- GC bid invitations. From BuildingConnected and PlanHub.
- Paving and sidewalk solicitations. From municipal procurement portals.
- GC inventory. From Google Maps.
2. Qualify
Filters drop:
- Wrong project. Single-family permits, and projects under $250,000 valuation or 1 acre of site area.
- Wrong timing. Bids due in under 5 days.
- Wrong place. Anything outside the service radius.
- Already known. Current clients, and GCs already in the CRM.
Dropped records never reach the contact finder, so every enrichment credit is spent on a project you could pour.
3. Enrich
Each surviving record goes to a contact lookup.
- Who it looks for. The GC project manager or estimator, the developer’s construction manager, or the city’s project engineer.
- How it finds them. Hunter finds the address and BetterContact verifies it.
4. Outreach
Four emails over 14 days, sent while the footing schedule is still open.
Every opener starts with the record that pulled the project in: the permit number and address, the approved plat and lot count, the bid invitation and due date, or the paving solicitation number.
5. Book, quote, and track
Claude reads each reply and tags it with one of five labels: positive, question, not-now, wrong-person, or unsubscribe.
- Positive reply. n8n emails the contact a booking link and posts to Slack with the job address, the permit or bid number, and whether the reply came from a PM, an estimator, or a developer.
- The takeoff form. The estimator then walks the site or takes off the foundation plan and fills in cubic yards and square footage per element, rebar or mesh, finish and flatness spec, pump days, crane days, and target pour dates.
- The quote. Those line items go to SourceToDocs, which returns a quote PDF on your letterhead, and n8n emails it to the GC the same hour, so the price lands while the sub list is still open.
- The record. The CRM stores the deal, the permit or bid reference, and every email sent and received.
SourceToDocs is built by 2V Automation, the team behind this library.
Lead sources for concrete contractors
Ranked by signal quality:
1. Commercial building permits at the grading and foundation stage
A grading permit or a foundation-only permit on a commercial parcel means footings pour within 4 to 10 weeks and the GC is locking the concrete sub now.
| Feed | What it gives | Pulled |
|---|---|---|
| County permit search (Apify) | Most counties run Accela or Tyler EnerGov, and the scraper reads both | Weekly |
| Socrata open data API | Where the city also publishes permits this way the system calls that instead. Chicago, Austin, Seattle, Los Angeles, and about 40 other US cities publish permits this way, free, JSON, filterable by issue date | Weekly |
- The filter. Commercial occupancy, and work descriptions containing “grading”, “foundation”, “footing”, “site work”, “shell”, or “tilt-up”.
- What the record carries. The address, the contractor of record, the valuation, the parcel size, and the issue date.
Nobody else is emailing off a grading permit.
By the time the same job shows up as a bid invitation, 5 to 10 concrete subs are pricing it.
2. Approved site plans and plats
A planning commission approval of a site plan or final plat means a developer has an entitled project and will hire a GC or self-perform within 3 to 9 months.
Every one of those projects starts with site concrete.
- Where it comes from. Planning commission agendas and minutes on Legistar, Granicus, and CivicPlus agenda pages, scraped weekly through Apify.
- What Claude parses out. Applicant, parcel, use, building square footage, lot count, and approval date.
- Who the applicant is. The developer or their civil engineer, which gives outreach a name 6 months before the permit appears in source 1.
Competition is near zero at this stage.
3. GC bid invitations
Each BuildingConnected and PlanHub invitation carries a concrete scope and a bid due date, which means a GC is choosing a concrete sub right now.
The signal is direct, and 5 to 10 other bidders see the same invitation.
- Where it comes from. Your BuildingConnected and PlanHub accounts send an invitation email for every project with a concrete line item.
- What n8n pulls. It watches that inbox and takes the GC estimator, the project name, the concrete scope, and the bid due date out of each one.
- What the sequence offers. A site walk plus a phased price ahead of the deadline, while the other bidders send a number from the plans.
4. Municipal paving and sidewalk bids
Cities and counties post street reconstruction, sidewalk replacement, ADA ramp, and curb and gutter solicitations on procurement portals.
- The portals. BidNet Direct, Bonfire, DemandStar, PlanetBids, and the city’s own bid page, pulled weekly through Apify.
- The filter. CSI division 32 and 03 scopes, and an estimated value between $50,000 and $2,000,000.
- The contact. The project engineer named on the solicitation.
- The ask. A plan question or a prebid walk, because the award itself runs through the sealed bid.
The signal is a funded budget with a published due date.
5. GC inventory (Google Maps, volume filler)
Commercial general contractors with 20 or more reviews in radius, pulled from Google Maps through SerpAPI and checked against each firm’s project page.
- Why it still earns a send. A GC of that size bids 10 to 30 projects a year and has a concrete scope on most of them, so the pitch is a standing place on the bid list.
- When it carries the volume. In December and January, when permit counts fall, this source makes up most of the send.
Lowest intent.
ICP definition
Filter logic the workflow applies:
| Filter | Rule |
|---|---|
| Project type | New commercial shells, grading, foundation-only, site work, tilt-up, paving, sidewalks, curb and gutter, multifamily podiums |
| Occupancy | Office, retail, industrial, warehouse, medical, private education, hospitality, multifamily R-2, public works |
| Size | $250,000+ permit valuation, or a 1+ acre site, or 20+ lots, or a bid estimate of $50,000 to $2,000,000, or a GC with 20+ reviews |
| Radius | Within 80 km of base |
| Contact | Project manager, estimator, preconstruction manager, construction manager, developer principal, civil engineer, project engineer, public works buyer |
| Trigger window | Permits issued in the last 45 days; site plans and plats approved in the last 90 days; bids due 5 or more days out |
| Excluded | Single-family and duplex permits (R-3), pool and fence permits, federal projects (SAM.gov process), current clients (CRM match), competitors, GCs on the do-not-contact list |
Outreach sequence
The four steps
| Step | Day | Channel | Goal |
|---|---|---|---|
| 1 | 0 | Open with the grading permit, plat, or bid record and ask for a site visit before the concrete sub is chosen | |
| 2 | 3 | Short bump with the grading permit date, approval date, or bid date | |
| 3 | 7 | Value angle on one specific pain (pour schedule slips, flatness tolerances, pump and crane coordination) | |
| 4 | 14 | Breakup, door open, 5-day takeoff offer |
Example step 1 (permit trigger)
Subject: foundation at [address]
Hi [Name], permit [permit number] at [address] lists [GC name] as contractor of record for grading, issued [permit date]. Footings on a [valuation] job usually pour 4 to 10 weeks after grading starts, and the sub list closes before then.
We pour foundations, slabs, and site concrete for [N] GCs in [city]. We can walk the site, review the foundation plan, and return a phased price in 5 business days.
Worth a 20-minute site visit in [week]?
Expected reply rates
| Row type | Expected reply rate |
|---|---|
| Trigger sources (permits, site plans, bid invitations, municipal bids) | 3 to 6% |
| GC inventory | 1 to 3% |
Both ranges are estimates. They assume a warmed domain and a first line that names the permit or bid.
A sub who only pours slabs on grade, an 80 km radius with two counties in it, and a January send will each push the number up or down.
Stack and running costs
| Tool | Purpose | Monthly |
|---|---|---|
| n8n Cloud | Orchestration | $24 |
| Apify | Permit portal, agenda, and procurement portal scraping | $30 |
| SerpAPI | GC inventory (Google Maps) | $25 |
| Hunter | Decision-maker email finding | $34 |
| BetterContact | Waterfall enrichment + verification | $15 |
| Instantly | Sending, warmup, reply webhook | $37 |
| Claude API | Agenda parsing, first lines, and reply classification | $8 |
| SourceToDocs (Starter) | Branded quote PDF generation | $19 |
| Sending domain | Deliverability | $1 |
| Supabase (free tier) | Prospect database | $0 |
| Total | ~$195 |
Socrata open data APIs are free. BuildingConnected and PlanHub basic subcontractor accounts are free and are used for invitations only. BidNet Direct, DemandStar, and Bonfire list solicitations free of charge. Costs are current public starter tiers.




