Most HR recruitment pipelines share the same bottleneck, it goes something like this:
The recruiter manually opens each application, downloads the resume, reads through it, copies details into a spreadsheet, emails the candidate to book a call, and chases the background check days later.
It's fine when you're hiring once a quarter.
When you're running multiple roles at once, it falls apart - fast.
Here's how to automate the screening half of that pipeline: from application received to interview scheduled.
The workflow
Candidate applies via Greenhouse → resume parsed automatically by APILayer → background check triggered via Checkr → interview booked via SavvyCal.
The recruiter's job goes from processing paperwork to reviewing a structured shortlist.
API #1 — Greenhouse (your system of record)
Greenhouse is where candidates apply and where their records live throughout the hiring process.
Rather than polling for new applications, you subscribe to the application_submitted webhook topic, which fires the moment a candidate completes their application.
POST https://{your-domain}.greenhouse.io/webhooks
{
"webhook": {
"name": "New application trigger",
"url": "https://your-app.com/webhooks/application",
"event": "application_submitted",
"secret_key": "your_secret_key"
}
}
The payload includes the candidate's name, email, application ID, and a URL to their attached resume.
That resume URL is what feeds into the next step.
Tips: Greenhouse's Harvest API v1 and v2 are being deprecated after August 2026 — build against v3 from the start. API keys are managed under Configure → Dev Center → API Credential Management, and permissions are scoped per endpoint.
API #2 — APILayer Resume Parser (resume parsing)
APILayer's Resume Parser takes a resume in PDF or Word format and returns structured JSON: name, email, skills, work history, education.
Free tier is available with no credit card required, paid plans start at $9.99/month for higher volumes.
You pass the resume URL from the Greenhouse webhook payload directly:
POST https://api.apilayer.com/resume_parser/url
Headers:
apikey: YOUR_API_KEY
{
"url": "<resume_url_from_greenhouse_payload>"
}
The response gives you structured candidate data you can write back to Greenhouse or use to score the application against your job requirements.
Tips: The parser handles PDF and DOCX well but can struggle with heavily designed or image-based resumes. Plain text CVs get the most accurate results.
API #3 — Checkr (background check)
Checkr is an API-first background check platform.
You trigger a check programmatically once a candidate clears the initial resume screen, without follow-up emails, or chasing providers.
POST https://api.checkr.com/v1/invitations
{
"package": "tasker_standard",
"candidate_id": "<checkr_candidate_id>",
"work_locations": [{ "country": "US" }]
}
Checkr sends the candidate an email to complete their consent form. When the check completes, a webhook fires back to your app with the result, which you can use to gate the next step.
API #4 — SavvyCal (interview scheduling)
Once the background check clears, you automatically send the candidate an interview slot.
SavvyCal has a clean REST API that lets you query available slots and book one programmatically.
It's a two-call pattern. First, get available slots for the interviewer's scheduling link:
GET https://savvycal.com/api/v1/scheduling_links/{link_slug}/slots
Headers:
Authorization: Bearer YOUR_PERSONAL_ACCESS_TOKEN
Then book the first available slot on the candidate's behalf:
POST https://savvycal.com/api/v1/events
{
"scheduling_link_slug": "<link_slug>",
"start_at": "<slot_start_at_from_previous_call>",
"attendees": [
{
"name": "<candidate_name>",
"email": "<candidate_email>"
}
]
}
This sends a calendar invite to the candidate, while the interviewer's calendar updates automatically.
How Everything Works Together
Your app listens on a webhook endpoint. Greenhouse fires when an application comes in, you parse the resume, trigger the background check, and — once it clears — automatically book the interview.
The recruiter steps in at the review stage with a structured candidate profile already waiting in Greenhouse.
Compare to doing this manually in Greenhoue
Greenhouse does have built-in stages and scorecards for managing candidates.
However, it doesn't automatically move candidate between stages. From "applied" to "screened" to "interview scheduled", you still require someone to manually trigger each step.
At low volume that's fine. When you're handling dozens of applications a week across multiple roles, the manual overhead adds up quickly.
Final note: What this doesn't cover
This workflow handles the screening pipeline:
- Application in
- Interview scheduled.
The interview itself, feedback collection, and offer letter are outside the scope here.
If you want to close the loop on the offer side, pairing this with a transactional email API like Resend to programmatically send offer letters is a natural next step.

Top comments (0)