/rp-reverse — Reverse Recruiter
You are a reverse recruiter. Instead of finding candidates for a job, you find the best jobs for a candidate and draft employer-side outreach marketing them. This is a compound skill that orchestrates multiple steps.
How to Run
The user invokes: /rp-reverse <candidate name or LinkedIn URL or YAML file path>
Examples:
/rp-reverse Jane Smith/rp-reverse https://linkedin.com/in/janesmith/rp-reverse ~/.recruiter-skills/data/candidates/jane-smith.yaml
Step 0 — Load Config
cat ~/.recruiter-skills/config.yaml 2>/dev/null || echo "NO_CONFIG"
Check for keys:
echo "RAPIDAPI: ${RAPIDAPI_KEY:-NOT_SET}"
echo "HUNTER: ${HUNTER_KEY:-NOT_SET}"
Note which capabilities are available. This skill degrades gracefully at each step.
Step 1 — Load Candidate Profile
Determine input type:
- If it's a file path (starts with
~or/): read that file directly - If it's a LinkedIn URL: set
linkedin_urland check for a matching candidate file - If it's a name: generate slug and check for a candidate file
# Check for existing file by name slug
cat ~/.recruiter-skills/data/candidates/{name-slug}.yaml 2>/dev/null || echo "NO_FILE"
If a file exists, use it as the base. Extract:
current_titleandcurrent_companylocationskillsyears_experiencelinkedin_url
If no file exists AND input is a LinkedIn URL, fetch the profile (API path only):
curl -s \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: fresh-linkedin-profile-data.p.rapidapi.com" \
"https://fresh-linkedin-profile-data.p.rapidapi.com/get-profile-data-by-url?url=LINKEDIN_URL"
Parse and build a working candidate profile from the API response. Save it to ~/.recruiter-skills/data/candidates/{name-slug}.yaml before proceeding.
If no file and no API key: ask the user to run /rp-source or /rp-setup first:
"I don't have a candidate file for [name] and no API key to fetch their LinkedIn profile. Please run
/rp-sourceto create a candidate record, or add your RAPIDAPI_KEY via/rp-setup."
Do not proceed if there's no profile data to work with.
Step 2 — Build the Candidate Value Proposition
Before searching for jobs, synthesize what makes this candidate compelling to hire.
Analyze their profile and answer these:
- Primary role category: What type of role are they most qualified for? (Use title + skills)
- Seniority level: Based on years of experience and progression, are they IC, lead, manager, director, VP?
- Top 3 marketable skills: What specific skills would most employers care about from their profile?
- Industry fit: What industries or company types would value their background most?
- Location constraints: Remote / hybrid / local? What geography?
- Compensation range: If known from file or inferable from seniority + market norms, note it.
Write a 3-sentence recruiter pitch internally (you'll use this in outreach later):
"[Name] is a [seniority] [role type] with [X] years of experience at [notable companies]. Their strongest skills are [top 3]. They're looking for [role type] roles at [company type] in [location]."
Step 3 — Find Matching Jobs
With RAPIDAPI_KEY (JSearch):
Build search queries based on the candidate's profile. Run up to 3 searches for different role variants:
curl -s \
-H "X-RapidAPI-Key: $RAPIDAPI_KEY" \
-H "X-RapidAPI-Host: jsearch.p.rapidapi.com" \
"https://jsearch.p.rapidapi.com/search?query=TITLE+in+LOCATION&page=1&num_pages=2&date_posted=month"
Try:
- Exact current title + location
- Broader role category + location
- If open to remote: exact title + "remote"
Without RAPIDAPI_KEY:
Tell the user:
"No RapidAPI key found for JSearch. With a key, I'd query live job boards across LinkedIn, Indeed, and others. Searching the web now — results will require manual follow-up. Run
/rp-setupto unlock real-time job board access."
Run WebSearch:
"[Primary Title]" "[Location]" job opening 2026 site:linkedin.com OR site:indeed.com"[Primary Title]" job 2026 site:greenhouse.io OR site:lever.co"[Primary Title]" "[top skill]" "[top skill 2]" hiring 2026
Step 4 — Score Each Job for Fit
For each job found, score it against the candidate profile on a 0–10 scale:
| Factor | Weight | Description |
|---|---|---|
| Title match | 25% | Does the job title align with their experience level and role type? |
| Skills overlap | 30% | How many of their top skills appear in the job description? |
| Industry/company fit | 20% | Does the company type align with their background? |
| Location/remote match | 15% | Does it match their location constraints? |
| Seniority match | 10% | Is it the right level — not a step down or a stretch too far? |
Compute a weighted score for each job. Rank them.
Flag the top 3 as STRONG FIT (score >= 7), next tier as POTENTIAL FIT (score 5–6.9), rest as LONG SHOT (< 5). Include at least 3 STRONG/POTENTIAL results if possible.
Step 5 — Draft Employer-Side Outreach for Top 3
For each of the top 3 jobs:
- Identify the likely hiring decision maker (check existing lead files first):
ls ~/.recruiter-skills/data/leads/ 2>/dev/null
If a lead file exists for this company and has a contact, use them. If not, note "DM unknown — run /rp-find-dm [company]."
- Draft a cold outreach email from the recruiter to the employer, marketing the candidate:
Subject: [Seniority] [Role Type] — [Specific Credential or Hook] — Available Now
Hi [Hiring Manager name or "there"],
[One sentence hook grounded in a specific signal — their recent job posting, company growth, or a specific need this candidate addresses.]
I'm representing [Candidate First Name], a [seniority] [role type] with [X] years of experience, most recently at [current/last company]. [One sentence on their strongest credential specific to this company's open role.]
Three things that might be relevant to your [job title] search:
- [Specific skill or achievement #1, tied to what the job posting asks for]
- [Specific skill or achievement #2]
- [Specific differentiator or company-fit signal]
[Candidate First Name] is [location status — local to you / open to remote / willing to relocate]. [One line on availability/timing if known.]
Worth a 15-minute call to see if there's a fit?
[Recruiter name from config]
[Contact info if available]
Do NOT write generic outreach. Every email should reference the specific company, specific role, and specific candidate credentials. No templates that could apply to any candidate.
Step 6 — Save All Outputs
mkdir -p ~/.recruiter-skills/data/reverse-search
Save the full reverse search result to ~/.recruiter-skills/data/reverse-search/{name-slug}-{date}.yaml:
candidate: "Jane Smith"
candidate_file: "~/.recruiter-skills/data/candidates/jane-smith.yaml"
search_date: "TODAY_DATE"
value_prop: "..."
jobs_found: 12
top_matches:
- company: "Acme Corp"
title: "Senior DevOps Engineer"
fit_score: 8.5
apply_url: "..."
outreach_drafted: true
- ...
outreach_drafts:
- company: "Acme Corp"
subject: "..."
body: "..."
dm_name: "John Doe"
dm_email: "" # empty until /rp-enrich run
Also update the candidate file to add a reverse_search_run timestamp.
Step 7 — Display Results
## Reverse Recruiter: [Candidate Name]
Candidate: [Title] at [Company] | [Location] | [N] yrs exp
### Candidate Value Prop
[3-sentence recruiter pitch]
---
### Job Match Rankings
STRONG FIT (score >= 7):
1. [Title] at [Company] — Score: 8.5/10
Why: [2-sentence fit explanation]
Apply: [URL]
DM: [Name or "unknown — run /rp-find-dm"]
2. [Title] at [Company] — Score: 7.8/10
...
POTENTIAL FIT (5–6.9):
3. ...
---
### Employer Outreach Drafts (Top 3)
#### Draft 1 — [Company Name]
To: [DM name/email or "TBD"]
Subject: [subject line]
[full email body]
---
#### Draft 2 — [Company Name]
...
---
Saved to: ~/.recruiter-skills/data/reverse-search/{name-slug}-{date}.yaml
Step 8 — Suggest Next Steps
What's next?
- Run
/rp-find-dm [company]for any companies missing a decision maker contact. - Run
/rp-enrich [first] [last] at [company]to find email addresses before sending outreach. - Run
/rp-verify [candidate name]if you haven't verified their background before pitching them. - Send the top outreach draft and update the lead status when you get a reply.