The LinkedIn enrichment API that fetches live, not from a cache

Current employer, numeric ids, and an opt-in email, fetched live.

Live, not cached 1 credit per successful call Not-accessible rows free
HOW IT WORKS

How does live enrichment work?

You already have LinkedIn URLs. Point the enrichment API at one and it fetches the public page at request time, then returns three things a GTM or sales-intel team actually joins on.

Most enrichment providers serve you a stored record scraped weeks or months ago, so the employer can be stale the day you need it. This one reads the page fresh on every call.

Drop it into a Clay column or an enrichment waterfall and it behaves like any other HTTP step.

What comes backThe fieldWhy it matters for enrichment
Current employercurrentCompany, experienceThe live job, read at request time, not a snapshot. The full experience history rides along.
Numeric idscompanyLinkedInId, schoolLinkedInId, memberIdentifierStable numeric keys, so an enriched row reconciles against your database instead of matching on a messy name string.
Work emailworkEmail, emailStatusOpt-in with email=true. Comes with a status of verified, pattern-likely, or unknown so you can filter.

Everything lives at one endpoint, GET /v1/linkedin. Pass type=profile with the profile url, and turn on the ids and email with query flags. It takes a linkedin.com/in URL, never a name or search query.

curl "https://crustapi.com/v1/linkedin?type=profile&email=true&companyId=true&schoolId=true&url=https://www.linkedin.com/in/dharmesh" \ -H "x-api-key: YOUR_KEY"
PULLED LIVE FROM THE API, AUGUST 11, 2026

A real enriched record, not a mockup

This is the exact JSON the curl above returned, trimmed for width. It came back in 1.9 seconds and cost 1 credit.

// trimmed for width: profile photo, about, location, publicIdentifier, // currentTitle, older experience and education rows, date fields, // company and school URLs, and this key's creditsRemaining removed { "type": "linkedin-profile", "url": "https://www.linkedin.com/in/dharmesh", "tookMs": 1942, "accessible": true, "profile": { "name": "Dharmesh Shah", "headline": "Founder and CTO at HubSpot. Helping millions grow better.", "currentCompany": "HubSpot", "followerCount": 1189996, "memberIdentifier": "658789", "experience": [ { "companyName": "HubSpot", "companyLinkedInId": 68529 } ], "education": [ { "schoolName": "Massachusetts Institute of Technology", "schoolLinkedInId": 1503 } ], "workEmail": "dharmesh.shah@hubspot.com", "emailStatus": "verified", "emailConfidence": 92 } }

Read the ids from the row. companyLinkedInId is HubSpot's own numeric id, schoolLinkedInId is MIT's, and memberIdentifier is Dharmesh's permanent member id. Those are the values you join on.

The email came back verified with a confidence of 92, so it goes straight into the confirmed bucket.

THE FULL RECORD

What data do you get?

The whole public record, structured the same way on every call, so your parser is written once and your reconciliation logic never changes.

Identityname · headline · followerCountEmployer, livecurrentCompany · title · full experience historyNumeric idscompanyLinkedInId · schoolLinkedInId · memberIdentifierEducationschoolName · schools · datesEmail, opt-inworkEmail · emailStatus · emailConfidence

Names are a bad join key and numbers are a good one. A person moves companies, a company rebrands, someone edits their vanity URL, and a string match quietly breaks.

The numeric ids do not move, so an enriched row lines up against the record you already hold. Turn them on with companyId=true and schoolId=true.

The email field is opt-in: add email=true to a profile call and the response appends workEmail, emailStatus, and emailConfidence.

The status is verified, pattern-likely, or unknown, so you can keep the confirmed addresses and treat the rest as guesses. Email is a field on the profile call, not a separate product.

WHAT IT DOES NOT ENRICH

Fields that only exist behind a login stay out, on purpose. A person's connection list, mutual connections, who viewed a profile, or anything else that never appears on the logged-out page is not in the response. That boundary is what lets the API run with no accounts and nothing of yours at risk.

Enrich your first row in the next minute
Free 3,000 credits a month, no card.
Get started →
AT SCALE

Enrich a whole list in one request

Refreshing a list should not take one HTTP round trip per row. Send up to 100 LinkedIn URLs in one POST and get results back in the same order you sent them.

curl -X POST "https://crustapi.com/v1/linkedin/batch" \ -H "x-api-key: YOUR_KEY" -H "content-type: application/json" \ -d '{"urls": ["https://www.linkedin.com/in/dharmesh", "https://www.linkedin.com/in/satyanadella"], "type": "refresh"}'

The rules are built for large runs: results come back in the same order you sent them, a failing row never fails the batch, and a malformed URL is a per-row error, not a charge.

Billing matches the single endpoint: one credit per successful row, not-accessible rows free. type defaults to refresh, the lean call that returns the current company and school with their numeric ids; set it to profile for the full record.

THREE STEPS

How do you get started?

From zero to your first enriched profile in about two minutes:

  1. 1

    Create a free account. You get 3,000 credits a month, no card needed.

  2. 2

    Copy your key from the dashboard. It is issued the moment you sign up.

  3. 3

    Run the curl above with any LinkedIn URL. The live record comes back as JSON.

PRICING

How much does enrichment cost?

Every successful enrichment is one credit, single call or batch row. A profile that is not accessible costs nothing. Here is what the packs cost:

Profiles enrichedCreditsYou pay
3,000 every month3,000$0, free tier, no card
25,000 profiles25,000$49 ($1.96 per 1,000)
100,000 profiles100,000$149 ($1.49 per 1,000)
500,000 profiles500,000$549 ($1.10 per 1,000)
2.5 million profiles2,500,000$1,999 ($0.80 per 1,000)

Packs continue up to 250 million credits for $100,000, which is $0.40 per 1,000. Prices ex-tax.

Credits are prepaid and never expire. The numeric ids and the email field are included flags, not add-on line items.

WHO IT'S FOR

Who uses this API?

Related: LinkedIn API reference · LinkedIn Profile Scraper · Proxycurl alternative · Bright Data LinkedIn alternative

BEFORE YOU ASK

Common questions

It takes a LinkedIn profile URL and returns the current record: name, headline, current employer, numeric company and school ids, follower count, and an opt-in work email. Every request is fetched live from the public page, not read from a cache. One credit per successful call.

Live. Each call fetches the public profile at request time, so the employer and title reflect the page as it reads today, not a snapshot from weeks ago. That is the difference from most enrichment providers, which return a stored record.

Yes. POST up to 100 LinkedIn URLs to /v1/linkedin/batch and results come back in the same order you sent them. The default type is refresh, which returns the current company and school with their numeric ids. Failing rows never fail the batch and not-accessible rows are free.

Because names are messy join keys and numbers are not. companyLinkedInId and schoolLinkedInId are LinkedIn's own numeric ids, and memberIdentifier is the person's permanent member id, so an enriched row reconciles against your database even after someone changes jobs or renames a vanity URL.

Add email=true to a profile call and the response appends workEmail, emailStatus, and emailConfidence. The status is verified, pattern-likely, or unknown, so you can keep the confirmed addresses and treat the rest as guesses. Email is a field on the profile call, not a separate product.

We read only the public, logged-out version of each page and use no fake accounts or logins. Logged-out, public-only collection has repeatedly defeated computer-fraud and contract claims, and what you get back is data that is public for anyone to see.

WORKS WITH YOUR STACK

Enrich a list and see the difference

Start on the free 3,000 credits a month, no card needed. Send a URL, get the live employer, numeric ids, and an opt-in email, and a profile that is not accessible costs you nothing. No account of yours is ever part of the request.

Get 3,000 free credits
No credit card required