Recrudoc CRM AI Recruiting CRM
Blog
cold-email lead-generation recruiting-agency outbound

Building Cold Email Lead Lists for Recruiting Agencies

Recrudoc CRM Team 9 min read

Cold email for a recruiting agency lives or dies on the list. You can write perfect copy (short, personal, well-timed) and still get nothing back if the names underneath are wrong. The recipient isn’t a buyer, so open rates sag. Nothing in the pitch resonates, so replies don’t come. The company didn’t actually need a recruiter when you hit them, so meetings never get booked.

Most agency owners build their list one way: scrape companies with open jobs, blast every CEO. Eric Nowoslawski, who runs growth ops for staffing and recruiting clients, calls this the “open jobs playbook” and says bluntly that it’s “the reason why it is so difficult to get a positive response for staffing and recruiting.” Every other agency is running the same play, and the buyer’s inbox is already full of identical pitches.

Three list-building approaches move past that pile-on: open jobs done well, traction signals, and employee departures. The first is table stakes. The other two are where most agencies don’t bother to compete.

Why the list is the whole game in agency cold email

In short: Agency BD is a low-volume, high-value channel. One booked meeting can turn into a signed contingency search worth a meaningful fraction of the placed candidate’s salary. That asymmetry means list quality matters more than send volume. Sending to badly-fit companies wastes your domain reputation, your time, and your future deliverability.

A few things make recruiting-agency cold email harder than the generic B2B version. Buyers are sparse: a SaaS team can pitch every VP of Sales in a vertical, but a recruiting agency can only pitch companies that need to hire right now and don’t already have an internal recruiter handling it. Competition is high (Nowoslawski’s blunt summary again: it’s “the reason why it is so difficult to get a positive response for staffing and recruiting”). And replacement cost is real. Burn a domain on a low-quality list and you spend weeks rebuilding deliverability before your next campaign.

List-building is the first half of the cold email problem; message infrastructure is the second. The cold email infrastructure post covers domains, sending IPs, sequence cadence, and reply management once you have the list. This guide is upstream of all of that.

Playbook 1: open jobs done better than everyone else

In short: Scraping a company name and a job title isn’t enough. Enrich each row with the actual job description, use AI to extract the single most important quality the candidate would need, and lead the email with that inference. The point isn’t volume. The point is showing the prospect you read what they wrote.

Every recruiting agency runs the open-jobs playbook. Most of them do it badly: scrape company name, scrape job title, paste both into a generic template (“I see you’re hiring for X, I have candidates”). The result is a wall of identical pitches in the prospect’s inbox.

Nowoslawski’s version of this playbook works backwards from the message. Start by scraping jobs from a source that exposes the job description. He uses Apify’s Indeed scraper, which returns title and company name; you then turn the company name into a website using Clearbit or Apollo, because, in his framing, “if you have a website you can find people, and if you have a LinkedIn profile you can find people.” Without one of those two anchors, the row is dead.

For each row, enrich with the full LinkedIn job description. Clay’s “find jobs from LinkedIn data” connector handles this; set criteria like “has no recruiter” if you want to filter out companies already using internal sourcers. Then run an AI prompt against each job description to extract the single most important quality the ideal candidate would need. The last step is leading your email with that inference, quoting the part of the JD you derived it from.

A prompt that holds up needs a few controls baked in. Keep the inference under 20 words. Tell the model not to repeat the exact words from the job description so the quote sounds human. Give it a fixed example format to follow. Without those constraints, the model parrots the JD back and the personalization breaks.

In Nowoslawski’s framing, the resulting first line reads something like: “you’re hiring for a Commercial Sales Manager, and from reading the job description, it looks like you need someone who is [extracted quality].” Then a short line offering matching candidates and a question about next steps. That’s a different message from “I see you’re hiring for a Commercial Sales Manager. We have great candidates.”

A parsed JD inside your CRM compounds here. If you’re already pulling structured requirements out of every JD on the candidate side, you’ve got the same data structure you can repurpose for cold email targeting on the BD side.

Playbook 2: traction signals as a pre-hiring indicator

In short: Get to companies before they post the job. Traction metrics (funding, headcount growth, traffic spikes, new office openings, recently installed ATS) signal that hiring is imminent. Reaching out at the traction stage means you’re competing with almost no other recruiters instead of with the entire pile.

Open-jobs scraping is reactive. Traction signals are proactive. Nowoslawski’s framing: “Instead of looking for companies with open jobs, you want to try to get them before they post that job, when they’re thinking about posting that job.”

Traction signals to watch:

SignalSourceWhy it matters
3-month website traffic spikeSimilarWeb (scraped via Apify or CAgent)Growth correlates with hiring
Employee headcount growthLinkedIn / ClayDirect hiring proxy
New office openingNews mentions, LinkedIn postsSignals expansion-driven hiring
Recent fundraising roundCrunchbase, newsCash → headcount within 6 months
Social media follower growthPlatform APIs / scrapersMarketing momentum often precedes commercial hiring
Recently installed ATSBuiltWith”Starting to take recruiting pretty seriously”
New CMO / CRO hireLinkedInNew leader = new team build-out

The ATS-installation signal is particularly underused. BuiltWith tracks when a company adds Greenhouse, Lever, or any other ATS to their stack. If a company installed Lever two months ago, they’re probably about to start hiring at volume, and they probably haven’t picked an agency partner yet.

There’s no single fixed query for the traction playbook. The trigger that matters depends on your industry. Nowoslawski mentions warehousing as one example of a vertical with seasonal hiring patterns. The broader principle: pick the two or three signals that match your niche and build separate scrapers for each.

A second filter compounds nicely on top: score each company on whether they already have an internal recruiter. Nowoslawski uses Clay’s “find employee headcount by job title” to check for “recruiter,” “sourcer,” or “human resources” titles on the team. Companies with internal recruiters get deprioritized because they probably already have hiring coverage. Companies without are the highest-leverage targets.

Playbook 3: employee departures (the underused one)

In short: Find people who recently left a company in a senior role, then reach out to that company’s decision maker offering to find the replacement. Almost no agency runs this play at scale, which means almost no competition in the inbox.

Nowoslawski calls this “probably the least used” play. He’s “never seen another recruiting company use this playbook at scale in a really automated way.”

The mechanic:

  1. Use Clay (or any LinkedIn data source) to find people who started a new job within the last 2-3 months. The query: title contains your target role, location matches your market, “max months in current role” set to 2-3.
  2. Enrich each person’s full experience timeline. You need the previous role’s company and end date, not just the current row.
  3. Filter to people whose previous-role end date is within the last 90 days. These are recent departures from companies that probably haven’t fully replaced them yet.
  4. For each row, find the decision maker at the previous company (CEO, head of department, etc.).
  5. Reach out to the decision maker referencing the specific person who left.

The opening line writes itself. In Nowoslawski’s framing: “I noticed Cameron moved on from the company. How have you thought about filling their position?” Then offer to send candidates.

Two things make this work disproportionately well. First, it’s specific in a way that no generic open-jobs scrape can be, because you’re naming an actual person who actually left. Second, the company often hasn’t posted the replacement yet. Recruiter mindshare arriving before the public job listing is the whole point.

The trickiest part of this play is filtering correctly. Some people show three “experiences” at the same company because they were promoted internally, which isn’t a departure. Nowoslawski’s Clay formula handles this by checking whether the candidate’s first non-current experience has a different company domain than their current employer. That single filter cuts the false positives sharply.

Tools that make these lists possible

In short: You need a scraper for the source data, an enrichment layer for emails and company info, and a workflow tool to orchestrate the steps. Apify, Apollo, Clay, Clearbit, BuiltWith, and SimilarWeb are the common stack. Pick the cheapest combination that hits your scale.

Mapping the tools to the three playbooks:

StepTool optionsNotes
Scrape open jobsApify (Indeed scraper), Clay (LinkedIn jobs)Apify is cheaper at scale; Clay is faster to set up
Company-name → websiteClearbit, ApolloApollo is bundled with email enrichment, slightly cheaper combined
Traction signal: trafficSimilarWeb (scraped via Apify or CAgent)SimilarWeb’s accuracy is rough; use it for relative changes, not absolute numbers
Traction signal: ATS installBuiltWithThe free tier is enough to start
Traction signal: fundraisingClay’s funding integrationsNews scrapers also work but are noisier
Find employee departuresClay LinkedIn search + experience enrichmentRequires a paid Clay plan
Email enrichmentApollo, Hunter, ClearbitApollo is the recruiting-agency default
Bulk Apollo exportApollo’s interface limits selection to 25 contacts per page; recruiting tool builders like Recruitemy distribute scrapers that batch the exportUseful when you’ve already filtered down to a tight list

A practical example: Recruitemy demonstrated their stack by pulling 5,000 nurse practitioners in Florida from Apollo using a custom scraper that bypasses Apollo’s 25-contact-per-page export limit. The output gets exported as CSV and loaded into the agency’s ATS for a drip-mode email campaign. The scraper itself isn’t the value-add; Apollo’s built-in export does the same thing, just more slowly. The value sits in the workflow: filter sharply on Apollo, export to your system of record, and sequence from there.

The list-building work generates a stream of structured rows containing the company, decision maker, email, signal you found, and personalization fact. That’s the same shape of data you eventually want flowing into your candidate-side workflows. Recrudoc’s JD Intelligence parses job descriptions into structured requirements. Useful on the candidate side for matching, but the same parsing logic is exactly what powers the AI inference step in playbook 1.

Anti-patterns to avoid

In short: Don’t blast a giant unfiltered Apollo list. Don’t rely solely on the open-jobs play. Don’t skip the “do they already have an internal recruiter” filter. Don’t mix industries on one campaign. Domain reputation tracks back to list quality.

Failure modes that show up consistently:

  • Volume without signal. Running a generic message against an unfiltered scrape erodes domain reputation. Smaller, signal-driven lists outperform large untargeted ones.
  • Open-jobs only. If your only play is scraping open jobs, you’re competing with every other agency. Add at least one other signal type.
  • Skipping the internal-recruiter filter. Companies with an in-house TA team almost never reply to agency outreach. They have a hiring process and you’re outside it. Filter them out before sending.
  • Mixing industries on one campaign. A list spanning healthcare, manufacturing, and SaaS confuses your messaging and your reply triage. Keep one industry per campaign and per sending domain.
  • Ignoring the decision-maker hierarchy. A bulk list of “founders and CEOs” often has the wrong title for the actual buyer in larger companies, where hiring decisions sit with VP-level operators rather than the C-suite. Match decision-maker titles to company size.

What a healthy list looks like

In short: A working agency list is single-niche, signal-tagged, and refreshed often enough to capture the freshest signals. Each row has at least one personalization fact beyond the company name and title. If you can’t write a unique first sentence per row, the row shouldn’t be on the list.

What every healthy list has:

  • One niche per campaign (no industry mixing)
  • At least one verified personalization fact per row, whether it’s the JD inference, the funding event, or the specific departure
  • Frequent refresh, because signals decay fast (especially employee departures and recently-installed ATS rows)
  • An internal recruiter filter applied, so companies with HR/TA in-house get deprioritized
  • Email verification before send. Use Apollo, Hunter, or NeverBounce. High bounce rates corrode deliverability across every domain on your stack.

Once the list is in place, the cold email infrastructure stack handles warm-up domains, sequence cadence, reply management, and calendar links. If you’re chasing modern hiring-signal triggers specifically, the hiring signals playbook goes deeper on the trigger types that consistently produce booked meetings.

The agencies that grow retainer revenue from cold email aren’t sending more. They’re sending to better lists, with sharper signals, where the competition isn’t paying attention.

Sources

The insights in this article are based on the following industry expert discussions:

  • “Staffing And Recruiting Business Development Outbound Cold Email Playbook” — Eric Nowoslawski, YouTube
  • “How to Get Recruiting Clients With Cold Email” — Recruitemy, YouTube

Ready to stop copy-pasting?

Join recruiters who save 3+ hours daily with AI-powered workflow.

Start Free