Guide

LinkedIn profile API: how to get profile data in 2026

LinkedIn has a Profile API, but it's restricted to developers LinkedIn approves, and it doesn't let you keep data about anyone but the signed-in member. Here is what the official API returns, from LinkedIn's own docs, and how to read a full profile, with experience, education and skills, through a member's own account instead.

By Lempile · Updated

What LinkedIn's official Profile API gives you

LinkedIn's Profile API returns a member's profile, subject to their privacy settings. Its documentation opens with the catch: the API is restricted to developers LinkedIn approves. And what you can read depends on the permission you hold:

PermissionReturnsFor
r_liteprofileName and photoThe signed-in member
r_basicprofileName, photo, headline and vanity name (their profile URL)The signed-in member
More fields, other membersFurther profile fieldsSelect partners only

Three more rules shape what you can build on it:

  • To read another member's profile you need their Person ID, which only certain limited-access APIs return.
  • You may store profile data only for the signed-in member, with their permission, and never for other members.
  • A Person ID only works in the app that received it: another app gets a 404 for it.

So the official API is for signing members in and personalizing your app with their own basics. It isn't a way to read prospects', candidates' or contacts' profiles. More on what else LinkedIn opens, and to whom, in Does LinkedIn have an API?

Reading profiles through a member's account

The other route is an account-based API: your user connects their own LinkedIn account, and the API reads profiles as that member would see them, in their session. With Lempile, one call returns the profile, and linkedin_sections adds the parts you ask for:

Read a profile with its experience and education
curl -sS "https://direct.lempile.com/api/v1/users/bob-buyer?account_id=$ACCOUNT_ID&linkedin_sections=experience,education" \
  -H "X-API-KEY: $LEMPILE_KEY"
The answer, shortened
{
  "object": "UserProfile",
  "provider_id": "ACoAAAzyxwvutsrqponml",
  "public_identifier": "bob-buyer",
  "first_name": "Bob",
  "last_name": "Buyer",
  "headline": "Head of Sales",
  "location": "Boston, Massachusetts, United States",
  "network_distance": "FIRST_DEGREE",
  "follower_count": 973,
  "connections_count": 970,
  "work_experience": [
    { "position": "Head of Sales", "company": "Example Co",
      "start": "2/1/2024", "end": null, "current": true }
  ],
  "education": [ … ]
}

The profile can be named four ways: its public identifier (bob-buyer), its provider id (ACoAA…, the id every write takes), its urn:li:fsd_profile URN, or the profile URL itself, URL-encoded. GET /users?provider_url= looks a profile up by its URL too.

SectionAdds
aboutThe summary
experienceEvery position, grouped by company, newest first
educationSchools and degrees
skillsEvery skill (skills_preview: the ones shown first)
languages, certifications, projectsEach list, with its total
volunteering_experienceVolunteering roles
recommendations_received, recommendations_givenRecommendations, with their totals
*Every section, in full

Every field LinkedIn has no value for is left out, dates come as month/day/year as in Unipile's API, and a current position has "end": null. The full list is in the profiles docs.

What a profile costs, and how many you can read

A profile takes three LinkedIn calls: the top card, the second card (followers, connections, shared connections) and the contact info. Sections take one to five more, so ask only for the ones you use. Each connected account makes at most 1,500 LinkedIn calls in any 24 hours, one at a time, 1.5 to 3 seconds apart: about 500 profiles a day without sections, fewer with them. Someone the account talked to in the last half hour is answered from the conversation, with no LinkedIn call.

Limits to plan for

  • It's one member's view. Contact details come back only as the member shares them with the reading account, and network distance is measured from that account.
  • It's not a database. Profiles are read one by one at a human pace, as the member could open them. For why bulk extraction is a different matter, see LinkedIn scrapers.
  • LinkedIn's User Agreement still applies. It restricts automated access, so the member who connects an account takes on the risk of a restriction. Pacing keeps it low; nothing removes it.
  • Profiles are personal data. Keep only what your product needs, for as long as it needs it.

FAQ

Questions, answered.

Does LinkedIn have a profile API?
Yes, but LinkedIn restricts its Profile API to developers it approves. Sign In with LinkedIn, open to every developer, returns only the signed-in member's own basics, and LinkedIn's rules forbid storing profile data about other members.
How do I get someone's full name from their LinkedIn URL?
Read the profile and use first_name and last_name. The part after /in/ in a profile URL is the public identifier the member chose, so it isn't always their name. A profile read through Lempile accepts the URL itself.
Can I get an email address from a LinkedIn profile?
Only what the member shares with the account reading the profile: Lempile returns contact_info (emails, phones and so on) as LinkedIn shows it to that account, and nothing more. LinkedIn's official API only gives the signed-in member's own email.
How many profiles can I read a day?
Through Lempile, each connected account makes at most 1,500 LinkedIn calls in 24 hours. A profile takes three calls, and sections one to five more, so an account reads up to about 500 profiles a day without sections, fewer with them.
Does it return Sales Navigator or Recruiter data?
Not through Lempile, which reads LinkedIn's classic profile. A Recruiter or Sales Navigator profile request answers 501.

Read LinkedIn profiles from your product.

Lempile reads profiles, with experience, education, skills and more, through accounts your users connect, at a human pace. Unipile-compatible. 7-day free trial, no card needed.

Sources (read on 4 November 2026)