~ / endpoints / Profile API

LinkedIn Profile Scraper API

Our LinkedIn profile scraper takes a public /in/ profile URL or a bare vanity slug and returns structured JSON: name, headline, location, about, profile image, current company, follower count, and experience and education arrays, all in one request.

Get a free API keyBrowse the endpoints
1,000
free requests / mo
2.6s
median response
JSON
structured output
1
flat charge per profile
the wall

Why it is hard

LinkedIn login-walls the interactive profile, so a datacenter request usually lands on a Sign in shell with no data. The public /in/ preview renders only on a clean residential egress, so we route there and report the wall plainly when an egress is challenged.

quickstart

Quickstart

cURL
curl "https://api.linkedinscraperapi.com/api/v1/linkedin/profile?url=https://www.linkedin.com/in/reidhoffman&api_key=$API_KEY"
Python
import requests

BASE = "https://api.linkedinscraperapi.com"
API_KEY = "YOUR_API_KEY"

# Pass a full /in/ profile URL, or use username=reidhoffman instead.
data = requests.get(
    f"{BASE}/api/v1/linkedin/profile",
    params={
        "url": "https://www.linkedin.com/in/reidhoffman",
        "api_key": API_KEY,
    },
    timeout=30,
).json()

print(data["name"], "-", data["headline"])
print("Now at:", data["current_company"], "|", data["followers"], "followers")

# experience[] and education[] come from the public Person JSON-LD:
# the guest render exposes company and school names (roles/dates are null).
for role in data["experience"]:
    print(role["company"])
for school in data["education"]:
    print(school["school"])

Params

ParameterRequiredDefaultNotes
urloptional-A full /in/{slug} profile URL, e.g. https://www.linkedin.com/in/reidhoffman. One of url or username is required.
usernameoptional-The bare vanity slug instead of a URL, e.g. reidhoffman (the {slug} in /in/{slug}). One of url or username is required.
api_keyrequired-Your API key, passed as a query parameter. Get one free at signup.
response

Response

200 OK
{
  "id": "reidhoffman",
  "name": "Reid Hoffman",
  "headline": "Co-Founder, Executive Board Chair",
  "location": "United States",
  "about": "My current priority is investing in and building with AI to benefit humanity. Recently, I've co-founded Inflection.AI and ManasAI.co. I am active in all facets of the consumer internet and software industries...",
  "url": "https://www.linkedin.com/in/reidhoffman",
  "image": "https://media.licdn.com/dms/image/v2/D5603AQHW7wKzPb3DAg/profile-displayphoto-shrink_200_200/0/1718216204174?e=2147483647&v=beta&t=_CCpDriOmxYQ2dvuyVwU7D63RyTduLzslIJTP75N9eQ",
  "current_company": "Manas AI",
  "followers": 2776004,
  "connections": "500+",
  "experience": [
    { "title": null, "company": "Manas AI", "date_range": null, "location": null },
    { "title": null, "company": "Greylock", "date_range": null, "location": null },
    { "title": null, "company": "Microsoft", "date_range": null, "location": null }
  ],
  "education": [
    { "school": "Oxford University", "degree": null, "date_range": null },
    { "school": "Stanford University", "degree": null, "date_range": null }
  ]
}
FieldTypeDescription
idstringThe profile's vanity slug, the stable identifier from the /in/{slug} URL.
namestringThe member's full display name from the public Person node.
headlinestringThe professional headline shown under the name, e.g. "Co-Founder, Executive Board Chair".
locationstringThe member's location as published on the public preview, e.g. "United States".
aboutstringThe full About / summary text when the guest render exposes it.
urlstringThe canonical /in/ profile URL.
imagestringURL of the profile photo.
current_companystringThe current employer, taken from the first ongoing entry in experience.
use cases

Use it for

>

Sales and recruiting enrichment

Resolve a list of /in/ URLs into name, headline, location, and current_company so reps and recruiters see who a lead is before the first message.
>

Talent sourcing

Read the experience and education arrays to shortlist candidates by past companies and schools, then store the slug as a stable key.
>

CRM hygiene

Re-run a profile on a schedule to catch a title or company change and keep contact records current without manual checks.
>

People databases

Turn a spreadsheet of profile URLs into clean rows of name, headline, image, and follower count for a searchable people catalog.
under the hood

Under the hood

comparison

How it compares

Our APIDIY (requests / headless)Official LinkedIn API
Input by URL or slugYes, /in/ URL or usernameManual fetch and parseNo public profile-by-URL endpoint
Public profile fieldsName, headline, location, about, imagePossible, but the parser breaks oftenMembers API is partner-gated and consent-based
SetupAPI key onlyResidential proxies, headless browser, parsersPartner Program approval plus OAuth
Login and cookiesNone, logged-out onlyYou manage sessions and cookiesMember must authorize your app
Anti-bot and proxiesResidential-first, built inYou build and maintain itNot applicable
Experience and educationArrays of company and school namesExtra parsing per sectionOnly for members who connect your app
Behavior when walledReports the authwall honestlySilent partial or empty recordReturns only authorized fields

Pricing

PlanPriceBest for
Free1,000 requestsTesting and small jobs
Pro$0.60 / 1kProduction workloads
Pay-as-you-go$0.90 / 1kSpiky or one-off volume

Median response 2.6s. You only pay for successful requests.

FAQ

What is a LinkedIn profile scraper?

A LinkedIn profile scraper is a tool that reads a member's public profile data and returns it in a structured format. Our LinkedIn profile scraper API takes a /in/ URL or a vanity slug and returns the name, headline, location, about text, profile image, current company, follower count, and experience and education arrays as JSON from a single request.

How do I scrape a LinkedIn profile without logging in?

Send one GET request to our linkedin/profile endpoint with the profile url or a username and your API key. We route the request through residential proxies, handle anti-bot checks, and parse the public Person data LinkedIn renders for logged-out visitors, so you get clean JSON back without a LinkedIn account, cookies, or a headless browser of your own.

Can I pass a username instead of a full URL?

Yes. You can pass a full /in/{slug} URL in the url parameter, or the bare vanity slug in the username parameter, for example reidhoffman. One of the two is required, and the endpoint resolves the canonical profile URL either way.

Why are the roles and dates in experience null?

The logged-out profile page exposes a schema.org Person node whose worksFor and alumniOf lists carry company and school names, but usually not the role title or the start and end dates. So experience[] and education[] come back with company and school populated and title, date_range, and degree null. That is the ceiling of what LinkedIn renders publicly, and we return the real names rather than inventing dates.

Are follower and connection counts always returned?

Not always. The follower count appears on some public renders and comes back as an integer when present. The connection count is rarely public logged-out; when LinkedIn does print the owner's cap label we return it as a string like "500+", and otherwise both fields are null. We never guess these numbers.

Get profile api as JSON
Free plan, 1,000 requests. No credit card required.
Get a free API key All endpoints