To enrich a person for a go-to-market list, pass what you have to one Cargo batch call: an email address goes to FullEnrich.reverseEmailLookup, apolloio.enrichPerson or peopleDataLabs.enrichPerson, and a name plus a company goes to apolloio.enrichPerson, peopleDataLabs.enrichPerson or linkedin.enrichProfileFromName. Each returns the person’s name, title, company and LinkedIn URL, and most providers charge nothing when they find no one.
No Apollo, People Data Labs or FullEnrich account is needed: Cargo calls each provider on its own key and bills credits. If you have a LinkedIn URL instead, skip to the last section.
What 1.97M person-enrichment runs show #
Cargo platform data, 90 days to Oct 16 2026: 1.97M person-enrichment runs across 7,810 workspaces, 67.8% of them returned a person, and 89.6% of the runs that found nobody were charged 0 credits.
About one row in three comes back empty, so plan for misses. The cheapest way to cover them is a second provider on the rows the first one missed, not the whole list twice.
Pick the action by what you have #
| You have | Action | Credits | Record |
|---|---|---|---|
| An email (reverse email lookup) | FullEnrich.reverseEmailLookup | 1 | {"email":"ada@example.com"} |
| An email | apolloio.enrichPerson | 1 | {"parameters":{"email":"ada@example.com"}} |
| An email | peopleDataLabs.enrichPerson | 3 | {"parameters":{"email":"ada@example.com"}} |
| A name and a company domain | apolloio.enrichPerson | 1 | {"parameters":{"name":"Ada Lovelace","domain":"example.com"}} |
| A name and a company | peopleDataLabs.enrichPerson | 3 | {"parameters":{"name":"Ada Lovelace","company":"Example"}} |
| A name and a company | linkedin.enrichProfileFromName | 0.5 | {"name":"Ada Lovelace","companyName":"Example"} |
| An email, or a name and domain | enrichCrm.enrichPerson | 1 | {"email":"ada@example.com"} |
Prices are each action’s list price per call. Three details change how you use them:
- A miss is free on all of them but one. Apollo, People Data Labs, FullEnrich, the LinkedIn action and RocketReach return no data when they find no one, and no credits are charged.
enrichCrm.enrichPersoncharges its 1 credit per call, found or not. - Apollo with phone costs more. Setting
"revealPhoneNumber": trueonapolloio.enrichPersonmoves it from 1 to 9 credits and waits for Apollo to deliver the number. - Reverse email lookup is asynchronous.
FullEnrich.reverseEmailLookupstarts a lookup and waits for FullEnrich to call back, so a batch can take minutes.--wait-until-finishedhandles the wait.
enrichCrm.enrichPerson takes an email, or a domainName with firstName and lastName, or a domainName with fullName. rocketreach.lookupPerson (1 credit) takes an email or a linkedinUrl.
Run it #
1. Install and sign in
npm install -g @cargo-ai/cli
cargo-ai login --email you@company.com # sends a code
cargo-ai login --email you@company.com --code 123456 # creates the account on first use
There is no browser step, so a coding agent can run this itself. A new account starts with 100 free credits and no card.
2. Find the actions
cargo-ai orchestration action list enrich person --kind connector
Each result carries the action object the next command takes and a credits array with its price. Nothing runs and nothing is charged.
3. Pilot on 5 rows
cargo-ai orchestration action execute-batch \
--action '{"kind":"connector","integrationSlug":"apolloio","actionSlug":"enrichPerson"}' \
--records '[{"parameters":{"email":"ada@example.com"}},{"parameters":{"name":"Grace Hopper","domain":"example.org"}}]' \
--limit 5 --wait-until-finished
--limit 5 submits only the first five records, so you can read the output and the cost before the full run. Apollo’s name field is a first and last name separated by a space; use it instead of first_name and last_name, not alongside them.
4. Run the list, then send only the misses on
Drop --limit to run every row, then download the results:
cargo-ai orchestration batch download --uuid <batch-uuid>
Keep the rows that came back without a person and send those to the next provider. For a reverse email lookup:
cargo-ai orchestration action execute-batch \
--action '{"kind":"connector","integrationSlug":"FullEnrich","actionSlug":"reverseEmailLookup"}' \
--records "$(cat misses.json)" \
--wait-until-finished
Never send the full list to a second provider: the people already found are paid for, and the second provider charges again for them.
What comes back #
| Action | Name | Title and company | LinkedIn URL |
|---|---|---|---|
apolloio.enrichPerson | person.name | person.title, person.organization.name, .primary_domain | person.linkedin_url |
peopleDataLabs.enrichPerson | full_name | job_title, job_company_name, job_company_website | linkedin_url |
FullEnrich.reverseEmailLookup | firstname, lastname | profile.position.title, profile.position.company.name, .domain | profile.linkedin_url |
linkedin.enrichProfileFromName | full_name | job_title, company, company_domain | linkedin_url |
enrichCrm.enrichPerson | name | headline, activeCompany | linkedInUrl |
Apollo also returns person.email and person.email_status, and People Data Labs returns work_email and location_name when it has them. cargo-ai orchestration action get-output-schema --action '<action object>' prints any action’s full output schema without running it.
If you already have a LinkedIn URL #
A LinkedIn URL is the strongest key a person has, and two actions take it directly:
aiArk.enrichPerson(0.1 credits) takes{"linkedinUrl":"..."}, returns the profile with a found email, and charges nothing when it finds no email.contactOut.enrichtakes{"objectType":"contact","linkedinUrl":"...","includePhone":false,"emailType":[]}at 1 credit. Asking for emails ("emailType":["work"]) costs 2, and"includePhone":truecosts 3.
To get the URL from a name and company first, use the find-linkedin-url skill; to read the full profile from it, enrich-linkedin-profile. Once a record has a work email, find and verify work emails at scale covers checking it before a send, and waterfall enrichment covers chaining providers in general.
Frequently asked questions #
Yes. FullEnrich.reverseEmailLookup takes an email address and returns the
person’s name, LinkedIn profile, current title and company, for 1 credit.
apolloio.enrichPerson and peopleDataLabs.enrichPerson also accept an
email as their only input.
Yes. apolloio.enrichPerson takes a name and a company domain or
organization_name, peopleDataLabs.enrichPerson takes a name and a
company, and linkedin.enrichProfileFromName takes a name and a
companyName and searches LinkedIn for the two together.
Not on most actions. Apollo, People Data Labs, FullEnrich, RocketReach and
the LinkedIn action return no data on a miss and charge 0 credits.
enrichCrm.enrichPerson is the exception and charges per call. In the 90
days to Oct 16 2026, 89.6% of person-enrichment runs that found nobody were
charged 0 credits.
No. Unless you connect your own key, Cargo calls the provider on Cargo’s key and bills the action’s credits. If you already pay a provider, you can connect your key instead.