Tutorial

How to Build a Recruiter System (Not Just a Tool Stack)

An r/smallGRP post drew the line: tools find candidates, systems run end-to-end. Walk-through with n8n + Scavio + Hunter + Smartlead.

An r/smallGRP thread distinguished tools (find a candidate) from systems (find, qualify, enrich, reach out, follow up). This walks the system, not the tool list.

Prerequisites

  • n8n
  • Scavio API key
  • Apify API key (LinkedIn-tolerant scrapers)
  • Hunter API key
  • Smartlead/Lemlist account
  • ICP definition (role, skills, location, seniority)

Walkthrough

Step 1: Define ICP as a JSON object, not a vibes brief

Auditable.

JavaScript
// ICP: { role: 'Senior Rust Backend', skills: ['rust','tokio','async','axum'], location: ['EU','US-remote-friendly'], seniority: '5-10y', exclude: ['recent layoff orgs'] }

Step 2: Discovery via Scavio dorks

Multi-source candidate finding.

Text
// site:github.com user-card senior rust 2024-2026
// site:medium.com author rust async 2026
// site:linkedin.com/in head of platform rust EU 2026
// site:reddit.com/r/rust comment by 2025-2026

Step 3: Apify pull for LinkedIn profile depth (TOS-tolerant actor)

When Scavio surfaces a LinkedIn URL.

Text
// Apify LinkedIn Profile Scraper actor — verify TOS posture for your jurisdiction.

Step 4: LLM-rubric qualification (skill match, recency, fit notes)

JSON-output rubric.

Text
// LLM: 'Score 0-100 against ICP. Return { score, reason, fit_notes }.'

Step 5: Hunter for email find/validate per qualified candidate

Drop accept-all, disposable.

GET https://api.hunter.io/v2/email-finder?domain={candidate.company}&first_name={...}&last_name={...}

Step 6: Smartlead campaign with personalized opener

Open + value + ask.

Text
// Open: reference a specific GH project or post Scavio surfaced. Value: role fit. Ask: 15 min call.

Step 7: Reply triage back into n8n: book / nurture / disqualify

Loop close.

Text
// Smartlead reply webhook → n8n → tag in CRM/Sheets → assign next action.

Python Example

Python
# Per-recruit-cycle: 50 candidates × (3 Scavio + 1 Apify + 1 Hunter + 1 Smartlead send) = ~$2-5 per finalist contacted.

JavaScript Example

JavaScript
// Same in TS via the same vendor SDKs.

Expected Output

JSON
End-to-end recruiter system: 200-500 candidates discovered/week, ~10-30% qualified, personalized outreach to ~50 contacted, replies routed back to source-of-truth.

Related Tutorials

Frequently Asked Questions

Most developers complete this tutorial in 15 to 30 minutes. You will need a Scavio API key (free tier works) and a working Python or JavaScript environment.

n8n. Scavio API key. Apify API key (LinkedIn-tolerant scrapers). Hunter API key. Smartlead/Lemlist account. ICP definition (role, skills, location, seniority). A Scavio API key gives you 500 free credits per month.

Yes. The free tier includes 500 credits per month, which is more than enough to complete this tutorial and prototype a working solution.

Scavio has a native LangChain package (langchain-scavio), an MCP server, and a plain REST API that works with any HTTP client. This tutorial uses the raw REST API, but you can adapt to your framework of choice.

Start Building

An r/smallGRP post drew the line: tools find candidates, systems run end-to-end. Walk-through with n8n + Scavio + Hunter + Smartlead.