Prompt
How do I set up career site integration software to route applicants back into our ATS without duplicating records?
Latest observation
To route applicants from a career site into your ATS without creating duplicates, the key is to make the ATS the system of record and use a unique matching strategy before creating any new candidate/application.
Recommended setup
1) Define a unique candidate identifier
Pick one or more fields your integration uses to check whether a candidate already exists in the ATS:
- Primary: email address
- Secondary: phone number
- Best practice: ATS candidate ID, if already known
- Optional: government ID or internal external-ID fields, if your ATS supports them and your process allows it
2) Use an “upsert” pattern, not “always create”
Your integration should:
- Receive the application from the career site
- Search the ATS for an existing candidate by the matching rule
- If found, link the new application to the existing candidate
- If not found, create the candidate
- Then create the application/lead/event associated with that candidate
This avoids duplicate candidate records.
3) Separate candidate and application records
In many ATSs, a person can apply multiple times. Your integration should:
- Reuse the same candidate profile
- Create a new application record for each job submission
- Avoid creating multiple candidate profiles for the same person
4) Normalize data before matching
To reduce false duplicates:
- Lowercase and trim email addresses
- Standardize phone formats to E.164 if possible
- Remove punctuation/spaces from names only if your ATS matching requires it
- Apply consistent country/state formatting
5) Decide what counts as a duplicate
Create clear rules for edge cases:
- Same email, different phone → treat as same candidate
- Different email, same phone → maybe same candidate, maybe manual review
- Re-applying to a different job → same candidate, new application
- Returning applicant who changed email → use manual merge or secondary match rules
6) Use webhooks or API callbacks if available
If your ATS supports it, use:
- Search endpoint to find candidate by email
- Create candidate endpoint
- Create application endpoint
- Idempotency keys to prevent repeated submissions from creating duplicates
- Webhook acknowledgments to confirm successful sync
7) Store the ATS candidate ID in your career site integration
After the first successful sync:
- Save the returned ATS candidate ID in your integration database
- On later submissions, use that ID first
- This is more reliable than matching by email every time
8) Add a retry-safe design
Duplicates often happen during retries or timeouts. To avoid that:
- Use a unique submission ID for each application event
- Make create calls idempotent where possible
- If a timeout occurs, re-check whether the record was already created before retrying
9) Build a merge/fallback workflow
For uncertain matches:
- Queue the record for recruiter review
- Let recruiters merge duplicates in the ATS
- Feed merged IDs back into your integration mapping table
Example flow
- Applicant submits form on career site
- Integration receives submission with email and job ID
- Integration searches ATS for candidate by email
- If candidate exists:
- reuse candidate ID
- create new application for job ID
- If no candidate exists:
- create candidate
- create application
- Save ATS candidate ID and application ID in your integration logs
Common pitfalls
- Creating candidate records before checking for matches
- Using only name matching
- Not saving ATS IDs after the first sync
- Retrying failed requests without idempotency
- Treating each job application as a brand-new person
If you want the cleanest architecture
Use:
- ATS candidate ID as the canonical identifier
- Email as the initial match key
- Upsert logic
- Idempotency keys
- Application records separate from candidate records
- A duplicate-review queue for edge cases
If you want, I can also give you:
- a sample API workflow,
- a database schema for deduping, or
- a vendor-neutral integration checklist.
Observation history
See 1 earlier observation
Create a free Obsurfable account to unlock historical responses, model comparisons, and deeper brand intelligence.
How did Obsurfable measure this prompt?
Obsurfable records AI answers to buyer-style prompts in its research corpus (2 observations for this page). Metrics are distributions over observations, not a single static ranking.
Which AI systems does Obsurfable collect answers from?
OpenAI, ChatGPT, Google, Gemini, Google AI Mode, Anthropic, Claude, Perplexity, Grok, DeepSeek, Mistral, Copilot, and Meta AI.