Why manual lead prospecting doesn't scale
Manual lead research and outreach is the part of sales most people know is broken but keep doing anyway. An SDR at ABN Cleanroom Technology would spend the first two hours of the day searching LinkedIn for relevant contacts, filtering by title, industry, and company size, then copying their details into a spreadsheet, drafting a message that referenced their role and company, and logging the send.
The frustrating part: nearly all the information needed to do this well already exists in structured systems. Apollo has the contact data. LinkedIn has the professional context. Claude can write a personalised message faster than any human. The workflow just didn't exist to connect them.
What the team wanted wasn't just volume. It was relevance. Spray-and-blast outreach was never the goal. The goal was to reach the right people with a message that clearly wasn't a template, while spending zero time doing the manual work that makes that possible.
How to automate B2B outreach in 6 steps with Apollo, Claude, and n8n
The workflow runs on a daily cron trigger. No form, no manual start. It wakes up, pulls a fresh batch of leads matching the ICP, writes personalised outreach for each one, applies a quality filter, sends, and logs. All before the team arrives at their desks.
Runs daily at 07:00. Can also be fired manually to test a new ICP list or geography without waiting for the next scheduled run.
A single HTTP Request node posts to Apollo's /v1/mixed_people/search endpoint with the ICP filters: job title keywords (Head of, Director, VP), industry, company headcount range, and geography. The response returns name, company, title, LinkedIn URL, and a verified email address. No manual searching, no browser tabs.
For each lead returned by Apollo, the workflow sends their data to Claude with a structured prompt: write a cold email subject line and a 3-sentence body that references their specific title and company, angles around the client's value proposition, and reads like a direct human wrote it. Claude returns structured JSON with subject and body fields, so the output maps cleanly into the send node without parsing.
A simple IF node checks the lead against a secondary filter before any message is sent: company headcount over 50, title must contain a decision-maker signal, and no duplicate (already in the Notion log). Leads that don't pass are discarded silently. No partial sends, no messy edge cases.
The approved email goes out via Gmail. Subject and body come directly from Claude's JSON output. The to field uses the verified email from Apollo. One node. No copy-pasting, no drafts sitting in an inbox.
After each send, a row is written to a Notion database: who was contacted, their company and title, the subject line used, the full email body, and the timestamp. The team can see exactly what went out, track replies against sends, and use real open and reply data to iterate the Claude prompt over time.
Results: before and after automating B2B outreach
SDR spends 2+ hours searching LinkedIn and Apollo manually, building a spreadsheet of contacts, writing individual outreach messages referencing each person's role and company, logging sends in a separate sheet. Inconsistent quality, hard to track, slow to iterate.
Team arrives to a Notion database already populated: leads found, messages written and sent, every contact logged with subject line and body. They spend their time on replies. The part of sales that actually requires a human.
The ICP gate means only leads that genuinely match the criteria get contacted. Higher reply rates come from better targeting, not blasting a bigger list.
Because every message and every reply is logged, the team can compare which subject lines and angles get responses and feed that back into the Claude prompt. The system gets sharper with every cycle.
The interesting metric isn't emails sent. It's reply rate versus manual baseline. Two weeks of running this against a manual period tells you everything you need to know.