CRM → Sequencer · CRM
When your champion changes jobs.
Your customer contacts from the CRM in one list. ListPlus detects the move, checks whether the new company fits, finds the new work email and hands off – to the account owner if the company is already a customer, otherwise into the sequence.
Your agent sets it up, the list runs
“Yes” only when the old position has ended · “Check” on weaker hints
Example · fictional contacts, real prices
Watch it
Who does what
Set up once, the list keeps running.
- Claude CodeClosed-won from the CRMname · company · LinkedIn
- Claude CodeCreate list, column, rulerule starts paused
- ListPlusDetect the job changeYes / Check / No0.5 cr per profile↳ Your team: “Check” → team – no automation
- ListPlusNew company: a customer?match with the customer list↳ Sequencer · CRM: Customer → owner – task in the CRM
- ListPlusFind, verify the new emailcharged only on a hitbudget 10 cr per contact
- Your teamSee estimate, switch rule ononce – then the list runs
- Sequencer · CRM“Warm” → sequencenever the cold sequence
Setup
Build this workflow.
Your contacts from closed-won deals (name, company, LinkedIn URL) – as a CSV or from the CRM. A reference list of your customers for the match.
What does a run cost?
Detection reads the profile: 0.5 credits per contact ($0.02 on Pro). The new address on a detected move: expected 2.1 credits, at most 8 credits – only on a hit. The rule keeps the budget per contact you set.
- Claude Code by call
Create the list from the CRM
The agent reads the closed-won contacts from the CRM and creates the list “Champions”. The column “Job change” (Yes / Check / No) and the match against the customer list come with it.
- ListPlus runs automatically
Detect the job change
The current profile is read and compared with the company in the list. “Yes” only when the old position is marked as ended; “Check” on weaker signs. A hard bounce of the old address counts as a hint.
- ListPlus runs automatically
Check the new company
Is the new company already a customer or in an open deal? Then the contact belongs to the owner – never in a new-logo sequence. If it fits the ICP, the play continues.
- ListPlus runs automatically
Find and verify the new address
The rule looks up the work email at the new company – with a budget per contact – and verifies it. Only with a deliverable address does the status change to “Warm”.
- Your team manual in ListPlus
Approve the rule
The rule is created paused. You see the estimate and switch it on. First message in week two at the earliest – and never with internal numbers from the old account.
- Sequencer · CRM runs automatically
Hand off
“Warm” → the sequence for former champions (never the cold one). Existing customer → a task for the owner in the CRM.
With your agent
Give your agent this brief.
The “Set up” right for the connection, a customer list for the match, a pipeline to the sequencer or the CRM.
The same call from Claude Code, ChatGPT, Cursor or an n8n HTTP node – MCP and REST offer the same tools.
Agent guide (.md) ↗Create the list “Champions” and add my closed-won contacts from HubSpot (name, company, LinkedIn). Add the column “Job change” (Yes / Check / No) and a match against my list “Customers”. Rules, paused: job change = Yes and new company not a customer → find the work email (budget 10 credits per contact) and verify it. Job change = Yes, new company not a customer and email check valid → status “Warm”, hand to the lemlist pipeline. Job change = Yes and customer → status “Notify owner”. Show me the estimate before I activate the rules.
Tools and sample call
describe_setup · create_list · add_records · add_column · create_trigger · update_trigger · query_records
add_column({
"list_id": "<shared_list_id>",
"columns": [
{
"kind": "job_change",
"title": "Job change",
"with_hints": true
}
]
})
create_trigger({
"list_id": "<shared_list_id>",
"name": "Move → new email",
"on": "changed",
"conditions": {
"groups": [
[
{
"field": {
"kind": "jobChange"
},
"op": "isAnyOf",
"values": [
"changed"
]
},
{
"field": {
"kind": "reference",
"listId": "<customers_list_id>"
},
"op": "isNotIn"
}
]
]
},
"actions": [
{
"kind": "enrich",
"fields": [
"email"
],
"budget_per_record": "10"
}
],
"activate": false
})
create_trigger({
"list_id": "<shared_list_id>",
"name": "Valid address → Warm",
"on": "match",
"conditions": {
"groups": [
[
{
"field": {
"kind": "jobChange"
},
"op": "isAnyOf",
"values": [
"changed"
]
},
{
"field": {
"kind": "emailCheck"
},
"op": "isAnyOf",
"values": [
"ok"
]
},
{
"field": {
"kind": "reference",
"listId": "<customers_list_id>"
},
"op": "isNotIn"
}
]
]
},
"actions": [
{
"kind": "status",
"status": "Warm"
},
{
"kind": "pipeline",
"pipeline": "lemlist"
}
],
"activate": false
})Try it with your data
A move counts only when the old position is marked as ended (“Yes”); “Check” stays with your team. Nothing is handed off without a deliverable new address – the most common reason this play otherwise fails.