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:
| Permission | Returns | For |
|---|---|---|
| r_liteprofile | Name and photo | The signed-in member |
| r_basicprofile | Name, photo, headline and vanity name (their profile URL) | The signed-in member |
| More fields, other members | Further profile fields | Select 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:
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"{
"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.
| Section | Adds |
|---|---|
| about | The summary |
| experience | Every position, grouped by company, newest first |
| education | Schools and degrees |
| skills | Every skill (skills_preview: the ones shown first) |
| languages, certifications, projects | Each list, with its total |
| volunteering_experience | Volunteering roles |
| recommendations_received, recommendations_given | Recommendations, 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.