Reelspan reads numbers straight from each network: account totals such as followers, and per-post numbers such as likes and views. Five calls cover it:
- Account totals now (and how they changed):
GET /v1/analytics/{profile_username} - Account totals per day:
GET /v1/analytics/{profile_username}/history - Impressions and views over a period:
GET /v1/analytics/{profile_username}/impressions - The numbers of a post Reelspan published:
GET /v1/post-analytics/{request_id} - The numbers of any post of the account:
GET /v1/post-analytics?platform=…&platform_post_id=…
Every network shares different numbers, and some share none. The tables below list them.
Account totals
curl "https://api.reelspan.com/v1/analytics/my-brand?platforms=youtube,instagram,tiktok" \
-H "Authorization: Bearer $REELSPAN_API_KEY"import { Reelspan } from 'reelspan';
const reelspan = new Reelspan();
const stats = await reelspan.analytics.account('my-brand', ['youtube', 'instagram', 'tiktok']);from reelspan import Reelspan
reelspan = Reelspan()
stats = reelspan.analytics.account("my-brand", ["youtube", "instagram", "tiktok"]){
"success": true,
"profile_username": "my-brand",
"youtube": { "followers": 12840, "views": 1893220, "posts": 214 },
"instagram": { "followers": 30412, "following": 180, "posts": 655 },
"tiktok": { "error": "TikTok statistics are not available yet", "error_code": "not_supported" }
}Each connected network is a key at the top level. Leave out platforms to get every connected network. A network that can't give numbers answers with error and error_code instead, and the others are unaffected:
error_code |
Meaning |
|---|---|
not_supported |
The network doesn't share account numbers through Reelspan. |
reauth_required |
The account must be reconnected first. |
stats_reconnect |
The account was connected before Reelspan asked for permission to read its numbers. Connect it again to grant it. |
Answers are cached for 10 minutes per account, so calling more often returns the same numbers. Each reading also becomes that day's row in the history.
How the numbers changed
Add days (1 to 365) and each network also gets change: how much each number moved over those days. It is the latest daily reading in the history minus the last reading from at least days before it, and null for a number with no reading that old (an account connected recently, say). The answer also echoes days.
curl "https://api.reelspan.com/v1/analytics/my-brand?platforms=youtube&days=30" -H "Authorization: Bearer $REELSPAN_API_KEY"const stats = await reelspan.request('GET', '/v1/analytics/my-brand', { query: { platforms: 'youtube', days: 30 } });stats = reelspan.request("GET", "/v1/analytics/my-brand", query={"platforms": "youtube", "days": 30}){
"success": true,
"profile_username": "my-brand",
"days": 30,
"youtube": {
"followers": 12840,
"views": 1893220,
"posts": 214,
"change": { "followers": 412, "views": 96310, "posts": 9 }
}
}History
One row per account per day (UTC), oldest first. Each row has the last reading of that day.
curl "https://api.reelspan.com/v1/analytics/my-brand/history?days=90&platforms=youtube" \
-H "Authorization: Bearer $REELSPAN_API_KEY"const { history } = await reelspan.analytics.history('my-brand', { days: 90, platforms: ['youtube'] });history = reelspan.analytics.history("my-brand", days=90, platforms=["youtube"])["history"]{
"success": true,
"profile_username": "my-brand",
"days": 90,
"history": [
{ "date": "2026-08-10", "platform": "youtube", "followers": 11920, "views": 1702114, "posts": 198 },
{ "date": "2026-08-11", "platform": "youtube", "followers": 11934, "views": 1704890, "posts": 198 }
]
}daysis 1 to 365, 30 by default.- Reelspan reads every connected account once a day, so the history fills in even if you never call the API. It starts on the day an account's numbers were first read: there is nothing from before it was connected.
- Add
format=csvfor a spreadsheet instead of JSON. The SDKs don't wrap that; request it directly.
curl -o my-brand.csv "https://api.reelspan.com/v1/analytics/my-brand/history?days=90&format=csv" \
-H "Authorization: Bearer $REELSPAN_API_KEY"Total impressions
GET /v1/analytics/{profile_username}/impressions adds up impressions and views over the posts the profile published in a period, per network and per day.
curl "https://api.reelspan.com/v1/analytics/my-brand/impressions?days=30" -H "Authorization: Bearer $REELSPAN_API_KEY"const totals = await reelspan.request('GET', '/v1/analytics/my-brand/impressions', { query: { days: 30 } });totals = reelspan.request("GET", "/v1/analytics/my-brand/impressions", query={"days": 30}){
"success": true,
"profile_username": "my-brand",
"from": "2026-10-08T10:00:00.000Z",
"to": "2026-11-07T10:00:00.000Z",
"posts": 18,
"posts_with_stats": 15,
"total": { "impressions": 48210, "views": 31544 },
"by_platform": {
"x": { "impressions": 48210, "views": 0, "posts": 6 },
"youtube": { "impressions": 0, "views": 31544, "posts": 12 }
},
"by_day": [
{ "date": "2026-10-09", "impressions": 8120, "views": 2210 }
]
}- The period:
days(1 to 365, 30 by default), orstart_dateandend_date(YYYY-MM-DD, both or neither,end_dateincluded, at most a year). - Filters:
platforms(comma-separated) andmetrics(comma-separated post numbers to add up,impressions,viewsby default; any name from Post numbers by network works, such aslikes,comments). - Where the numbers come from: the readings Reelspan keeps for each post it published, taken about two days after the post goes out. Posts from the last two days count in
postsbut not yet inposts_with_stats. Test posts are left out, and so are posts made outside Reelspan. by_daygroups posts by the day they went out, not the day they were seen. A network that doesn't share a number adds0for it.
Post numbers
Use the request_id you got when you posted. The answer has one entry per network the post went live on.
curl https://api.reelspan.com/v1/post-analytics/9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1 \
-H "Authorization: Bearer $REELSPAN_API_KEY"const { results } = await reelspan.analytics.post('9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1');results = reelspan.analytics.post("9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1")["results"]{
"success": true,
"request_id": "9b1f6c2e8a3d4f50b7e1c9a2d6f3e8b1",
"results": {
"youtube": {
"post_id": "aB3xYz12Q",
"post_url": "https://youtube.com/shorts/aB3xYz12Q",
"metrics": { "views": 4810, "likes": 312, "comments": 27, "favorites": 0 }
},
"tiktok": {
"post_id": "7441…",
"post_url": "https://www.tiktok.com/@mybrand/video/7441…",
"metrics": { "error": "TikTok post statistics are not available", "error_code": "not_supported" }
}
}
}- Add
platform=youtubeto read one network only. - Only networks where the post went live are listed; failed ones aren't.
- Numbers are cached for 10 minutes per post.
- A
request_idfrom another workspace, or of a profile your key can't use, answers 404.
Any post, by the network's id
For a post made outside Reelspan (or when you only have the network's id), send platform, platform_post_id and the profile in user:
curl "https://api.reelspan.com/v1/post-analytics?platform=youtube&platform_post_id=aB3xYz12Q&user=my-brand" -H "Authorization: Bearer $REELSPAN_API_KEY"const stats = await reelspan.request('GET', '/v1/post-analytics', { query: { platform: 'youtube', platform_post_id: 'aB3xYz12Q', user: 'my-brand' } });stats = reelspan.request("GET", "/v1/post-analytics", query={"platform": "youtube", "platform_post_id": "aB3xYz12Q", "user": "my-brand"}){ "success": true, "platform": "youtube", "platform_post_id": "aB3xYz12Q", "metrics": { "views": 4810, "likes": 312, "comments": 27, "favorites": 0 } }The post must belong to the profile's connected account on that network. A network with no post numbers answers 400 platform_not_supported; a profile with no account on the network answers 404. Numbers are cached for 10 minutes. If the account must be reconnected, metrics holds error and error_code: "reauth_required" instead.
What each network shares
Numbers a network doesn't give are left out of the answer, not returned as 0.
Account numbers by network
| Network | Numbers |
|---|---|
| YouTube | followers (subscribers), views, posts |
| TikTok | followers, following, likes, posts |
followers, following, posts |
|
followers, likes (Page likes) |
|
| X | followers, following, posts, likes |
| Threads | followers, plus views, likes, replies, reposts and quotes over the last 30 days |
followers |
|
followers, following, posts, monthly_views |
|
| Bluesky | followers, following, posts |
| Mastodon | followers, following, posts |
Reddit, Google Business, Telegram, Discord, Slack, WordPress, Dev.to, Hashnode, Lemmy, Listmonk, Whop and Nostr give no account totals.
TikTok, Threads and LinkedIn give their numbers only with an extra permission. Until Reelspan has it for your account, the answer is not_supported or stats_reconnect. Threads gives the follower count only to profiles with at least 100 followers.
Post numbers by network
| Network | Numbers |
|---|---|
| YouTube | views, likes, comments, favorites |
| X | impressions, likes, reposts, replies, quotes, saves (bookmarks) |
likes, comments |
|
likes, comments |
|
| Threads | views, likes, replies, reposts, quotes, shares |
| Bluesky | likes, reposts, replies, quotes |
| Mastodon | likes, reposts, replies |
likes (upvotes), comments, score |
|
| Dev.to | likes (reactions), comments, views when Dev.to gives them |
TikTok, LinkedIn, Pinterest, Google Business and the remaining networks give no post numbers through Reelspan.
Built on these numbers
- Best times to post compares your posts' numbers by hour and weekday.
- Reports add up a period's posts, interactions and follower growth.
All these analytics calls need a key with the analytics scope.