The number that matters is the small one
A lead-generation agent that produces 5,000 rows is trivial to build and nearly worthless. The rows are unqualified, half are duplicates, and the contact data is missing or stale. Handing that to a salesperson is handing them a week of manual triage.
Our pipeline holds 5,231 rows in the master file. The number we actually act on is 145 — the subset that reached contact-verified. That is roughly a97% reduction, and it is the entire product. The scraping is commodity; the filtering is the work.
The schema: structured from the first write
Every row lands in a fixed schema rather than as free text, which is what makes downstream filtering and deduplication possible at all:
id · name · category · website · phone · address country · rating · review_count · place_id · plus_code
Two of those fields do more work than the rest. place_id is a stable external identifier, which is what lets the agent deduplicate across overlapping collection runs instead of fuzzy-matching business names. And rating with review_count give a cheap, objective qualification signal before any human or model looks at the row — a business with substantial review volume is a different prospect from one with none.
Market segmentation
| Segment | Rows |
|---|---|
| United States | 2,399 |
| Expansion set | 1,986 |
| United Kingdom | 1,437 |
| Australia | 1,270 |
| Master (deduplicated) | 5,231 |
| Contact-verified | 145 |
The segment files total 7,092 rows while the master holds 5,231 — so the master is not a concatenation. Roughly 1,861 rows were removed as overlap between segments. That is theplace_id field earning its place in the schema.
The three country segments map to the markets we actually serve, which matters more than it sounds: a pipeline segmented by market can be worked on local business hours with locally appropriate messaging, instead of being one undifferentiated list.
How it runs
Collection is scheduled, not manual. A discovery job runs daily at 05:00, dispatched by the fleet's orchestrator into the lead agent, so the pipeline grows without anyone starting it. A separate weekly job on Monday mornings handles a different sourcing track.
The agent's own mandate is written in terms of the end state rather than the activity:"the one who turns the open internet into a clean, ranked, defensible pipeline of people worth talking to." The operative word is defensible — every row should survive the question "why is this person on the list?"
Why the funnel collapses by 97%
Working backwards through the drop-off, because this is the part most lead-gen tooling hides:
- Deduplication removes overlap between collection runs and market segments — around 1,861 rows.
- Qualification signals filter on objective attributes already in the schema: category fit, rating, and review volume.
- Contact verification is the steepest cut. A row without a reachable, verified contact path is not a lead, it is a business name. Only 145 cleared it.
A vendor selling you 5,231 leads and a system that hands you 145 are describing the same raw collection. The difference is whether the filtering happened before or after it reached a human.
What this case study does not prove
- It does not prove conversion. We can show the pipeline and the filtering. We cannot show meetings booked or revenue closed from this data, because that measurement does not live on this host.
- It does not prove outreach performance. This case study covers building and qualifying the pipeline, not what happens after contact.
- It does not prove cost per lead. No cost ledger exists on this host, so any figure would be invented.
- It is our own pipeline. Client pipelines are under NDA and are not published, and no individual row from any pipeline appears on this site.
What we would carry into your build
Three decisions transfer to any lead engine. Write into a fixed schema from the first collection, because you cannot filter free text. Carry a stable external identifier so deduplication is exact rather than fuzzy. And define "lead" as contact-verified rather than collected, so the number you report is the number someone can act on.
Judge a lead agent by the size of its output only after you know what it discarded.