Analytics
Blotato collects engagement analytics for your published posts on 8 platforms: Twitter/X, Instagram, Facebook, Threads, Bluesky, TikTok, YouTube, and Pinterest. Analytics for LinkedIn are not available yet. Four read-only endpoints expose this data:
List Top Performing Posts —
GET /v2/analyticsList Performance by Platform —
GET /v2/analytics/platformsGet Analytics Summary —
GET /v2/analytics/summaryGet Post Analytics —
GET /v2/posts/{id}/analytics
Analytics is available on all paid plans, both in the Analytics dashboard and via the API documented below. Fair usage limits may apply in the future.
For a web-app and AI-agent walkthrough, see Analytics.
Both endpoints return the latest snapshot Blotato has already collected. They do not trigger a fresh fetch from the social platform.
Using analytics from Make.com or n8n
The official Blotato Make.com module does not include analytics yet. To pull analytics from a Make scenario, call the two endpoints on this page with Make's HTTP module, passing your API key in the blotato-api-key header. The same approach works in n8n with the HTTP Request node.
Collection schedule
Blotato collects a snapshot of each post's metrics at fixed checkpoints, measured from when the post publishes. Higher plans collect more often and keep collecting longer.
Starter
4
30 days
Day 1, then days 7, 14, and 30
Creator
18
30 days
2 hours, daily through day 8, then every 2-3 days through day 30
Agency
20
90 days
2 and 6 hours, daily through day 8, every 2-3 days through day 30, then day 90
Full checkpoint list per plan:
Starter: 1d, 7d, 14d, 30d
Creator: 2h, 1d, 2d, 3d, 4d, 5d, 6d, 7d, 8d, 10d, 12d, 14d, 17d, 20d, 22d, 24d, 27d, 30d
Agency: 2h, 6h, 1d, 2d, 3d, 4d, 5d, 6d, 7d, 8d, 10d, 12d, 14d, 17d, 20d, 22d, 24d, 27d, 30d, 90d
Each checkpoint adds a small random offset to spread out collection, so exact timing varies by a few minutes on the early checkpoints and up to a day on the 30-day and 90-day ones. After the final checkpoint, Blotato stops collecting and the last snapshot stays as the post's metrics.
Posts stuck on "Analytics pending"
"Analytics pending" means no metric history is available. It does not identify the cause.
Check the platform and plan against the supported metrics.
Check whether the post was published through Blotato with analytics enabled.
Compare the post's age with its plan's checkpoints.
Inspect
lastErrorand the account's connection state. Reconnect when authorization is missing or expired, not as a repeated generic fix.If the expected checkpoint has passed and no cause is established, give support the published post ID, publication time, platform, plan, last fetch time, and error.
Reconnection does not guarantee a 24-48-hour backfill or a restart of every historical post's schedule. See new connections and pending data.
YouTube view counts trail the public count
For YouTube, Blotato reads the YouTube Analytics API, which reports only finalized views after YouTube filters spam and invalid traffic. The count on the YouTube watch page updates in near real time and includes views YouTube has not validated yet, so it reads higher. The two numbers are not expected to match, and the gap narrows as YouTube finalizes more data.
See: Why is my YouTube view count in Blotato lower than on YouTube?
List Top Performing Posts
Endpoint
Base URL: https://backend.blotato.com/v2
URL: /analytics
Method: GET
Description
Returns your top performing published posts, ordered by the requested metric over a time range. Each item includes its latest metrics snapshot and full snapshot history.
Query Parameters
since
string
No
Only include posts published on or after this ISO 8601 timestamp. Defaults to 30 days ago.
until
string
No
Only include posts published on or before this ISO 8601 timestamp. Defaults to now.
platform
string
No
Filter to one platform: twitter, instagram, facebook, threads, bluesky, tiktok, youtube, or pinterest. Omit to include all platforms. Analytics for linkedin are not available yet, so filtering to it returns no metrics.
sortBy
string
No
Metric to rank by. One of likes_count, comments_count, views_count, reach_count. Default: views_count. For Twitter/X, comments_count uses replies_count when comments are not reported, and views_count uses impressions_count when views are not reported.
limit
integer
No
Number of posts to return. Min: 1, Max: 100. Default: 20.
Response
Status Code: 200 OK
Response Keys
items
array
Published posts, ordered by the requested sortBy metric (highest first). Twitter/X rankings use replies_count as the comments fallback and impressions_count as the views fallback.
items[].content
string
The post text.
items[].postUrl
string | null
Live URL of the published post. Null if the platform did not return one.
items[].platform
string
Social media platform.
items[].createdAt
string
ISO 8601 timestamp when the post was published.
items[].mediaUrls
string[]
URLs of attached media. Empty when text-only.
items[].latestMetrics
object
The most recent metrics snapshot. Absent if no metrics have been collected yet. See Metrics.
items[].metricsHistory
array
All collected snapshots, oldest first. Each is { fetchedAt, metrics }.
Errors
422
Invalid since, until, sortBy, or limit value.
Example
List Performance by Platform
URL: /analytics/platforms
Method: GET
Returns 1 entry per platform with analytics, ordered by engagement. Totals use the latest snapshot of each post published in the window.
since
string
No
Include posts published on or after this ISO 8601 timestamp. Defaults to 24 hours ago.
until
string
No
Include posts published on or before this ISO 8601 timestamp. Defaults to now.
bucket
string
No
Time bucket size: hour or day. Defaults to hour.
Each item contains platform, postsCount, engagementsCount, likesCount, commentsCount, viewsCount, and buckets. Counts are strings except postsCount. viewsCount is null when the platform reports neither views nor impressions. Engagements are the sum of likes, comments or replies, shares, and saves.
Get Analytics Summary
URL: /analytics/summary
Method: GET
Returns published and failed post counts for a time window, both in total and grouped by platform and time bucket. It also returns metric totals from each published post's latest snapshot.
since
string
No
Include posts published or failed on or after this ISO 8601 timestamp. Defaults to 30 days ago.
until
string
No
Include posts published or failed on or before this ISO 8601 timestamp. Defaults to now.
bucket
string
No
Time bucket size: hour or day. Defaults to hour.
The response contains publishedCount, failedCount, platforms, buckets, and metrics. metrics contains postsCount, viewsCount, likesCount, and commentsCount, or is null when analytics is unavailable.
Get Post Analytics
Endpoint
Base URL: https://backend.blotato.com/v2
URL: /posts/{id}/analytics
Method: GET
Description
Returns the latest metrics and full snapshot history for a single published post.
The id is the published post id, which you get from the items[].id field of List Top Performing Posts or List Posts (published items). It is not the postSubmissionId returned when you publish.
If your request returns only postSubmissionId, status, and publicUrl with no metrics fields, you called Get Post Status instead of this analytics endpoint. Get Post checks publish status with the postSubmissionId. Analytics uses the published post id from List Posts or List Top Performing Posts.
Path Parameters
id
string
Yes
The published post ID from items[].id in List Top Performing Posts or a published item in List Posts. Do not substitute a postSubmissionId. The analytics path ends in /analytics, whereas the publishing-status path does not.
Response
Status Code: 200 OK
Response Keys
publishedPostId
string
The id of the published post.
platform
string
Social media platform.
lastFetchedAt
string | null
ISO 8601 timestamp of the last snapshot stored successfully. A failed fetch leaves this unchanged, so it reflects the last success, not the last attempt. Check lastError for the most recent failure.
lastError
string | null
The last error Blotato hit while fetching metrics for this post, if any.
history
array
All collected snapshots, oldest first. Each is { fetchedAt, metrics }.
Errors
404
No published post with that id, it does not belong to your account, or your plan does not include analytics.
Example
Metrics
Every metric field is optional and only appears when the platform reports it for that post. Count metrics are returned as strings to preserve large integers (e.g. "18400"). Rate and percentage metrics are returned as numbers, and breakdown metrics (such as facebookPostReactionsByType) return an object mapping each bucket to a count, e.g. { "like": "13", "haha": "2" }.
A metric value of 0 is real and is always returned. It means zero, not missing.
Empty vs null metrics
An empty metrics object ({}) is not the same as metrics: null.
metrics: null-- no analytics snapshot has been stored yet.metrics: {}-- a snapshot exists, but no metric values are being returned. Two causes: every value came back empty from the platform, or your plan returns a reduced metric set.
Common metrics like viewsCount, likesCount, and reachCount apply across platforms. Each platform also returns its own metrics, prefixed with the platform name — for example twitterRetweetsCount or blueskyRepostsCount.
See the Metrics Reference for the full list of common and platform-specific metrics.
Platform-specific coverage depends on your plan. The Starter plan returns a limited set of these metrics. The Creator and Agency plans return every platform-specific metric and breakdown. See the Metrics Reference for the field-level breakdown.
Inspect the metrics object in the response for the set available for your post.
Related
List Posts — list scheduled, published, and failed posts; published items carry the
idused by Get Post Analytics.List Published Posts — full-text search over your published posts with the latest analytics snapshot attached.
Last updated