100 free credits. No credit card required.Start building
Logo
Back to blog

LinkedIn profile API: one call for the whole profile

·17 min read

One LinkedIn profile API call on Bill Gates's public URL returned 40,702,334 followers, 3 jobs, and 2 schools for 5 credits. The 50 posts were a separate call.

LinkedIn profile API: one call for the whole profile

You pass https://www.linkedin.com/in/williamhgates to one LinkedIn profile API call, GET /v1/linkedin/profile/all, and the public background comes back for 5 credits: 3 experiences, 2 educations, 20 similar profiles, and 40,702,334 followers, with followers_approximate false and no posts array on the body. The 50 posts came from GET /v1/linkedin/profile/with-posts at 10 credits, on a shorter background than the first call.

Which call returns the background, and which returns the posts?

Pick the call by the object you need. This run was one public profile, Bill Gates (williamhgates), on 2026-10-05.

  • Public background (experience, education, similar profiles, and the follower integer): profile/all. This run charged 5 credits and the body had no posts array.
  • That member's posts: profile/with-posts. This run returned 50 posts for 10 credits, with a shorter background.
  • Posts by keyword, not this profile: search/posts. This run sent query=api and limit=4, got 4 rows, and charged 1 credit. The body does not price any other limit.
  • The signed-in member on Microsoft's Profile API: name, headline, vanity name, id, and photo. That sample is not a public /in/ lookup.
  • The same URL twice on profile/all: still 1 row, still 5 credits.

The figures are four GETs on williamhgates, captured 2026-10-05

The calendar date is 2026-10-05. The HTTP Date headers run from Sun, 04 Oct 2026 15:50:07 GMT through Sun, 04 Oct 2026 15:50:27 GMT. All four calls were HTTP 200, cached: false, and x-cache: MISS, against https://www.socialcrawl.dev on the SocialCrawl API, for this one public profile.

Client elapsed is curl time_total, not a server latency field. In call order those times were 6.317s, 6.657s, 3.414s, and 9.600s.

Spend is each envelope's credits_used, 5 + 5 + 10 + 1 = 21. The key's balance moved by more than 21 in that window because other traffic hit the same dev key. The figures below use credits_used. These four URLs are the whole capture.

CallHTTPcredits_usedcurl time_total
profile/all one URL20056.317s
profile/all same URL twice20056.657s
profile/with-posts200103.414s
search/posts?query=api&limit=420019.600s
An open personnel folder with job and school cards, a follower gauge of tiny person silhouettes, and an empty tray where posts would sit, for one LinkedIn profile API call that returns the background and not the posts.

What does one LinkedIn profile API call return?

bash
curl "https://www.socialcrawl.dev/v1/linkedin/profile/all?url=https://www.linkedin.com/in/williamhgates" \
  -H "x-api-key: sc_your_api_key_here" \
  -H "Cache-Control: no-cache"

The live body was 40,406 bytes. This trim keeps the fields this section uses, including envelope credits_used of 5:

json
{
  "credits_used": 5,
  "cached": false,
  "data": {
    "author": {
      "display_name": "Bill Gates",
      "username": "williamhgates",
      "followers": 40702334,
      "following": 8,
      "posts_count": null,
      "verified": true,
      "joined_at": "2013-05-02",
      "ext": {
        "website": "https://gatesnot.es/AI",
        "followers_approximate": false
      }
    },
    "section_totals": {
      "experiences": 3,
      "educations": 2,
      "skills": 0,
      "recommendations": 0
    }
  }
}

On data.author the display name is Bill Gates, the username is williamhgates, the headline is "Chair, Gates Foundation and Founder, Breakthrough Energy", and the location string in this capture is "Seattle, Washington, United States". joined_at is 2013-05-02, verified is true, and ext.website is https://gatesnot.es/AI.

author.followers and raw followerCount are both 40702334. author.ext.followers_approximate is false, so this integer is not an approximation. Raw connectionsCount and author.following are both 8. Those are the two fields. author.posts_count is null, and it is the only key whose name contains "post". There is no posts array on data or on background.

SocialCrawl's unified schema puts the member on author and the résumé on background, with section_totals and similar_profiles beside them. On this profile, section_totals matches every array length.

Sectionsection_totalsarray length
experiences33
educations22
skills00
recommendations (received)00
certifications, honors, languages, projects, publications, volunteering, courses, patents, organizations, causes00

The about text is 136 characters: "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid traveler. Active blogger."

background.experiences holds three roles. The second company name is the string Breakthrough Energy with a trailing space. Match on the raw value if you compare company names.

TitleCompanyStartEnd
Co-chairGates Foundation2000Present
FounderBreakthrough Energy 2015Present
Co-founderMicrosoft1975Present

Education is Harvard University, degree null, 1973 to 1975, and Lakeside School, degree null, with an empty date object. top_education.school is the string "Harvard University".

background.recommendations (received) has length 0. The key given_recommendations is absent, so this body does not say how many he has written. services is null on both data.services and background.services for this member on this call.

similar_profiles has length 20. The first three usernames are sundarpichai, narendramodi, and satyanadella.

background.featured has length 2. Each card has a feed-update URL. The titles are "The turbulent AI era is here. The choices we make now are critical." and "What the Gates Foundation hopes to accomplish over the next 20 years". This call has no posts array.

background.interests buckets are top_voices 2, companies 2, groups 0, schools 2, newsletters 2, and other 0. Skills is an empty array, so this capture says nothing about endorsement floors.

On this call you get the long background, an exact follower integer, verified, joined_at, 20 similar profiles, and a 5-credit charge. You do not get a posts array. Skills and received recommendations are empty on this profile, services is null, and given_recommendations is absent.

Send profile/all when you need the résumé and the follower integer, and you do not need posts.

Does a LinkedIn profile scraper return the whole profile?

"Whole profile" depends on which object you asked for. Microsoft's Profile API, last updated 2026-04-30, is for approved developers, and the member's privacy settings still apply. GET https://api.linkedin.com/v2/me returns the signed-in member's name, headline, vanity name, id, and photo. The basic-profile field list on that page does not show experience, education, skills, recommendations, followers, or posts. The full partner field index was not part of this read, so those sections are not proven absent from every partner scope. They are absent from the published sample.

Another member is not a public /in/ lookup. The page shows a person id from limited partner APIs, and only if Off-LinkedIn Visibility is not limited. Person ids are scoped to the app. vanityName is an output you use to build a www.linkedin.com/in/ URL. The samples do not use that URL as the lookup key.

The public profile help page says signed-out viewers, including Google and Bing, see the public profile. Turning off Off-LinkedIn Visibility does not hide it.

Microsoft's storage rule for this API, quoted from the same page: "You may never store data returned from the Profile API for members other than the authenticated member."

A LinkedIn scraper API that takes a public profile URL and returns a parsed background is a different request from /v2/me. Product-by-product pricing lives on the LinkedIn data API comparison.

Use Microsoft's Profile API when you already have the member's token inside an approved LinkedIn app and the fields you need are name, headline, vanity name, id, and photo.

A tall stack of post cards in front of a thin resume folder, with a smaller loose pile of cards off to the side, for a LinkedIn post API call that returns posts instead of the full profile.

Which LinkedIn post API call returns posts, not the profile?

GET /v1/linkedin/profile/with-posts?url=https://www.linkedin.com/in/williamhgates returned 50 posts and charged 10 credits. Curl time_total on this call was 3.414s. Post search beyond this capture is the LinkedIn post API page.

bash
curl "https://www.socialcrawl.dev/v1/linkedin/profile/with-posts?url=https://www.linkedin.com/in/williamhgates" \
  -H "x-api-key: sc_your_api_key_here" \
  -H "Cache-Control: no-cache"

background on this object has only summary, experiences (3), educations (2), and skills (0). The three role titles and companies match call 1, including the trailing space on Breakthrough Energy . The summary is the same 136-character about text.

recommendations, section_totals, similar_profiles, and services do not appear on this object. On profile/all, received recommendations was an array of length 0. Here the recommendations key is missing. author.verified, author.joined_at, and author.posts_count are null, and author.ext has no followers_approximate key. author.followers is 40,702,335, one higher than the 40,702,334 on profile/all. The calls were about 10 seconds apart. profile/all sets followers_approximate to false, and this call omits the key, so neither integer is flagged as approximate. author.following is 8.

published_at on the 50 posts runs from 2026-08-17T01:10:56.521Z through 2026-10-03T00:54:55.724Z. The newest row is id 7511951889291456512, URL https://www.linkedin.com/feed/update/urn:li:activity:7511951889291456512, text "We need more ideas like these to get the most out of AI." (56 characters). That row has views null, likes 925, comments 203, shares 70, and saves null. computed.engagement_rate is null. The trimmed row below is data.posts[0]. The array length is 50.

json
{
  "credits_used": 10,
  "data": {
    "author": {
      "followers": 40702335,
      "following": 8,
      "verified": null,
      "joined_at": null,
      "posts_count": null
    },
    "posts": [
      {
        "post": {
          "id": "7511951889291456512",
          "content": {
            "text": "We need more ideas like these to get the most out of AI."
          },
          "engagement": {
            "views": null,
            "likes": 925,
            "comments": 203,
            "shares": 70,
            "saves": null
          }
        },
        "computed": { "engagement_rate": null }
      }
    ]
  }
}

Across all 50 posts, engagement.views is null and computed.engagement_rate is null. The rows are this member's 50 posts in the 2026-10-05 response, not a LinkedIn-wide benchmark.

minmaxsummean (sum/50)median
likes460444271714823429.641807.5
comments65223919594391.88270
shares249069999199.98126

GET /v1/linkedin/search/posts?query=api&limit=4 returned 4 rows, dropped 0, and credits_used 1. labels.extra_credits is 0 and relevance.extra_credits is 0. No price formula is on the body. A 2026-09-18 note publishes a max limit of 200. This run sent 4, and the note's max of 200 was not re-measured here.

bash
curl "https://www.socialcrawl.dev/v1/linkedin/search/posts?query=api&limit=4" \
  -H "x-api-key: sc_your_api_key_here" \
  -H "Cache-Control: no-cache"

data.walk says requested 4, returned 4, pages_attempted 1, pages_served 0, duplicates_removed 0, and stopped is "limit". The row count is returned (4). pages_served is 0. pagination.has_more is true, next_cursor is null, and page_size is 4. This body has no cursor to follow.

relevance.threshold is 0.5, kept is 4, and dropped is 0. One kept row has relevance.p of 0.23, below that threshold, and sense is "target" on all four. computed.engagement_rate is null on all four.

Authorpublished_atlikescommentssharesrelevance.pcontent_categoryintent label
Yash Patil2026-10-04T13:13:16.611Z4000.79technews_or_discussion
Techanic Infotech2026-10-04T02:45:02.838Z1000.6othernull
Vu Tran2026-10-02T02:16:36.456Z0100.8othernull
James Dean2026-10-04T11:34:06.564Z2000.23techother

with-posts gives you 50 posts plus the three roles and two schools, for 10 credits. The background is thinner than profile/all, the recommendations key is missing, and views and engagement rate are null.

search/posts gives you keyword posts, 4 rows for 1 credit, with walk.stopped of "limit". Those rows are other members' posts. The cursor is null while has_more is true. One kept row scored under the stated threshold. This body does not price a larger limit.

Send with-posts when you want that member's posts. Send search/posts when the query is a keyword.

Should you scrape LinkedIn profiles or call a profile API?

If you already have a public /in/ URL and you want a parsed background, send that URL to profile/all. The single-URL call is the one in the section above. The only bulk result in this capture submitted the same URL twice:

bash
curl "https://www.socialcrawl.dev/v1/linkedin/profile/all?urls=https://www.linkedin.com/in/williamhgates,https://www.linkedin.com/in/williamhgates" \
  -H "x-api-key: sc_your_api_key_here" \
  -H "Cache-Control: no-cache"

The response has items 1, total 1, dropped 0, and credits_used 5. Pagination has has_more false, page_size 1, and next_cursor null. The single row's author.id matches call 1, the follower integer is again 40702334, there is no posts key, and posts_count is null. The second copy did not produce a second profile or a second 5-credit charge. dropped stays 0 even though that copy produced no second row. This call does not show a multi-profile discount, a URL cap, or a price per resolved profile.

Microsoft's multi-get on the Profile API page is people?ids=List(...) on person ids, not public URLs. The longer writeup of running your own LinkedIn scraper is a separate post. Auth and the rest of the LinkedIn API sit outside these four calls.

Send profile/all when the input you have is a public /in/ URL and you want that parsed background. This post does not grant LinkedIn partner access.

What did these four calls cost?

Callcredits_used
profile/all one URL5
profile/all same URL twice5
profile/with-posts10
search/posts?query=api&limit=41

The four envelopes sum to 21. That is the spend. The profile call and the posts call are separate charges. If you send both, you pay the 5-credit charge and the 10-credit charge. This run does not label a combined package, and it does not state a per-post price. limit=200 stays a published cap. It was not priced here. This capture has no free-tier line and no rate-limit number.

Pick profile/all, with-posts, or search/posts by the object you need

  • You need experience, education, similar profiles, verified, joined_at, and the exact follower integer. Send profile/all at 5 credits. You do not get posts.
  • You need that member's posts and can accept the shorter background. Send with-posts at 10 credits for 50 posts, with views and engagement rate null.
  • You need both the long background and the posts. Send both calls, and expect the 5-credit charge and the 10-credit charge as two lines.
  • You need keyword posts that are not this profile. Send search/posts. This run is limit=4 for 1 credit.
  • You need the signed-in member from an approved LinkedIn app. Use Microsoft's Profile API. The sample is name, headline, vanity name, id, and photo.

This is one profile. Skills and received recommendations were empty. with-posts is a different shape from profile/all, and keyword search did not state a price formula. The follower integers differed by 1 across about 10 seconds, and only the first call carried followers_approximate: false.

Frequently asked questions

What is a LinkedIn profile API?

A call that returns a member profile. On Microsoft's Profile API the published sample is the signed-in member's name, headline, vanity name, id, and photo from GET https://api.linkedin.com/v2/me. On the public URL in this capture, GET /v1/linkedin/profile/all returned the background for williamhgates and the body had no posts array.

Which call returns the whole LinkedIn profile?

GET /v1/linkedin/profile/all on https://www.linkedin.com/in/williamhgates. This run returned 3 experiences, 2 educations, skills length 0, received recommendations length 0, followers 40702334 with followers_approximate false, and 20 similar profiles, for 5 credits. There is no posts key. The 50 posts were profile/with-posts.

Which call returns LinkedIn posts instead of the profile?

profile/with-posts on this URL returned 50 posts and a shorter background (summary, 3 experiences, 2 educations, 0 skills) for 10 credits. That background is shorter than profile/all, and the recommendations key is missing. search/posts?query=api&limit=4 returned 4 posts by other members, for 1 credit. walk.stopped on that call is "limit".

Does one LinkedIn profile API call include experience and education?

Yes on this profile. profile/all and with-posts both returned the same 3 experiences (Gates Foundation, Breakthrough Energy, Microsoft) and the same 2 educations (Harvard University, Lakeside School). Only profile/all also returned the rest of the background sections, including section_totals, similar_profiles, and received recommendations (length 0 here).

When do you need a posts call instead of a LinkedIn profile API call?

When you need a posts array. profile/all on this URL did not include one. author.posts_count was null. Use with-posts for this member's posts (50 posts, 10 credits on this run). Use search/posts for a keyword (limit=4, 4 rows, 1 credit). engagement.views and computed.engagement_rate were null on every post in this capture, all 50 profile posts and all 4 search posts.

Can a LinkedIn profile API return more than one profile in one request?

This run submitted https://www.linkedin.com/in/williamhgates twice on profile/all urls= and got total 1, dropped 0, and credits_used 5. That is the whole bulk result. Microsoft's Profile API shows a multi-get on person ids (people?ids=List(...)), not on public URLs. This capture does not state a URL cap or a batch price.

To rerun the four GETs, send them to https://www.socialcrawl.dev with your own key in x-api-key and Cache-Control: no-cache. credits_used on each JSON envelope is the charge for that call.

Topics
#linkedin-profile-api#linkedin-scraper#linkedin-profile-scraper#linkedin-post-api#linkedin-scraper-api#scrape-linkedin-profiles#linkedin-api-tutorial#linkedin-api

Related posts

🤖 AI agent or LLM? Read this page as markdown