I spent three months evaluating AI SDR platforms. Landbase quoted ~$1,800/month. 11x wanted more. None of them showed me data lineage — where the contact came from, what signal triggered outreach, what prompt decided this person was worth reaching. So I built my own stack. Total cost after two months: ~$47 in API calls for the lean version. Here's exactly how it works.
The Four Layers You Actually Need
Most DIY prospecting guides skip the first layer entirely. They hand you a static CSV and call it a pipeline. That's a mail merge with extra steps, not a prospecting agent.
A real prospecting agent has four distinct layers. The signal layer is the trigger — something changed in the world that makes this company or person worth contacting right now. Without a real-time trigger, you're guessing. The enrichment layer adds context: job title, seniority, company size, tech stack, funding stage. The scoring and copy layer is where Claude earns its place — it judges ICP fit against your criteria and generates a first-touch line personalized to the trigger. The routing layer pushes approved contacts to your sending tool, logs everything, and deduplicates against your CRM.
Each layer has a clear input and output. The signal layer produces a company or person identifier plus a trigger event. Enrichment adds structured fields. Scoring produces a numeric score and a reason string. Routing produces a sequence enrollment confirmation. When something breaks, you know exactly which layer failed.
Which Triggers Actually Get Replies
I tested three trigger types over eight weeks and tracked reply rates across 600 outreach sequences.
Job posting signal — the company posts a RevOps, Sales Ops, or Head of Growth role — produced a 6.1% reply rate. Funding alert via the Crunchbase API (Series A or B announced in the last 30 days) came in at 4.8%. Website visitor matching via Clearbit Reveal, where I identified the company and guessed the decision-maker, came in at 2.3%.
Job posting won by a clear margin. The logic holds: hiring for RevOps means there's an active project, a budget allocation in progress, and a vendor evaluation window opening. The hiring manager is already thinking about tooling. Pull from the Crunchbase API job postings endpoint and run a Phantombuster LinkedIn scrape every 48 hours. It's not elegant, but the reply rates justify the maintenance overhead.
Enrichment That Costs Less Than a Lunch
Clay makes waterfall enrichment easy to configure. The logic: try the cheapest source first, fall back only when the previous source misses. I run Hunter.io first, then People Data Labs, then RocketReach as last resort.
Here's what the last 1,000 contacts looked like:
| Enrichment source | Contacts found | Cost per found contact | Hit rate |
|---|---|---|---|
| Hunter.io (first pass) | 612 | $0.009 | 61.2% |
| PDL (fallback) | 201 | $0.019 | 20.1% |
| RocketReach (fallback) | 87 | $0.041 | 8.7% |
| Not found | 100 | — | 10.0% |
Total for 900 enriched contacts: ~$11.40. The 10% miss rate gets written off — chasing those contacts with manual research doesn't pencil out. Fields passed to the scoring layer: job title, seniority, company headcount, industry, funding stage, tech stack (from BuiltWith via Clay), and the original trigger. Everything else is noise that inflates token costs without improving scoring accuracy.
The Claude Prompt That Actually Filters Correctly
The scoring step runs in Clay's AI column using Claude Haiku. Haiku is fast and cheap enough that running it on every enriched contact costs under $2 per 1,000 rows.
You are a B2B sales researcher. Score ICP fit from 1–10.
ICP criteria:
- Industry: SaaS or tech-enabled services
- Headcount: 20–500 employees
- Funding: Seed through Series C
- Trigger: must be hiring for sales, ops, or growth function
- Title: VP/Director or above, or founder
Contact data:
{{title}}, {{company}}, {{headcount}}, {{funding_stage}}, {{industry}}, {{trigger_type}}
Respond in JSON: {"score": N, "reason": "..."}
Contacts scoring 7 or above go to copy generation. Below 7 are dropped. About 38% of enriched contacts make it through, which is the point — high-volume outreach to weak-fit contacts hurts deliverability and wastes sequence capacity.
Copy generation runs on Claude Sonnet:
Write a cold email first line (30 words max) for outreach to {{name}} at {{company}}.
Context: {{company}} recently {{trigger_detail}}.
Tone: direct, no fluff, no "I came across your profile."
Do not use "reach out." Do not mention our product yet.
Output only the first line.
I tested 200 Claude-generated first lines against manually written controls. Open rate: 34% (Claude) vs. 31% (manual). The difference isn't dramatic. But at $0.003 per email versus 15 minutes of my time per contact, it's a straightforward win at volume.
Wiring It Together with n8n Without Losing Your Mind
Clay fires a webhook when a row reaches "approved" status — score of 7 or above and email verified. n8n catches it and does three things sequentially: first, deduplicates against HubSpot by email address; second, POSTs to the Smartlead API to add the contact to the active sequence; third, logs the contact to a Google Sheet with timestamp, score, and trigger type.
I run self-hosted n8n on a $6/month Hetzner VPS. The workflow is 11 nodes. Setup took about four hours the first time, mostly debugging Clay's webhook schema, which isn't fully documented. Smartlead is preferred over Instantly here because the Smartlead API handles programmatic contact insertion more cleanly — Instantly works too if you're already using it, but the API documentation required more trial and error.
What This Stack Actually Costs
Here's the full version, running Clay as the enrichment hub with Crunchbase for signals:
| Component | Tool | Monthly cost |
|---|---|---|
| Signal source | Crunchbase API | $49.00 |
| Enrichment hub | Clay (Growth, 2,000 credits) | $149.00 |
| Email finding | Hunter.io (Starter) | $34.00 |
| Person data fallback | PDL (pay-as-you-go) | ~$4.00 |
| LLM scoring + copy | Claude API (Haiku + Sonnet) | ~$6.00 |
| Workflow orchestration | n8n (self-hosted VPS) | $6.00 |
| Sending tool | Smartlead (Basic) | $32.50 |
| Total | ~$280.50 |
And the lean version, for anyone who already has Apollo and wants to call PDL directly:
| Component | Tool | Monthly cost |
|---|---|---|
| Signal source | Apollo (existing plan) | $0 |
| Enrichment | PDL direct API (500 calls) | $9.00 |
| LLM scoring + copy | Claude API | ~$6.00 |
| Orchestration | n8n cloud (free tier) | $0 |
| Sending tool | Smartlead (Basic) | $32.50 |
| Total | ~$47.50 |
Build vs. Buy — Where the Math Actually Breaks
| Option | Monthly cost | Contacts/month | Cost per enriched contact | Control over prompts? |
|---|---|---|---|---|
| DIY lean stack | ~$47 | ~500 | $0.09 | Full |
| DIY full stack | ~$280 | ~1,000 | $0.28 | Full |
| Apollo AI (basic plan) | $99 | 10,000 | $0.01 | None |
| ZoomInfo Copilot | ~$1,500+ | Unlimited | varies | None |
| Cognism AI | ~$1,200 | Unlimited | varies | None |
| Landbase (managed AI SDR) | ~$1,800 | Managed | ~$1.80+ | None |
| 11x (Alice) | custom (~$2,400) | Managed | unknown | None |
Apollo wins on raw cost-per-contact if building large lists is the goal. The DIY stack wins when you need custom scoring logic, transparent trigger attribution, or compliance audit trails. ZoomInfo and Cognism are built for enterprise teams where legal requires clean data provenance — that's a different purchase than a prospecting workflow.
Landbase and 11x are a different category entirely: managed services, not tools. If you don't want to maintain a workflow, that's a rational trade. If you do want control, you're paying roughly six times more for a system you can't inspect or tune.
The honest limitation: this stack breaks when Clay changes its webhook schema (happened once), when n8n updates a node (happened twice), and when the Crunchbase API rate-limits without warning (once). Budget two to three hours per month for maintenance and you'll stay ahead of it.
What I Actually Use
For the core stack: Clay plus PDL waterfall into Claude scoring, routed through n8n into Smartlead. Stable for two months, processed 1,900 contacts, no major breakage. For signal sourcing on Twitter and Facebook profiles specifically — when I want to identify who's posting about a relevant topic rather than relying on job board data — Ziwa has been faster for me than PDL's direct API for pulling enriched social profile data. Phantombuster covers similar ground with more setup time. Neither replaces the core stack; they're signal sources, not the whole pipeline.
The question I get asked most: should I start with the lean version or the full version? Start lean. Call PDL directly without Clay, let n8n handle the routing, and see if the trigger logic actually works for your ICP before paying for Clay's credits. You'll learn more from 300 contacts through a cheap pipeline than from 3,000 contacts through an expensive one you don't fully understand.
Top comments (0)