Analytics are per account and per platform. There is no cross-account total, because platforms don't count the same things: Threads reports views, Instagram reports reach, and adding them together produces a number that means nothing.
So the flow always starts with discovery.
Start with discovery
Call list-account-analytics-tool to see every account in the space, each with its own collection state:
| State | Meaning |
|---|---|
ok |
Collecting normally |
partial |
Some metrics are missing for the range |
paused |
Collection is stopped |
disconnected |
The account needs reconnecting |
unsupported |
The platform doesn't expose analytics for this account type |
never_collected |
Nothing has been gathered yet |
Rows are never merged. An account that's paused or disconnected stays visible instead of being folded into a total that hides it. Take the account_id you care about and drill in.
Two ways to drill in
They answer different questions.
get-account-analytics-tool describes the account. Its metric catalogue, totals against the previous window, the interaction score, rates, the daily series, audience history, and best posting times.
list-account-posts-tool describes the posts. Every post that account published in the range, one page at a time, one row per post, with a cell for each metric the platform declares.
Ranking is a sort
There's no fixed "top posts" block, because a ranking is just a sort — ask for the one you want. The top posts by likes are the first rows of sort=likes; swap the key to rank by anything else that account reports.
sort accepts published_at, interactions, or any metric key listed in the payload's sort.options. It defaults to published_at — newest first, which claims nothing about performance. Alongside it:
| Parameter | Values | Default |
|---|---|---|
dir |
asc or desc |
desc |
per_page |
10–100 | 20 |
page |
1 or higher | 1 |
An option that comes back marked sortable: false is a metric the platform declares but has no values to order by right now. Passing a key the account doesn't support returns an error naming the keys you can retry with.
Reading the numbers
Every metric in either payload carries its own label, plain-English definition, and unit, so an assistant can explain a number instead of guessing from its name. Metric names are per-platform — read columns in the payload rather than assuming a name means the same thing across networks.
A null value means not collected, never zero. Each column and cell carries its own status saying why.
All three analytics tools accept optional from and to dates — 2026-07-01, resolved in the workspace's timezone — and default to the last seven days. The same data is available over the REST API.