> ## Documentation index
> Fetch the complete documentation index at: https://dash.robopost.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Analytics

Robopost collects metrics from the networks for each published post. The API gives you those numbers per
post, summed per channel, and over time.

**You need:** an [API key](https://dash.robopost.app/docs/api/authentication.md) and a plan that includes
[analytics](https://dash.robopost.app/docs/engage/analytics.md). Numbers are only collected for published posts.

## A post's metrics

Every post has an `analytics` object: `impressions`, `engagements`, `likes`, `comments`, `shares`,
`saves`, `engagement_rate` and `last_synced_at`. See [List and read posts](https://dash.robopost.app/docs/api/list-and-read-posts.md).

To ask the network for fresh numbers now:

```bash
curl -X POST https://public-api.robopost.app/v1/scheduled_posts/<post id>/analytics/refresh \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

The `202` answer means the refresh is queued; read the post again after a minute and check that
`last_synced_at` moved. A refresh already running is not queued twice (`code: REFRESH_RUNNING`).

## Totals per channel

```bash
curl "https://public-api.robopost.app/v1/analytics/channels?dt_from=2026-10-01T00:00:00Z&dt_to=2026-10-31T23:59:59Z" \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

```json
{
  "dt_from": "2026-10-01T00:00:00.000Z",
  "dt_to": "2026-10-31T23:59:59.000Z",
  "channels": [
    { "channel_id": "…", "channel_name": "Ale Noa Channel", "social_network": "YOUTUBE",
      "published_posts": 31, "impressions": 48210, "engagements": 1904, "likes": 1500,
      "comments": 120, "shares": 260, "saves": 24, "engagement_rate": 0.0395,
      "last_synced_at": "2026-11-07T04:18:24.372Z" }
  ]
}
```

The range filters on when posts were **published** (default: the last 30 days, at most two years).
Narrow it with `channel_id` or `social_network` (repeat the parameter for several).

## Trends over time

```bash
curl "https://public-api.robopost.app/v1/analytics/timeseries?interval=week&by_channel=true&dt_from=2026-09-01T00:00:00Z" \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

`interval` is `day`, `week` (weeks start on Monday) or `month`, in UTC. Each series has one point per
period, including periods without posts (zeros), so you can chart it directly. With `by_channel=true` you
get one series per channel.

## Team totals by network

`GET /v1/aggregated_posts_analytics` returns precomputed team totals per network and per day, week or month
(`interval`, `social_network`, `overall_only`, `dt_from`, `dt_to`). `analytics_last_sync` on each row is when
its totals were last recomputed.

Rows come oldest first, 200 per page (`limit` up to 1000, `skip` for the next page). On a team with a long
history the first page can end months ago, which looks like the numbers stopped updating. To get the latest
periods first, add `sort_order=desc`, or narrow the range with `dt_from`:

```bash
curl "https://public-api.robopost.app/v1/aggregated_posts_analytics?interval=DAILY&sort_order=desc&limit=30" \
  -H "Authorization: Bearer $ROBOPOST_API_KEY"
```

## How fresh the numbers are

Each network is asked for a post's metrics regularly after it publishes, often at first and less over
time. `last_synced_at` tells you when the numbers were last fetched. Networks also delay and revise their own
numbers.

## Next

[Video series](https://dash.robopost.app/docs/api/video-series.md)
