Before creating a new candidate, query the ATS candidates search endpoint (e.g., Greenhouse Harvest GET /v1/candidates?email={email}) to check for existing records with the same email address
If no exact email match is found, perform a fuzzy name-plus-phone search using available ATS search parameters to catch cases where the candidate used a different email
Define a deduplication policy: exact email match always merges; name-only match prompts human review; no match creates a new record
If the ATS supports a merge API (e.g., Greenhouse Harvest PUT /v1/candidates/{id}/merge), call it to consolidate duplicate records, designating one as the primary
Log all merge decisions with the source data, matched fields, and outcome for audit and rollback purposes
Known gotchas
Email-based deduplication fails for candidates who use different emails across applications (personal vs work email); name plus phone or name plus LinkedIn URL matching provides a second signal but increases false-positive merge risk
Automated merges without human review can incorrectly combine records for two different people with the same name; restrict automated merges to exact email matches only and queue all others for manual review
Some ATS platforms do not expose a merge API; in that case, deduplication must be enforced at ingestion time only, and existing duplicates must be resolved through the ATS UI
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp