Your ATS knows everything about candidates, your CRM everything about clients, and nobody in your agency can say what last month's campaign actually delivered — because the answer sits in two systems that have never met. Below: how to connect the two without a data swamp. Who owns which record, which fields are genuinely mandatory, and in what order to build.

Why the two systems never find each other

The problem is rarely technical. Almost every ATS and CRM now has an API or integration platform. The problem is that nobody decided up front what a record means.

The same person sits in your ATS as a candidate and in your CRM as a contact, with two statuses that contradict each other. A vacancy is an assignment here and a deal there. Source is a picklist in one system and a text field in the other, where somebody once typed LinkedIn?? Connect that without agreements and you are mostly syncing the mess.

Step 1: decide which system is the source of truth for which object

This is the most important decision and it costs an hour around a table, not development budget. Per object type you name one leading system. The other may read and display, not overwrite.

  • Candidate — ATS. The person, their CV, their availability and their status in a process.
  • Company — CRM. Name, registration number, address and owner from one place, or you get three spellings of the same client.
  • Contact person — CRM. Even when that person was once a candidate.
  • Vacancy or assignment — ATS, with a reference in the CRM so your account manager sees what is running.
  • Placement — this is where the revenue sits, so the source of truth is the system you invoice from.

Write the decision on a single page and pin it up. Every argument about a duplicate record then falls back on that page.

Step 2: the minimum field set every record needs

Reporting does not work because you bought a dashboard. It works because every record has the same five fields filled in. Without those five, no analysis is possible at all.

  • Source — where this record came from, from a fixed picklist.
  • Campaign — which specific campaign or push, not just the channel.
  • First contact date — the starting point for every cycle time you calculate.
  • Status — from a fixed list, the same list in both systems.
  • Owner — one name, even when three people are working on it.

Make those fields required when a record is created. A field that is allowed to stay empty stays empty.

Free text in status fields destroys your reporting

A status field people can type into yields thirty variants within six months: in talks, In Talks, call scheduled, waiting on client, waiting on customer. You cannot filter on that or derive a cycle time from it.

Use a fixed status list of at most eight values that mark a real stage, and put all nuance in a notes field. If the statuses do not run in parallel, the integration maps them explicitly — never on the basis of the text.

If you want real conversion rates out of those statuses, look at the structure in our article on calculating your recruitment funnel.

Passing source and UTM from ad to placement

The chain always breaks at the same point: the ad has clean UTM parameters, the landing page reads them, then they vanish because the form only passes name, phone and CV.

Put hidden fields for utm_source, utm_medium and utm_campaign on every form, let them travel into the ATS, and write the placement back to that same campaign field. Only then can you trace a placement back to its ad.

Worked example. Assume campaign A cost EUR 2,500 and produced 30 applications with a source filled in; campaign B cost EUR 1,500 and produced 15. That is EUR 83.33 per application for A and EUR 100 for B. A looks like the winner. But there are also 18 applications in the system with no source. If those split 3 to A and 15 to B, A lands on 33 applications (EUR 75.76) and B on 30 (EUR 50). B is suddenly almost a third cheaper. Your conclusion flips entirely on a field nobody filled in.

Step 3: deduplication — rules first, clean-up second

Every integration doubles your duplicate problem unless you set rules for it. Agree up front what you match on and what wins.

  • Match on email address as the first key, phone number as the second.
  • Never match on name alone. A country full of Jansens punishes that immediately.
  • On a collision, the record from the source of truth for that object wins.
  • When merging, always keep the oldest first contact date, or you lose your cycle times.
  • Let a doubtful merge drop into a queue for a human.

For the duplicates you already have: do not clean your whole database in one weekend. Clean the records with activity in the last twelve months first and park the rest in an archive segment you do not sync.

Automations that pay off — and ones that do not

Automation is not a goal. Every automation has to replace manual work you would genuinely otherwise do.

These earn their keep:

  • Follow-up tasks that create themselves. A status change to submitted automatically creates a call task for two days out.
  • Status-driven email. Confirmation on arrival, a reminder before the interview, a short note after a rejection.
  • Re-inviting older candidates. A periodic selection on discipline and last contact date, with a human reviewing the list.
  • No-show follow-up. A no-show automatically triggers one call attempt and one message, instead of silence.

These cost more than they return:

  • Fully automatic rejection emails nobody looks at. You lose that candidate for the next assignment too.
  • Syncing every status change live in both directions. That creates loops where two systems keep updating each other.
  • Internal notifications on every event. After two weeks nobody reads them.
  • Auto-enriching fields nobody uses in a report.

Implementation order: six weeks, not six months

Agencies that want this perfect in one go are still talking six months later. Work in this order.

  1. Decide the source of truth per object and fix the status list.
  2. Add the five mandatory fields in both systems and make them required on creation.
  3. Set up source and UTM capture on your forms, before you connect anything.
  4. Build one-way sync: from source of truth to the other system.
  5. Clean up the active duplicates.
  6. Switch on two automations, no more, and measure for four weeks.
  7. Only then build the first two-way sync, and only for fields that genuinely need it.

What to check before you buy or commission an integration

  • Does an off-the-shelf connector exist between exactly your two systems, or are you building?
  • Are the fields you need available through the API, or only in the interface?
  • What happens on an error: does the sync stop, or does it silently skip records?
  • Can you see which records synced today without calling the builder?
  • Who maintains the integration when one of the two vendors changes its API?

If you do not know the software landscape well yet, read our overview of recruitment marketing software before you commit to a choice.

GDPR: candidate data moving between two systems

The moment you sync, you spread personal data across more places. Three things to have arranged.

  • Legal basis. Record per data flow why you share and keep that data. An integration is not a legal basis in itself.
  • Retention. Deleting in the ATS has to delete in the CRM too; a one-way deletion is not a deletion. The Dutch data protection authority's guideline: application data goes within four weeks of closing, or a maximum of one year with consent.
  • Who sees what. Your account managers do not need to see CVs to do their job. Set permissions per role, not per person.

Also record which data processing agreements you hold with both vendors and with whoever runs the integration. That is often a third party nobody counted.

Conclusion: agreements first, technology second

An ATS to CRM integration is ninety percent an organizational decision and ten percent technology. Decide who owns which record, make five fields mandatory, replace free text with fixed statuses, and only then build. If you are also using AI at the front end, read how to land that output cleanly in our article on AI sourcing in practice.

Within CAS we set up that CRM automation as part of client acquisition, so campaign, meeting and assignment line up. Want to know what is broken in your setup? Book a call and bring an export from both systems.