The Sourcing Agent monday Hides: 47 Leads for 89¢

Every HR AI demo opens the same way: 200 applicants on screen, watch AI screen them in seconds. Cool. Useless if you're a six-person team with four applicants, two of them spam. Your bottleneck isn't screening. It's an empty pipeline — and that's the exact step every HR vendor skips in the demo.
Here's the n8n workflow that fills it: 47 qualified candidates, verified emails, scored against a rubric, ready for outreach. 22 minutes unattended. 89 cents in API fees per run.
Why sourcing is the step vendors won't touch
Sourcing is messy, legally gray, and doesn't screenshot well. Screening does. That's the entire reason your monday.com, Greenhouse, or Lever demo starts at "200 applicants" — the top of the funnel requires scraping LinkedIn, hitting enrichment APIs, and stitching together data from four sources. Public SaaS companies won't put that in a product because their compliance team says no.
Small teams can build it themselves. That's the asymmetry. One client I work with was paying $600/month for a LinkedIn Recruiter seat that one person opened maybe twice a week. We replaced it with a self-hosted n8n workflow. Payback on the build was one month. Ongoing cost is roughly $18/month if you run 20 searches — versus $7,200/year for the seat.
The honest tradeoff: you own the maintenance. Apify selectors break when LinkedIn ships a DOM change, roughly every 2-3 months. If nobody on your team can update a selector, this isn't for you. If someone can, keep reading.
Node 1: Turn a job description into a search string
The recruiter drops a JD into an n8n form trigger. That JD goes to Claude with a strict extraction prompt. Claude returns JSON — current title, seniority band, three must-have skills, location radius, two disqualifiers. That JSON becomes the input for the Apify search.
Why this matters: hand-written LinkedIn searches return 4,000 garbage results because humans keyword-stuff. A JD-derived search returns 60-80 actually-relevant profiles because the constraints are tight and consistent.
{
"current_title": "Senior Backend Engineer",
"seniority": "mid-to-senior (4-8 yrs)",
"must_have_skills": ["Python", "PostgreSQL", "AWS"],
"location": "United States, remote OK",
"disqualifiers": ["current title contains 'manager'", "tenure < 12mo at last 2 roles"]
}
Cost of this node: about 2 cents in Claude Haiku tokens per JD.
Node 2: Apify pulls the raw profiles
Apify's LinkedIn Sales Navigator scraper takes the search string, a result limit (I cap at 50), and returns profile URLs, names, current titles, companies, and locations. Nothing more — no emails, no phone, no deep profile data. That's fine, we enrich next.
- Cost: ~$0.12 per 50 profiles
- Runtime: 6-9 minutes for the scrape to complete
- Success rate: typically 47-50 valid rows per 50 requested; occasional profile is private or 404s
This is the node monday won't demo. Any tool that touches LinkedIn scraping is one cease-and-desist away from a bad quarter, so public SaaS won't ship it. hiQ vs LinkedIn established that scraping public profiles isn't a CFAA violation in the US (9th Circuit, 2022), but LinkedIn's ToS still forbid it and they will rate-limit or ban accounts. Run this from a burner account, not your personal one. Read Apify's own guidance on this before you deploy.
Node 3: Apollo enriches profile → email
Apollo's people-match endpoint takes name + company + LinkedIn URL and returns a verified work email, sometimes a direct phone, and confirmation of the person's current role against Apollo's database.
curl -X POST https://api.apollo.io/v1/people/match \
-H "Content-Type: application/json" \
-H "X-Api-Key: $APOLLO_KEY" \
-d '{
"name": "Jane Doe",
"organization_name": "Acme Corp",
"linkedin_url": "https://linkedin.com/in/janedoe"
}'
- Cost: ~$0.01 per successful match
- Match rate: ~70% in my runs. 50 scraped → ~35-47 enriched
- Alternatives: Hunter.io (similar price, weaker on tech roles), Clearbit (deprecated for new customers), Snov.io (cheaper, lower match rate)
For 47 profiles this costs about $0.38. You now have name, role, company, and email. That's a lead.
Node 4: Claude scores each candidate against a rubric
This is where the model earns its keep. For each enriched profile, n8n's Split In Batches node fires a Claude call in parallel. The prompt includes the original JD, the candidate's public profile summary from Apify, and a rubric.
The rubric has five criteria, each 0-2:
- Relevant experience — do the last two roles match the JD domain?
- Seniority match — YOE and title level align?
- Skill overlap — how many of the must-haves show up in their profile?
- Location/remote fit — timezone and geography work?
- Red flags — job hopping, obvious mismatch, wrong function
Claude returns a score out of 10, a two-sentence reasoning, and a drafted outreach email personalized to one specific detail from the profile (a project, a talk, a repo).
Model choice matters:
| Model | Cost for 47 scorings | Reasoning depth |
|---|---|---|
| Claude Haiku | ~$0.31 | Fine for narrow rubrics |
| Claude Sonnet | ~$1.50 | Better on ambiguous JDs |
| GPT-4o mini | ~$0.28 | Comparable to Haiku |
I default to Haiku. The rubric matters more than the model — a vague JD makes any model score a 7 for a bad fit. Tighten the JD before you upgrade the model.
Node 5: Google Sheets output, sorted by score
Everything writes to a Google Sheet with columns: name, title, company, email, LinkedIn URL, score, reasoning, drafted outreach. The recruiter opens the sheet, sorts descending by score, and sends the top 15 emails from their own inbox (not from n8n — deliverability matters).
Full run breakdown for a mid-level backend engineer JD I ran last week:
| Node | Time | Cost |
|---|---|---|
| JD extraction (Claude Haiku) | 8s | $0.02 |
| Apify scrape (50 profiles) | 7 min | $0.12 |
| Apollo enrichment (47 matched) | 4 min | $0.38 |
| Claude scoring + email drafts (47 parallel) | 10 min | $0.31 |
| Sheets write | 12s | $0.00 |
| Total | ~22 min | $0.83 |
The top score was a 9 — someone at a direct competitor with the exact stack. The email draft referenced a specific open-source repo on their GitHub. That's a real outreach, not a "Dear {{FirstName}}" blast.
The honest limitations
I don't sell fantasy. Three things will bite you:
- Apify selectors break. LinkedIn ships DOM changes every 2-3 months. Budget 1-2 hours to patch when it happens, or subscribe to an Apify actor that ships updates fast (their maintained ones usually patch within 48 hours).
- Apollo match rate is ~70%. You'll lose 15-30% of scraped profiles to missing emails. Plan for it — scrape 65 to net 45 usable leads.
- Scoring is only as good as the rubric. A vague JD ("looking for a rockstar") produces vague scores. Force the recruiter to write a JD with specific must-haves before running the workflow. This is a feature, not a bug.
And the ToS question — LinkedIn will disable scraper accounts. Use burner accounts, rotate them, and don't run this from the CEO's personal LinkedIn.
Why bizflowai.io helps with this
Sourcing pipelines like this one are exactly the kind of thing we build and hand off to small teams at bizflowai.io — a working n8n workflow, your API keys, your Google Sheet, your rubric. We also handle the boring parts: burner account setup, selector monitoring, and swapping Apollo for a cheaper enrichment provider when your volume changes. The point isn't to sell you a subscription that replaces LinkedIn Recruiter — it's to give you the workflow so you own it.
What to steal today
If you want to build this yourself before the weekend:
- Sign up for Apify (free tier covers ~200 profiles) and Apollo (free tier gives you 50 enrichments/month).
- Get an Anthropic API key. Load $10 — that's 30+ runs.
- Self-host n8n on a $6/month VPS or use n8n Cloud starter.
- Copy the five nodes above. Wire them with Split In Batches for parallelism.
- Test with one JD you know well. Check the top 5 scores against your gut. Tune the rubric prompt until they agree.
600 a month for a seat that requires a human to click, versus 89 cents per run for a workflow you own. The math isn't close.
Want more like this?
I publish practical AI automation, GenAI engineering, and faceless content workflows on YouTube every week.
Subscribe to bizflowai.io on YouTube — never miss a new tutorial.
Planning an AI automation project or need a second opinion on your architecture?
Connect with me on LinkedIn — Lazar Milicevic, GenAI Engineer & bizflowai.io Founder.
Visit bizflowai.io for our services, case studies, and AI consulting.
Frequently asked questions
What is the real hiring bottleneck for small teams?
For small teams of around six people, the bottleneck is not screening applicants but sourcing them. Small companies typically struggle with empty pipelines, receiving only a handful of applicants weeks after posting a job. HR AI vendors usually demo screening tools that assume 200 applicants, which is irrelevant when the actual problem is filling the top of the funnel with qualified candidates.
How do I build an automated candidate sourcing workflow in n8n?
Use a five-node n8n workflow: (1) a form trigger where Claude extracts search criteria from a job description, (2) Apify's LinkedIn Sales Navigator scraper to pull 50 profiles, (3) Apollo's people-match endpoint to enrich profiles with verified emails, (4) Claude scoring each candidate against a five-criteria rubric, and (5) a Google Sheet output with scores, reasoning, and pre-drafted outreach emails.
How much does an automated LinkedIn sourcing workflow cost per run?
A full run producing 47 qualified enriched profiles costs about 89 cents in API fees. The breakdown is roughly 12 cents for Apify LinkedIn scraping of 50 profiles, 38 cents for Apollo email enrichment on 47 matches, and 31 cents for Claude Haiku scoring and outreach drafting. It runs unattended in about 22 minutes, replacing a $600/month LinkedIn Recruiter seat.
Why does deriving a LinkedIn search string from a job description matter?
Manually written LinkedIn searches typically return around 4,000 garbage results because the criteria are too broad or inconsistent. When Claude extracts structured criteria from a job description (current title, seniority, must-have skills, location radius, and disqualifiers) and builds the search string from that JSON, you get 60 to 80 genuinely relevant profiles instead, making enrichment and scoring worthwhile.
When should I use Claude Haiku vs Sonnet for candidate scoring?
Use Claude Haiku for standard rubric-based scoring across many candidates when cost matters. Scoring 47 profiles with Haiku costs about 31 cents. Upgrade to Sonnet when you need deeper reasoning on candidate fit or more nuanced red-flag detection, which pushes the cost to roughly $1.50 per run. Both remain far cheaper than a $600/month LinkedIn Recruiter subscription.