Skip to content
ardeshir.ai
Systems/July 26, 2026/3 min read

How I find owner emails without getting blocked

The four-source waterfall behind my lead pipeline, and the scraping lesson that shaped its architecture.

01

The problem with bought lists

Agency prospecting usually means buying a list or paying for a data platform. I priced out the platforms, decided the margin on my own time was better, and built the pipeline myself.

The requirement was specific: find San Diego small businesses with weak online presence, figure out who owns them, and get a personalized email drafted — without me touching anything. A bought list answers none of that. It is stale the day it ships, it has no idea whether the business needs help, and everyone else bought the same list last month.

So the system starts from the source of truth instead: the businesses themselves, found through the Google Places API, scored HOT, WARM, or COLD by how weak their web presence actually is. Only then does the email question come up.

02

One rule: cheap sources first, paid sources last

Owner emails come from a four-source waterfall, in a strict order: scrape the business's own website, then Hunter.io, then an AI web search, then verified pattern guessing. Each source only runs if the one before it came back empty.

The order is the whole design. A scrape costs nothing. Hunter costs a credit. AI search costs a little more than that. So the system spends money only on leads the free steps could not resolve, and it never pays for the same data twice: deduplication happens by Google placeId before any paid API call, so re-running the pipeline costs nothing and never overwrites work I have edited by hand.

That one constraint — dedupe before you spend — is the difference between a pipeline that gets cheaper every week and a data bill that grows every week.

Dedupe before you spend. Everything else in the pipeline is a consequence of that rule.

Fig. 01 — the waterfall, cheap to expensive

IF EMPTY1Website scrapeFREEFOUND ✓IF EMPTY2Hunter.ioONE CREDITFOUND ✓IF EMPTY3AI web searchA FEW CENTSFOUND ✓4Pattern guess + verifyA FEW CENTSFOUND ✓VERIFIED OWNER EMAIL → QUEUE
03

The lesson that shaped the architecture

I did not start with this design. I started where everyone starts: scraping search engines for emails. That got bot-blocked fast. Search engines are very good at noticing a script behaving like a script, and a pipeline that only works when nobody is paying attention is not infrastructure — it is a gamble.

APIs and AI search cost a little, but they do not break at 2am. That is the honest trade: a few cents per lead in exchange for a system I never have to babysit. The pipeline now runs on cron every weekday morning with no manual steps, and prospecting went from a chore I avoided to infrastructure I trust.

04

Deliverability is the real moat

Finding an address is the easy half. The half that decides whether any of this matters is whether mail to that address lands in an inbox. Every candidate the waterfall produces goes through deliverability checks before it is allowed anywhere near the outreach queue: pattern guesses in particular are treated as unverified until they pass.

A bad address is not a neutral miss. Bounces pile up against the sender's reputation, and once mailbox providers decide you are a sloppy sender, even your good emails start landing in spam. Protecting the sender domain is worth more than any single lead, so the system would rather resolve nothing than guess recklessly.

The system would rather resolve nothing than guess recklessly. Sender reputation compounds in both directions.
05

Step through a lead yourself

This is the waterfall as an interactive demo: a sample business goes in, and you decide when to escalate from the free steps to the paid ones. Watch what each source costs and what it buys.

Try it — one lead, four sources

Sample business · illustrative, not a client

Input

A family-run taco shop in Chula Vista

Weak web presence · scored HOT by the pipeline · owner unknown

  1. Website scrape

    Free

  2. Hunter.io

    One credit

  3. AI web search

    A few cents

  4. Pattern guess + verify

    A few cents

06

What I would tell someone building this

Own the whole pipeline in code, and never pay for the same data twice. Start free, pay only when free fails, verify everything before it touches your sender domain, and let the boring parts run on a schedule instead of in your head.

Because the dashboard owns the schema and everything else speaks one API, each piece is replaceable: the Python box, the automation workflows, and the frontend never need to know about each other. The best marketing stack is the one you can read the source of.

Written by

Ardeshir KohnouriPerformance marketer and builder, San Diego, CA.