
This is Cargo's orchestration layer for go-to-market workflows. It sits between your goal (build a list of Series A CTOs who just raised funding) and Cargo's execution engine, routing you through decision trees, provider playbooks, and cost gates before burning credits. The skill enforces a strict read-before-execute model: you match your task to one of nine phase guides or twelve recipes, follow the waterfall logic, then run. It's opinionated about discovery order (companies first, then contacts) and cost discipline (pilot with ten records, verify output quality, then scale). If you're doing prospecting, enrichment, signal monitoring, or campaign activation on Cargo, this is the front door.
npx -y skills add getcargohq/cargo-skills --skill cargo-gtm --agent claude-codeInstalls into .claude/skills of the current project.
Use this skill for prospecting, account research, contact enrichment, verification, lead scoring, personalization, signal monitoring, and campaign activation.
Full spec: references/acceptable-use.md. The short version, binding on every recipe here:
provider-playbooks/ — never consumer targeting, purchased lists, or data taken from a platform in breach of its terms.<industry>"), contacting a suppressed record, filter evasion or disguised sender identity, auto-dialing and SMS blasts, batch-blasting LinkedIn engagement actions. Offer the compliant version once — state it, don't lecture.Already signed in (cargo-ai whoami returns a workspace)? Skip to the next section.
npm install -g @cargo-ai/cli # no global install? prefix every command with `npx @cargo-ai/cli`
cargo-ai login --email you@company.com # emailed code, no browser; creates the account on first use
# alternatives: --oauth (browser) · --token <api-token> (CI)
cargo-ai whoami # confirm the active workspace before any write
Every command prints JSON to stdout; failures exit non-zero with {"errorMessage": "..."}. Anything that creates a run or a batch is async — pass --wait-until-finished or poll the matching get. When the full skill bundle is installed, ../cargo/references/prerequisites.md adds the CLI version pin, token scopes, and the admin-only surface.
provider-playbooks/*.md.The user is generally trying to go from "I have an ICP" to "Here's a list of prospects with verified emails and personalized signals." They may be anywhere in this process — guide them along.
Discovery order: companies first, then people. When the task requires finding contacts at companies matching criteria (portfolio, ICP, hiring signal), discover the company set first, then find people at each company. Don't start with broad people-search queries.
SKILL.md (this file): decision model, guardrails, routing table, links to sub-docs.guides/finding-companies-and-contacts.md, guides/enriching-and-researching.md, guides/writing-outreach.md.recipes/*.md — step-by-step playbooks for specific scenarios.provider-playbooks/<slug>.md — provider-specific quirks, costs, and fallback behavior.STOP. Do not call any provider, run any cargo-ai orchestration action execute command, or write any search query until you have opened the correct sub-doc for your task.
These docs encode what works, what fails, and why. They contain validated parameter schemas, cheapest-provider mappings, parallel execution patterns, sample payloads, and known pitfalls. Reading the right doc for 10 seconds saves 10 failed action calls, wasted credits, and garbage output.
| When the task involves… | You MUST read this doc first | What it gives you |
|---|---|---|
| Finding companies, finding people, building lead lists, prospecting, portfolio/VC sourcing, contact finding at known companies | guides/finding-companies-and-contacts.md | Provider filter schemas, cheapest-source decision tree, parallel patterns, role-based search rules, portfolio/VC shortcuts, contact-finding patterns. |
| Enriching companies or contacts, finding emails/phones/LinkedIn, waterfall enrichment, signal lookup (job change, funding, tech stack), coalescing data | guides/enriching-and-researching.md | Waterfall patterns with fallback chains, when to use cargo-native vs waterfall vs FullEnrich vs peopleDataLabs, email/phone/LinkedIn fallback orders, signal segments, output retrieval via run download-outputs. |
| Writing first-touch outreach, personalizing messages, lead scoring, qualification, sequence design, campaign copy | guides/writing-outreach.md + references/acceptable-use.md (§3 checks, blocking) | LLM provider routing (openAi/anthropic/perplexity/gemini), prompt templates, scoring rubrics, email length/tone rules, personalization patterns — gated on basis, suppression, and per-recipient relevance. |
| Actually sending the drafted copy from a mailbox Cargo owns (rather than handing off to the user's own sequencer) | ../cargo-mailbox-management/SKILL.md + references/acceptable-use.md (§3 checks, blocking) | Provisioning and warm-up, the 5→40/day send ramp that caps volume, the sendEmail action (0.1 credits/send), the workspace suppression list, and replies/opens/clicks as events. |
| Building or modifying a recurring workflow (cron / webhook / scheduled tool / play), designing step sequences, triggers, deploy/verify cycles | ../cargo-orchestration/SKILL.md (capability) + apply-patterns from this skill's recipes + the provider playbook of every paid node (§11, esp. its Recurring use section) | Schema for tool/play workflows, node graph syntax, polling strategies, output retrieval; per-provider cadence defaults and re-billing gates. |
Scan this list and read the recipe matching your task. When a recipe matches: follow it step-by-step as your execution plan.
| Recipe | Use when… |
|---|---|
recipes/source-planning.md | Read first when the source isn't obvious. Turn the question into a field, probe 2–3 candidate sources on 5–10 rows, present cost-per-hit — before any fan-out |
recipes/prospecting.md | End-to-end find → enrich → verify → sync (P1/P2/P3 variants) |
recipes/build-tam.md | Building a Total Addressable Market list at scale (100–10,000 companies) |
recipes/linkedin-url-lookup.md | Resolving a person's LinkedIn profile URL from name + company with strict identity validation |
recipes/portfolio-prospecting.md | Investor / accelerator → portfolio companies → contacts |
recipes/job-change-monitoring.md | waterfall.detectJobChange (cargo-unique) on a contact segment |
recipes/funding-watch.md | Tracking companies that recently raised funding |
recipes/tech-intent.md | Finding companies by tech-stack or hiring-intent signals |
recipes/icp-discovery.md | Diffing Closed-Won vs Closed-Lost segments to surface ICP signals |
recipes/custom-datapoints.md | Designing which custom attributes and live signals to collect for a seller's ICP — feasibility-gated against the catalog, then wired into columns, scoring, segments, and a refresh cadence |
recipes/outreach-activation.md | Turning a signal segment into send-ready outreach (enrich → verify → personalize → sequencer handoff) |
recipes/ads-audience-activation.md | Pushing a segment to paid media — Google Ads Customer Match or LinkedIn Matched Audiences — and reading the match rate |
recipes/review-and-iterate.md | Judgment output a human must review — sheet handoff, grouped corrections, permanent fixes, kept as an eval set |
recipes/re-engagement.md | Waking up stale contacts only when a fresh signal fires (job change, funding, tech intent) |
recipes/lost-deal-revival.md | Reviving Closed-Lost CRM deals by branching on lost_reason (champion left, budget, timing) |
recipes/account-expansion.md | Multi-threading existing customer accounts — net-new buyers, deduped against the workspace's Contacts model |
recipes/save-as-play.md | Converting a successful ad-hoc run into a durable scheduled play or cron tool — offer after any repeatable pull |
recipes/import-gtm-data.md | Importing existing GTM data (CSV/CRM exports from any tool) into models, QA-auditing it, and selectively rebuilding recurring logic as plays with a parity check |
recipes/clay-to-cargo.md | Clay specifically: getting the column configuration out (not the CSV), the column-family → action map, the four Clay concepts that do not map one to one (waterfalls, run conditions, auto-update, partial runs), and the parity check against Clay's own output |
If none match, scan the phase docs above for the closest pattern and adapt — or invoke agents/execution-plan-creator.md to compose a custom chain with provider/action slugs and cost estimates. For wide sourcing sweeps that fan out (per-industry, per-geo), delegate approved slices to agents/list-builder.md — it executes exactly one pre-approved action per slice and returns rows to a file, keeping row data out of the main context. (On Claude Code with the plugin, both are installed as native subagents: cargo-execution-planner and cargo-list-builder.)
Full spec: references/cost-discipline.md. The short version every task must honor:
billing usage get-metrics over your own arithmetic.limit strict and size the pool with a 1-row probe before any full pull.aiArk.findMobilePhone (0.5, mobile-only) is the first rung and bills 0 on a miss, but the escalation behind it is 3–7 credits (~10× email), so a full-list phone sweep needs the same approval as any other paid fan-out.End every completed run with the receipt (above), then propose 2–3 next steps maximum, computed from the data just produced — never a generic menu. Required shape:
When a run produced a durable, repeatable result, one of the suggestions should be making it systematic — see recipes/save-as-play.md.
When a run or batch misbehaved — errors, missing downstream values, cost surprises — hand off to the cargo-diagnostics skill (../cargo-diagnostics/SKILL.md): sweep the batch for root causes before re-running anything paid. Interaction defaults for plan gates, shaped choices, and presenting results live in ../cargo/references/interaction.md.
These eight credits-based providers cover the full prospecting → enrichment → verification → signal pipeline at the lowest credit cost in the catalog. Every recipe in this skill's recipes/ leads with this stack:
| Provider | Role | Key actions (cost in credits) |
|---|---|---|
| salesNavigator | Sourcing | searchLeads (0.02), searchAccounts (0.05), findCompanyInsights/Metrics/EmployeesCount/Distribution (0.25 each) |
| cargo (native) | Firmographic + signal intelligence | enrichBusinessFirmographics (0.5), …Technographics (1), …FundingAndAcquisitions (0.5), enrichProspectDetails/LinkedinProfile/LinkedinPosts (2), matchBusiness/matchProspect (0.5), 13 more |
| aiArk | LinkedIn-anchored enrichment + cheapest search | searchCompanies (0.01/record, lookalike seeds), searchPeople / reverseLookup / analyzePersonality (0.05), enrichPerson (0.1 — profile + verified email), findMobilePhone (0.5) |
| waterfall | Multi-source enrichment + signal | enrichContact (2), enrichCompany (1), verifyEmail (0.1), detectJobChange (3), searchProspects (3), findPhone (7) |
| FullEnrich | Premium contact lookup | findEmail (1), findPhone (6), findPhoneAndEmail (7), reverseEmailLookup (2) |
| apolloio | Niche-coverage enrichment | enrichPerson (1, 3 with revealPhoneNumber), enrichOrganization (1) — the only two credits-based actions; its other nine need your own Apollo API key |
| theirStack | Tech-stack + hiring intent | searchTechnologies (0.5), searchJobs (0.5), searchCompanies (0.5) |
| peopleDataLabs | Heavyweight backfill | enrichPerson (3), enrichCompany (3), searchPeople (3), searchCompanies (3), queryPeople/Companies (3) |
aiArk and apolloio sit at opposite ends of the enrich tier and are picked by what you hold, not by preference: aiArk wins whenever a LinkedIn URL is in hand (profile + verified email at 0.1, mobile at 0.5, both billing 0 on a miss), apolloio is the 1-credit niche-coverage rung you promote per-batch when a pilot shows Apollo hits where cargo (2) and waterfall (2) miss — investor-backed and portfolio niches especially. Neither displaces salesNavigator for plain at-scale sourcing (0.02/lead) or cargo native for match-verified firmographics.
See provider-playbooks/ for per-provider deep dives — including each provider's Recurring use section for when the task is a monitor, play, or scheduled pull rather than a one-off. See references/stage-action-map.md for the complete cheapest-action-per-stage table across the full 120-integration catalog.
Already holding identifiers (not sourcing)? The stack above leads the sourcing-first spine. When you already have LinkedIn URLs, the cheapest enrich is
aiArk.enrichPerson(0.1 — full profile plus a verified email, bills 0 when no email is found); drop tolinkedin.enrichProfile/enrichCompany(0.25) when you don't need the email, and skipwaterfall.enrichContactentirely (it keys on email or name+company, not a URL). Need a phone?aiArk.findMobilePhone(0.5) is the first rung, not the 3–7 tier. Have a LinkedIn event URL?linkedin.extractEventAttendeessources the attendee list directly. Have emails?aiArk.reverseLookup(0.05), thenleadMagic/contactOut. Seereferences/stage-action-map.mdfor the full input-type → cheapest-action map.
1. SOURCE → salesNavigator.searchLeads / searchAccounts (0.02–0.05/record)
lookalike seeds, or filters SN can't express (skills,
education, tenure)? aiArk.searchCompanies / searchPeople (0.01–0.05/record)
2. DEDUPE → cargo.matchProspect / cargo.matchBusiness (0.5/record)
3. ENRICH → LinkedIn URL in hand? aiArk.enrichPerson (0.1) FIRST — profile + verified
email in one call; linkedin.enrichProfile/enrichCompany (0.25) if no email needed
cargo.enrichBusinessFirmographics / Technographics
+ waterfall.enrichContact / enrichCompany (0.5–2/record)
+ apolloio.enrichPerson / enrichOrganization on the niche residue (1/record)
4. SIGNAL → cargo.enrichBusinessFundingAndAcquisitions
+ theirStack.searchJobs
+ waterfall.detectJobChange (0.5–3/record)
5. CONTACT → FullEnrich.findEmail — only on rows step 3 left without
an email (fallback peopleDataLabs) (1–3/record)
6. VERIFY → waterfall.verifyEmail (0.1/record)
7. BACKFILL → peopleDataLabs.enrichPerson (only if step 5 missed) (3/record)
8. QA → scripts/contact-accuracy-audit.ts (free, local)
Two spine notes from the 8-provider stack: step 3's aiArk.enrichPerson already returns a verified email, so step 5 runs on the residue only — don't pay FullEnrich.findEmail (1) behind a row that already has one. And when the goal reaches a phone, aiArk.findMobilePhone (0.5, mobile-only, bills 0 on a miss) is the first rung before prospeo (3) / FullEnrich (6) / waterfall (7) — the guarded-lever rule in §3 still applies to all four.
Adapt by phase: drop steps that aren't relevant to the user's goal. For pure sourcing, run step 1 only. For "enrich a list I already have," run steps 2–7.
run download-outputs, not run downloadWhen the agent needs the actual data produced by an action (enriched fields, found emails, search results), use:
cargo-ai orchestration run download-outputs \
--workflow-uuid <uuid> \
--output-node-slug <slug> \
--format json
(Don't pass --is-finished — the CLI help still lists it but the API currently rejects it with unrecognized_keys; reported.)
Returns {"url": "..."} — a signed URL to a CSV/JSON containing only the output node's data. Faster and cheaper than run download (which pulls full run records). See references/output-retrieval.md and ../cargo-analytics/SKILL.md.
Four deterministic TypeScript scripts in scripts/ (Node ≥ 22.18, zero deps, fixture-tested in CI) replace in-context row checking. Run the script — never re-derive its logic by reasoning over rows. Full doctrine, pipeline order, and the SEND/VERIFY/REVIEW/REMOVE verdict semantics: references/contact-accuracy.md.
scripts/validate-emails.ts — free syntax/risk/duplicate cull before paid verifyEmail.scripts/select-current-role.ts — pick the real current role from an experiences array (catches job changers).scripts/validate-linkedin-names.ts — name↔profile match (catches same-name decoys); pairs with recipes/linkedin-url-lookup.md.scripts/contact-accuracy-audit.ts — final per-row audit_action stamp on the merged output; cite its summary counts in the receipt. Reads files or a finished run directly (--workflow-uuid, via @cargo-ai/api).Every action JSON in this skill follows the rules in ../cargo-orchestration/references/examples/actions.md:
kind: "connector" action shape: {"kind":"connector","integrationSlug":"<slug>","actionSlug":"<slug>"}. connectorUuid is NOT in config — the platform resolves the workspace's authenticated connector from integrationSlug automatically.config — omit it. Inputs go in --data / --records, and every recipe here now writes the action without the key. The one command that still demands it is action get-output-schema (400 at action.config without "config": {}). And inputs misplaced in config are no longer rejected — they are dropped and the action runs with no input, so check this first when a call returns empty for no visible reason.cargo-ai orchestration action list <keywords> [--integration-slug <slug>] is free, searches every integration plus native actions, tools, and agents, and returns the action object ready to paste with the action's credit costs — a cheap sanity check on both the slug and the price before a paid call. When the question is which paid actions exist for this?, cargo-ai connection action search <keywords> --credits-only is the one that filters on it. Neither replaces the provider playbook below: the playbook is where the input quirks, hit-rates, and recurring-use traps live.connectorUuid lives at the top level of the node, not in config. Cross-node interpolation uses {{nodes.<slug>.<field>}}. Agent node outputs wrap under .answer (read as {{nodes.<slug>.answer.<field>}}).If a recipe fails repeatedly and the cause isn't obvious, escalate via cargo-ai workspaceManagement report create. See ../cargo-workspace-management/SKILL.md (Reports section).
STOP — do not execute any paid action against a provider below, and do not wire a provider into a recurring play/tool node graph, until you have opened its playbook. Each playbook carries the exact action slugs, config shapes, input quirks, and cost traps; reading it for five seconds is cheaper than one failed paid call, and a failed batch is 100 failed paid calls. The stakes are higher, not lower, when the provider goes into a recurring workflow: a bad config repeats on every scheduled run, and a wrong cadence re-bills the same rows forever — each playbook ends with a Recurring use section (schedule fit, cadence default, re-billing gates, extractors) for exactly this. Every credits-based provider with callable actions has a playbook, with three stated exceptions: brightData (consumer social-platform scraping, outside this skill's acceptable use for person targeting), proxycurl, and openRouter (which exposes a model lister rather than credits-based actions, so there is nothing to document). Own-key integrations fall back to references/alternatives.md and references/stage-action-map.md.
Priority stack (recipes lead with these):
provider-playbooks/salesNavigator.md — cheapest sourcing in the catalog (0.02–0.05/record).provider-playbooks/cargo.md — 22 native enrichment + signal actions; the match* actions are key for dedup.provider-playbooks/aiArk.md — LinkedIn-anchored people/company data: enrichPerson returns profile + verified email at 0.1, findMobilePhone (0.5) is the cheapest phone rung, searchCompanies (0.01/record) does lookalikes, and analyzePersonality (0.05) is catalog-unique. All actions run on the managed connection.provider-playbooks/waterfall.md — swiss-army-knife: enrichment, verification, and the cargo-unique detectJobChange signal.provider-playbooks/FullEnrich.md — premium contact lookup; reverseEmailLookup is unique.provider-playbooks/apolloio.md — the 1-credit niche-coverage enrich rung (person + organization); read it before assuming Apollo is available — only two of its eleven actions are credits-based, the rest need your own Apollo API key.provider-playbooks/theirStack.md — tech-stack + hiring-intent signals.provider-playbooks/peopleDataLabs.md — heavyweight backfill at flat 3-credit tier.Sourcing & company-data specialists:
provider-playbooks/linkedin.md — the native LinkedIn integration's action set (profiles, companies, posts, jobs).provider-playbooks/oceanio.md — lookalike-company discovery from seed domains, with technographic / web-traffic filters aiArk.searchCompanies (0.01) can't express.provider-playbooks/datagma.md — lightweight person/company enrichment alternative.provider-playbooks/companyEnrich.md — cheapest company-by-domain (0.25) + per-item-billed lookalikes.provider-playbooks/enrichCrm.md — CRM-record enrichment; getFunding is the funding-signal fallback.provider-playbooks/societeInfo.md — French-registry company/contact data (SIREN/SIRET).provider-playbooks/snitcher.md — website-visitor identification; the recurring extractor is the cost trap.provider-playbooks/piloterr.md — ultra-cheap bulk company extractor + G2 product info.provider-playbooks/g2.md — software-review & category signal data.provider-playbooks/theSwarm.md — warm-intro network mapping to target companies/people.provider-playbooks/mixrank.md — premium person/company backfill (4/lookup, phone-only reverse lookup).Email & contact specialists (all feed the VERIFY step — see references/waterfall-strategy.md):
provider-playbooks/hunter.md — domain-search email finding + verification.provider-playbooks/prospeo.md — email/phone lookup, LinkedIn-URL input path.provider-playbooks/icypeas.md — budget email find/verify.provider-playbooks/findyMail.md — email finding alternative.provider-playbooks/leadMagic.md — email + mobile lookup alternative.provider-playbooks/contactOut.md — contact info from LinkedIn profiles.provider-playbooks/zeroBounce.md — email-verification second opinion to waterfall.verifyEmail.provider-playbooks/bouncer.md / neverBounce.md / kitt.md / enrichley.md — verification long tail (0.3 / 0.2 / 0.05 / 0.1; enrichley's slug is verify, not verifyEmail).provider-playbooks/dropcontact.md — email finding with French/EU registry depth; email output is an array.provider-playbooks/enrowio.md — email find (1) + verify (0.1); takes fullName only.provider-playbooks/reverseContact.md — company-from-LinkedIn (credits); profile lookups are own-key.provider-playbooks/rocketreach.md — person lookup (1); healthcare/NPI niche; beware the currrentEmployer schema key.provider-playbooks/forager.md — personal-email + phone from a LinkedIn URL.provider-playbooks/cleon1.md — terminal phone rung (15/lookup) — explicit user request only.Research & scraping:
provider-playbooks/firecrawl.md — web scraping for research/personalization stages.provider-playbooks/serper.md — Google SERP queries for research and URL discovery.provider-playbooks/linkup.md — web search (0.5 standard / 2 deep) + sourced/structured answers.provider-playbooks/parallel.md — cheapest page read in the catalog (extract, 0.025/URL) plus createTask, the only action that fills a caller-supplied output schema.provider-playbooks/exa.md — semantic search with a document-type category filter and publication-date bounds.provider-playbooks/builtwith.md — a domain's technology stack; getDomainSummary is free and runs in front of the paid rung.provider-playbooks/x.md — public X posts and profiles at 0.02 an action; a signal rung, gated by acceptable use.provider-playbooks/sillage.md — inbound signal detections read back from a model, free, so it runs first on any signal question.LLM providers (all: one instruct action, cost per 1,000-token package, per-model tiers — prompts come from references/prompt-library/index.md):
provider-playbooks/anthropic.md — judgment-tier default (Haiku/Sonnet 0.2, Opus 2); temperature nests under advancedSettings with required maxTokens.provider-playbooks/openAi.md — cheapest bulk tier (gpt-5-nano 0.006) + native JSON-schema output.provider-playbooks/gemini.md — cheap high-throughput (Flash 0.01, 15,000/min) + search grounding.provider-playbooks/perplexity.md — web-grounded research answers; default model is the expensive sonar-deep-research — always set model explicitly.references/cost-discipline.md — the mandatory spend rules: pilot → approval gate, per-run receipts, 1.4×N over-provision, count-first sizing, provider-billing rules.references/contact-accuracy.md — the deterministic QA scripts (email cull, current-role, name match, final audit) and the SEND/VERIFY/REVIEW/REMOVE verdicts.references/prompt-library/index.md — ~40 named, parameterized LLM prompts (personalization, scoring, research, qualification, signal analysis, extraction). Before authoring any enrichment/scoring prompt from scratch, grep this index — reuse beats reinvention, and each entry carries a tested output contract. Load only the shard you need, never all of them.references/stage-action-map.md — cheapest credits-based action per stage across the full 120-integration catalog.references/credits-cost-table.md — auto-generated cost table for all 145 credits-based actions.references/waterfall-strategy.md — canonical waterfall chains by enrichment goal (every recipe's "fallback" follows these).references/alternatives.md — provider swap-ins from the long tail when the priority stack can't serve.references/output-retrieval.md — run download-outputs patterns for fetching action data.