100 free credits on signup · no card required

LinkedIn Profile API

One URL in. Clean JSON out.

Give it a LinkedIn profile URL or a public handle and get back the person's headline, follower count, location, current company and about text as JSON. 10 credits per profile, or 25 if you add include_email=true and want the work email attempted. Public profile data only, read logged out — the same page an anonymous visitor sees.

Credits 10 / profile
Input ?url=
Cache 12h
GET · BEARER
Request composing…
Cached 12 hours
cheap to re-poll
Works with your stack
cURL Python Node.js Zapier n8n Make MCP
One key · one credit balance · plain REST

The difference

Stop parsing markup. Start reading fields.

On the left, what a headless browser hands you. On the right, what the endpoint hands you.

Scraping it yourself raw HTML · every call
<div class="feed-shared-update-v2 artdeco-card" data-urn="urn:li:activity:7181111111111111111"><div class="update-components-text relative"><span dir="ltr">We just cut p95 latency in half by moving the cache closer to the edge.</span></div><div class="social-details-social-counts"><li class="social-details-social-counts__item"><span aria-label="842 reactions">842</span></li><li class="social-details-social-counts__comments">63 comments</li><li>41 reposts</li></div><time class="update-components-actor__sub-description">4d</time><code style="display:none">{"data":{"*elements":["urn:li:fsd_update:(urn:li:activity...
×Class names rotate; your selectors break weekly ×Headless browsers, proxies, blocks to babysit ×Counts arrive as strings, not numbers
One GET request 12 typed fields
{
"data": {
"platform": "linkedin",
"handle": "example-person",
"name": "Example Person",
"headline": "Head of Growth at Example Co",
"location": "Austin, Texas, United States",
"positions": [
{
"title": "Head of Growth",
"company": "Example Co",
"start": "2024-03",
"end": null
}
],
"metrics": {
"followers": 18240,
"connections": "500+"
}
},
"request_id": "req_01JZX4M8Q2TE9W"
}
Stable field names, documented nulls No proxies, no browser, no login session Counters are integers you can sort on

The payload

What comes back

{ data, meta?, request_id }
01 One flat object per profile

One flat object per profile. The identity half is handle, name, headline and url; the context half is location, current_company, bio and the verified badge; the audience half is followers and following. That is enough to key a CRM record, score a lead, or decide whether a person is worth a human's attention.

02 No work history or education

What you do not get is the full CV. There is no positions array, no education, no skills, no endorsements. LinkedIn treats deep profile history as gated data and we do not go behind gates, so this endpoint documents the surface of a public profile rather than pretending to a résumé export.

03 The posts key is always null

The `posts` key is present in every response and is always null. It exists so the shape stays consistent with the other profile endpoints across platforms; LinkedIn does not publish a post count on the profile surface. If you want someone's actual posts, that is a different call.

Field explorer Pick a key to see its type and the caveats.
number|null Nullable Per item
following

How many accounts the person follows. Frequently null; LinkedIn shows this far less consistently than followers.

{
"handle": "example-person",
"name": "Example Person",
"headline": "Head of Growth at Example Co",
"followers": 18240,
"following": 0,
"posts": "…",
"bio": "…",
"verified": false,
"location": "Austin, Texas, United States",
"current_company": "…",
"email": "…",
"url": "…"
}
Good fit

Reach for this when

  • Enriching inbound signups: a user gives you their LinkedIn URL, you fill in headline, company and location without asking them to type it twice.
  • Lead qualification at the top of a list, where you need follower count and current company across a few hundred people before a human opens any of them.
  • Keeping a CRM's contact records from rotting — re-run profiles quarterly and flag the ones whose current_company changed.
  • Recruiting research on public candidate profiles, as a first pass to decide who is worth a real look.
  • Checking that a claimed identity lines up: does the headline and company on a partner's profile match what the deal doc says.
Different job?

There's an endpoint for that

  • You want the organisation, not the person — use the LinkedIn Company API, which returns employee count, industry, HQ and website.
  • You want what someone has actually been writing. This endpoint returns no content at all; the LinkedIn Company Posts API covers company pages, and LinkedIn Post Search finds posts by keyword.
  • You are starting from a job title or a company rather than a known profile URL — LinkedIn People Search takes a query and returns candidates you can then pass here.
  • You need employment history, education or skills. Those are not in this response and no parameter turns them on.

Pricing

Start free, pay for what comes back

One profile is 10 credits — about 5¢ on the monthly plan, 4.5¢ on annual. $5 covers roughly 100 profiles, and failed calls are never charged. include_email=true bills the higher 25-credit rate.

Estimate your bill
$29/ month
30 profiles/day × 10 credits × 365 days = 109,500 credits/yr, or $348/yr on the annual plan plus 98 top-up blocks Whichever plan is cheaper for that volume, divided by 12.
30
102,000
Credits / yr 109,500
Plan Annual $54/yr
Per profile

Estimate only, on a full-year basis. 10 credits per returned profile. Monthly: $5 per 1,000 credits with $4/1,000 top-ups. Annual: $54 per 12,000 credits with $3/1,000 top-ups. We show whichever plan is cheaper for your annual volume, divided by 12. Failed calls are never charged; cache hits cost the same as fresh calls.

Free trial
100 credits

On signup, no card. Your key is on screen immediately.

Get your free API key
Monthly $5/mo 1,000 credits. Top-ups $4 per extra 1,000.
Annual $54/yr 12,000 credits. Top-ups $3 per extra 1,000.

Entry price, side by side

Cheapest way to start

Verified July 2026 from each vendor's live pricing page
ScraperSocial
$5 / mo 1,000 credits · 100 free credits, no card
Supadata
$5 / mo 300 credits, annual commitment · 100 free/mo
SocialKit
$29 / mo 12,000 credits · 20 free credits
Dumpling AI
$40 / mo Billed annually · free tier size unpublished
ScrapeCreators
$47 pack 25,000 credits, no subscription · 100 free once

Credits are not equivalent units across vendors — each meters differently. Price your own workload on both before deciding on entry price alone. At high volume, several of these are cheaper per credit than we are.

Engineering notes

Docs you can build on

We document exactly how every endpoint behaves — nulls, caching, billing — so what you ship on day one is still running in month six. No surprises, no support tickets.

Failed calls are never charged Public data only, no login session Built for parallel traffic

Passing include_email=true switches the call to the 25-credit rate and attempts to surface a work email. It resolves for some profiles and returns null for many. The price is for the attempt, not the result, so budget for a hit rate well below 100% and do not build a flow that assumes an address will be there.

Leave the parameter off and you pay 10 credits and get `email: null` every time. If email is not central to your use case, that is the right default.

Names, headlines, employers and email addresses about identifiable people fall under GDPR, CCPA and their relatives, regardless of the data being public. You are the controller for anything you store. Have a lawful basis, honour deletion requests, and do not retain profiles you no longer have a reason to hold.

We read only what a logged-out visitor sees. There is no session, no connection graph, no contact info behind a mutual connection, and nothing from a profile set to private.

People change jobs without updating LinkedIn for weeks. current_company and headline reflect what the profile says today, not where the person actually works. If a record matters, look at recency signals elsewhere before acting on it.

Responses are cached in the slow class, which suits profile data — it barely changes day to day. Repeat calls inside the window return in milliseconds and set x-cache: hit. A cache hit costs the same credits. Pass fresh=true when you specifically need to bypass it, for example when re-checking a record you already know changed.

Most profiles are half-empty. No About text, no follower count, no location. The normalizer returns null for anything missing rather than guessing, so write your code to tolerate every field except the shape itself being absent. A profile that returns only handle, name and url is a valid response.

Genuinely unreachable profiles — deleted, private, or never public — return an error instead of a mostly-null object, and errors are not charged.

You can pass either the full https://www.linkedin.com/in/{handle} URL or the bare handle. Both resolve to the same call. Numeric LinkedIn member IDs and Sales Navigator links are not profile URLs and will not work — use the /in/ form.

Questions

Frequently asked

Send a GET to /v1/linkedin/profile with the profile URL or handle and your API key. There is no LinkedIn login, no cookie to supply and no session to keep warm on your side. The endpoint reads the public profile page and returns JSON. Anything LinkedIn hides from logged-out visitors — private profiles, connection lists, contact details behind a connection — is simply not reachable and returns an error.

10 credits per profile, or 25 credits with include_email=true. Credits are $0.005 each on the monthly plan and $0.0045 on annual, so a standard profile is about 5 cents and an email-attempted one about 12.5 cents. Cached responses cost the same as fresh ones. Failed calls are not charged.

Sometimes. Add include_email=true and the call attempts to resolve a work email, at the higher 25-credit rate. It succeeds on some profiles and returns null on many others, and you pay the higher rate regardless of outcome. We will not promise a hit rate we cannot control. Without the parameter, the email field is always null and you pay 10 credits.

No. This endpoint returns headline, current_company, location, About text, follower counts and the verified flag. There is no positions array, no education, no skills and no endorsements, and no parameter enables them. If your product depends on full employment history, this is not the right tool and you should not buy credits expecting it.

We are not lawyers and this is not legal advice. Reading public web pages has generally held up in US courts, but the data here is personal data about identifiable people, so GDPR, CCPA and similar rules apply to what you store and why. You are the controller for your copy. Get advice for your jurisdiction and use case before building on it at scale.

One profile per call, run concurrently. The API is built for parallel traffic, so a few hundred URLs finish in the time the slowest one takes. Since profiles change slowly, cache your own copy and re-run on a schedule — quarterly is plenty for most CRM hygiene work — rather than re-fetching the same person on every page load.

Because most LinkedIn profiles are sparse. Empty About sections, hidden follower counts and missing locations are ordinary, and the normalizer returns null rather than inventing a value. A response with only handle, name and url is valid. Reserve your error handling for actual errors — those come back as errors, not as null-filled objects, and are not charged.

Next

Pairs well with

Full LinkedIn API reference →
/v1/linkedin/company
LinkedIn Company API Company page data: industry, size, followers and description. 10 cr / company
/v1/linkedin/people-search
LinkedIn People Search API Search public LinkedIn profiles by keyword, title, company or location. 5 cr / profile
/v1/linkedin/search
LinkedIn Search API Keyword search over public LinkedIn posts. 5 cr / result
/v1/instagram/channel-stats
Instagram Channel Stats API Follower counts, bio and profile metadata for an Instagram account. 3 cr / profile

More LinkedIn endpoints

/v1/linkedin/stats Reactions, comments and reposts for a LinkedIn post. 5 credits / post /v1/linkedin/comments Paginated comments on a LinkedIn post; charged per comment returned. 5 credits / comment /v1/linkedin/company Company page data: industry, size, followers and description. 10 credits / company /v1/linkedin/company-posts Latest posts from a LinkedIn company page with per-post metrics. 5 credits / post /v1/linkedin/search Keyword search over public LinkedIn posts. 5 credits / result /v1/linkedin/people-search Search public LinkedIn profiles by keyword, title, company or location. 5 credits / profile

Try the LinkedIn Profile endpoint free

100 trial credits on signup — no card, key on screen immediately.

1 Sign up free no card · 30 seconds
2 Copy your key sk_live_...
3 GET the endpoint /v1/linkedin/profile
Get your free API key