Recruiting and Candidate Sourcing API
A candidate record is only useful if it holds the things you screen on: what they do now, how long they have done it, where they did it before, what they studied and what they are credited with.
One call returns all of it. Because it reads the profile at that moment, the same call is also the freshness check you run before an outreach batch goes out.
- requests served per month
- 40M+requests served per month
- uptime
- 99.9%uptime
- median response time
- 1smedian response time
- serving production traffic since
- 2023serving production traffic since
Stale candidate data is worse than no candidate data
Sourcing tools built on stored datasets tell you what someone did when the dataset was collected. Send a batch on that and a share of your outreach opens by congratulating people on a job they left, or pitches a role to someone who started a new one last month.
That is not just a wasted send. In a market where candidates hear from a dozen recruiters a week, being visibly out of date is the fastest way to be ignored, and it is the one mistake they will remember your agency for.
The fix is not better copy. It is checking the record at send time instead of trusting a copy of it.
How it works
- 01
Build the record
Resolve a profile into current role, tenure, full work history, education, skills, languages, certifications and recommendations. That is the screen, in one response.
- 02
Qualify the employer
Company size and industry put a title in context. A head of engineering at eleven people and at four thousand are different candidates with the same words on the record.
- 03
Re-check before sending
Immediately before an outreach batch, re-read the profiles in it. Anyone whose employer or title changed since you built the list gets pulled out or rewritten.
- 04
Time the approach
Tenure is in the history. Someone eighteen months into a role is a different conversation from someone who started six weeks ago, and the record tells you which you are having.
In code
Freshness check before an outreach batch
const stillTrue = []
for (const candidate of batch) {
const { profile } = await fetch(
`https://api.fetchin.io/api/v1/profile?url=${candidate.profileUrl}`,
{ headers: { 'X-API-Key': process.env.FETCHIN_KEY } }
).then(r => r.json())
// Moved since the list was built: pull them out rather than send
// an opener about a job they no longer have.
if (profile.companyName !== candidate.knownEmployer) {
flagJobChange(candidate, profile)
continue
}
if (profile.openToWork) candidate.priority = 'high'
stillTrue.push({ ...candidate, title: profile.jobTitle })
}
await sendOutreach(stillTrue)What it changes
Openers that are still true
Nobody gets congratulated on a role they left, because the record was checked minutes before the send rather than months before.
Screening on real history
Tenure, progression and education come back in full, so the shortlist is built on the record rather than on a headline.
Signal on who is receptive
The open-to-work flag comes back with the profile, which is a cheap way to sort a long list before anyone writes anything.
One integration for the whole pipeline
Sourcing, screening and the pre-send check all run on the same endpoint, so there is one thing to maintain rather than three vendors.
Endpoints this uses
Questions
- Can I search for candidates by keyword?
- Not today. These endpoints resolve a profile you already have a URL for, so they cover building and refreshing candidate records rather than discovering them. Sourcing tools generally pair a discovery step of their own with an enrichment API for the record itself.
- What comes back on a candidate?
- Over 100 attributes: current role and employer, the full position history with dates, education, skills, languages, certifications, test scores, recommendations and location, plus signals like open-to-work.
- Is the open-to-work flag reliable?
- It reflects what the person has chosen to publish at the moment you call. It is a strong sorting signal rather than a guarantee, and it is worth re-reading rather than storing, because it is exactly the kind of field people toggle.
- What does building a candidate list cost?
- One credit per profile, from $1.00 per 1,000. A pre-send freshness check over a thousand candidates is a thousand credits, which is normally less than the cost of one badly timed send.
Other use cases
Build it this week
1,000 free credits, no card, and failed requests are never billed. Every example on this page runs against the live API.