LinkedIn Profile API
LinkedIn person profile with experience[], education[], skills[], similarProfiles[] — masked guest text becomes restricted:true.
GET request to /v1/linkedin/profile that responds with clean JSON and costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the LinkedIn Profile API?
Public LinkedIn person profile as clean JSON for B2B sales intel. Core identity: name, headline, about, followers, currentCompany — about from the real bio (JSON-LD), never LinkedIn's og:description SEO blurb. headline is the member's free-text line — it is not a structured title and can disagree with experience[0].title. The URL slug is resolved as-is; we do not rematch on name. currentCompany is the current experience[].company; when LinkedIn's company-page name differs it is currentCompanyLegalName. connections is exact below 500; LinkedIn's public cap (displayed 500+, often sent as 501) is returned as 500 with connectionsIsApproximate:true. education[] is always keyed and populated from the same sections as the profile page (school, degree, fieldOfStudy, startDate, endDate). Year-only rows stay "1995" — we do not invent a month. startDate can be null (a certification year). skills[] is always keyed from the same page section. experience[].startDate/endDate are ISO YYYY or YYYY-MM (never a Python dict repr). profileImage carries mediaUrlsExpireAt from LinkedIn's e= stamp (~19 days, midnight UTC). cached is always keyed. Enrich (Apify sections) leads — guest HTML almost never has experience/education and a 50s native miss before a 4s enrich was the old 54s bill; native is an 8s backup only when enrich is thin. When the detail actor ships experience but drops education, full-sections still runs. Guest-masked asterisk descriptions (******* …) are description:null with restricted:true. timings{nativeMs,enrichMs,totalMs} — nativeMs is omitted when native did not run. Apify section enrich is 2 credits.
What you get
- experience[] + populated education[] (year-only dates survive)
- always-keyed skills[] from the same page section
- ISO dates + connectionsIsApproximate on the 500+ cap
- currentCompany agrees with the current experience row
- mediaUrlsExpireAt + cached on the envelope
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/linkedin/profile?url=https%3A%2F%2Fwww.linkedin.com%2Fin%2Fpaul-martin-a5aa98" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"platform": "linkedin",
"type": "person",
"url": "https://www.linkedin.com/in/paul-martin-a5aa98",
"username": "paul-martin-a5aa98",
"name": "Paul Martin",
"headline": "Culver City, California, United States | Professional Profile",
"location": "Culver City, California, United States",
"about": null,
"followers": 5532,
"connections": 500,
"connectionsIsApproximate": true,
"profileImage": "https://media.licdn.com/dms/image/v2/C5603AQERBmOpeQdTJg/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1603153614207?e=2147483647&v=beta&t=jmt32YrTWx2FRGXeRg6yYkMBcNR7iGokOvlfuVH5d3U",
"currentCompany": null,
"education": [],
"cached": false
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Source. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
platformPlatform identifier for this response (matches the endpoint's platform).typeContent type of the item.urlCanonical URL of the item.usernameAccount username / handle.nameName of the item or account. On profile endpoints: deprecated alias of displayName (one release).headlineMember-authored free text. It is not a structured title — it can say Developer while experience[0].title says Engineer.locationLocation shown on the profile or item.aboutAbout.followersFollower count.connectionsExact integer below 500. LinkedIn never displays 501 — that value is the 500+ cap and is returned as 500 with connectionsIsApproximate true.connectionsIsApproximatetrue on the 500+ cap. false when LinkedIn exposed an exact count. null when connections is null (guest limit).profileImageProfile image URL. Deprecated alias of avatar on Instagram/Twitter/Threads/TikTok profile endpoints (one release).currentCompanySame string as the current experience[].company. Use currentCompanyLegalName when LinkedIn's company-page name differs.educationAlways keyed. {school, degree, fieldOfStudy, startDate, endDate}. Year-only stays YYYY. [] means this profile listed no schools — not that the field is out of scope.cachedAlways keyed. true on a cache=true hit. Default cache=false — live calls each bill.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | LinkedIn profile URL, e.g. https://www.linkedin.com/in/paul-martin-a5aa98. The URL platform must match this endpoint's platform. Do not pass cross-platform URLs, e.g. YouTube to TikTok, Instagram to Facebook, LinkedIn to X/Twitter, or Pinterest to Rumble. |
| cache | boolean | No | Set true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 2 credits. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/linkedin/profileand parse the JSON response.
Use cases
Profile Enrichment
Add live stats, bio, and account flags to a contact you already have.
Creator Verification
Confirm a known handle, audience size, and business/verified status before outreach.
Competitive Analysis
Track follower growth and posting cadence for accounts you already follow.
Partnership Qualification
Vet known partnership and sponsorship targets with fresh profile data.
Frequently asked questions
What does the LinkedIn Profile API do?+
The LinkedIn Profile API lets you fetch profile or page details and audience stats from a public LinkedIn profile or page using one GET request to /v1/linkedin/profile. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the LinkedIn Profile API cost?+
Each successful call costs 2 credits. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Failed or empty results are never charged.
Do I need a LinkedIn API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle proxies, rate limits, retries, and authentication for you.
Why were startDate / endDate unparseable strings?+
They used to be str() of a Python date dict ({'year': 2023, 'month': 'Sep'}). They are now ISO year-month (2023-09). Month is numeric — no English abbreviation table.
Why did a profile take 54 seconds?+
Guest HTML almost never has experience/education. The old path waited out a ~50s Decodo native miss, then Apify returned the full profile in ~4s. Enrich now leads; native is an 8s backup only when that enrich is thin. timings.nativeMs is omitted when native did not run.
Is connections 501 exact?+
No. LinkedIn displays exact counts below 500 and "500+" above that — it never shows 501. We return 500 with connectionsIsApproximate true. followers is a separate field and can be exact.
Why does currentCompany disagree with experience[0].company?+
It doesn't anymore. currentCompany is the current experience company. When LinkedIn's company-page name differs (Fever Energy vs Fever) that page name is currentCompanyLegalName.
Is headline the job title?+
No. It is the member's free-text headline. It can say Developer while experience[0].title says Engineer.
Where is education?+
Always keyed and populated from the profile Education section. Rows are {school, degree, fieldOfStudy, startDate, endDate}. Year-only stays "1995" (no invented month); startDate can be null on a single-year certification. [] means this profile listed no schools — not that we skip the section. A prior detail-only enrich returned [] even when the page had schools; full-sections now runs when education is empty.
Where are skills?+
Always keyed. Same page section as education — [{name, endorsements?}]. [] when the profile lists none or the payload omitted them. We do not run the full-sections actor solely for skills once education is populated. When the scraper ships the About "Key Skills:" line as one pipe-delimited blob ("SharePoint | Power Platform | …"), it is split into individual skill rows — a real LinkedIn skill name is capped at 80 chars and never contains pipes.
Why do followers and connections show the same number?+
Often genuinely equal. Connecting on LinkedIn auto-follows, so for members who never gained extra followers (no creator mode, no viral posts) followers == connections exactly. The two fields are parsed from different page elements — we do not copy one into the other.
Did you resolve the wrong Paul Martin?+
No. /in/paul-martin-a5aa98 is the Culver City Sony Pictures EVP & CDO. The slug is used as-is — we do not rematch on display name. A different Paul Martin (Sony Europe Head of Reward) is a different /in/… URL. headline is member-authored free text and can disagree with experience[0].title.
Is the LinkedIn Profile API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
More LinkedIn APIs
Ready to use the LinkedIn Profile API?
Sign up, grab your key, and make your first call in 60 seconds.