Social media analytics APIs: what every network exposes, what it costs, and what it quietly deleted
There is no single social media analytics API. There are eight networks with eight different ideas of what a “view” is, three of which renamed the metric in the last eighteen months. This is the map you need before designing a schema — who is allowed to call each API, what comes back, what it costs per call, and which fields will return an error next year.
- 8
- Networks with a documented metrics surface
- $0.005
- Per post read on the X API
- 21 Apr 2025
- Instagram removed “impressions”
- 15 Jun 2026
- Facebook Page impressions gone everywhere
- 200 / hr
- Instagram calls per user token
- Partner-only
- LinkedIn page analytics access
Seven official APIs plus Bluesky’s open protocol
The only network charging per metric read
Replaced by “views” across all API versions
Deprecation began 15 Nov 2025
Business Use Case rate limit
Community Management API approval required
On this page+
The map
One row per network. “Who” is who can obtain a token that returns the metrics; “Cost” is the network’s charge for the API itself, not for any tool built on it.
| Network | API | Who can use it | Key metrics | Cost | The gotcha |
|---|---|---|---|---|---|
| YouTube | YouTube Analytics API (reports.query) and Reporting API | Any Google Cloud project, OAuth from the channel owner | Views, estimated minutes watched, average view duration, subscribers gained, likes, shares, traffic sources, demographics; revenue for owners | Free; own quota separate from the Data API | Reports are by date and dimension, not per video in real time — a per-video call is a filtered report |
Instagram Platform insights (/{ig-user-id}/insights, /{media-id}/insights) | Professional (Business or Creator) accounts, via Instagram Login or Facebook Login | Account: reach, views, follower_count, profile_views, accounts_engaged. Media: views, reach, likes, comments, saved, shares, total_interactions | Free | impressions and plays removed 21 April 2025; account insights are limited to 30-day ranges per call | |
| Facebook Pages | Page Insights (/{page-id}/insights) | Page admins, Page access token | page_media_view, post_media_view, page_follows, engagement, video views, clicks | Free | page_impressions, page_fans and post_impressions deprecated from 15 November 2025; gone from every version by 15 June 2026 |
| Threads | Threads Insights API (/{threads-user-id}/threads_insights, /{media-id}/insights) | Any Threads account that authorises threads_manage_insights | Per post: views, likes, replies, reposts, quotes, shares. Account: views, followers_count, follower demographics | Free | Demographics need 100 followers on a personal account; the API launched in June 2024, so there is no history before that |
| X | X API v2 public_metrics, non_public_metrics, organic_metrics | Any developer with pay-per-use credits; non-public metrics need the author’s OAuth 2.0 user context | Impressions, likes, reposts, replies, quotes, bookmarks, url_link_clicks, user_profile_clicks | $0.005 per post read, capped at 2M a month; legacy Basic $200 closed | Non-public metrics are only available for the last 30 days of posts |
Community Management API (organization share, follower and page statistics; memberCreatorVideoAnalytics) | Approved partners, Development tier for test pages then Standard for production | Impressions, clicks, likes, comments, shares, engagement per share; follower gains by demographic; page views | Free once approved | Personal-profile analytics are essentially unavailable; approval is a review, not a form | |
| TikTok | Display API (own account); Research API (academic); Business API (ads) | Display: any approved app with the user’s Login Kit consent. Research: academic and non-profit institutions in the US, EEA, UK, Switzerland, Brazil | Display: view_count, like_count, comment_count, share_count per video, follower and likes counts per profile | Free | Nothing about other accounts is available commercially; watch time and retention are not exposed at all |
| Bluesky | AT Protocol (app.bsky.feed.getPosts, getPostThread, getLikes, getRepostedBy) | Anyone — public endpoints need no token | likeCount, repostCount, replyCount, quoteCount per post; followersCount per profile | Free | No impressions, reach or views exist at all; counts are public and identical for every caller |
Impressions are being deleted, one network at a time
The single most consequential change for anyone storing social metrics is that Meta is replacing “impressions” with “views” everywhere, and doing it through hard deprecations that return errors rather than zeros.
| Network | Removed | Replaced by | Effective |
|---|---|---|---|
impressions on media and account insights; plays, replays, initial plays on Reels | views (which now includes replays); profile_views; story views | 21 April 2025, all API versions from v22.0 | |
| Facebook Pages | page_impressions*, post_impressions*, page_fans* | page_media_view, post_media_view, page_follows | From 15 November 2025; every version by 15 June 2026 |
| Threads | Never had impressions | views from launch | June 2024 |
The definitions differ, which is the trap. An Instagram impression counted a piece of content appearing on a screen; a view counts a piece of content being seen or played, and Reels views include replays. Historical impressions and new views are not the same series, and a chart that stitches them together lies at the seam. Store the metric name and the API version alongside every value.
Rate limits and quotas, network by network
Only X bills per call. Everyone else throttles. These are the published ceilings you design a polling schedule around:
| Network | Limit | Scope | Reset |
|---|---|---|---|
| YouTube Analytics API | Its own daily quota, separate from the Data API’s 10,000 units | Per Google Cloud project | Midnight Pacific |
| YouTube Data API | 10,000 units a day; a videos.list with statistics costs 1 unit per call | Per project | Midnight Pacific |
| Instagram Platform | 200 calls per hour per app-user pair (Business Use Case) | Per connected account | Rolling hour |
| Facebook Pages | 4,800 × the number of engaged users in the last 24 hours, per app-user pair | Per Page token | Rolling 24 hours |
| Threads API | Published per-account daily caps on publishing; reads throttle under a shared Business Use Case limit | Per Threads account | Rolling 24 hours |
| X API | Pay-per-use credits; hard cap of 2 million post reads a month | Per developer account | Monthly |
| Per-endpoint daily limits shown in the Developer Portal’s Analytics tab; not published in docs | Per app and per member | Midnight UTC | |
| TikTok Display API | Per-app daily quotas set at approval | Per app | Daily |
| Bluesky | 3,000 requests per 5 minutes per IP on public endpoints | Per IP | Rolling 5 minutes |
The polling schedule that follows from those numbers: read Instagram and Facebook insights once a day per post for the first week and weekly after that, because 200 calls an hour per account is generous for daily reads and hopeless for anything real-time. Poll X metrics on a budget you set in dollars, not requests. Read Bluesky as often as you like. Prefer webhooks where they exist — Meta and Threads fire them for comments and mentions, not for metric changes, so metrics remain a pull.
Normalising the metrics without lying
A unified analytics layer has to decide what “engagement” means across networks that count different actions. There are two defensible approaches and one common mistake.
- Union of actions. Engagement = every action the network reports (likes, comments, shares, saves, clicks, quotes, bookmarks). Honest but incomparable — X counts profile clicks, Instagram does not.
- Common core. Engagement = likes + comments + shares only, because every network reports those three. Comparable, and it undercounts the networks where saves or clicks dominate.
- The mistake is a single “engagement rate” column whose denominator changes by network. TikTok divides by views, Instagram by reach or followers, X by impressions, Bluesky has no denominator at all. Store the numerator and the denominator separately and name the denominator.
Time windows also disagree. Instagram account insights accept at most 30 days per request. X non-public metrics exist only for posts from the last 30 days. TikTok’s Display API has no time dimension at all — it returns the current counts. YouTube Analytics is the only one that will give you a per-day series for a video published two years ago. Design the ingest to snapshot current counts on a schedule rather than expecting any network to give you history on request.
Reading each API: the minimum viable calls
The calls that return the headline numbers, so you can see how differently they are shaped:
# YouTube — a per-video daily series (Analytics API, OAuth with yt-analytics.readonly)
GET https://youtubeanalytics.googleapis.com/v2/reports
?ids=channel==MINE&startDate=2026-08-01&endDate=2026-08-31
&metrics=views,estimatedMinutesWatched,averageViewDuration,subscribersGained
&dimensions=day&filters=video==VIDEO_ID
# Instagram — media insights (Instagram Login path)
GET https://graph.instagram.com/v26.0/{media-id}/insights
?metric=views,reach,likes,comments,saved,shares,total_interactions
# Facebook Page — post-level media views (the replacement for post_impressions)
GET https://graph.facebook.com/v26.0/{post-id}/insights
?metric=post_media_view,post_clicks,post_reactions_by_type_total
# Threads — per-post insights
GET https://graph.threads.net/v1.0/{media-id}/insights
?metric=views,likes,replies,reposts,quotes,shares
# X — public metrics on up to 100 posts per call (each post read is billed)
GET https://api.x.com/2/tweets?ids=ID1,ID2&tweet.fields=public_metrics,non_public_metrics
# Bluesky — public counts, no token
GET https://public.api.bsky.app/xrpc/app.bsky.feed.getPosts?uris=at://did:plc:.../app.bsky.feed.post/...Two shapes stand out. YouTube is a reporting query with dimensions and filters — a small SQL. Everything else is a per-object fetch. A unified layer ends up with two ingest paths whatever it does.
Access: who gets a token, and how long it takes
| Network | Approval needed | Typical time | Notes |
|---|---|---|---|
| YouTube | None to start; OAuth consent screen verification for production | Days for verification | Sensitive scopes trigger a Google review of your privacy policy and demo video |
| Instagram / Facebook / Threads | Meta App Review for Advanced Access on each permission; Business Verification for business apps | Days to weeks | Standard Access works for accounts with a role on your app, which is enough to build against |
| X | Developer account plus loaded credits | Same day | The cost is the gate, not the review |
| Community Management API partner application | Weeks to months; many applications are declined | Development tier lets you build against test pages before Standard is granted | |
| TikTok | App review for Display API scopes | Days to weeks | Research API requires institutional eligibility, not a review |
| Bluesky | None | Immediate | Public endpoints; authenticated ones need an app password or OAuth |
Where PostMCP fits
PostMCP is the publishing half of this picture, not the analytics half. Its API creates, schedules and publishes posts to LinkedIn, X, Facebook, Instagram, Threads, Bluesky and YouTube, and get_post returns the per-profile delivery state and live permalink for every post — the ids you feed into the insights calls above. It does not expose analytics endpoints, and this page exists because the people integrating the publishing API keep asking where the metrics come from. The honest answer is: from each network’s own insights API, on the account owner’s token, under the limits in the tables above. Pair the two and you have the loop; pretend one covers the other and you have a schema that breaks next April.
Frequently asked questions
Is there a single API for social media analytics across all networks?+
Not from the networks themselves. Each exposes its own insights API with its own metric names, limits and access process. Third-party unified APIs exist and are essentially a normalisation layer over the eight APIs on this page, with the cost of X reads and the LinkedIn partner approval passed through to you one way or another.
Which social media analytics APIs are free?+
YouTube Analytics, Instagram and Facebook insights, Threads insights, TikTok’s Display API and Bluesky’s public endpoints charge nothing per call; they rate-limit instead. LinkedIn’s Community Management API is free once you are approved as a partner. X is the exception, at $0.005 per post read since February 2026.
Why does the Instagram API return an error for impressions?+
Meta removed the impressions metric from media and account insights on 21 April 2025 across all API versions, along with plays on Reels, and replaced them with views. Requests for impressions on media published after the cut-off return an invalid-metric error rather than zero.
What replaced page_impressions in the Facebook Page Insights API?+
page_media_view and post_media_view, with page_follows replacing page_fans. Deprecation began on 15 November 2025 for new versions and applies to every version by 15 June 2026. The new metrics count content being seen rather than a page appearing in a feed, so the series are not continuous.
Can I get LinkedIn analytics through the API?+
Only for organization pages, and only as an approved Community Management API partner, which is a review that takes weeks to months. Personal-profile analytics are not available through the API; a member video analytics endpoint arrived in the 202506 version for partners. Most teams end up with LinkedIn’s own page analytics export instead.
Does the TikTok API provide analytics?+
For your own account, yes: the Display API returns view, like, comment and share counts per video and follower counts per profile, after the user signs in through Login Kit. There is no watch-time or retention data, and no commercial way to read other accounts. The Research API is restricted to academic and non-profit institutions.
Does PostMCP have an analytics API?+
No. PostMCP’s API publishes and schedules posts and returns each post’s delivery state and live URL per profile. Analytics come from each network’s own insights API on the account owner’s token; this page maps those so the two can be paired.
Sources, checked September 6, 2026
- 01Meta for Developers — Page Insights API updates (August 2025)
- 02Meta for Developers — Page insights reference
- 03Meta for Developers — Graph API rate limiting
- 04Emplifi — Instagram insights metrics deprecation, 21 April 2025
- 05Google for Developers — YouTube Analytics API data model
- 06Microsoft Learn — LinkedIn Community Management overview
- 07TikTok for Developers — Research API access and eligibility
- 08Postproxy — X API pricing 2026
Limits, prices and metric names on this page are the vendors’ own at the date above. When one moves upstream we update the figure and the date together.
The publishing half, ready to pair
One REST call or MCP tool publishes to seven networks and hands back the live post ids your analytics calls need. 20 posts a month free.
More platform guides
Social media APIsInstagram Messaging API: the rules, windows and rate limits to know before you send a single DM
How the Instagram Messaging API works in 2026: the two login paths, the professional-account and App Review requirements, the 24-hour window and 7-day human_agent tag, every published rate limit (100 messages a second, 750 private replies an hour), webhook payloads and the send call.
ReadMeta platform mapFacebook API platforms: a map of every Meta developer API, what each is for, and how you get in
A map of the Facebook (Meta) API platforms in 2026: Graph API v26.0, Pages, Instagram Platform, Messenger, WhatsApp Business Platform, Threads, Marketing and Conversions APIs. What each is for, the permission and App Review ladder, rate limits, and the metrics Meta removed this year.
Read