Skip to content
Back to Blog
How-to

Importing candidates from your ATS: what the CSV needs (and what it doesn't)

You do not have to leave Greenhouse, Lever, Workable or Ashby to get AI scoring on your applicants. Here is exactly what the export needs to contain, the one column no ATS gives you, and what happens when you upload the same file twice.

Veri Ferdiansyah
September 17, 2026
4 min read
Spreadsheet with four highlighted columns and a ZIP file icon, flowing into a ranked candidate list with green ticks
Four required applicant columns, a roles file and a ZIP of resumes are all an ATS export needs before AI screening. The one column no ATS provides is role_ref.

Most teams that want AI screening already have an ATS and no intention of switching. The practical route is an export: candidates and job openings out of the system you use, into a tool that scores them, results read in that tool. This guide covers the file side of that, because the file is where most first attempts fail.

It is written around HyreTech's import, which takes three files and runs every applicant through the same scoring as candidates who applied directly. The column names are ours, but the shape of the problem is the same for any tool that imports from an ATS export.

The three files

File What it holds Required columns
roles.csv One row per job opening external_role_id, name, category (Tech or Non-Tech)
candidates.csv One row per applicant name, email, role_ref, resume_file
resumes.zip The resume files Filenames must match resume_file exactly

Everything else is optional. Unknown columns are ignored rather than rejected, so you do not have to strip your export down before uploading it. The full list, including the optional fields that show up on the scorecard, is in the applicants CSV reference.

The job openings file

Every ATS calls this something different: jobs, requisitions, openings, positions. Whatever the label, you need one row per opening with a stable identifier, a name and a category. The identifier is what the applicants file points at, so pick something that will not change if you export again next month. The ATS's own job ID is the safe choice.

Three more columns are optional but validated when present: employment_type (Full-time or Contract), work_settings (WFO, WFA or Hybrid) and status (Draft, Active or Closed). A row with an unrecognised value in one of those is skipped and reported, not silently corrected.

Two long-text columns do most of the work: job_description and job_requirement. They accept multi-line Markdown, and they are what the scoring rubric is built from. An opening exported with a one-line description gets a one-line rubric. If your ATS export truncates descriptions, paste the full text back in before uploading.

The applicants file

Four columns are required.

  • name as you want it to appear on the scorecard.
  • email, which is how a re-upload finds the existing candidate instead of creating a duplicate. It has to be unique per role.
  • role_ref, the identifier of the opening this person applied to. It must match a value in the roles file.
  • resume_file, the filename inside the ZIP, extension included, case-sensitive.

Phone, LinkedIn URL and similar fields are optional, shown on the profile and never used in scoring.

The one column no export will have

role_ref is the column that catches people out. No ATS emits it, because no ATS knows what another tool will call its openings. You add it yourself: one extra column in the applicants export, filled with the ID of the job each person applied to.

In practice this is a lookup in a spreadsheet. Export applicants with whatever job column your ATS provides, export openings with their IDs, then match the two. Ashby and Workable let you choose export columns, which makes this a two-minute job. Greenhouse and Lever hand you a fixed export, so the lookup happens after. The guide to what to export from your ATS covers the four of them one by one.

What happens on upload

The upload returns immediately and the work runs in the background with a progress bar. Each row is validated on its own: a missing resume, a blank category or a duplicate email skips that row and reports it, and the good rows still land. A batch finishes as Completed, Partial or Failed, and the report lists every skipped row with its reason.

Applicants become real candidates attached to the role they applied to, and each one is queued for scoring against that role's rubric. Results appear in the normal candidate views, filterable by import batch.

Imported openings are created for scoring only. They are never published to the public job board.

Re-uploading the same file

This is where import tools differ most, and it is worth testing before you trust one. On HyreTech a second upload of the same batch does not create duplicates: candidates match on email, openings match on external_role_id, and the import updates in place. Edits in the file take effect, so a corrected job description or a replaced resume flows through. And only applicants whose resume or role text actually changed are scored again, so a re-import after topping up credits does not pay twice for work already done. The re-upload article has the edge cases.

What it costs and what it does not do

Scoring is metered like every AI action: one credit per applicant analysed. The batch shows the estimated cost before it starts. If the balance runs out mid-batch, the import is never blocked; the remaining applicants are scored automatically once credits are added. The credit article lists what does and does not consume one.

Two boundaries to know before you plan around this. Import is file upload only; there is no live connection to your ATS and no button that syncs it. And there is no write-back: scores and shortlists live in HyreTech and are read there. If either of those is a deal-breaker, the keep-your-ATS overview explains what the workflow looks like with those constraints.

Before you export anything

Take one applicant's resume and the opening's description and run them through the free resume screener. It takes two minutes and tells you whether the scoring is worth the export. If it is, create a free workspace: the free plan includes one active role and 20 credits, enough to import a small batch and see the ranking on your own data.

FAQ

Which columns does the job openings CSV need? Three required: external_role_id, name and category. Optional columns for employment type, work setting and status are validated against fixed values when present, and the description and requirement columns accept multi-line Markdown.

Does HyreTech connect directly to Greenhouse, Lever, Workable or Ashby? No. It works with your ATS through a CSV export plus the resume files. There is no live sync and no write-back of results.

What if my ATS export has extra columns? They are ignored. You only need to add role_ref and make sure the four required applicant columns are present.

Will re-uploading create duplicate candidates? No. Candidates match on email and openings on their external ID, so a repeat upload updates in place and only re-scores applicants whose resume or role text changed.

Ready to get started?

Hire smarter with AI-powered candidate screening — start free today.

Start free
Import candidates from your ATS by CSV: the column guide | HyreTech