Claude Code → n8n
From a trade show CSV to a call queue.
Claude Code sets up the list, score and rules. The list looks up mobile numbers for good fits and hands qualified contacts on – to n8n in the example. Change the threshold to see who reaches the call queue.
Your agent sets it up, the list runs
Trade show leads“Build a list for our trade show leads. Add a fit score and hand qualified contacts to n8n.”
- Contact list with Qualified status
create_list - Fit score and CRM match
add_column - Enrich good fits and route qualified contacts to n8n
create_trigger
For GTM engineers
Who qualifies for a call?
Claude Code sets up the rules once. For every new lead, the list checks the fit, looks up missing contact details and hands qualified contacts to n8n.
- Claude CodeSetup permission enabled
- Create a listTrade show leads
- Add a score columnScore by industry, size and role
- Set up list rulesLook up numbers and route qualified contacts
Set up our trade show list. Score apparel companies with 201+ employees and people in buying roles. Check our HubSpot reference list.
The list has a fit score, a CRM match field and a status. Try a different score threshold.
MCP calls for this step
describe_setup({})
create_list({
"name": "Trade show leads",
"kind": "contacts",
"statuses": [
{
"name": "Qualified"
}
],
"columns": [
"first_name",
"last_name",
"company_name",
"job_title",
"industry",
"company_size",
"linkedin_profile_url",
"mobile_phone"
]
})
describe_setup({
"list_id": "trade_show_leads"
})
add_column({
"list_id": "trade_show_leads",
"columns": [
{
"kind": "in_list",
"title": "CRM match",
"reference_list_id": "hubspot_customers"
},
{
"kind": "score",
"title": "Fit score",
"criteria": [
{
"label": "Apparel",
"points": 40,
"when": {
"groups": [
[
{
"field": {
"kind": "contentType",
"key": "industry"
},
"op": "isAnyOf",
"values": [
"Apparel"
]
}
]
]
}
},
{
"label": "201+ employees",
"points": 30,
"when": {
"groups": [
[
{
"field": {
"kind": "contentType",
"key": "company_size"
},
"op": "isAnyOf",
"values": [
"201-500",
"501-1000",
"1001-5000",
"5001-10000",
"10001+"
]
}
]
]
}
},
{
"label": "Buying role",
"points": 30,
"when": {
"groups": [
[
{
"field": {
"kind": "contentType",
"key": "job_title"
},
"op": "isAnyOf",
"values": [
"Head of Buying",
"Buyer"
]
}
]
]
}
}
]
}
]
})
create_trigger({
"list_id": "trade_show_leads",
"name": "Ready for a call",
"on": "match",
"conditions": {
"groups": [
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "blank"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "valid"
}
],
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "isProfile"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "valid"
}
]
]
},
"actions": [
{
"kind": "status",
"status": "Qualified"
}
]
})
create_trigger({
"list_id": "trade_show_leads",
"name": "Qualified → n8n",
"on": "match",
"conditions": {
"groups": [
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "blank"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "valid"
},
{
"field": {
"kind": "status"
},
"op": "isAnyOf",
"values": [
"Qualified"
]
}
],
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "isProfile"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "valid"
},
{
"field": {
"kind": "status"
},
"op": "isAnyOf",
"values": [
"Qualified"
]
}
]
]
},
"actions": [
{
"kind": "pipeline",
"pipeline": "Sales Call Queue"
}
]
})
create_trigger({
"list_id": "trade_show_leads",
"name": "Find missing contact details",
"on": "match",
"activate": false,
"conditions": {
"groups": [
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "blank"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "blank"
}
],
[
{
"field": {
"kind": "column",
"name": "fit_score"
},
"op": "greaterThanOrEqual",
"values": [
"80"
]
},
{
"field": {
"kind": "reference",
"listId": "hubspot_customers"
},
"op": "isNotIn"
},
{
"field": {
"kind": "contentType",
"key": "linkedin_profile_url"
},
"op": "isProfile"
},
{
"field": {
"kind": "contentType",
"key": "mobile_phone"
},
"op": "blank"
}
]
]
},
"actions": [
{
"kind": "enrich",
"fields": [
"mobile_phone",
"linkedin_profile_url"
],
"fill": "empty_only",
"budget_per_record": "25"
}
]
})
add_records({
"list_id": "trade_show_leads",
"records": [
{
"first_name": "Giulia",
"last_name": "Ferri",
"company_name": "Moda Vesuvio",
"job_title": "Buyer",
"industry": "Apparel",
"company_size": "201-500"
},
{
"first_name": "Luca",
"last_name": "Greco",
"company_name": "Tessile Ionio",
"job_title": "Buyer",
"industry": "Apparel",
"company_size": "201-500"
},
{
"first_name": "Sofia",
"last_name": "Costa",
"company_name": "Seta Sicilia",
"job_title": "Buyer",
"industry": "Apparel",
"company_size": "201-500",
"linkedin_profile_url": "linkedin.com/company/seta-sicilia",
"mobile_phone": "+39 000 000 0000"
},
{
"first_name": "Elena",
"last_name": "Rizzo",
"company_name": "Linea Bari",
"job_title": "Marketing Manager",
"industry": "Apparel",
"company_size": "201-500"
}
]
})Fit score
- Trade show CSV4 contacts
- CRM match3 newAlready in HubSpotLuca Greco
- Data checks2 clearNeeds reviewSofia Costa
- Fit score ≥ 801 meet the thresholdBelow thresholdElena Rizzo
- EnrichMobile · LinkedIn
- QualifiedMobile found
- n8n call queueGiulia Ferri
Watch it
Setup
Build this workflow.
A trade show CSV, ICP criteria and a shared CRM reference list. The example scores industry, company size and buying role.
What does a run cost?
At 80 points the example selects one person for enrichment. The estimate is 5 credits, at most 23 credits ($0.81 on Pro). Changing the score threshold updates the selection and estimate. Destination charges are separate.
- Claude Code by call
Set up the campaign list
Enable Set up for the connection. Ask the agent to create “Trade show leads” with the required fields and a Qualified status.
- ListPlus runs automatically
Score and check each contact
Apparel earns 40 points. A company of 201+ and a buying role each earn 30. Check contact data and CRM matches before selecting eligible new contacts for paid lookups.
- Your team manual in ListPlus
Approve the lookup rule once
Review the estimate for the selected contacts, then activate the rule. The list looks up missing contact details for each new eligible lead.
- ListPlus · n8n runs automatically
Hand off contacts who are ready for a call
When an eligible lead has a usable mobile number, the list sets Qualified and sends that row to the existing Sales Call Queue pipeline. A lookup with no result leaves the row in the list.
With your agent
Give your agent this brief.
Enable Set up for the connection, grant the appropriate list permissions, share the CRM reference list and configure an n8n webhook pipeline.
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 “Trade show leads” list with status Qualified. Add a fit score for apparel (+40), 201+ employees (+30) and buying roles (+30) and a match against my shared customer list. Add and check my trade show contacts. Estimate missing mobiles and personal LinkedIn profiles only for cleared, new contacts scoring 80 or more. Show expected and maximum credits. Create the lookup rule and activate it after I approve its budget. Once there is a usable mobile number, have the list set Qualified and hand the contact to the existing Sales Call Queue pipeline.
Tools and sample call
describe_setup · create_list · add_column · add_records · check_list · enrich_records · create_trigger · update_trigger · query_records
describe_setup({})
create_list({"name":"Trade show leads","kind":"contacts","statuses":[{"name":"Qualified"}]})
describe_setup({ list_id: "<new_list_id>" })Try it with your data
ListPlus calculates scores and runs configured rules after setup. External research tasks still need the agent. Confirm webhook receipt in the destination.