Office hours: Build your self-driving GTM engine·Oct 29, 9:00am PT, onlineRegister→
Cargo
  • ProductAgentsReduce manual effort and close more deals with AIPlaysAutomate every stage of lead management so you can move fasterToolsAutomate repetitive tasks so your team can focus on what drives impactData ModelsUnify, organize, and activate your revenue dataAppsCustom interfaces for your team, wired to your live GTMTerritoriesModel your team, territories, and capacity in one placeContextOne shared knowledge base for your team and agents
    Add-onsChrome ExtensionSell faster, right in your browserButtonTrigger AI agents inside your CRMFormTurn any tool into an embeddable formSlackTag Cargo in Slack. It does the GTM workGitHubPlan on every pull request, deploy on merge
    MoreProjectsDefine your entire GTM in codeCLIUse Cargo from your terminalMCPUse Cargo from Claude and ChatGPTDeveloper resourcesCargo API docs, OpenAPI spec, auth docs, webhooks, MCP serverAPI ReferenceExplore the Cargo APIDocumentationLearn how to use CargoIntegrationsConnected to your entire GTM stack
  • VeriffHow Veriff replaced MuleSoft with Cargo under NetSuite, Stripe and SalesforceAugmentHow Augment Code routes developer sign-ups to reps in under an hourWeights & BiasesHow Weights & Biases ships a new purchase signal in 2 days on CargoSee all
  • Pricing
  • Cookbooks
  • Blog
Sign in
Blog

How to Qualify a List of Leads Against Your ICP

16 Oct9min read
MaxMax

To qualify a list of leads against your ICP, enrich each company by its domain, score it with written rules that put a score, a reason and a tier on every row, then write the verdict back to your CRM. With Cargo that is three steps from the command line, and the open-source score-leads skill runs the first two from your coding agent, so you do not have to write a qualify_prospects.py of your own.

Qualify a list against your ICP, step by step #

Install the Cargo CLI and the skill, once:

shellscript
npm install -g @cargo-ai/cli
cargo-ai login --email you@company.com
npx skills add getcargohq/gtm-skills/score-leads

Then hand your agent the list and the profile: “Score the 20 companies in webinar-accounts.csv against our ICP: 50 to 500 employees, B2B software, US or UK, competitors out.” The score-leads skill asks for the criteria before it touches any data (which firmographics matter, what disqualifies outright, how the criteria weigh, the two tier cut-offs) and writes them back to you, because a score built on criteria nobody stated only looks objective.

1. Enrich. One call per company, keyed on the domain, returning industry, employee count, revenue band, technologies, funding and NAICS codes. Run a 20-row sample first; the skill quotes 0.25 credits per company for this action.

shellscript
cargo-ai orchestration action execute-batch \
  --action '{"kind":"connector","integrationSlug":"companyEnrich","actionSlug":"enrichByDomain","config":{}}' \
  --records '[{"domain":"acme.com"},{"domain":"globex.com"}]' \
  --limit 20 \
  --wait-until-finished

2. Score against the ICP. Scoring is arithmetic over the enriched fields, so it runs in the agent at no cost and gives the same answer twice. Every row carries four columns:

ColumnWhy it is there
scorethe number
reasonwhich criteria it hit and missed, in words
tierthe cut-off it landed above
missingwhich fields were empty when it was scored

A disqualifier (wrong geography, a competitor) is a zero, not a low score. A row whose firmographics came back empty is left unranked rather than scored zero, because unresolved and unqualified look identical in a sorted list and only one of them is worth a second attempt.

3. Write back to the CRM. Find the upsert action for your CRM and read its config (object type, the property to match on, the field mappings), then pass it to the same execute-batch command with the scored rows, matching on the company domain:

shellscript
cargo-ai orchestration action list upsert --integration-slug hubspot
cargo-ai connection integration get hubspot

That returns hubspot.upsertRecords; salesforce.upsertRecords is the Salesforce equivalent. Map score, tier and reason to CRM properties so a rep sees why an account was qualified, not only that it was.

To keep new accounts qualified as they land, rather than scoring one list, cargo-ai project add cookbook/account-scoring adds a worked example of a deployed scoring agent to your project for your agent to adapt, and cargo-ai project plan then cargo-ai project deploy ship it.

Why automated qualification breaks between systems #

Automated qualification rarely fails at the decision. It fails at the seams between the systems the decision has to cross. A form fills in one tool, the company is resolved in another, the enrichment arrives from a third, the score is computed in a fourth, and the rep finds out in the CRM eleven minutes later, or the next morning, or never.

So the useful question is not which tool scores leads best. It is which system owns the pipeline end to end, and what happens at each handoff.

Integrating qualification with the CRM and the engagement platform #

A qualification pipeline has six steps, and each one is a place where an integration can lose the thread.

StepWhat has to happenHow it usually breaks
CaptureThe signup, form, meeting request or product event arrivesThree capture paths write three different shapes of record
ResolveThe person is matched to an accountExact-domain matching misses the subsidiary and the personal email
EnrichFirmographics, technographics, usage history are attachedThe provider is called after the decision, or not at all for known accounts
DecideFit and intent produce a verdict with a reasonThe rule reads a field that a sync has not refreshed yet
Write backCRM owner, status and the reason are recordedThe reason is lost, so nobody can audit the verdict later
Follow upSequence enrolment, meeting booking, or nurtureThe engagement platform enrols a contact the CRM has already disqualified

Read the right column as a list of integration failures rather than logic failures. Every one of them is two systems disagreeing about a record.

This is why the integration question has a structural answer rather than a feature answer. What separates platforms is whether the six steps run against one record in one system, or against six copies passed between tools. Ask a vendor to show a single trace: this lead arrived here, matched this account, was enriched by these providers, scored this way against this rubric version, was routed to this rep, and produced this write-back. A platform that can show it has the pipeline. A platform that shows six dashboards has the parts.

Cargo’s version is one run over the unified account and contact models, with the CRM and the sequencer as typed actions at the end of it rather than as separate automations. The record does not leave the engine between capture and write-back, so the seams above are function calls rather than syncs.

Where AI belongs in qualification #

The useful split is between judgement and arithmetic. Deterministic rules handle everything checkable: employee count, region, plan, whether an opportunity is already open, whether the domain is on the suppression list. Those need no model, and putting them in one wastes money and adds variance to an answer that has a correct value.

What a model earns its place on is the unstructured half. Reading a company’s site and saying whether they sell to the audience you sell to. Judging from a job posting whether the team is being built or wound down. Summarising two support threads and a call transcript into a reason this account is at risk. Those are the inputs that were previously left out of scoring because they were not fields, and they are why AI changed qualification at all. LLM-powered lead scoring goes through the scoring mechanics; conversational AI for lead qualification covers the case where the qualification happens in a chat.

Three constraints keep an agent useful in this step.

Ground it in written context. The agent needs the ICP, the disqualifiers, the personas and the boundaries as files it reads at decision time, not as a paragraph in a prompt somebody edited last quarter. Without them it invents a definition of fit that sounds reasonable and is not yours.

Make it produce a reason, not just a number. An 82 with no rationale cannot be argued with, so it gets ignored. A verdict with two sentences of justification and the fields it used can be checked by a rep in five seconds, which is the difference between a score that is read and a score that is not.

Measure it. A prompt change that makes the qualifier 8 percent more generous is invisible until the pipeline review. Evals over a labelled set are what catch it, the way a test suite catches a regression, and LLM evals for revenue agents sets out what to measure.

Building qualification as code #

The last requirement is the one that separates a GTM engineering approach from a well-configured tool: the rubric is a file.

That matters for three concrete reasons. A change to the definition of a qualified lead is reviewed before it starts rejecting real leads. The version that produced a verdict is recorded, so a disputed decision is a lookup rather than an argument. And the whole pipeline can be rebuilt in another workspace, which is what makes a staging environment possible at all.

In practice it means the qualification play, the models it reads, the agent that judges the unstructured part and the routing that follows are declared together and deployed as a unit:

shellscript
cargo-ai project plan     # what this change would do to production
cargo-ai project deploy   # ship it

The checklist for any platform in this category follows from the above, and none of it is a feature list:

  1. Does capture, resolution, enrichment, decision and write-back happen against one record, or across copies?
  2. Can a deterministic rule and a model-judged criterion sit in the same rubric?
  3. Is the rubric versioned, and is the version recorded on the verdict?
  4. Does a verdict carry a reason a rep can read?
  5. Can the agent read your written ICP and disqualifiers, or only a prompt?
  6. Is there an eval path, so a change to the qualifier is measurable before it ships?

A team that can answer those six has an automated qualification system. A team that cannot has a scoring field and a lot of integrations.

Frequently asked questions #

The integration question is really an architecture question. Tools that qualify in their own database and then sync to the CRM and the sequencer leave you reconciling three copies of the same lead. Platforms that run capture, identity resolution, enrichment, the decision and the write-back against one record, with the CRM and the engagement platform as actions at the end, remove the reconciliation instead of automating it.

Rules handle anything checkable: headcount, region, plan, open opportunity, suppression. They are cheaper, faster and have a correct answer. Agents handle the unstructured half: what a company actually sells, what a job posting implies, what a support thread says about risk. Mixing them is the point, and a rubric that cannot express both forces one of the two into the wrong tool.

Usually because the assignment ran on data the decision did not have. Enrichment lands after routing, the account match was wrong, or the capacity and territory rules live in a different system from the qualification. The fix is sequence, not more rules: resolve and enrich before deciding, and decide before assigning, in one run.

By recording the inputs, the rubric version and the reason alongside the verdict. If the only artifact is a number in a CRM field, the decision cannot be reviewed, and the first time it is wrong in a visible way the team goes back to manual lists. This is also what makes a rubric change safe: you can compare the new version against the old on the same records.

The rubric, the models it reads, the agent that judges the unstructured criteria and the routing that follows are declared in version-controlled files, reviewed as a diff, and deployed with a plan step and a rollback. The practical gain is that the definition of a qualified lead has a history and an owner, instead of being whatever the workflow tool currently says.

~/run-it-on-cargo/

Build this workflow instead of reading about it.

Cargo is the GTM infrastructure your coding agent builds on: enrichment, scoring, routing and outreach, defined in code and run in production.

Start building
MaxMaxOct 16, 2026
On this page
  • Qualify a list against your ICP, step by step
  • Why automated qualification breaks between systems
  • Integrating qualification with the CRM and the engagement platform
  • Where AI belongs in qualification
  • Building qualification as code
  • Frequently asked questions

Stay Informed with our
weekly Newsletter

Related articlesSee all articles
Sales Operations
Find Every Portfolio Company of an Investor, Then the People Inside

How go-to-market teams and their coding agents list every portfolio company of a VC or accelerator, then the decision-makers at each one, with two Cargo actions: an investor-filtered company search and a people search by domain. Commands, prices and returned fields.

AurelienAurelien·Oct 16, 2026
Sales Operations
Monitor Buying Signals on a List of Accounts

Check a list of target accounts for the dated, public events that mean someone is in market: a job post for the role you sell into, a company saying something new, a detection feed firing. The commands with the Cargo CLI and the open-source monitor-buying-signals skill, free check first, what each check costs, and what a signal does not give you.

AurelienAurelien·Oct 16, 2026
Sales Operations
Nudge Stalled Deals Every Week with a Drafted Follow-Up

Cargo's stalled-deal-nudge cookbook posts one Slack digest per rep every Monday: their open deals with no logged activity in 14 days, the line the last activity left off on, why the deal is worth a touch now, and a follow-up drafted for the rep to send.

AurelienAurelien·Oct 16, 2026

Build the self-driving GTM engine

Your coding agents build it on Cargo.Or our team builds, operates and improves it with you.

Start building
Cargo
Backed byY CombinatorSOC 2 Type IICertified
LinkedinX

Product

AI AgentsPlaysToolsData ModelsAppsTerritoriesContextEnrichmentRoutingIntegrationsPricing

Add-ons

Chrome extensionButtonFormSlackGitHub

Build

DocsDeveloper resourcesCargo API docsCargo OpenAPI specCargo auth docsCargo webhooksCargo MCP serverProjectsClaude Code

Resources

ReportsBlogCustomer storiesCookbooksGTM skillsGTM EngineeringGlossaryCompareCargo x ClayCargo x WorkatoCargo x n8nCargo x DeeplineCargo x DefaultCargo x LeanDataCargo x UnifyCargo x ValleyCargo x Gojiberry

Company

ManifestoCommunityEventsJobsPartners DirectoryPartner Program

Legal

SecurityTerms of servicePrivacy PolicyRefundsDPASupport
© 2026 Cargo
 ////////    ///////    ////////     ////////    ///////
///         ///   ///   ///   ///   ///         ///   ///
///         ///   ///   ///   ///   ///         ///   ///
///         /////////   ////////    ///  ////   ///   ///
///         ///   ///   /// ///     ///   ///   ///   ///
///         ///   ///   ///  ///    ///   ///   ///   ///
 ////////   ///   ///   ///   ///    ///////     ///////

$ npm install -g @cargo-ai/cli