CRM hygiene and prospect job changes
Weekly CRM data cleansing: duplicates merged with their history kept, prospects who changed jobs moved to their new company, and a recap posted to the team.
- Starts
- Weekly schedule
- Steps
- 4
- Checks and gates
- 0
- A person decides
- Never, runs alone
Trigger · Schedule
Weekly schedule
A fixed weekly cadence opens the run and pulls the companies and contacts to check since the last one.
Claude runs the rest autonomously
- 1
AI merges duplicates, keeps the history.
HubSpotHubSpot
Companies matching on domain and people on work address become one record, kept on whichever holds the most history.
- 2
AI spots contacts who changed jobs.
LinkedInLinkedIn
Prospects and customers whose public profile names a different employer than the record are picked out.
- 3
AI moves contacts to their new company.
HubSpotHubSpot
The old contact is closed out with a note, recreated at the new employer, and the account that lost them is flagged.
- 4
AI posts the weekly recap.
SlackSlack
One message confirms the CRM is current and names the prospects and customers who moved, for someone to act on.
Every CRM drifts the same two ways. Two people add the same company a month apart and it exists twice; someone imports a list and it exists a third time. Meanwhile a prospect changes jobs and their record keeps pointing at an employer they left a year ago, which nobody discovers until an email bounces or a rep opens a call by congratulating them on the wrong company.
Both are matching problems with public evidence available. A company's domain says whether two records are the same company, and a person's own profile says who currently employs them. The difficulty is frequency. Drift never stops, and a quarterly tidy-up leaves eleven weeks of it standing, which is why CRM data hygiene here is a weekly job an AI agent runs on a fixed schedule.
What you get
A CRM that stays clean without anyone deciding to clean it, prospects who moved found on their new employer's record, and a weekly recap of everything that changed.
What a weekly CRM data hygiene pass fixes
The run pulls the companies and contacts in HubSpot and notes when the last run happened, so the recap can say what changed since. Before any matching, it normalises the fields that matching depends on, because they are stored inconsistently:
- Country and region to one vocabulary. "UK", "U.K.", "United Kingdom" and "GB" are one country stored four ways, and they break every segment built on the field.
- Websites to a registrable domain, with the protocol,
www, paths and tracking parameters stripped. - Whitespace, names that arrived fully capitalised, and placeholder values such as "n/a", "test", "-" and "unknown".
- Phone numbers to international format where the country is known, and left alone where it is not. A number reformatted against the wrong country code is worse than an ugly one.
How duplicate records merge without losing history
Names make a terrible key. Suffixes appear and disappear, accents get stripped by whatever imported them, trading names differ from registered ones, and two unrelated companies can share one. Companies are grouped by registrable domain instead, something the company had to register, with a short list of exceptions you can enumerate: free mailbox, shared-office and agency domains are never treated as evidence. A parent and a subsidiary that share a domain but differ by country or registration number are flagged for review rather than merged.
People are grouped by work email first, then by LinkedIn profile URL where emails differ or are missing. Two people are never merged on name and employer alone. A common name at a large company is ordinary, and that merge would destroy both histories at once.
When two records merge, the survivor is whichever one carries more linked activity. A missing phone number costs a few cents to re-enrich. Six months of call notes and a deal history cannot be rebuilt at any price, so the scrappier, newer record wins whenever it holds them. Before the merge runs, the losing record's ID, email and every differing field value are written into a note on the survivor. Where both hold a different non-empty value, the survivor's is kept and the discarded one logged, so nothing a person typed is silently overwritten.
Catching prospects and customers who changed jobs
For each contact, the employer on their public profile is compared with the company on their CRM record. A mismatch is only a candidate, since profiles go stale in both directions. A move counts as confirmed when the profile shows a start date at the new employer later than the record's last activity, or when the old work address bounces. Anything else goes to a person.
A confirmed move closes out the old contact with a note saying where they went, creates or updates them on the new employer's record with a note about where they came from, and flags the old account as having lost a known contact. That flag is the reason this runs weekly. A departing champion is a retention signal that arrives well before the renewal conversation, and a contact who moved to a company already in the CRM is a warm introduction there.
One weekly recap for the team
A single Slack message closes the run. Its first half confirms the CRM is current, with counts for fields normalised, duplicate groups merged and groups flagged; most weeks that is the whole message. The second half names, one by one, the prospects and customers who changed employer, the accounts that lost a known contact, and the candidates the rules refused to decide. One message a week, because a channel that gets a notification per record edit is a channel everyone mutes.
The prompt
The real prompt behind the steps above, detailed enough that an agent with the same tools can run it as written. The Run buttons copy the full version, which also carries the steps for connecting those tools.
# CRM hygiene and prospect job changes
You have access to a CRM, a professional network, and a messaging
tool. Run this **[weekly]** across the CRM's companies and contacts.
## 1. Run on the weekly schedule
Run on a fixed weekly cadence rather than on a trigger. Record
edits arrive continuously and in small numbers, so reacting to each
one produces constant churn for no benefit; a weekly pass is frequent
enough that a job change is caught before the next renewal
conversation and rare enough that the recap in step 5 is worth
reading.
Pull the companies and contacts to check, and note the timestamp of
the last run so the recap can say what changed since.
## 2. Merge duplicates, keep the history
Normalise first, because the matching below keys on fields that are
stored inconsistently:
- Country and region to one vocabulary. "UK", "U.K.", "United
Kingdom" and "GB" are one country stored four ways, and they break
every segment built on the field.
- Website fields to a registrable domain: strip the protocol, strip
`www`, drop paths and tracking parameters.
- Whitespace, casing on names that arrived fully capitalised, and
placeholder values such as "n/a", "test", "-" and "unknown".
- Phone numbers to international format where the country is known,
and left alone where it is not. A number reformatted against the
wrong country code is worse than an ugly one.
Then group companies by normalised registrable domain. Never by name:
legal suffixes come and go, trading names differ from registered
ones, and two unrelated companies can share a name.
Group people by normalised work email first, falling back to a
professional-network profile URL where emails differ or are missing.
Never merge two people on name plus employer alone, because two
people with a common name at a large company is ordinary and merging
them destroys both histories at once.
Two cases to hold back on rather than resolve:
- Free mailbox, shared-office and agency domains are not evidence of
anything. Never merge on them.
- A parent and a subsidiary usually share a domain. Where the records
differ by country or registration number, flag rather than merge.
Merge onto whichever record carries the most linked activity, not the
oldest or the most complete on paper. A missing phone number can be
re-enriched; six months of call notes cannot be reconstructed at any
price.
Before merging, write the losing record's identifiers into a note on
the survivor: its record ID, its email, and every field value that
differed. Where both records hold a different non-empty value, keep
the survivor's and log the discarded one. Never silently overwrite
something a person typed.
## 3. Spot prospects and customers who changed jobs
For each contact, compare the employer on their professional-network
profile against the company on their CRM record. A mismatch is a
candidate, not a fact: profiles go stale in both directions.
Treat a move as confirmed when either holds:
- The profile shows a start date at the new employer later than the
CRM record's last activity.
- Their old work address now bounces.
Anything else stays a candidate and goes into the recap for a person
to look at, rather than being acted on.
## 4. Move contacts to their new company
- Do not overwrite the old record. Close the contact out with a note
saying where they went and when, so the account's history stays
intact.
- Create or update the contact on the new employer's record, carrying
a note that they were previously a contact at the old one.
- Flag the old account as having lost a known contact.
That last flag is the reason this is worth running weekly rather than
quarterly. A departing champion is a retention signal that arrives
well before the renewal conversation, and it is invisible unless two
systems are being compared.
A contact who moved to a company already in the CRM is a warm
introduction there. Say so explicitly in the recap.
## 5. Post the weekly recap
One message to the team channel, in two halves.
First, the confirmation nobody has to act on: the CRM is current as of
this run, with counts for fields normalised, duplicate groups merged,
and groups flagged rather than merged. Two or three lines. Most weeks
this is the whole message and it exists so the team knows the run
happened.
Second, the part that needs a person, named individually rather than
counted:
- Prospects and customers who changed employer, with where they went.
Each one is either a warm introduction at the new company or a lost
contact at the old, and usually both.
- Accounts that lost a known contact, which is a retention signal
ahead of the renewal conversation.
- Candidates the rules refused to decide, such as a probable parent
and subsidiary pair, or a profile mismatch that could not be
confirmed.
One weekly message, not a running stream. A channel receiving a
notification per record edit is a channel everyone mutes, which
defeats the only part of this a human needs to see.
## Output
Report: fields normalised by type, duplicate groups merged, groups
flagged for review and why, job moves confirmed, accounts that lost a
contact, warm introductions found, and unresolved candidates.
Why run it with Tulina
A prompt helps one person. A process moves a team.
Pasted into a chat, the prompt above works once, for whoever pasted it. In Tulina, "CRM hygiene and prospect job changes" becomes a process the team shares, that keeps its history, runs on its own, and stays inside the same security perimeter as the tools it calls.
The whole team works on the same one
PersonalTeamOrganisation
A process lives where it belongs: yours, your team's or the whole organisation's. Whoever runs it can improve it, and everyone starts from the best version instead of explaining the job again.
Every edit is a version
v1v2v3
Each change is a new version with the previous one kept, so a bad edit is undone by restoring an earlier one. Every run records the version it followed, and what a run teaches goes back into the process.
It runs without you
schedulewebhookon demand
A hosted agent runs the process on Tulina's own infrastructure, on a schedule or when an event arrives, and keeps going when you close the chat. Nothing to host. Every run is tracked to its outcome.
Inside the same security perimeter
vaultrolesrun log
Credentials stay in the vault, never in the prompt. Roles decide who may run what, every call is logged, and a step a person has to approve waits for that person.
Questions about CRM data hygiene
Also on HubSpot
Other processes that run mainly on HubSpot. The tools they share with this one are lit.
Follow champions who change jobs
Each week, champions at won accounts are checked for a new employer, the new company is scored on your ICP, and a warm deal opens with a note for the right rep.
- Shares
- HubSpot, LinkedIn
Weekly schedule7 steps →
Social listening to qualified leads
Every morning, competitor-post engagers and companies reading your site are matched to the CRM, qualified on your ICP, ranked by intent and handed to their rep.
- Shares
- LinkedIn, HubSpot, Slack
Daily schedule7 steps →
Expand accounts from usage
Each morning, accounts near a plan limit or on a feature their plan lacks get an offer priced on your packaging rules, an expansion deal and a drafted proposal.
- Shares
- HubSpot
Daily schedule7 steps →