
C · Best HR platform / ATS
How to switch ATS without losing your candidate data
An ATS migration goes wrong at the export, not the import. Here is what a CSV leaves behind, how two major vendors document their exports, and the order to run the move in.
- Export everything, verify it, and only then cancel the old subscription. Most ATS migrations lose data at the export step, because the file people download is a spreadsheet of candidate rows and the resumes stay behind on the platform they are leaving.
- What follows comes from two vendors' own documentation, read in September 2026, plus the order of operations we would run.
The gap between an export and your data
- A candidate record is a bundle. There is the row (name, contact details, source, current stage), and then there is everything attached to it: the resume, the portfolio, interview scorecards, stage history, notes, email threads.
- CSV handles the row. It has no way to carry the rest.
- Workable documents this plainly. Its candidate details report exports to CSV on any recruiting plan, and the help center states that "resumes or other files won't be included in the Candidate details report export". Resume files come through a full data export instead, which arrives as a zip containing CSVs for candidates, comments, jobs and members, with attachments organized in folders by job and then by candidate.
- Greenhouse exposes the same distinction through its API. The Harvest API exists so organizations can "export their data from Greenhouse", and it reaches candidates, applications, scorecards and attachments through separate endpoints.
- So before you agree a cutover date, ask your outgoing vendor one question: does this export include the files, and in what structure?
Vendor mechanics that shape the schedule
- Two details from those docs constrain the timeline.
- Greenhouse returns attachments as URLs to external resources valid for 7 days. Your export is a download job with a deadline attached, and storing the links instead of the files leaves you with a list of dead URLs a week later. Harvest also rate-limits requests against the value in the X-RateLimit-Limit header per 10 seconds, returning HTTP 429 above it, so a large pull is a throttled background job. Authentication is Basic Auth over HTTPS with an API token as the username, and creating that token needs the "Can manage ALL organization's API Credentials" permission, which is worth confirming with whoever administers the account before migration week.
- Workable advises timing the request: "The best time to request a full data export is when all your jobs are archived, so there are no new activities, candidates, or other data you might want included in the export." A moving pipeline produces an export that is already out of date when it lands.
What the receiving system needs
- Workable's inbound migration page is a useful template for what any new vendor will ask you for, even if you are moving somewhere else.
- It lists 14 supported source systems and asks for "a set of csv and/or xml files with candidates and job information" plus "a folder with candidates' attachments, depending on the ATS". For Greenhouse and Recruitee you hand over an API key rather than files. There is a stage mapping document to complete, which is where your old pipeline stages are matched to the new ones. Above 40,000 candidates, a sample import is verified before the full migration runs.
- One operational note from that page: during migration, "GDPR settings and Hiring Plan will be automatically disabled", and Workable asks that you leave them off until it finishes. Automated deletion rules firing mid-import would work against the import itself. Put the date they go back on in the plan, because a compliance control that stays off after the migration is a different problem.
- Cost varies by plan. Workable's help center says one-time migrations from supported systems are free on Premier and Enterprise and "available at a cost" on Standard annual. Ask every shortlisted vendor the same question and put the answer in your total, alongside the numbers in [what an applicant tracking system costs in 2026](/spaces/ats-cost-2026).
The order to run it in
- Decide what you are keeping. Active pipelines and recent applicants almost always move. Five-year-old rejected applications may be due for deletion under your own retention policy instead.
- Pull a full export from the old system, files included, while you still have a paid account.
- Verify the export offline. Open the zip. Count candidates against a number from the old system's reporting. Open ten resumes at random.
- Map the stages. Your new system's stage names will not match the old ones, and this is where history gets flattened if nobody checks.
- Import, then reconcile. Spot-check a sample of records end to end: the row, the attachments, the scorecards, the stage.
- Run both systems read-only for a period before you cancel anything.
- Cancel, with the export archived somewhere you control.
- Step seven has a trap in it. Workable's cancellation article distinguishes between dropping to the free plan, where "candidate data will be kept intact, but candidates will be in 'read-only' mode", and closing the account permanently, where "all your recruiting data will be deleted" and "once the account is closed, recovering this data may not be possible". Those two buttons look similar in a billing screen and do very different things.
The candidates in the file
- Every row you are moving belongs to a person. Under GDPR Article 20, a data subject has the right to receive their personal data in a "structured, commonly used and machine-readable format" and to transmit it to another controller, where the processing rests on consent or contract and runs by automated means. Article 20(2) adds the right to have it transmitted directly between controllers where that is technically feasible.
- For a migration, the practical implications are ordinary. Deletion requests that arrive mid-move still need handling. Retention clocks keep running on the old data, so an archived export is not a way to keep records past the period you told candidates about. And a candidate who asks where their application went deserves a real answer.
Then use the move
- A migration is a good moment to change what your hiring system rewards. If applicants are scored on keyword overlap with the job description, the same qualified people get buried in the new tool as in the old one. Our pieces on [Greenhouse alternatives](/spaces/greenhouse-alternatives-2026) and [Workable alternatives](/spaces/workable-alternatives-2026) cover what each vendor publishes; [why an ATS rejects qualified candidates](/spaces/why-ats-rejects-qualified-candidates) covers what to test before you import a single row.
Frequently asked questions
- How do I export candidate data from my ATS?
- Most systems give you two routes, and they return different things. A report export produces a CSV of candidate rows, which on Workable explicitly excludes resumes and other files. A full export or an API pull returns the attachments as well. Check which one you are being given before you schedule the cutover.
- What data usually gets lost in an ATS migration?
- Attachments, interview scorecards, stage history and email threads are the usual casualties, because a flat CSV has nowhere to put them. Workable's full data export delivers resumes in folders by job and candidate alongside the CSVs. Greenhouse's Harvest API returns scorecards and attachments through its own endpoints.
- How long does an ATS migration take?
- Plan in weeks, not days, and let volume set the schedule. Workable's migration documentation adds a sample import you verify before the full run once you pass 40,000 candidates. Attachment downloads are also time-boxed on some platforms, so the export window itself can constrain the plan.
- Do candidates have a right to their data during a migration?
- Under GDPR Article 20, a data subject can receive their personal data in a "structured, commonly used and machine-readable format" and transmit it to another controller, where processing rests on consent or contract and is automated. Article 20(2) adds direct transmission between controllers where technically feasible. Keep your deletion schedules and candidate notices running through the move.
Sources
Next step
Try it on your next role
Unframed builds shortlists by ranking people on proof of fit.