Skip to main content
Tibin Jacob.
Signals & EnrichmentProspectingEst. 1 day to build

Clay Waterfall Enrichment: 30% Match Rates to 90%+

Stack:ClayApolloHunter / DropcontactZeroBounceHubSpot
Last updated:

The short answer

A Clay build that chains three providers plus validation so a prospect list stops coming back with half its emails missing or bouncing.

Why this workflow exists

Every ops team has loaded a fresh list and watched half of it bounce. The instinct is to blame the provider, but the real problem is trusting any single provider at all. A waterfall costs a few cents more per contact and turns a list that's 60% dead on arrival into one that's 90%+ deliverable, without anyone doing the fallback lookups by hand.

What it gives you

  • 90%+ verified match rate instead of the 30–40% a single provider gives you
  • Nothing reaches outbound without passing a real validation check, not just a provider's own label
  • Credits are spent efficiently — fallback providers only fire when the cheaper one misses
  • One clean email column feeds the CRM, regardless of which provider actually found it

How it works, step by step

7 stages, from the trigger to the outcome.

  1. Step 1: Ingest the row

    Clay

    A new row lands via CSV import, HubSpot list sync, or a webhook, carrying at minimum first name, last name and company domain.

  2. Step 2: Tier-one lookup

    Apollo

    The cheapest, broadest-coverage provider runs on every row first, so credits are spent efficiently before any fallback fires.

  3. Step 3: Conditional fallback

    Hunter / Dropcontact

    Runs only if the tier-one column is blank, using Clay's conditional-run setting so rows that already resolved never trigger a second lookup.

  4. Step 4: Second fallback

    Findymail

    A third provider runs only if both prior columns are blank, catching the harder contacts the first two missed.

  5. Step 5: Validate every result

    ZeroBounce

    Every non-blank result routes through validation. Catch-all and risky results are flagged, never silently accepted as valid.

  6. Step 6: Consolidate to one field

    Clay formula

    A formula column picks whichever provider actually succeeded into one clean email field, so nothing downstream needs to check three columns.

  7. Step 7: Write back to CRM

    HubSpot

    Only rows with a validated, non-risky email push to HubSpot or a sequence — unverified rows never reach outbound.

Deep dive

For founders: what this changes

Relying on one contact-data provider averages a 30–40% match rate, meaning 60%+ of a prospect list is unreachable before a campaign even starts (source). A waterfall chaining multiple providers turns that into 90%+ verified coverage — an independent 30-day, 2,000-contact test found it hit 78% versus 42% from one provider alone (source).

The part vendors won’t tell you

Even waterfalls chaining 75+ sources typically still produce 8–15% invalid addresses without a dedicated verification pass (source). One independent re-check of a major provider’s own “Verified” exports found only 19% actually held up, with 60% landing as catch-all (source). A “verified” label from any single source is a starting point, not a guarantee — which is exactly why validation is its own step in this build, not something folded into the lookup.

What this actually costs

Item Typical range
Clay subscription $167–$495/month depending on tier
Per-contact lookup credits (3 providers) ~$0.02–$0.04
Per-contact validation credit ~$0.01–$0.02
All-in per verified email ~$0.03–$0.06

Compare that to the cost of a rep chasing bounced emails: sales reps already spend roughly 70% of their time on non-selling tasks, including chasing bad contact data (source).

The one-time decision that matters most

How many fallback providers to chain. Two to three is the sweet spot — each additional provider after that adds cost and Clay-table complexity for a shrinking coverage gain. Start with two, add a third only if your match rate is still under ~85% after tuning the first two.

For engineers: how it is built

The table structure

Think of the Clay table as one row per contact and one column per pipeline stage: lookup → fallback → fallback → validate → consolidate → write-back. Conditional-run logic is what makes it a waterfall instead of “run everything on everyone”:

// Clay formula column: Hunter fallback, conditional on Apollo being blank
IF(
  ISBLANK({{Apollo Email}}),
  RUN_ENRICHMENT("hunter", {{Company Domain}}, {{First Name}}, {{Last Name}}),
  BLANK()
)
// Clay formula column: second fallback, conditional on both prior columns being blank
IF(
  AND(ISBLANK({{Apollo Email}}), ISBLANK({{Hunter Email}})),
  RUN_ENRICHMENT("findymail", {{Company Domain}}, {{First Name}}, {{Last Name}}),
  BLANK()
)
// Clay formula column: consolidate whichever provider actually succeeded
COALESCE({{Apollo Email}}, {{Hunter Email}}, {{Findymail Email}})

Validation is a branch, not a boolean

A validated email is not the same as a “found” email, and the validator response needs to be branched on explicitly:

{
  "email": "jsmith@acme.com",
  "status": "catch-all",
  "sub_status": "accept_all",
  "free_email": false
}

A status: "catch-all" result means the domain accepts mail to any address — valid or not. Code that only checks status !== "invalid" lets these through as confirmed-valid, which they are not:

// Route validation results into three buckets, not two
function classify(result) {
  if (result.status === 'valid') return 'send';
  if (result.status === 'catch-all') return 'low-confidence'; // separate track, not a hard send
  return 'drop';
}

Write-back, gated on validation

POST /crm/v3/objects/contacts
{
  "properties": {
    "email": "jsmith@acme.com",
    "enrichment_source": "apollo",
    "validation_status": "valid",
    "waterfall_stage": "tier_1"
  }
}

Storing enrichment_source and waterfall_stage on the record isn’t just for debugging — it lets you go back after a few hundred contacts and see which provider is actually earning its place in the waterfall for your specific market.

Where it breaks, and how the build handles it

Failure What you would see How the build handles it
Credit exhaustion Runaway Clay bill Cap the waterfall at 2–3 fallbacks; conditional-run logic skips already-resolved rows
Catch-all domains treated as valid Bounces despite “validated” status Branch validation into valid / catch-all / invalid, not a single pass/fail
Conflicting emails across providers Wrong contact gets messaged Consolidation formula prefers the provider with higher verified accuracy, not “first wins”
Stale enrichment Match rate quietly drops over months Re-run the waterfall on a schedule; email data goes stale at roughly 3.6% a month (source)
Provider outage Whole waterfall stalls Fallback columns naturally cover a single provider going down; alert if all three return blank

Tuning it after launch

  • Order matters. Put your cheapest, highest-coverage provider first — usually Apollo for US/EU mid-market. Reorder if your ICP is outside its strongest coverage regions.
  • Watch the catch-all rate. If it’s climbing, your target list may be skewing toward smaller companies with less mature email infrastructure.
  • Re-run quarterly. Contact data decays continuously; a waterfall run once and never repeated degrades like any other enrichment.

Stack and running cost

Clay (orchestration), Apollo (tier-1), Hunter or Dropcontact (fallback), ZeroBounce or NeverBounce (validation), HubSpot (write-back). Check current provider pricing before committing to a monthly volume, since credit costs change.

Frequently asked questions

How many fallback providers should the waterfall chain?

Two to three. Beyond that, marginal coverage gains rarely justify the added complexity and credit cost.

Is Clay enrichment verified out of the box?

No. Unverified waterfall output typically runs 8–15% invalid even from strong sources — the validation column is not optional.

What does this cost per contact?

Roughly $0.03–$0.06 per verified, deliverable email once provider and verification credits are combined, on top of Clay's own subscription.

What happens when two providers return different emails for the same person?

The consolidation formula should prefer whichever provider has higher independently-verified accuracy for that field, not just whichever ran first.

Does this help with phone numbers too?

Yes, using the same waterfall pattern, though phone data is generally weaker — expect roughly 65% accuracy versus 80%+ for email.