Candidate Sourcing via LinkedIn
ATS pipeline: 50 sourced candidates with scores, contact info, and personalized outreach drafts. Report: candidates sourced, outreach sent, response rate, screens scheduled. Talent pipeline entries for future roles.
Before you start
- Approved job description with must-have and nice-to-have criteria
- LinkedIn Recruiter or Sales Navigator seat
- ATS connected (Greenhouse, Lever, or Ashby)
- Job description with title, level, location, skills, and compensation range
- Hiring manager's priority ranking of requirements
- Target companies list (optional — competitors, adjacent companies)
The steps
- Parse JD into search criteria — Extract from JD: required skills (hard filters), preferred skills (soft ranking), years of experience range, location/remote policy, target titles, and industries. Create boolean search string for LinkedIn. Identify 3-5 target companies where ideal candidates currently work.
- Execute search and build long list — Run LinkedIn search with boolean string. Apply filters: location, current company, years in role. Scan first 150 results. Add profiles matching 3+ hard criteria to long list. Target: 80-100 profiles on long list. Save search for future runs.
- Score and rank to shortlist of 50 — For each long-list profile, score: skill match (1-5), experience level (1-5), company relevance (1-5), recency of role change (1-5, prefer >18 months in current role), location fit (1-3). Rank by total score. Take top 50. Flag any passive candidates with 'open to work' badge as priority.
- Enrich contact information — For top 50 candidates, find personal or work email via Apollo/RocketReach. Verify emails (bounce check). For candidates with no findable email, note LinkedIn InMail as only channel. Store all contact data in ATS as sourced candidates with source tag.
- Draft personalized outreach messages — For each candidate, write 3-line outreach: reference something specific from their profile (project, talk, post, company achievement) + the opportunity hook (why this role is relevant to their trajectory) + low-friction CTA (15-min chat, not full interview). Tone: peer-to-peer, not recruiter-spam.
- Send outreach in batches and track — Send in batches of 15/day (LinkedIn limits). Stagger across morning hours in candidate timezone. Log outreach date in ATS. Set 5-day follow-up reminder for non-responders. Track: sent, viewed, replied, interested.
- Process responses and schedule screens — For interested replies: confirm fit with 2-3 qualifying questions via message, then send scheduling link for hiring manager screen. For 'not now' replies: add to talent pipeline with 6-month re-engage date. For no response after follow-up: mark as 'sourced, no response' in ATS.
If it goes wrong
Search returns too many irrelevant profiles
Tighten boolean operators. Add NOT filters for common false-positive titles. Filter by years in current role > 1.
Low response rate on outreach (<10%)
A/B test shorter vs longer messages. Try different CTAs (async video vs call). Ensure subject line / connection note is genuinely personal.
Candidates interested but not qualified on deeper screen
Add a pre-screen qualifying question to the outreach response flow. Re-examine scoring criteria — a high-scoring metric may not correlate with actual fit.
All OpenLabor playbooks