ATS integrations
Not available yet. When it is, your applicant tracking system will send applicants in, anything that cannot be matched to a role will wait for a person rather than be guessed at, and nothing will be written back.
Current status
Not available yet. Connections to Ashby, Lever and Greenhouse are built, and none is switched on. Each will be switched on once it has been tested against a real account of that vendor. Until then, the Applicant tracking system section of Settings → Integrations offers only a test provider.
If you need a specific ATS, tell us which one. In the meantime, people who applied through your ATS can be brought in by uploading their résumés on the job (Add résumés). Integrations lists every other connection and who sets it up.
The rest of this page describes how the connection will work.
The problem it solves
Most teams already have an applicant tracking system and are not going to stop using it on day one. Applicants keep arriving there, and a candidate who applied through the ATS should reach the same rubric, the same disclosure and the same scoring as one who applied through the careers page.
The hard part is what to do when the ATS says something we cannot act on: an applicant naming a role that does not exist here, a role that exists but is paused, an applicant with no email address, the same message delivered twice. Guessing at any of those is how a real person goes missing.
How it works
The ATS notifies us when someone applies or withdraws. Each notification is checked to come from your ATS before anything is read from it. We then fetch the applicant, with their résumé where the ATS holds one, and admit them exactly as the careers page does. See Getting candidates in.
The rule: never guess a mapping
An applicant arrives naming a job in your ATS. If no job here is linked to it, we do not pick the closest title and we do not drop the applicant. We draft the role as a draft job, tell your admins, and hold the applicant until a person activates the job. Activating it brings in every applicant who was held for it.
The same rule covers a job that exists but is a draft or paused. A paused job is a decision someone made, and emailing candidates about a role nobody is hiring for would override it silently.
Other outcomes are shown in the integration's section in Settings:
- Held for a person: the integration was removed before the applicant could be fetched, but somebody did apply, and the list says so.
- Failed: the ATS said the record is gone, the id is wrong or the key was refused. The reason is shown.
- Retried: a temporary error is retried, and we are alerted if the retries run out.
Withdrawals stop everything already in flight
A candidate who withdraws in the ATS is withdrawn here too, and anything already scheduled for them is stopped. One who withdraws while held for an inactive job is not brought in when the job is later activated.
Intake only: nothing is written back
There is no stage push, no note posted back and no status sync. Your team works the candidates here, and a second channel back into the ATS would double the ways an integration can fail in front of a candidate.
What you will do
- An admin adds the integration in Settings → Integrations and stores the ATS's API key and signing secret. A stored secret is never shown again; the screen shows that it is set and when.
- Paste the address the screen gives you into the ATS.
- Watch for drafted roles and held applicants, and activate the roles you want. Activation needs the same things as any job: a verified company and a person's confirmation of the role's facts. See Publishing a role.
Limits and edge cases
- Duplicate deliveries are safe. Every ATS resends now and then, and the same applicant is never admitted twice.
- Raw ATS data is kept for 30 days and then deleted, whatever your longer retention setting says.
- A drafted job has no rubric until someone generates one. It is a draft so that a person reviews it.