Your GTM belongs in gitRegister
Blog

Turn a LinkedIn Profile URL into a Full Person Profile and a Work Email

16 Oct
5min read

To turn a list of LinkedIn profile URLs into full person profiles and work emails for go-to-market work, run linkedin.enrichProfile over the URLs for the profile (0.25 credits each), aiArk.enrichPerson for the work email (0.1 credits, only when an email is found), then waterfall.verifyEmail on the emails you got back.

The profile call returns the current title, company, full work history and education, but no email. The email call returns an email or nothing. Run both when you need every profile; run only the second when you only need the email. The steps below use the Cargo CLI, so a coding agent can run them end to end, and they are what the enrich-linkedin-profile skill does.

What 1.8M profile lookups show #

Cargo platform data, 90 days to Oct 16 2026:

MeasureValue
linkedin.enrichProfile runs1,824,331
Workspaces running it190
Runs that returned a profile93.6%
Runs that found nothing and were charged0 credits on 100%

The actions and what they cost #

Each price is the list price in credits from the action’s definition in Cargo’s code. The finders charge only when they return data; waterfall.verifyEmail charges for every address it checks.

StepActionCreditsRecord fields
Profilelinkedin.enrichProfile0.25linkedinUrl
Email, rung 1aiArk.enrichPerson0.1linkedinUrl
Email, rung 2findyMail.findEmail0.5linkedinUrl
Email, rung 3FullEnrich.findEmail1linkedinUrl
Verifywaterfall.verifyEmail0.1email

A contact that goes through the profile, the first email rung and verification costs at most 0.45 credits. A new account starts with 100 free credits and no card, which covers about 220 contacts at that rate.

No URLs yet? Resolve them from names and companies with the find-linkedin-url skill first.

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.

2. Pilot the profile call on 5 rows

--limit 5 submits only the first five records, so you can read the output and the cost before the full run.

shellscript
cargo-ai orchestration action execute-batch \
  --action '{"kind":"connector","integrationSlug":"linkedin","actionSlug":"enrichProfile"}' \
  --records '[{"linkedinUrl":"https://www.linkedin.com/in/example"}]' \
  --limit 5 --wait-until-finished

Drop --limit to run the whole list. The examples on this page leave out the connectorUuid an action object may carry, in which case Cargo uses the workspace’s default connector for that provider. cargo-ai orchestration action list enrich profile shows the action objects and their prices without running anything.

3. Find the work email

shellscript
cargo-ai orchestration action execute-batch \
  --action '{"kind":"connector","integrationSlug":"aiArk","actionSlug":"enrichPerson"}' \
  --records '[{"linkedinUrl":"https://www.linkedin.com/in/example"}]' \
  --wait-until-finished

Download the results with cargo-ai orchestration batch download --uuid <batch uuid>, keep the rows that came back without an email, and send only those to findyMail.findEmail, then FullEnrich.findEmail. The record shape stays {"linkedinUrl": "..."} on every rung. Never send the full list to every rung: a second provider charges again for an email already found.

4. Verify the emails

shellscript
cargo-ai orchestration action execute-batch \
  --action '{"kind":"connector","integrationSlug":"waterfall","actionSlug":"verifyEmail"}' \
  --records '[{"email":"ada@example.com"}]' \
  --wait-until-finished

Unlike the finders, waterfall.verifyEmail charges for every address it checks. The verify-email-list skill covers it in full.

What comes back #

linkedin.enrichProfile returns one flat record per profile:

GroupFields
Personfull_name, first_name, last_name, headline, about, location, city, state, country, linkedin_url, public_id
Current rolejob_title, company, current_company_join_month, current_company_join_year, current_job_duration
Companycompany_domain, company_website, company_linkedin_url, company_industry, company_employee_count, company_employee_range, company_year_founded, hq_city, hq_country
Historyexperiences[] (title, company, start_year, end_year, is_current, description), educations[] (school, degree, field_of_study)
Reachfollower_count, connection_count, skills[], languages[]

The email actions return:

ActionEmailNotes
aiArk.enrichPersonemail.output[0].addressAI Ark’s person record comes with it
findyMail.findEmailemail
FullEnrich.findEmailmost_probable_emailmost_probable_email_status, and emails[].status
waterfall.verifyEmailemailemail_status (valid when deliverable)

aiArk.enrichPerson treats a profile with no email as a miss: it returns no data and is not charged. That is why the profile call comes first when you need a profile for every row.

cargo-ai orchestration action get-output-schema --action '<action object>' prints any action’s output schema without running it.

Frequently asked questions #

AurelienOct 16, 2026

Give your agents a runtime

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