LinkedIn · Guide

How to get LinkedIn profile

TL;DR
To get LinkedIn profile, sign up for a free Captapi key, then send one GET request to /v1/linkedin/profile with your input. You get clean JSON back in seconds for 2 credits per call — no OAuth, scraping or platform SDKs. LinkedIn person profile with experience[], education[], skills[], similarProfiles[] — masked guest text becomes restricted:true.

How to get LinkedIn profile (step by step)

  1. 1

    Get a free API key

    Create a free Captapi account (100 credits, no card) and generate an API key from the dashboard.

  2. 2

    Call the LinkedIn Profile API

    Send an authenticated GET request to /v1/linkedin/profile with your input. No OAuth, no scraping setup.

  3. 3

    Read the JSON response

    Parse the clean JSON response. Pass cache=true for a free 24h cache hit; default is always fresh.

Code example

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_..."

What the response looks like

{
  "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 (credits charged, cache hit/miss) is returned in the X-Captapi-Credits and X-Captapi-Cache response headers.

Request parameters

NameTypeRequiredDescription
urlstring YesLinkedIn 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.
cachebooleanNoSet true to serve from the 24h response cache (0 credits on hit). Default false — always fetch fresh.

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.

Ready to get LinkedIn profile?

Start free with 100 credits — no credit card required.

Get your free API key