LinkedIn Post Analytics API: Pages and Personal Profiles
LinkedIn post analytics come from the Community Management API. For a company Page, call organizationalEntityShareStatistics with the rw_organization_admin scope. For a personal profile, call memberCreatorPostAnalytics with r_member_postAnalytics, one metric per request. Page post stats are organic only and cover the past 12 months. Adeli returns impressions, reactions, comments, clicks, and shares for both through one social media API.
The LinkedIn post analytics API is two endpoints in LinkedIn's Community Management API: organizationalEntityShareStatistics for posts on a company Page, and memberCreatorPostAnalytics for posts on a member's personal profile. They take different scopes, different URN formats, and different date formats, and many failed calls in developer forums come from mixing the two up.
That mix-up shows in the forum threads: developers get a 403 asking for one post's numbers when the Page totals worked fine, or a 404 for a post they published minutes earlier. This guide covers both endpoints, the requests that work, and the errors developers hit, with every rule checked against LinkedIn's docs on Microsoft Learn.
Which LinkedIn API returns post analytics?
LinkedIn post analytics come from the Community Management API, one of the products in LinkedIn's Marketing API program. The Community Management overview lists Page Analytics and Member Analytics as approved use cases, and both sit in the same product your app uses to post.
One result on the first page of Google says share statistics come through the Marketing API instead of Community Management. Both names fit, because LinkedIn's Marketing API is the umbrella and Community Management is a product inside it. The share statistics reference sits in the Community Management docs and needs only rw_organization_admin, a scope the Community Management API grants. You don't need the Advertising API for organic post numbers.
| What you want | Endpoint | Scope the member grants |
|---|---|---|
| Page post stats (impressions, clicks, likes, comments, shares) | organizationalEntityShareStatistics |
rw_organization_admin |
| Page views and button clicks | organizationPageStatistics |
rw_organization_admin |
| Page follower gains and demographics | organizationalEntityFollowerStatistics |
rw_organization_admin |
| Personal profile post stats | memberCreatorPostAnalytics |
r_member_postAnalytics |
| Personal profile followers | memberFollowersCount |
r_member_profileAnalytics |
| Sponsored post results | Ad Analytics (Advertising API) | r_ads_reporting |
What do you need before you start?
- A LinkedIn developer app with the Community Management API approved. LinkedIn vets the request and starts every app on Development tier.
- The right member. For Page analytics, the member who authorizes your app must hold the
ADMINISTRATORrole on that Page. For personal analytics, the member reads only their own posts. - The scopes in your OAuth request:
rw_organization_adminfor Pages, andr_member_postAnalyticsplusr_member_profileAnalyticsfor profiles. - A
Linkedin-Versionheader inYYYYMMform andX-Restli-Protocol-Version: 2.0.0on every call. - The post URN from when you published it:
urn:li:share:…orurn:li:ugcPost:….
Step 1: Get Page post analytics with the LinkedIn Page analytics API
The LinkedIn Page analytics API for posts is organizationalEntityShareStatistics, called with the Page's organization URN. Leave out timeIntervals and it returns lifetime totals for the Page's posts:
curl "https://api.linkedin.com/rest/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A2414183" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Linkedin-Version: 202610" \
-H "X-Restli-Protocol-Version: 2.0.0"Each element carries a totalShareStatistics object with impressionCount, uniqueImpressionsCount, clickCount, likeCount, commentCount, shareCount, and engagement.
To get specific posts, add them as a list. Use shares for urn:li:share URNs and ugcPosts for urn:li:ugcPost URNs:
curl "https://api.linkedin.com/rest/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A2414183&shares=List(urn%3Ali%3Ashare%3A7132564752928563200,urn%3Ali%3Ashare%3A7132402731377438720)" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Linkedin-Version: 202610" \
-H "X-Restli-Protocol-Version: 2.0.0"Four rules from LinkedIn's reference that catch people:
- Organic only. Sponsored activity isn't counted. Paid numbers come from Ad Analytics.
- 12 months back. The endpoint returns share data only within a rolling 12-month window.
- No daily breakdown per post. Time-bound statistics aren't supported for specific share or UGC post queries. Daily numbers come only at the Page level.
- Missing means zero. A post with no impressions or actions is left out of the response, and LinkedIn says to treat it as zero for every metric.
Step 2: Get daily Page numbers with timeIntervals
Daily or monthly Page numbers come from adding timeIntervals to the same call, with timestamps in milliseconds since the epoch. The granularity is DAY or MONTH. With protocol version 2.0.0, the parameter is one Rest.li object:
curl "https://api.linkedin.com/rest/organizationalEntityShareStatistics?q=organizationalEntity&organizationalEntity=urn%3Ali%3Aorganization%3A2414183&timeIntervals=(timeRange:(start:1790812800000,end:1791417600000),timeGranularityType:DAY)" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Linkedin-Version: 202610" \
-H "X-Restli-Protocol-Version: 2.0.0"Each element gets a timeRange and the totals for that day. Two related Page endpoints take the same timeIntervals shape:
organizationPageStatisticsreturns Page views and clicks, split by desktop and mobile and by section (overview, careers, jobs, life).organizationalEntityFollowerStatisticsreturns follower gains, organic and paid. WithouttimeIntervalsit returns lifetime counts by seniority, industry, function, country, and company size. LinkedIn's follower statistics page says the time-bound version runs from 12 months before the request date to 2 days before it.
The shareCount in daily results won't add up to the lifetime number. LinkedIn notes that time-bound data leaves out instant reposts.
Step 3: Get personal profile analytics with the LinkedIn member post analytics API
The LinkedIn member post analytics API is memberCreatorPostAnalytics, and it returns one metric per request for the authenticated member's own posts. LinkedIn opened it to third-party tools on July 8, 2025. The entity finder reads one post; the URN goes inside a wrapper that names its type:
curl "https://api.linkedin.com/rest/memberCreatorPostAnalytics?q=entity&entity=(share:urn%3Ali%3Ashare%3A7325786486870552578)&queryType=IMPRESSION&aggregation=TOTAL" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Linkedin-Version: 202610" \
-H "X-Restli-Protocol-Version: 2.0.0"For a urn:li:ugcPost, the wrapper is (ugc:urn%3Ali%3AugcPost%3A…). The me finder (q=me) totals the same metric across all of the member's posts.
| Setting | Values, from LinkedIn's member post statistics reference |
|---|---|
queryType |
IMPRESSION, MEMBERS_REACHED, RESHARE, REACTION, COMMENT; from version 202604 also POST_SAVE, POST_SEND, LINK_CLICKS, PREMIUM_CTA_CLICKS, FOLLOWER_GAINED_FROM_CONTENT, PROFILE_VIEW_FROM_CONTENT |
aggregation |
TOTAL (default) or DAILY; DAILY isn't supported for MEMBERS_REACHED, LINK_CLICKS, FOLLOWER_GAINED_FROM_CONTENT, or PROFILE_VIEW_FROM_CONTENT |
dateRange |
(start:(day:4,month:5,year:2024),end:(day:6,month:5,year:2024)), start inclusive, end exclusive; omit it for the post's lifetime |
Two behaviors to plan for:
- One metric per call. A post card that shows impressions, reactions, comments, and reshares is four requests. On Development tier that's four of a member's 100 daily calls.
- Best-effort counts. LinkedIn says the data shouldn't be used for billing, and that
RESHARE,REACTION, andCOMMENTfrom themefinder aren't consistent with the LinkedIn UI.
LinkedIn's director of creator products, Sam Corrao Clanon, explained the purpose to Digiday at launch:
"What this will do on the creator side … is give a more complete picture of what their reach looks like across platforms, from whatever tool they use."
Sam Corrao Clanon, director of creator products at LinkedIn, in Digiday, July 2025
If your product reports on customers' LinkedIn posts, this endpoint means they stop exporting numbers from LinkedIn by hand.
Step 4: Add the LinkedIn profile analytics API for followers
The LinkedIn profile analytics API for followers is memberFollowersCount, which needs the r_member_profileAnalytics scope. q=me returns the lifetime count; q=dateRange returns a daily series:
curl "https://api.linkedin.com/rest/memberFollowersCount?q=dateRange&dateRange=(start:(year:2026,month:10,day:1),end:(year:2026,month:10,day:29))" \
-H "Authorization: Bearer <ACCESS_TOKEN>" \
-H "Linkedin-Version: 202610" \
-H "X-Restli-Protocol-Version: 2.0.0"LinkedIn's scope description for r_member_profileAnalytics also names profile viewers and search appearances. The Community Management overview, though, lists only three member analytics endpoints: follower statistics, post statistics, and video analytics.
What errors do developers hit with LinkedIn post analytics?
Most LinkedIn post analytics errors come from the member's role, the URN type, or or the date format. These are from public developer threads.
"…when I ask for a concrete share created in this organization I get a 403…"
jordi on Microsoft Q&A, July 2023
"I found out that I wasn't admin of the organization after all, only of the corresponding developer app."
Christian Kaul on Stack Overflow, April 2024
"…every post has the same result for each day (i.e. days 1 through 7 have the same data for each post, but I expect different data for each day for each post)."
A developer on Stack Overflow, March 2026
"End time must be greater than start time by at least one multiple of the granularity type"
Avedis Maroukian on Stack Overflow, March 2023
"…consistently receive a 404 Resource not found response, despite successful OAuth and post creation."
Meenakshi Joshi on Stack Overflow, January 2026
"LinkedIn doesn't allow access to analytics for personal (member) posts through their public APIs."
A reply on the Make Community forum, December 2025
Each one maps to a rule above:
| Symptom | Likely cause | Fix |
|---|---|---|
403 on specific posts, 200 on Page totals |
The member isn't an ADMINISTRATOR of the Page, or a ugcPost URN went in shares |
Check the role with organizationAcls; match shares to urn:li:share and ugcPosts to urn:li:ugcPost |
| Same numbers every day for one post | Time-bound stats aren't supported for specific posts | Read daily numbers at the Page level, or store lifetime totals daily and subtract |
| "End time must be greater than start time…" | Timestamps in seconds, or a range over 12 months | Use milliseconds and stay inside the rolling 12-month window |
404 from memberCreatorPostAnalytics |
The URN isn't wrapped by type, or the post isn't the member's own | Send entity=(share:…) or entity=(ugc:…) with the author's token |
| "No analytics for personal posts" | Advice from before July 2025 | Request r_member_postAnalytics and use memberCreatorPostAnalytics |
Is there a LinkedIn analytics API documentation page for all of this?
LinkedIn's analytics API documentation lives on Microsoft Learn, split into one page per endpoint under Community Management. These are the pages to bookmark:
- Organization share statistics: Page post analytics
- Organization page statistics: Page views and clicks
- Organization follower statistics: Page followers
- Member post statistics: personal profile post analytics
- Member follower statistics: personal profile followers
- Increasing access: every scope, and the Development and Standard tier limits
Each page has a version picker. Read the version that matches your Linkedin-Version header, because metrics such as POST_SAVE only exist from 202604.
Is there a faster way to get LinkedIn post analytics?
Adeli returns LinkedIn post analytics for Pages and personal profiles through one social media API, so your product doesn't need its own Community Management approval, scope handling, or per-metric calls. Your users connect a Page or their personal profile, and you read their numbers with the same API key you use for every other network.
Lifetime counters for up to five posts, by the providerId Adeli returned when you published to LinkedIn:
curl "https://app.tryadeli.com/api/v1/analytics/linkedin/post-insights?accountId=<ACCOUNT_ID>&postUrns=urn:li:share:7251234567890123456" \
-H "Authorization: Bearer $ADELI_API_KEY"Followers and a daily series for the last 1 to 30 complete UTC days:
curl "https://app.tryadeli.com/api/v1/analytics/linkedin/account-insights?accountId=<ACCOUNT_ID>&days=7" \
-H "Authorization: Bearer $ADELI_API_KEY"What you get back, per Adeli's docs:
- Post insights. Impressions, reactions, and comments for every post; clicks and shares for Page posts. See LinkedIn post insights.
- Account insights. Followers plus daily impressions, reactions, comments, shares, and follower gain; Pages also get clicks and page views. See LinkedIn account insights.
- Honest gaps. A metric LinkedIn didn't return comes back as
null, never zero, and is named inunavailable. - Cached snapshots. Adeli serves a snapshot refreshed at most every six hours, with
fetchedAtand astaleflag, instead of calling LinkedIn on every request. The LinkedIn API rate limit guide explains why.
One limit comes from LinkedIn: Adeli can't list a personal profile's posts, so personal profile analytics cover posts published through Adeli. A Page's recent posts include those made directly on LinkedIn. The same key returns analytics for Instagram, Facebook, TikTok, and YouTube through Adeli's analytics API, and it publishes too: see the LinkedIn posting API guide.