The Job-Change Reconciliation Playbook: Moved Contact to Clean Record
You will process a weekly batch of job changes so each person's new employer, verified email, and owner are correct while old history stays linked and no duplicate is created.
Key takeaways
- Default the handling decision to create-new-and-link. Never overwrite the employer on the old record and never delete it, because both silently destroy old-account attribution and history.
- Email is the wrong match key: it is the field the move itself invalidates. Resolve identity on a stable profile URL or person ID, and fall back to fuzzy name only with a second corroborating field.
- Exact-key-only matching misses roughly 30 to 40 percent of real duplicates, so a job-change process that leans on email-exact matching reports 'no duplicate created' while quietly creating them.
- Survivorship is a distinct step applied at the attribute level, not the whole record. Merging on 'most complete' can overwrite a fresh verified email with a stale one, because completeness is not correctness.
- Salesforce is scarce even among owners: only 42 of 1,035 US RevOps Managers in Refolk's index list Salesforce as a skill (4.1 percent), which is why the procedure must be CRM-agnostic.
- B2B contact data decays about 2.1 percent per month, compounding to 22.5 percent per year, so roughly one in four contacts is at the wrong company within a year without active maintenance.
A job-change feed tells you a customer or champion moved employers. This playbook turns each detected move into correct CRM records: new employer, verified email, re-assigned owner, old relationship history kept intact and linked to the old account, and no duplicate contact created. It is written for RevOps and recruiting-ops owners who run this on a weekly batch, and it is deliberately CRM-agnostic so the same move lands the same way regardless of who processes it and which platform they run.
Most of what ranks on this topic stops at "we alert you" or walks through a single Salesforce screen flow for one org. Neither gives you the rule for the overwrite-versus-create-new-and-link-versus-delete decision, nor the survivorship, identity-matching, and ownership-routing steps that follow. That is the gap this document fills.
Why moved contacts wreck a CRM if you handle them by hand
The core problem is that a job change destroys the same field most teams use to recognize the person. When someone leaves, their corporate email dies, the old record stays attached to the previous account, and they reappear with a new email and employer. Unless your system can connect those two identities, one person becomes two records with two histories, producing dead emails, outdated relationships, duplicate contacts, broken routing, and fragmented history.
This is not a rare edge case. B2B contact data decays at about 2.1 percent per month, compounding to 22.5 percent per year, a figure that originates in MarketingSherpa research and is validated by HubSpot's own decay simulation. Studies put the narrower job-change rate at 20 to 30 percent of B2B contacts annually, meaning a CRM without active maintenance has roughly one in four contacts at the wrong company within a year. Under certain conditions Gartner puts the upper bound at 70.3 percent.
The volume is real too. One vendor stopped repeating the folklore and measured its own database: about 1 percent a month, or 1,470,414 people changing companies in five months. So the question is not whether you will process moves, but whether you process them the same way every time. Improvised handling is where duplicates are born.
The three handling methods and why two of them lose
There are exactly three ways to handle a detected move, and only one is safe. Overwrite the employer on the existing record, delete the old record and recreate it, or archive the old record, create a new one, and link them. The default is always the third.
Here is what each choice actually does.
| Method | What it costs you | Verdict |
|---|---|---|
| Overwrite employer | Rewrites campaign membership, opportunity influence, and old-account attribution that belong to the old relationship | Never |
| Delete and recreate | Loses field history, related tasks, events, and campaigns tied to the record | Never |
| Create-new-and-link | Keeps the old record intact and inert, builds a clean new one, connects them | Default |
Overwriting looks tidy because the record "looks updated," but the old account's attribution silently vanishes. Deleting is worse: contact records carry field history, related tasks, events, and campaign memberships, and deleting legitimate records is risky enough that experienced admins never recommend it. Create-new-and-link is the documented best practice precisely because it preserves both histories and lets you see the person's full arc across two accounts.
The create-new-and-link path for one move
- Archive oldMark opted out of email and calls, set status to No Longer At Company
- Create newNew account, new verified email, new title
- LinkPopulate the predecessor lookup so both records point at each other
- RouteAssign new owner, create dated follow-up task, reassign open tasks
Why email is the wrong match key, and what to use instead
Match on a stable profile URL or person ID, never on email. Email is an elective identifier that changes with each new job, and it is the exact field the move invalidates. That is the fundamental problem with email-first tracking: the field you use to identify someone is also the field most likely to become useless when the event you are detecting occurs. Roughly 23 to 30 percent of email addresses go stale each year.
A profile URL is stable and repeatable. It is one identifier you can drop into a CRM field and feed back into another tool later. Better still, a resolved person can carry an ID that stays the same across requests, job changes, and company moves. That is what lets you deduplicate records and detect when the same person shows up twice under two emails.
When you match, prefer company domain or profile URL over fuzzy name. Compare the enriched current employer to the account name stored on the contact, and only fall back to fuzzy name when neither domain nor profile link is available. Fuzzy name alone is dangerous: a personal email gives no employer, so you search on name alone, and for a name like "James Smith" at a large firm it will match the wrong person.
Identity match, most durable at the top
- Stable person IDSurvives job changes and company moves across requests
- Professional profile URLStable, repeatable, droppable into a CRM field
- Company domain / company URLCorroborates current employer against stored account
- Fuzzy name matchLast resort; unreliable for common names without a second field
The reconciliation procedure
Run this as a batch, in order, with the roles and rough timings shown. The whole method is: pull the moves, strip the noise, resolve identity, decide the action, archive the old record, build and link the new one, protect history, then route ownership.
Moved contact to clean record, step by step
- Pull the batch of detected movesQuery champions with a stored profile URL and current account, returning contact ID, name, title, account ID and name, account owner, the profile URL, and a last-job-change-detected timestamp. Filter to champions and include only contacts with a profile URL. Roughly 30 minutes for a RevOps analyst.
- Confirm each move is real, not noiseSkip any contact whose enriched employer still matches the stored account, and skip any whose last-job-change-detected timestamp is already after the reported start date, because that move surfaced in a prior run. About 20 minutes.
- Resolve identity to a durable keyAttach or verify the profile URL and stable person ID, capture the new verified work email, and prefer domain or profile-URL matching over fuzzy name. About 20 minutes. Every row now carries a non-email anchor.
- Decide overwrite, create-new-and-link, or deleteDefault to create-new-and-link; never overwrite the employer on the old record and never delete a legitimate one. About 15 minutes for the RevOps owner. Each row is tagged with an explicit action before anything is written.
- Archive the old contactUpdate the old record to archived rather than deleting it: mark it opted out of email and calls and set status to No Longer At Company. Append the marker to the last name if you use that convention. Per record.
- Create the new record and link to predecessorCreate the new record with new account, new verified email, and new title, then populate the predecessor lookup so both records point at each other. Per record. Two linked records, one person.
- Preserve history correctlyConfirm activities carrying a Related-To anchor stay attached to the old account, and decide the primary-account roll-up setting deliberately. One-time config plus a verify pass.
- Route owner and create a follow-up taskSet the new contact owner, create a dated follow-up task tied to your response-time SLA, notify the rep, update the lifecycle stage, and reassign open tasks to the new owner. Seconds via workflow.
One sequencing note that matters. Some walkthroughs run archive-then-create inside a single button click, which is fine per record. But when a move triggers a merge across duplicates, sequence parent records (accounts) before child records (contacts). Delete or reparent the wrong record first and history can orphan permanently. Back up before you commit, and verify before you commit.
The friction this procedure fights is finding the moves and resolving each person to a durable identity before you touch the CRM. Refolk does that resolution in plain English, returning a stable profile link and verified email per person, so the anchor exists before you decide overwrite versus create-new-and-link. Because Refolk resolves each person to an ID that survives the move, the deduplication step has something reliable to match on rather than the email the move just killed.
Preserving old-account history correctly
The old-account timeline survives a move only if activities are anchored by the Related-To field, and the primary-account roll-up setting is decided on purpose rather than left on by default. This is where a clean-looking reconciliation quietly loses history, so treat it as its own configuration task.
The activity Related-To field (the WhatId, in Salesforce terms) creates an anchor. When it is populated, the activity stays connected to that record regardless of where the contact moves. Separately, there is a setting called "Roll up activities to a contact's primary account." When enabled, activities linked to a contact automatically appear on that contact's current primary account. So the same org can show two behaviours at once: newly logged activity follows the person to the new account, while old activity anchored to the old account stays put.
Three facts govern how you set this.
- Salesforce officially recommends deselecting the roll-up option, because an activity logged against a contact referencing a related account gets counted against the contact's primary account, distorting reports.
- The setting is not retroactive. When you change it, only new activities are affected; existing activities move only if updated in a way that recalculates the roll-up.
- If you turn roll-up off, activities appear only via the Related-To field. If that field is blank, the activity appears on no account at all.
Survivorship: what the merged record should contain
When a move produces a merge, survivorship decides which value wins for each field, applied at the attribute level and never at the whole-record level. Matching tells you which records are duplicates; survivorship tells you what the merged record should contain. This is the step home-grown efforts skip, and it is where they lose the better value.
Do not merge on "most complete." Completeness is not correctness. The most complete record can carry a stale email that overwrites a fresher verified one. Instead, assign the winning value field by field using explicit rules.
| Field type | Survivorship rule | What it protects |
|---|---|---|
| Contact details (email, phone) | Most recent wins; verified beats unverified | Keeps the working new-employer email |
| First-touch attribution | Earliest date wins | Preserves the origin of the relationship |
| Consent preferences | Most restrictive wins | Prevents contacting someone who opted out |
The recognized rule types are source priority, most-recent, most-complete, quality-score, conditional, and hybrid chains, all applied per attribute. For a moved contact, "most recent wins" on contact details, "earliest date" on first touch, and "most restrictive" on consent will cover the common cases. Write the rules down so the same move produces the same merged record no matter who runs the batch.
Matching finds the duplicates; survivorship decides what the merged record keeps. Skip the second step and you lose the better value.
Routing the new owner and the follow-up
The move is not finished until the new account's owner holds a dated follow-up task and no tasks orphan on the departed rep. Owner routing plus a follow-up task is a standard handoff pattern: assign the contact owner, create a follow-up task, notify the rep, and update the lifecycle stage, ideally within seconds, because speed to lead is the single biggest predictor of conversion at handoff.
The trap is that reassigning the record owner does not reassign the record's open tasks. When you change the contact owner, associated open tasks need an explicit reassign step, or they stay with the rep who no longer owns the relationship. Build the reassign into the routing workflow, then report on tasks whose owner does not equal the record owner to catch any that slip through.
WHEN a new contact is created via job-change reconciliation
SET contact owner = owner of the new account
CREATE follow-up task
subject: "Job change: re-open relationship with {contact name} at {new account}"
due date: today + {response-time SLA in days}
assigned to: new contact owner
REASSIGN all open tasks on the new contact to the new owner
UPDATE lifecycle stage to your re-engagement stage
NOTIFY new owner (email or channel message)
VERIFY no open task remains owned by the previous repWire this into your routing tool so every create-new-and-link produces the same handoff.
How this goes wrong: failure modes and false positives
Every failure below produces a record that looks fine and is not. For each, the false positive is what you would see, and the check is how you catch it before it ships.
- Email as the match key. Two different people share a recycled corporate address and get merged into one. Check: require a profile-URL or person-ID match before any merge.
- Overwriting the employer field. The record "looks updated" while old-account attribution has silently vanished. Check: diff campaign membership and opportunity influence before and after the change.
- Assuming the roll-up setting fixed old records. An admin flips the setting and believes history is repaired; it is not, because only new activities are affected. Check: audit a known moved contact's old-account timeline after the change.
- Blank Related-To fields. With roll-up off, activities show only via Related-To; where it is blank, the activity appears on no account. Check: query activities with a null Related-To before flipping the setting.
- Fuzzy-name match on common names. A common name at a large firm matches the wrong person. Check: require a second corroborating field, such as domain or profile URL.
- Whole-record survivorship. The "most complete" record wins and overwrites a fresh verified email with a stale one. Check: enforce attribute-level rules and inspect the email field specifically.
- Tasks not reassigned with the owner. The contact owner changes but open tasks stay with the departed rep. Check: report on tasks whose owner does not equal the record owner.
- Wrong merge order. Deleting or reparenting the child before the parent orphans history permanently. Check: confirm parent-before-child sequencing and back up first.
Which handling decision fits the situation
Who runs this, and why it must be CRM-agnostic
Write the playbook so it does not depend on deep platform-specific knowledge, because most owners do not have it to fall back on. In Refolk's index of professional profiles, there are 1,035 US Revenue Operations Managers, and only 42 of them list Salesforce as a skill: a floor of 4.1 percent, since skill fields are self-reported.
| Segment | Count | Share of US total |
|---|---|---|
| All US RevOps Managers | 1,035 | 100% |
| US RevOps Managers with Salesforce skill | 42 | 4.1% |
Column source: Refolk's index (skill filter "Salesforce"); share is derived. Skill fields are self-reported, so treat 4.1 percent as a floor.
Team size raises the stakes per record. The UK RevOps pool is roughly one-fifth the US pool, which means smaller teams process the same weekly batch with fewer specialist hands - exactly the condition under which improvised, non-repeatable handling creates duplicates.
| Market | RevOps Managers | vs US |
|---|---|---|
| United States | 1,035 | 1.0x |
| United Kingdom | 207 | 0.20x |
Column source: Refolk's index (title "Revenue Operations Manager", country filter); "vs US" is the derived UK/US ratio.
Decay also varies by field, which is why survivorship rules are field-level rather than record-level. The fields that move most are exactly the ones a job change touches.
| Field | Annual decay |
|---|---|
| Email addresses | 23-30% |
| Job titles | 25-35% |
| Phone numbers | 20-25% |
Column source: publisher ranges per row (not derived).
Before you call the batch done
Run this checklist against every record in the batch, not the batch as a whole. A single overwrite or an orphaned task is enough to break the guarantee this playbook makes.
Reconciliation done means all of these are true
- Every processed row matched on a profile URL or person ID, not on email alone
- No employer field was overwritten on any old record
- No legitimate record was deleted
- Each old record is archived, opted out of email and calls, and set to No Longer At Company
- Each new record is linked to its predecessor via the lookup field
- Survivorship was applied at the attribute level, verified on the email field
- The old account's activity timeline is unchanged after the run
- Activities with null Related-To were checked before any roll-up setting change
- The new owner holds a dated follow-up task and no open task remains with the previous rep
- Merges ran parent-before-child, with a backup taken before commit
Keeping the process current
Re-check the mechanism, not a headline number, because the decay and job-change rates you will see quoted drift by source and by year. On a fixed cadence, sample a handful of known moved contacts and audit their old-account timelines to confirm history stayed put; that single audit catches the roll-up, Related-To, and overwrite failures in one pass. Confirm your identity anchor still resolves the same person across two emails, since that is the assumption the whole method rests on. And whenever your routing tool changes, re-test that open tasks reassign with the owner, because that is the failure most likely to reappear silently after a config change.
Questions practitioners ask
Should I create a new contact when someone changes company, or just update the existing one?
Create a new record and link it to the old one. The documented best practice is create-new-and-link: archive the old record, create a new one for the new employer, and connect them. Updating the existing record in place overwrites the employer field, which silently rewrites the historical campaign membership, opportunity influence, and attribution that belong to the relationship with the old account.
How do I track job changes in Salesforce without breaking activity history?
Rely on the activity Related-To (WhatId) field to anchor each activity to the old account, so it stays connected regardless of where the contact moves. Decide the 'Roll up activities to a contact's primary account' setting deliberately; Salesforce officially recommends deselecting it because it can skew reporting. Remember that setting changes are not retroactive, so flipping it never repairs history on records that already moved.
Why shouldn't I match job changes on email address?
Because email is the field the move itself invalidates. When someone leaves, their corporate email dies, so the identifier you would use to match is exactly the one that becomes useless at the moment you need it. Roughly 23 to 30 percent of email addresses go stale each year. Match on a stable profile URL or person ID instead, and fall back to fuzzy name only with a second corroborating field.
How do I avoid creating duplicate contacts during job-change deduplication?
Resolve identity to a durable key before writing anything, and never treat email-exact matching as sufficient. Exact-key-only matching misses about 30 to 40 percent of real duplicates, so it reports 'no duplicate created' while quietly creating them. Require a profile-URL or person-ID match before merging, and check parent-before-child sequencing so history does not orphan.
What is survivorship and why does it matter for a moved contact?
Survivorship decides what the merged record should contain, applied at the attribute level rather than the whole record. For a moved contact, use 'most recent wins' for contact details, 'earliest date' for first-touch attribution, and 'most restrictive' for consent. Whole-record merges fail because the 'most complete' record can overwrite a fresh verified email with a stale one; completeness is not correctness.
How do I reassign the contact owner after a job change?
Route the new record to the new owner, create a dated follow-up task tied to your response-time SLA, notify the rep, and update the lifecycle stage. Crucially, reassign associated open tasks to the new owner too; a common failure is the owner changing while old tasks stay with the departed rep. Report on tasks whose owner does not equal the record owner to catch this.
Try it on the search you came here for
Stop building boolean strings. Just describe the person.
Type one sentence. I plan the search, read GitHub, public LinkedIn and Crunchbase records, and the open web as it is right now, and hand back a ranked list with the reason next to every name.
01Describe them
One plain sentence. Role, city, stack, stage, whatever matters to you.
02I read the web live
GitHub, public LinkedIn and Crunchbase records, the open web. Not a database that went stale last quarter.
03You read the shortlist
Ranked, with the reasoning under every name. Open a profile, ask a follow-up, narrow it down.
- Staff backend engineers in NYC who shipped Rust in production
- Series A fintechs in SF under 50 people, growing headcount this year
- Maintainers of fast-growing Rust web frameworks on GitHub
- No boolean, no filters, no seat to buy. One box.
- Read at search time, so a profile updated yesterday counts today.
- Every step visible as it runs, every name with its reason.
500 free credits on sign-up. No card, no demo call. See real searches.