How it works

Public record in.
Ranked leads out.

Four stages, run every day. Nothing here is scraped, purchased or guessed, every record starts life as a filing with a city.

01

Read the record the day it appears

City open-data portals publish building permits daily, and council agenda systems publish land-use cases as soon as they are scheduled. Both are official government APIs, not scraped pages. Each metro has its own schema, so every field is mapped onto one canonical record before anything downstream sees it.

Freshness is measured rather than assumed. A dataset with nothing newer than 21 days is treated as abandoned, of seven candidate city datasets evaluated for this product, two had silently stopped updating years earlier while still serving hundreds of thousands of rows.

02

Resolve every record to a property

One house can appear as a hearing, then a decision, then a permit. Without resolution that is three leads for one opportunity, which is the fastest way to lose a salesperson's trust in the count. Records are matched to a property by assessor parcel number where the county publishes one, and by a normalised address otherwise.

Over-merging is the failure that matters, so street suffixes are kept rather than stripped, 100 Main St never merges with 100 Main Ave, and unit numbers are part of the identity. Every match carries the basis it was made on and a confidence level, visible in the product.

03

Filter hard, then score what survives

A deterministic rules pass reads the type, description, job value, recency and the property's own history. Records matching nothing for a segment are dropped before any model sees them. What remains gets a provisional 0-100.

Only records above a threshold are escalated to a language model, whose job is to confirm or adjust the number and write the reasoning a salesperson will read. Most records never reach it, which is what keeps cost proportional to value rather than to volume.

04

Deliver it where the work happens

A ranked feed, a daily digest, CSV export, and signed webhooks into whatever CRM the team already uses. Each lead arrives with the reason it scored, the recommended next step, and, where available, the owner's name and a phone number that has been screened against do-not-call lists.

Numbers flagged on a DNC or litigator list are struck through in the product and excluded from exports and webhooks entirely, rather than being passed along with a warning.

Measured, not asserted

The numbers behind the claims

23,758

Building permits filed in San Francisco in the last twelve months.

Source: DataSF, Building Permits dataset i98e-djp9

3,445 roofing vs 566 solar

Roofing permits filed in San Francisco per year, against solar permits over the same period, the precursor pool is roughly six times the size of the contested one.

Source: DataSF, Building Permits dataset i98e-djp9

53 addressable cases

Austin land-use matters carrying a street address in a recent 400-record sample, of which 25 were for hearings that had not yet taken place.

Source: Granicus Legistar, City of Austin

2 of 7 abandoned

Of seven candidate city permit datasets evaluated, two had silently stopped updating, one in 2019, one in 2020, while still serving hundreds of thousands of rows.

Source: EarlyIntent dataset freshness audit

weeks before the decision, months before a permit

A land-use case scheduled for a public hearing precedes the decision, which itself precedes any building permit.

Source: Granicus Legistar publishes future-dated hearing agendas

Questions

Straight answers

Where does the data come from?

Official government open-data APIs. City building-permit datasets published on Socrata portals, and council land-use agendas published through Granicus Legistar. Nothing is scraped and no contact lists are purchased.

How is this earlier than other permit data?

Two ways. Permits are read from the city feed daily rather than from an aggregator refreshing twice a month. More importantly, EarlyIntent also reads scheduled land-use hearings, cases set for a public hearing that has not yet happened, which precede the decision by weeks and any building permit by months.

What makes a record a lead rather than noise?

Segment rules. A roof replacement with no solar on record is a strong solar lead because the structure is sound and the owner is already spending on the envelope. A service-panel upgrade removes the most common blocker to both solar and a heat pump. Records matching no rule for a segment are never scored or shown.

Do I get the owner's contact details?

Where a data provider has them. Contact enrichment is a separate paid lookup per property, cached so a property is bought once and reused. Phone numbers are screened against do-not-call and litigator lists, and flagged numbers are excluded from exports and webhooks.

Is using permit data for sales outreach legal?

The records themselves are public. Contacting the people named in them is governed separately, TCPA covers calls and texts, CAN-SPAM covers email, state do-not-call lists apply, and a few jurisdictions restrict marketing use of permit data specifically. EarlyIntent screens numbers and flags them, which is a guardrail rather than legal advice.

See today’s leadsCHECK COVERAGE IN YOUR METRO →