Your GTM belongs in gitRegister
Blog

Enrich a Person from an Email Address or a Name and Company

16 Oct
6min read

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 haveActionCreditsRecord
An email (reverse email lookup)FullEnrich.reverseEmailLookup1{"email":"ada@example.com"}
An emailapolloio.enrichPerson1{"parameters":{"email":"ada@example.com"}}
An emailpeopleDataLabs.enrichPerson3{"parameters":{"email":"ada@example.com"}}
A name and a company domainapolloio.enrichPerson1{"parameters":{"name":"Ada Lovelace","domain":"example.com"}}
A name and a companypeopleDataLabs.enrichPerson3{"parameters":{"name":"Ada Lovelace","company":"Example"}}
A name and a companylinkedin.enrichProfileFromName0.5{"name":"Ada Lovelace","companyName":"Example"}
An email, or a name and domainenrichCrm.enrichPerson1{"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.enrichPerson charges its 1 credit per call, found or not.
  • Apollo with phone costs more. Setting "revealPhoneNumber": true on apolloio.enrichPerson moves it from 1 to 9 credits and waits for Apollo to deliver the number.
  • Reverse email lookup is asynchronous. FullEnrich.reverseEmailLookup starts a lookup and waits for FullEnrich to call back, so a batch can take minutes. --wait-until-finished handles 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

shellscript
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

shellscript
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

shellscript
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:

shellscript
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:

shellscript
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 #

ActionNameTitle and companyLinkedIn URL
apolloio.enrichPersonperson.nameperson.title, person.organization.name, .primary_domainperson.linkedin_url
peopleDataLabs.enrichPersonfull_namejob_title, job_company_name, job_company_websitelinkedin_url
FullEnrich.reverseEmailLookupfirstname, lastnameprofile.position.title, profile.position.company.name, .domainprofile.linkedin_url
linkedin.enrichProfileFromNamefull_namejob_title, company, company_domainlinkedin_url
enrichCrm.enrichPersonnameheadline, activeCompanylinkedInUrl

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.enrich takes {"objectType":"contact","linkedinUrl":"...","includePhone":false,"emailType":[]} at 1 credit. Asking for emails ("emailType":["work"]) costs 2, and "includePhone":true costs 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 #

AurelienOct 16, 2026

Give your agents a runtime

Bring the agents you have.Start free, deploy in one command.