Lead Generation6 min read19 February 2026

B2B Lead Enrichment: How to Turn a Raw Company List Into Warm Outreach in 2 Hours

The exact Clay + Zapier workflow I use to go from a list of company names to verified decision-maker emails, personalised first lines, and CRM-ready records — at $0.03 per lead.

H

Haroon Mohamed

AI Automation & Lead Generation

The problem with raw lists

Every B2B outreach campaign starts the same way: you have a list. Company names, maybe a domain, maybe a LinkedIn URL. You know who you want to reach — but not the actual person, their email, or what to say to them.

The old approach: VA manually researches each company, finds the right contact on LinkedIn, guesses the email format, writes a generic opener. $5–$8 per record. Takes days.

The new approach: a 2-hour workflow build that processes 1,000 leads overnight at $0.03 each.

Here's the exact stack and setup.


The enrichment stack

  • Clay — The core enrichment tool. It's essentially a spreadsheet that can call 50+ data APIs simultaneously
  • Zapier — Automation glue between Clay output and your CRM
  • Hunter.io — Email finding and verification
  • Apollo.io — Person-level contact discovery (job title, email, LinkedIn)
  • Clearbit / People Data Labs — Company firmographic data (size, revenue, tech stack, industry)
  • OpenAI via Clay — Personalised first-line generation
  • GoHighLevel or HubSpot — Final CRM destination

Total monthly cost for this stack at 3,000 leads/month: approximately $180. Per-lead cost: $0.06. (Lower if you're on annual plans.)


Step 1: Start with a clean input list

What you need: A spreadsheet with at minimum:

  • Company name
  • Company website or LinkedIn URL

Where to get the input list:

  • LinkedIn Sales Navigator export (use a scraper like Phantombuster for the export)
  • Apollo.io company search filtered by industry + employee count + location
  • D&B Hoovers, ZoomInfo, or any data provider for your vertical
  • Your own database of past enquiries

What to avoid: Lists older than 6 months without refreshing, lists without any company identifier (company name alone is ambiguous — "Atlas Group" returns 50 results)


Step 2: Clay table setup

Create a new Clay table. Import your input CSV.

Column 1: Company domain normalisation Use Clay's built-in "Find Company" enrichment. Input: company name + website. Output: normalised domain, company LinkedIn URL, company description, headcount, industry, founded year.

This step alone resolves the "which Atlas Group?" problem — Clay matches against a verified company database.

Column 2: Technology stack (optional but powerful) Use Clay's BuiltWith or Wappalyzer integration. Input: company domain. Output: what tech they're using (Salesforce? Shopify? HubSpot?).

Why this matters for outreach: "I noticed you're using [X] — we integrate directly with that to [outcome]" dramatically outperforms generic openers.

Column 3: Job title targeting Use Clay's Apollo enrichment. Input: company LinkedIn URL + target job titles (e.g., "Head of Operations", "VP Revenue", "Founder").

Output for each company: the specific person's name, title, LinkedIn URL, and work email.

Column 4: Email verification Route the discovered emails through Hunter.io's verify endpoint. Only keep records with a "valid" or "risky" (but not "invalid" or "unknown") verification result.

This step prevents bounces. Target: ≤ 3% bounce rate. Lists without verification routinely run 15–25% bounce rates, which damages your sending domain.

Column 5: Personalised first line (AI-generated) This is the highest-leverage step.

Use Clay's OpenAI integration. The prompt:

You are a B2B sales copywriter. Write a single sentence (max 20 words) that 
opens a cold email to {first_name}, {title} at {company_name}. 

Company context: {company_description}
Technology they use: {tech_stack}
Industry: {industry}

Requirements:
- Reference something specific about their company or role
- Don't use "I noticed" or "I saw" — everyone uses those
- Don't use exclamation marks
- Sound like it was written by a human, not a tool
- Focus on something that would be relevant to [your value prop]

Output: a unique first sentence for every lead, generated at scale.

Example outputs:

  • "Running a 47-person logistics operation means every manual data entry error costs you twice."
  • "Most solar distributors using Salesforce tell me their lead routing is the one thing they'd fix first."
  • "What you've built with [company name] in the [city] market in 3 years is genuinely unusual in [industry]."

These aren't perfect every time — but they're good enough to feel personal, and they're generated at $0.001 each.


Step 3: Quality filters

Before exporting, filter out:

  • Records with no verified email (email_status = "invalid" or "unknown")
  • Records where job title is missing (the person wasn't found at that company)
  • Companies with fewer than 5 employees (unless that's your ICP)
  • Companies with more than 500 employees (unless you're targeting enterprise)
  • Competitors (build a list of competitor domains and filter them out)

After filtering, you typically retain 45–65% of the input list as high-quality, enriched records.


Step 4: Zapier → CRM push

Set up a Zap:

  1. Trigger: New row in Clay table (or Google Sheet export from Clay)
  2. Filter: only rows where email_verified = true
  3. Action: Create contact in GoHighLevel / HubSpot / your CRM
  4. Map fields:
    • First name → First name
    • Last name → Last name
    • Email → Email
    • Company → Company
    • Job title → Job title
    • Personalised first line → Custom field "AI_opener"
    • Company tech stack → Custom field "tech_stack"
    • LinkedIn URL → Custom field "linkedin_url"

Tag every imported contact with the source ("clay_enrichment_[date]") so you can track campaign performance by cohort.


Step 5: Sequencer setup

With enriched contacts in your CRM, the outreach sequence can be highly specific:

Email 1 subject: [Company name] + [relevant hook] Email 1 body: {AI_opener} + 2 sentences on what you do + one specific outcome + soft CTA

Email 2 (day 3): Different angle — focus on a case study relevant to their industry

Email 3 (day 7): Break-up email — "Last one from me..."

With verified emails + personalised openers, expect 40–60% open rate and 8–15% reply rate on cold outreach. Industry average for non-enriched cold email: 22% open, 2–4% reply.


The cost breakdown

| Tool | Monthly cost (3,000 leads) | Per lead | |------|---------------------------|----------| | Clay (Starter plan) | $149 | $0.050 | | Apollo.io (contact lookup) | ~$49 | $0.016 | | Hunter.io (verification) | $49 | $0.016 | | OpenAI (first-line gen) | ~$6 | $0.002 | | Zapier | $29 | $0.010 | | Total | ~$282 | ~$0.094 |

At $0.09 per fully enriched, verified, personalised lead, and a 10% reply rate: you're paying $0.94 per email reply. With a 20% conversation-to-meeting rate: $4.70 per booked meeting. Compare that to paid acquisition CPLs in any B2B vertical.


The 2-hour build breakdown

  • 30 min: Clay table setup + enrichment column configuration
  • 20 min: Apollo + Hunter API key setup and testing on 10 sample records
  • 20 min: OpenAI prompt refinement (test on 20 records, iterate until outputs are good)
  • 20 min: Zapier workflow setup and testing
  • 30 min: Quality filter + review of 50 output records before going live

First time: 2–3 hours. Once you've done it once, the template replicates in under 30 minutes.

Want the Clay template for this exact setup? Get in touch and I'll share it.

Need This Built?

Ready to implement this for your business?

Everything in this article reflects real systems I've built and operated. Let's talk about yours.

H

Haroon Mohamed

Full-stack automation, AI, and lead generation specialist. 2+ years running 13+ concurrent client campaigns using GoHighLevel, multiple AI voice providers, Zapier, APIs, and custom data pipelines. Founder of HMX Zone.

ShareShare on X →