# LinkedIn profile API: one call for the whole profile (https://www.socialcrawl.dev/blog/linkedin-profile-api) > 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. 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](https://learn.microsoft.com/en-us/linkedin/shared/integrations/people/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. | Call | HTTP | credits_used | curl time_total | | --- | --- | --- | --- | | `profile/all` one URL | 200 | 5 | 6.317s | | `profile/all` same URL twice | 200 | 5 | 6.657s | | `profile/with-posts` | 200 | 10 | 3.414s | | `search/posts?query=api&limit=4` | 200 | 1 | 9.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. | Section | section_totals | array length | | --- | --- | --- | | experiences | 3 | 3 | | educations | 2 | 2 | | skills | 0 | 0 | | recommendations (received) | 0 | 0 | | certifications, honors, languages, projects, publications, volunteering, courses, patents, organizations, causes | 0 | 0 | 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. | Title | Company | Start | End | | --- | --- | --- | --- | | Co-chair | Gates Foundation | 2000 | Present | | Founder | `Breakthrough Energy ` | 2015 | Present | | Co-founder | Microsoft | 1975 | Present | 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](https://learn.microsoft.com/en-us/linkedin/shared/integrations/people/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](https://learn.microsoft.com/en-us/linkedin/shared/references/v2/profile/basic-profile) 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](https://www.linkedin.com/help/linkedin/answer/a1340507) 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](/blog/best-linkedin-data-apis-2026) 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](/blog/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. | | min | max | sum | mean (sum/50) | median | | --- | --- | --- | --- | --- | --- | | likes | 460 | 44427 | 171482 | 3429.64 | 1807.5 | | comments | 65 | 2239 | 19594 | 391.88 | 270 | | shares | 24 | 906 | 9999 | 199.98 | 126 | `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. | Author | published_at | likes | comments | shares | relevance.p | content_category | intent label | | --- | --- | --- | --- | --- | --- | --- | --- | | Yash Patil | 2026-10-04T13:13:16.611Z | 4 | 0 | 0 | 0.79 | tech | news_or_discussion | | Techanic Infotech | 2026-10-04T02:45:02.838Z | 1 | 0 | 0 | 0.6 | other | null | | Vu Tran | 2026-10-02T02:16:36.456Z | 0 | 1 | 0 | 0.8 | other | null | | James Dean | 2026-10-04T11:34:06.564Z | 2 | 0 | 0 | 0.23 | tech | other | `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](/blog/how-to-scrape-linkedin-2026) is a separate post. Auth and the rest of the [LinkedIn API](/blog/linkedin-data-api-2026) 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? | Call | credits_used | | --- | --- | | `profile/all` one URL | 5 | | `profile/all` same URL twice | 5 | | `profile/with-posts` | 10 | | `search/posts?query=api&limit=4` | 1 | 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](https://learn.microsoft.com/en-us/linkedin/shared/integrations/people/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](https://learn.microsoft.com/en-us/linkedin/shared/integrations/people/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.