OPS-26-N1Small · Recruiting

Recruiting agency — IT sourcing at scale

8-person headhunting agency, specialty: senior IT. Manual sourcing was killing 4-6h daily per recruiter. AI scoring + multi-source aggregation freed the team to work with candidates.

more candidates / recruiter
Sector
Recruiting / HR
Surfaces
LinkedIn · GitHub · StackOverflow · Notion · Slack
Runtime
Production · 7 months
Published
2026-04-10

Challenge

8-person headhunting agency, focus: senior backend / DevOps / ML engineers in EU. Annual revenue ~€1.4M, 100% contingency (payment only on placement, fee ~20-25% of annual salary).

Sourcing model in 2025: every recruiter spent 4-6h daily on LinkedIn Recruiter — boolean searches, manual profile review, copying to Notion talent pool. Rest of day: outreach, candidate calls, client presentations.

Bottleneck: a recruiter sourced ~30-50 profiles daily manually, of which ~5-8 were real quality matches. Quality bar = 90%+ match on hard skills + senior level + location/comp range. Agency growth pace limited by sourcing capacity, not lack of roles.

Approach

Setup in 5 weeks. Three-stage pipeline:

<strong>1. Multi-source ingestion</strong>: LinkedIn business pages (authorized recruiter accounts), GitHub (public profiles + commit activity per language), Stack Overflow (tag expertise + reputation), Twitter (tech engagement). Daily refresh, ~3000 profiles added/day.

<strong>2. ICP fit scoring</strong>: per open role the client defines ICP (tech stack required, seniority signals, location flexibility, comp range). AI scoring (Claude Sonnet) rates every sourced candidate vs ICP — gives 0-100 score + reasoning. Threshold 75+ → passes to recruiter review.

<strong>3. Deduplication + enrichment</strong>: profile match across sources (LinkedIn URL + GitHub username + email hash). Enrichment: tenure tracking (job changes last 2 years), tech stack evolution, public contributions.

Integration: direct push to Notion talent pool (custom view per role) + Slack alerts for recruiter on new high-fit candidates. Zero change to their existing workflow.

Stack: TypeScript, Playwright for LinkedIn with residential proxy, GitHub API, SO API, PostgreSQL, Claude Sonnet API (~€120/month tokens), Notion API, Slack bot. Hosting: 1 mid-tier VPS €60/month.

Outcome

Per-recruiter capacity: 5-8 quality candidates/day → 20-30/day (4× growth). Of which ~12-18 daily are high-fit (75+ score) — recruiter does outreach, 3-5 reply rate per day (vs ~1-2 before).

Time reclaimed: 4-6h/day manual sourcing → 1-2h daily reviewing AI-flagged top scores. Freed 15-20h weekly per recruiter for active candidate work — fundamentally different use of time.

Revenue impact: agency increased hire rate from ~12 placements/quarter to ~22 in the first quarter post-deployment. Annual run-rate +60% YoY on same headcount.

AI scoring false positive rate: ~18% in month 1 (too liberal threshold), tuned to ~6% in month 3 (recruiters do not waste time on bad matches). Client tracks accuracy in a spreadsheet — system improves monthly.

System operating 7 months. Zero critical incidents, 2 LinkedIn account temporary blocks (typical frequency for active sourcing), both resolved &lt;24h. Client negotiating extension scope to European talent pools (Germany, UK).

Stack

PlaywrightBright Data residential proxyClaude Sonnet APIGitHub APIPostgreSQLNotion APISlack BotTypeScriptHetzner VPS

Metrics

  • ~3000Profiles sourced / day
  • ~16High-fit per recruiter / day
  • Capacity growth
  • +83%Hire rate Q vs Q
  • €680 / monthOperating cost
  • 99.4%Uptime
Similar problem in your business?

Every project is different, but patterns repeat.

If you recognise pieces of this case study in your own situation — write. We usually see in the first call whether it is hours-per-week scale or months of infrastructure.