how to enrich LinkedIn profiles from the command line

The LinkedIn enrichment market is dominated by Chrome extensions. Lusha, Kaspr, LeadIQ, and a dozen others all work the same way: you browse LinkedIn, click a button, and the extension reveals contact information.

It works. But it's slow, manual, and doesn't scale. You can't run a Chrome extension in a script. You can't pipe Chrome extension output to jq. You can't enrich 500 LinkedIn profiles while you sleep.

Here's how to do LinkedIn enrichment from the terminal instead.

The Problem with Chrome Extensions

Chrome extensions for LinkedIn enrichment have fundamental limitations:

  1. One at a time — You visit a profile, click the extension, copy the data. Repeat. For 50 profiles, that's 50 browser tabs and 50 clicks.
  2. Can't be scripted — There's no way to automate a Chrome extension in a shell script, cron job, or data pipeline.
  3. LinkedIn rate limiting — Browse too many profiles too fast and LinkedIn flags your account. Extensions encourage the exact behavior LinkedIn penalizes.
  4. Browser dependency — You need Chrome, the extension installed, and to be logged into LinkedIn. Can't run it on a server, in a container, or over SSH.
  5. Data stays in the browser — Getting data out of a Chrome extension into your actual workflow (database, CRM, spreadsheet) requires manual copy-paste or another integration.

CLI-Based LinkedIn Enrichment

A command-line approach solves all of these:

# Enrich a LinkedIn profile
$ enrich linkedin linkedin.com/in/patrickcollison
Name:       Patrick Collison
Title:      CEO & Co-founder
Company:    Stripe
Location:   San Francisco, CA
Industry:   Financial Technology
LinkedIn:   linkedin.com/in/patrickcollison

No browser. No extension. No clicking.

JSON Output for Scripting

$ enrich linkedin linkedin.com/in/patrickcollison --json
{
  "name": "Patrick Collison",
  "title": "CEO & Co-founder",
  "company": "Stripe",
  "location": "San Francisco, CA",
  "industry": "Financial Technology",
  "experience": [
    {
      "title": "CEO & Co-founder",
      "company": "Stripe",
      "duration": "15+ years"
    }
  ],
  "education": [
    {
      "school": "MIT",
      "degree": "Computer Science"
    }
  ]
}

Batch Enrichment

Got a list of LinkedIn URLs from a conference, a Sales Navigator export, or a scrape?

# Enrich a list of LinkedIn profiles
$ cat linkedin_urls.txt | while read url; do
    enrich linkedin "$url" --json
  done > enriched_profiles.jsonl

Or filter the results on the fly:

# Only keep C-level executives
$ cat linkedin_urls.txt | while read url; do
    enrich linkedin "$url" --json
  done | jq 'select(.title | test("CEO|CTO|CFO|COO|CMO"))'

Combine with Other Enrichment Types

LinkedIn enrichment pairs well with other enrichment types:

# Get a person's LinkedIn profile, then enrich their company
$ enrich linkedin linkedin.com/in/patrickcollison --json | \
    jq -r '.company' | \
    xargs enrich company --json
# Or go the other direction: start with an email, get LinkedIn
$ enrich email ceo@stripe.com --json | jq -r '.person.linkedin'

What Data You Get from LinkedIn Enrichment

LinkedIn enrichment typically returns:

Data PointDescription
Full nameFirst and last name
Headline/TitleCurrent job title
CompanyCurrent employer
LocationCity, state, country
IndustryProfessional industry
ExperiencePast positions, companies, durations
EducationSchools, degrees, years
SkillsListed professional skills
SummaryProfile summary/bio
ConnectionsConnection count range

The exact fields depend on the profile's privacy settings and the data provider's coverage. Public profiles yield the most data.

Use Cases

Pre-Call Research

You have a sales call in 10 minutes. Pull up the person's LinkedIn profile data without opening a browser:

$ enrich linkedin linkedin.com/in/prospect-name --json | jq '{name, title, company, location}'

Instant context. No tab switching.

Recruiting Pipeline

Building a candidate pipeline? Enrich LinkedIn profiles to get structured data:

# Filter candidates by experience at specific companies
$ cat candidates.txt | while read url; do
    enrich linkedin "$url" --json
  done | jq 'select(.experience[].company | test("Google|Meta|Apple|Stripe"))'

Event Follow-Up

Collected LinkedIn URLs at a conference? Enrich them all and export to CSV:

$ cat conference_contacts.txt | while read url; do
    enrich linkedin "$url" --json
  done | jq -r '[.name, .title, .company, .location] | @csv' > contacts.csv

AI Agent Context

Give your AI agent rich context about people it's interacting with:

import subprocess, json

def get_linkedin_context(url):
    result = subprocess.run(
        ["enrich", "linkedin", url, "--json"],
        capture_output=True, text=True
    )
    return json.loads(result.stdout)

# Feed into agent context
profile = get_linkedin_context("linkedin.com/in/prospect")
agent_prompt = f"You're speaking with {profile['name']}, {profile['title']} at {profile['company']}..."

LinkedIn Enrichment Tools Compared

ToolTypeBatch SupportScriptableStarting Price
enrichcliCLIYesYesFree (50/day)
LushaChrome ExtensionNoNo$49/user/mo
KasprChrome ExtensionNoNo$49/user/mo
LeadIQChrome ExtensionVia platformNo$39/user/mo
ApifyScraperYesYes$49/mo
UnipileAPIYesYesCustom

Chrome extensions are fine for occasional, one-off lookups. But the moment you need to process a list, automate a workflow, or integrate with other tools, you need a CLI or API.

Respecting LinkedIn's Terms

A note on compliance: enrichment tools don't scrape LinkedIn in real time. They maintain pre-built databases compiled from various public sources. When you run enrich linkedin, you're querying a database — not hitting LinkedIn's servers.

That said, how you obtained the LinkedIn URLs matters. If you scraped them in violation of LinkedIn's Terms of Service, the enrichment is the least of your concerns. Use LinkedIn data responsibly.

Getting Started

# Install
$ brew install enrichcli/tap/enrichcli

# Get your API key at app.enrichcli.com

# Enrich a LinkedIn profile
$ enrich linkedin linkedin.com/in/someone

# Enrich in batch
$ cat urls.txt | while read url; do enrich linkedin "$url" --json; done

50 free enrichments per day. No Chrome extension required.

start enriching data from the command line.

get started free

50 free enrichments per day. no credit card required.