The Intent Scraping Playbook: How I Hit a 7.6% Reply Rate

The exact evergreen stack — Enrichkit API, Claude Code, Pipekit, Reachkit — that scraped 518 qualified intent leads, landed 39 replies (22 positive), and kept feeding new leads every week on autopilot. Full playbook with prompts.

Playbook Cold email Ai Lead generation
Quinten Kamphuis avatar
Quinten Kamphuis Founder & CEO
15 min read

How I hit a 7.6% reply rate by emailing people who reacted to my competitor’s LinkedIn posts. On autopilot. Every week. Forever.

A stack that costs $200/month and feeds itself.

The campaign numbers

This is a single real campaign. Named “Evergreen Lead Intent Scraper” in my Reachkit dashboard. Running since December.

Metric Count
Leads scraped 518
Replies 39
Reply rate 7.6%
Positive replies 22
Positive rate 56.4% of replies

For context, my cold outbound to generic B2B lists runs at ~0.8% reply rate with 16.6% positive.

Intent scraping: 10x the reply rate and 3.4x the positive rate.

Same messaging. Same sender. Same infrastructure.

Only the list changed.

Who this is for

You’ve been running cold email. Your reply rates are in the 0.5-2% range. You’re buying lists from Apollo or Clay and wondering why the data is so stale and the results so flat.

Stop buying lists.

Your competitors are already generating the list for you, every time they post.

This playbook shows you the exact Claude Code + Enrichkit + Pipekit + Reachkit stack I use to turn every reaction on your competitor’s posts into a warm lead in your outbound campaign. Evergreen. Weekly. On autopilot.

The core insight

Every time your competitor posts on LinkedIn, they publish a list of people who have the problem you solve.

That list is called “reactions.”

When someone hits like, celebrate, insightful, or funny on a competitor’s post about a pain point in your space, they are literally raising their hand saying “I have this problem and I’m thinking about it right now.”

That signal is stronger than anything in any lead database.

  • Apollo can tell you someone’s title.
  • Clay can tell you their company’s tech stack.
  • ZoomInfo can tell you their phone number.
  • None of them can tell you they were thinking about your niche 6 days ago.

Enrichkit can. And Enrichkit gives you that data for $29/month.

This is the missing layer of modern outbound. Everyone’s buying intent data from 6sense for $30K/year. You can scrape the same signal off LinkedIn for the price of a gym membership.

The stack

Four layers. Each does one job. Runs on a weekly cron.

Layer 1 — Scraping       Claude Code + Enrichkit API
Layer 2 — Pipeline       Pipekit (dedupe, enrich, verify)
Layer 3 — Sending        Reachkit (evergreen campaign)
Layer 4 — Replies        You, handling hot ones personally

Claude Code: builds and runs the scraper on a cron. One-time setup, then it runs itself.

Enrichkit API: pulls posts and reactions from LinkedIn profiles. Live data, not cached. $29/month for the Starter plan.

Pipekit: the glue. Dedupes leads, enriches with company domain, AI-qualifies against your ICP, runs the email finder waterfall, verifies emails, pushes clean leads to Reachkit.

Reachkit: receives the verified leads via webhook, runs them through an evergreen sequence, rotates across your warmed-up inboxes, classifies every reply in the Unibox.

Monthly cost:

  • Enrichkit Starter: $29
  • Pipekit: free
  • Claude Code: $20 for the pro plan (enough to run the scraper)
  • Total: ~$49/month

For a channel that’s doing 7.6% reply rates.

The architecture

Before the code, understand the loop:

Every Monday at 8am UTC:
  ↓
1. For each seed profile in my list (5-10 competitors/influencers)
  ↓
2. Pull all posts from the last 7 days via Enrichkit /v1/posts
  ↓
3. For each post, pull every reactor via Enrichkit /v1/reactions
  ↓
4. Collect: LinkedIn URL, first name, last name, headline, post they reacted to
  ↓
5. Send to Pipekit webhook
  ↓
6. Pipekit dedupes by LinkedIn URL (critical)
  ↓
7. Scrapes company domain from their profile
  ↓
8. AI qualifies the lead against your ICP (drops the noise)
  ↓
9. Runs email finder waterfall (Apollo → Prospeo → Hunter)
  ↓
10. Verifies email via MillionVerifier
  ↓
11. Pushes verified lead to Reachkit via webhook → evergreen campaign

The whole thing runs unattended. You build it once in a weekend. It feeds your campaign forever.

Phase 1 — Build your seed list

The seed list is everything. Get this wrong, the whole system produces noise.

Your seed list is 5-10 LinkedIn profiles whose audience is your ICP. Not profiles of your ICP. Profiles that your ICP follows.

Types to include

  • Founders and execs at the tools your ICP is considering instead of you. Their audience is literally shopping for your category.
  • Influencers who post about your space frequently. Their audience is actively learning about your category, which means they’re early in the buying journey.
  • Founders of tools that sit next to your category in the buying process. Their audience is already building the kind of stack that includes you.

What not to include

  • Generic business influencers (too broad, bad signal)
  • Profiles that haven’t posted in 30+ days (no data)
  • Profiles with less than 1,000 followers (not enough reaction volume)
  • Your own profile (obvious but I’ve seen it happen)

Build the list in a plain text file. One LinkedIn URL per line. That’s Phase 1.

Phase 2 — Build the scraper (Claude Code + Enrichkit API)

You don’t write this scraper. Claude Code writes it for you.

Install Claude Code:

npm install -g @anthropic-ai/claude-code

Run claude in your terminal. Drop this prompt:

Build me a Python script that does the following:

1. Reads a list of LinkedIn profile URLs from seed_list.txt
   (one URL per line)

2. For each profile, calls the Enrichkit API endpoint
   POST https://enrichkit.dev/api/v1/posts
   with body: {"url": <profile_url>}
   Auth header: X-API-Key: <value from env var ENRICHKIT_API_KEY>

3. For each post in the response where created_at is within
   the last 7 days:
     - Call POST https://enrichkit.dev/api/v1/reactions
       with body: {"post_url": <post.post_url>}
     - Paginate through all reactions (use has_more + page)

4. For each reaction, collect:
   - profile_url (the reactor's LinkedIn URL)
   - name (the reactor's full name)
   - headline

5. Write all collected reactions to reactions_<date>.csv

6. POST every reaction as a JSON payload to a Pipekit
   webhook URL read from env var PIPEKIT_WEBHOOK_URL

Include a progress bar and summary stats at the end.
Include error handling for 429 rate limit responses.

Claude Code writes the script, runs it against your seed list as a test, and you have working code in about 5 minutes.

For a seed list of 25 profiles posting 3 times a week, this will pull roughly 1,500-3,000 reactions per week. After dedupe and verification, you’ll get 200-500 new verified leads per week. That’s 10,000-25,000 fresh intent-scored leads per year.

The one Enrichkit detail that matters

When you call /v1/posts, the response includes a has_more boolean and a pagination_token. For active profiles you’ll need to paginate to get everything from the last 7 days. Tell Claude Code to paginate until has_more is false or until posts older than 7 days start appearing — then stop.

For /v1/reactions, responses also paginate with page numbers. Loop until has_more is false.

If you skip this, you’ll miss most of the data.

Phase 3 — The Pipekit pipeline (this is where it all falls apart if you skip it)

Pipekit receives the reactor data from your Claude Code scraper and runs it through six steps. Each step has to work or the campaign dies.

Step 1 — Dedupe by LinkedIn URL

This is the single most important step in the entire playbook.

Your competitors post every week. The same people react to multiple posts. The same people react to posts from multiple competitors. Without dedupe, you will email the same person every week forever. They will block you. Your domains will burn.

In Pipekit, enable deduplication on the profile_url field at the top of the pipeline. Pipekit keeps a persistent record of every LinkedIn URL you’ve ever processed. If the URL has been seen before, the record is dropped immediately. No enrichment happens. No email finding. No sending.

You only email each person once in their entire lifetime, no matter how many times they show intent. The next time they appear in your scrape, they’re ignored.

If you remember one thing from this playbook, remember this.

Step 2 — Company domain enrichment

Pipekit scrapes the reactor’s LinkedIn profile and company page to get the company domain. If you can’t get a company domain, you can’t find an email.

Build a Pipekit workflow that:

  1. Takes a LinkedIn profile URL as input
  2. Calls Enrichkit /v1/profile to get the profile
  3. Extracts current_company_linkedin_url
  4. Calls Enrichkit /v1/company for that URL
  5. Returns the website field as company_domain
  6. If website is null, mark the lead as “no_domain” and skip

Run conditions: if company_domain is missing, drop the lead. Better to email 200 clean leads than 500 broken ones.

Step 3 — AI qualification (the noise filter)

This step is what separates intent scraping that works from intent scraping that burns your domains.

Reactions are noisy. On any given competitor post you’ll pick up:

  • Competitors’ own employees (they like each other’s posts)
  • Journalists and analysts covering the space
  • Students and junior marketers learning the category
  • Sales reps from adjacent tools prospecting you
  • Fans who react to everything in the niche but will never buy
  • People in countries or company sizes outside your ICP

If you run the raw reactor list straight to email finder and sending, maybe 30-50% of the list is noise. You pay to find their emails, you pay to verify them, you pay to send to them, and you get zero replies plus a worse reply rate that drags the campaign.

Add an AI qualification step between domain enrichment and email finder. Pipekit supports calling an LLM (Claude, GPT) inline. Pass the profile + company data in, get back qualified/disqualified out.

Prompt:

You are qualifying cold email leads for my company.

My ICP: [1-2 sentence description of who you sell to.
e.g. "founders and heads of growth at B2B SaaS companies
with 10-100 employees doing outbound email"]

Disqualify if the lead is:
- An employee of a direct competitor
- A student, intern, or junior individual contributor
  below manager level (unless the company is <10 people)
- A journalist, analyst, investor, or consultant
- At a company outside the size/industry fit

Here is the lead:
- Name: {name}
- Headline: {headline}
- Company: {company_name}
- Company description: {company_description}
- Industry: {company_industry}
- Employee count: {company_size}
- Post they reacted to: {post_title}

Return JSON only:
{
  "qualified": true | false,
  "reason": "one short sentence"
}

Be strict. When uncertain, return qualified: false.

Run conditions: if qualified is false, drop the lead. Log the reason field so you can sample 20 drops per week and tune the prompt if it’s being too aggressive or too loose.

Expect 40-60% of leads to be dropped here. That’s the correct outcome. What comes out the other side is a list of real ICP fits who were actively thinking about your pain point a few days ago. That’s the whole point.

Step 4 — Email finder waterfall

Same waterfall from the last playbook. No single provider hits more than 40-60%. Chain them.

  1. Apollo email finder (highest match rate)
  2. Prospeo.io (good fallback)
  3. Hunter.io (last resort)

If all three fail, drop the lead. Move on.

Hit rate after chaining: 75-85%. Because the list is already qualified, you’re not wasting credits on noise.

Step 5 — Email verification

MillionVerifier or NeverBounce. Under 2% bounce rate is the only safe zone.

If the verification result is “invalid” or “risky,” drop the lead.

Step 6 — Push to Reachkit

Final step: push verified leads to Reachkit.

In Reachkit, create an evergreen campaign. Copy an API Key from the settings and add a Reachkit step to the end of your Pipekit pipeline that adds the leads to the campaign.

New leads get appended to the campaign automatically. They enter the sequence at step 1. Reachkit handles the rest — rotation, warmup, sending windows, retries on soft bounces.

Phase 4 — The evergreen sequence in Reachkit

Your campaign runs 5 steps. Don’t go longer. Diminishing returns hit hard after step 5.

Here’s the sequence structure that produced 7.6% reply rate and 56% positive rate:

Step 1 — The pain reference (Day 0)

The first email references the pain they just signaled interest in. Don’t mention the post. Don’t mention LinkedIn. Just speak to the pain.


Subject: quick question about {pain_point}

Noticed most {ICP_descriptor} are running into
{pain_point} right now.

I built {your_product} specifically to fix that.

Want me to send over a 1-page breakdown of how it works?

Three lines. That’s the whole email.

Why it works: the reactor just engaged with a post about this pain 3 days ago. Your email lands while the pain is still top of mind. They don’t know you scraped them. It feels like uncanny timing.

Steps 2-5 — The follow-up sequence

4 follow-ups over 12 days. Each one takes a different angle on the same pain. No “just bumping this.” No “did you see my last email.”

Step 2 (Day 3): A specific tactical tip they can use without hiring you. Shows competence. Step 3 (Day 6): A customer result or case study. Social proof. Step 4 (Day 9): An objection handler (“people usually ask me X, here’s my answer”). Step 5 (Day 12): The close. One sentence. “Worth a 15-min call to see if this applies to you?”

My campaign numbers show: step 1 lands 84% of the positives. Follow-ups catch the remaining 16%. But without the follow-ups you miss that 16%, and 16% of positives is the difference between a campaign that pays for itself and one that crushes.

Phase 5 — Reply handling

Every reply lands in the Reachkit Unibox, automatically classified:

  • Positive intent (22 of my 39 replies): answer personally, send calendar link within 5 minutes if possible.
  • Needs more info: answer the question, offer a call at the end.
  • Not interested: archive. Don’t argue.
  • Out of office: Reachkit handles it, you don’t see it.
  • Wrong person: ask for the right person.

For the positive intent replies, you stay human. That’s the 22/39 pile. A warm reply answered in your own voice at 9:04am closes at 3x the rate of the same reply answered by an AI agent at 9:04am. The whole point of intent scraping is getting warmer leads so the human touch matters MORE, not less.

For everything else, Reachkit’s auto-classification does the work.

Why this beats traditional intent data

Three reasons.

One: you own it.

The seed list is yours. The scraper is yours. The dedupe database is yours. If Enrichkit disappears tomorrow, you swap in a different LinkedIn data provider in an afternoon. If Reachkit disappears, you swap senders. Nothing is locked in.

Two: it’s cheaper by an order of magnitude.

  • 6sense / Bombora / Demandbase: $30K-$100K/year, enterprise-only
  • This stack: $49/month total, unlimited volume, scales with Enrichkit credits

Three: the dedupe logic is yours forever.

The Pipekit dedupe list grows every week. After 6 months, you’ve seen 10,000+ reactors across your competitors’ posts. You know exactly who’s been shopping the category for months but hasn’t bought.

That data is gold. Nobody can sell it to you. You build it by running this playbook.

The 4-week ramp

Week 1 — Foundation

  • Sign up for Enrichkit, Reachkit, Pipekit
  • Buy domains, set up inboxes, start warmup in Reachkit
  • Install Claude Code
  • Build your seed list (20-30 profiles)

Week 2 — Build the scraper

  • Use Claude Code to write the Phase 2 scraper
  • Run it manually against your seed list
  • Verify the output looks right
  • Run it on a cron every Monday morning

Week 3 — Build the Pipekit pipeline

  • Set up dedupe on profile_url (the critical step)
  • Build the domain enrichment step
  • Add the AI qualification step with your ICP prompt
  • Configure the email finder waterfall
  • Test end-to-end with 50 leads

Week 4 — Launch

  • Finish warmup (end of week 3)
  • Write your 5-step sequence using the Phase 4 template
  • Connect Pipekit’s final step to the Reachkit webhook
  • Let the cron fire Monday morning
  • Watch the replies come in

End of week 4: system runs itself, new verified intent leads land in your campaign every week, you spend 20 minutes a day answering hot replies.

Two paths

Path 1 — Build it yourself

  • Claude Codeclaude.com/code
  • Enrichkitenrichkit.dev. API + MCP. From $29/month.
  • Pipekitpipekit.dev. Free workflow engine with dedupe and API integrations.
  • Reachkitreachkit.ai. Unlimited inboxes, warmup, Unibox, evergreen integration support.

Technical builders will have this running in a weekend.

Path 2 — Skip the build

If you want the whole stack set up for you — domains, inboxes, warmup, Claude Code scraper, Pipekit pipeline, Reachkit campaign — I do that.

reachkit.ai/setup — bring me your competitor list and your ICP. I’ll hand you a running evergreen intent system in 4 weeks. You own everything at the end.

The real lesson

The best cold lead in 2026 is the person who reacted to your competitor’s post 4 days ago.

They have the problem. They’re actively thinking about it. They’re comparing solutions. They just don’t know you exist yet.

Most founders are still buying lists of people who have a title and a company. That list is cold, stale, and the same list your 50 competitors bought.

The intent scraping list is warm, fresh, and yours alone.

Your competitors are generating it for you every week. On LinkedIn. For free.

Go pick it up.

— Quinten

P.S. If this works for you and you want the playbook that builds the base-layer cold list too, read The AI Scraping Playbook. Stack both for maximum coverage.

Ready to Transform
Your Outreach?

Join the growing number of people who switched to Reachkit because they were tired of overly complicated platforms.

30-day free trial
No credit card required
Cancel anytime