← GTM Recipes

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

Claude CodeTrade show leads

“Build a list for our trade show leads. Add a fit score and hand qualified contacts to n8n.”

  • Contact list with Qualified statuscreate_list
  • Fit score and CRM matchadd_column
  • Enrich good fits and route qualified contacts to n8ncreate_trigger
Try the score threshold

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.

What Claude Code sets up once
  1. Claude CodeSetup permission enabled
  2. Create a listTrade show leads
  3. Add a score columnScore by industry, size and role
  4. Set up list rulesLook up numbers and route qualified contacts
Claude Code~/gtm/trade-show

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"
    }
  ]
})
Trade show leadsListPlus

Fit score

Apparel industry+40
201+ employees+30
Buying role+30
3 / 4 meet the score threshold
HubSpotCRM match from your shared customer list
Local demo · no credits or external requests
Which contacts reach n8n?
  1. Trade show CSV4 contacts
  2. HubSpot
    CRM match3 new
    Already in HubSpotLuca Greco
  3. Data checks2 clear
    Needs reviewSofia Costa
  4. Fit score ≥ 801 meet the threshold
    Below thresholdElena Rizzo
  5. EnrichMobile · LinkedIn
  6. QualifiedMobile found
  7. n8n call queueGiulia Ferri
n8n call queue · Giulia 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.

  1. 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.

  2. 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.

  3. 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.

  4. 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) ↗
Agent prompt

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.

Connect Claude Code