Office hours: Build your self-driving GTM engine·Oct 29, 9:00am PT, onlineRegister→
Cargo
  • PrimitivesData ModelsYour companies, contacts and deals, merged from every sourceContextWhat your team knows, as files every agent readsTerritoriesWho sells where, defined onceMailboxesMailboxes in your reps' names, warmed up and kept under limitsToolsThe actions your agents, plays and reps callAgentsAI that researches, decides and writes, reading your contextPlaysWorkflows that run on a trigger or a schedule, with retriesAppsInternal apps for your reps, hosted on Cargo
    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
~/ad-audiences/

Match more of your audience on every ad platform

Cargo adds the personal emails and phones ad platforms match on, then syncs your audience to LinkedIn, Meta, Google and X and keeps it current as your data changes.

Start building
TTier 1 buyers12,400 people
Work email11,860
Personal email+7,940
Phone+1,810
Hashed before upload
LinkedInSynced
MetaSynced
GoogleSynced
XXSynced

Trusted by GTM teams at

  • Augment Code
  • Weights & Biases
  • Dust
  • WorkOS
  • Braintrust
  • Descript
  • Alaan
  • Engine
  • Scaleway
  • Preply
  • DataDome
  • Oneflow
backed by y combinator
~/match-rate/

Send the identifiers the platforms match on

Your CRM has work emails. People sign in to Meta, Google and X with personal ones. Cargo adds those, and phones, before the list syncs.

Why work emails miss

A work email only matches if the person signed up to the platform with it. Many use a personal address instead.

Ada LovelaceVP Marketing, Northwind
ada@northwind.comIn your CRM
No Meta account
ada.lovelace@gmail.comAdded by enrichment
Matched on Meta

A waterfall per identifier

Pick the providers and their order. Cargo tries each in turn until one finds the personal email or the phone.

Personal email
ApolloPeople Data LabsContactOut
Phone
ApolloFullEnrichLeadMagic

What each platform matches on

Cargo sends every identifier a platform accepts, then reads back how much of the list it matched.

LinkedInMetaGoogleX
AudienceMatched Audience of contacts or companiesCustomer list for Facebook and InstagramCustomer Match list, up to 540 daysCustom Audience
Matches people onEmail or Google Advertising IDEmail or phone, plus name and addressEmail, phone, mobile ad ID, or name and postal codeEmail, phone, X handle or user ID
Add companies byName, domain, LinkedIn page, industry, locationNot availableNot availableNot available
RemoveBy email, or the companyBy emailBy emailBy email
Reports backSample size and countsApproximate size and statusSize and match rateSize, and whether it is targetable

From segment to synced audience

A play runs over the records in your segment and adds each one to the audience.

The play

Who is in, and when it runs: in real time, on an interval or on a cron.

Sync ICP contacts to ads
TriggerEditorRecordsMetrics

Schedule

Type*
ManualEnroll records manually
Real-timeTrigger your play when new records are added
IntervalSchedule your play to run on a set interval (e.g., once per hour)
CronSchedule your play using a cron expression
DependencySchedule after a play finished running
Cron expression*
0 6 * * *

Syncs are scheduled in UTC

Conditions

Filter
ICP fit is greater than 70ANDLifecycle stage is not CustomerANDEmail is not empty
Add group

Changes

Mode*
New records onlyOnly new records that match the conditions will be enrolled in the play
New and updated recordsNew and updated records that match the conditions will be enrolled in the play
FullProcess all matching records
CustomAdvanced mode

Enrollment

Rule*
Always enrollEnroll the record into a new play run every time the trigger fires for that record
Enroll onceOnly enroll each record once, even if the trigger fires multiple times for the same record
If is not currently enrolledOnly enroll a record if it's not already in an active run, preventing concurrent runs
Save
Model
Contacts

The model associated with this play. Each record within this model is eligible for enrollment in the play.

Enroll manuallySync now

The run

Every audience a contact was added to, step by step.

SuccessAda Lovelace
2.54s4 spans400Nov 3rd, 2026 at 06:00:02
WaterfallSpans
Execution
0ms635ms1.27s1.91s2.54s
Ada Lovelace
2.54s
Contact added to audienceLinkedIn Add Contact to Audience
780ms
Contact added to audienceMeta Ads Add Contact to Audience
540ms
Contact added to audienceGoogle Ads Add Contact to Audience
480ms
Contact added to audienceX Ads Add Contact to Audience
600ms

Lists that follow your data

Records that join the segment are added. Records that leave it are removed.

Joins the segment

A play on added records pushes each one to the audience.

  • LinkedInAdd Contact to AudienceAdd Company to Audience
  • MetaAdd Contact to Audience
  • GoogleAdd Contact to Audience
  • XAdd Contact to Audience

Leaves the segment

A play on removed records takes each one back out.

  • LinkedInRemove Email from AudienceRemove Company from Audience
  • MetaRemove Contact from Audience
  • GoogleRemove Contact from Audience
  • XRemove Contact from Audience

Emails are lowercased and SHA-256 hashed before they are sent to LinkedIn, Meta, Google or X.

Read the numbers back

Audience reports on every platform, and LinkedIn campaign analytics in your data.

LinkedIn Ads analytics

Impressions, clicks and spend per company, fetched into a data model up to once a day.

LinkedIn Ads analytics
Today at 06:00
All records
FilterSort1,240 records5/5 columns
Company name+4
Impressions
Clicks
Cost in USD
Started at
Add column
Northwind
1,284
37
212.40
Nov 3, 2026
Contoso
962
21
158.10
Nov 3, 2026
Fabrikam
644
12
96.75
Nov 3, 2026
Initech
418
9
61.20
Nov 3, 2026
Globex
305
4
44.90
Nov 3, 2026
Adatum
288
6
41.30
Nov 3, 2026
Tailspin
241
5
35.80
Nov 3, 2026
Litware
197
3
28.15
Nov 3, 2026
Proseware
164
2
22.60
Nov 3, 2026
Wingtip
121
2
17.45
Nov 3, 2026

Audience reports

Create Report works on any audience in the ad account.

  • LinkedInSample size and audience countsSample size 1,240, 1,180 matched
  • MetaApproximate size range, processing and delivery statusSize range 1,000 to 1,500, ready
  • GoogleSize for Display and Search, match rateDisplay 2,100, Search 1,900, match rate 64%
  • XAudience size, targetable or not, and whySize 1,400, targetable

Ask your coding agent for it

The sync is two plays in a repo you own. Cargo runs them.

Set up Claude Code with Cargo
Claude Code~/my-gtm

Keep our ICP contacts in LinkedIn, Meta, Google and X audiences. Add them when they qualify, remove them when they don't.

  • Editedinfra/plays.ts+2
  • Rancargo-ai project plan
    + create play:sync-ad-audiences+ create play:prune-ad-audiences2 to create, 0 to update, 14 unchanged.
  • Rancargo-ai project deploy
    play:sync-ad-audiences createdplay:prune-ad-audiences created2 created, 0 updated, 14 unchanged.
Worked through 3 steps

Deployed. sync-ad-audiences adds new ICP contacts to all four audiences, and prune-ad-audiences removes the ones that drop out.

1const icp = { model: contacts, filter: icpContacts };
2
3definePlay("sync-ad-audiences", {
4...icp, workflow: addToAudiences, changeKinds: ["added"],
5});
6
7definePlay("prune-ad-audiences", {
8...icp, workflow: removeFromAudiences, changeKinds: ["removed"],
9});
$ cargo-ai project plan
+ create play:sync-ad-audiences
+ create play:prune-ad-audiences
2 to create, 0 to update, 14 unchanged.
$ cargo-ai project deploy
✓ play:sync-ad-audiences created
✓ play:prune-ad-audiences created
✓ 2 created, 0 updated, 14 unchanged.

Frequently Asked Questions

Can't find the answer here? Contact our team.

Send more identifiers per person. CRMs mostly hold work emails, and ad platforms match people on the address they signed up with, often a personal one. Cargo can enrich each contact with a personal email and a phone from the providers you choose, tried in the order you set, before the audience syncs. Match rates vary by list and platform; Google reports a match rate on each list, and LinkedIn, Meta and X report the audience size, so you can compare before and after.
LinkedIn Matched Audiences, Meta Ads customer list Custom Audiences, Google Ads Customer Match lists and X Ads Custom Audiences. On each one Cargo can create an audience, add records to it, remove records from it and fetch a report on it.
On LinkedIn, yes. A LinkedIn Matched Audience can be made of companies, and Cargo adds or removes a company by its name, with its website domain, LinkedIn page, industries and location to help LinkedIn match it. Meta, Google and X audiences are made of contacts.
LinkedIn takes an email or a Google Advertising ID. Meta takes an email or phone number, plus name, city, state, postal code and country. Google takes an email, phone number, mobile advertising ID, or a name with country and postal code. X takes an email, phone number, X handle or X user ID.
Yes. Emails are trimmed, lowercased and SHA-256 hashed before they leave Cargo, on all four platforms. Phone numbers and names are hashed the same way where the platform accepts them.
A play can run on the records that leave a segment, not only the ones that join it. Point one at your segment's removed records and have it call the platform's remove action. Removal is by email on Meta, Google and X, and by email or company on LinkedIn.
Every platform's Create Report action returns the audience's size and status, and Google's also returns the match rate. For LinkedIn, the LinkedIn Ads integration fetches campaign analytics per company into a data model, so impressions, clicks and spend sit next to your accounts.

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

Data ModelsContextTerritoriesMailboxesToolsAI AgentsPlaysAppsIntegrationsPricing

Add-ons

Chrome extensionButtonFormSlackGitHub

Build

DocsDeveloper resourcesCargo API docsCargo OpenAPI specCargo auth docsCargo webhooksCargo MCP serverProjectsClaude CodeCodexCursorAll coding agents

Resources

ReportsBlogCustomer storiesCookbooksEnrichmentRoutingSignalsScoringCRM hygieneAd audiencesGTM 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