Skip to content
reelspanDocs

Media and analytics

Analytics

Read follower counts and account totals per network, how they changed, their daily history, total impressions, and the likes and views of each post.

GETapi.reelspan.com/v1/analytics/{profile_username}Try it →

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"
{
  "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"
{
  "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"
{
  "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 }
  ]
}
  • days is 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=csv for 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"
{
  "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), or start_date and end_date (YYYY-MM-DD, both or neither, end_date included, at most a year).
  • Filters: platforms (comma-separated) and metrics (comma-separated post numbers to add up, impressions,views by default; any name from Post numbers by network works, such as likes,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 posts but not yet in posts_with_stats. Test posts are left out, and so are posts made outside Reelspan.
  • by_day groups posts by the day they went out, not the day they were seen. A network that doesn't share a number adds 0 for 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"
{
  "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=youtube to 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_id from 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"
{ "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
Instagram followers, following, posts
Facebook followers, likes (Page likes)
X followers, following, posts, likes
Threads followers, plus views, likes, replies, reposts and quotes over the last 30 days
LinkedIn followers
Pinterest 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)
Instagram likes, comments
Facebook likes, comments
Threads views, likes, replies, reposts, quotes, shares
Bluesky likes, reposts, replies, quotes
Mastodon likes, reposts, replies
Reddit 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.

GETapi.reelspan.com/v1/analytics/{profile_username}Try it →

Parameters

  • profile_usernamestring · pathrequired
  • platformsstring · query

    Comma-separated; default all connected

  • daysinteger · query

    Also report the change over this many days

Responses

200 Stats

{}

404 Profile not found

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}
GETapi.reelspan.com/v1/analytics/{profile_username}/historyTry it →

Parameters

  • profile_usernamestring · pathrequired
  • daysstring · query

    1 to 365, default 30

  • platformsstring · query

    Comma-separated

  • formatstring · query

    jsoncsv

Responses

200 History

{
  "success": true,
  "profile_username": "string",
  "days": 0,
  "history": [
    {
      "date": "string",
      "platform": "string"
    }
  ]
}

404 Profile not found

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}
GETapi.reelspan.com/v1/analytics/{profile_username}/impressionsTry it →

Parameters

  • profile_usernamestring · pathrequired
  • daysinteger · query

    The last N days (default 30)

  • start_datestring · query

    Or a range: YYYY-MM-DD, with end_date

  • end_datestring · query

    Inclusive

  • platformsstring · query

    Comma-separated

  • metricsstring · query

    Comma-separated, default impressions,views

Responses

200 Totals

{
  "success": true,
  "profile_username": "string",
  "from": "string",
  "to": "string",
  "posts": 0,
  "posts_with_stats": 0,
  "total": {},
  "by_platform": {},
  "by_day": [
    {}
  ]
}

400 Invalid range

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}

404 Profile not found

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}
GETapi.reelspan.com/v1/post-analytics/{request_id}Try it →

Parameters

  • request_idstring · pathrequired
  • platformstring · query

Responses

200 Stats

{
  "success": true,
  "request_id": "string",
  "results": {}
}

404 Request not found

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}
GETapi.reelspan.com/v1/post-analyticsTry it →

Parameters

  • platformstring · queryrequired
  • platform_post_idstring · queryrequired
  • userstring · query
  • profile_usernamestring · query

Responses

200 Stats

{
  "success": true,
  "platform": "string",
  "platform_post_id": "string",
  "metrics": {}
}

400 Not available

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}

404 No such profile or account

{
  "success": false,
  "message": "string",
  "error": "string",
  "error_code": "string"
}

Something unclear or missing? Write to [email protected] and we’ll fix the page.