Skip to main content
All systems

Enrichment Waterfall

Status: production. Every contact on every campaign goes through it.

Problem

Email finders are wildly uneven. Any single vendor misses 30 to 50 percent of contacts, and the paid ones happily bill you for the same miss twice. Buying one "best" provider is the expensive way to get mediocre coverage.

How it runs

Eight providers, called one at a time in a fixed order, cheapest first. The free and flat-rate rungs go before anything metered, and the metered tail is ordered by cost per found email. The moment one rung returns a verified hit, the waterfall stops. No rung ever fires on a lead the previous rung already solved.

Two details that took tuning:

  • The order is keyed to LinkedIn URLs. The strongest free rung needs one, so the discovery layer resolves LinkedIn profiles before enrichment starts, not after.
  • The last rung is a scrape fallback. When every finder misses, a scraper reads the company website looking for a published address. A guardrail decides what that address is allowed to be: it only becomes the decision-maker's email if the name on the page matches the person I'm targeting. Generic mailboxes like info@ get captured into a separate column and never impersonate a person. On a 150-row truth set that guardrail let through zero wrong-person injections while still recovering a usable mailbox on 43 percent of sites.

Verification is its own three-stage waterfall behind the finders, so a "found" email still has to survive an independent check before a campaign can see it. Catch-all domains get flagged rather than trusted.

Stack

Node, one module per provider, batch mode for volume and per-lead mode for dribs and drabs. Providers rotate as pricing and hit rates shift; the architecture doesn't care which vendor sits in which slot.

Worth stealing

The stop-on-hit ordering, and the rule behind it: measure cost per found email, not sticker price. A vendor that charges half as much but only charges on valid hits will quietly become your best rung.

Agent-readable version: /systems/enrichment-waterfall.md