# get_site_analytics_overview

Source: https://modulify.ai/docs/mcp/analytics/get-site-analytics-overview

Reads everything the Analytics tab shows for a site in one call, from the headline totals and series to the top lists and live count.

- Title: Read the full analytics overview
- Scope: `analytics:read`
- Access: Read only

The answer holds the six headline totals (`visitors`, `visits`, `pageviews`, `viewsPerVisit`, `bounceRate` and `visitDuration`), a time series with one entry per bucket, the top pages, sources, countries, browsers, operating systems and devices, the live visitor count, and the collection status. A site that was never published answers with zeros.

The range is a `period`, default `7d`, or a custom `from` and `to` as `YYYY-MM-DD`, at most 3,660 days apart. `interval` is `hour`, `day` or `month` and must fit the range, see [Analytics HTTP API](https://modulify.ai/docs/grow/analytics-http-api#timeseries), and leaving it out picks the default for the range. `limit` sets the rows per breakdown, 8 by default and at most 25.

`filters` narrows every number with up to 10 `{ dimension, operator, value }` conditions, and a visit has to match all of them. `dimension` is `page`, `source`, `country`, `browser`, `os` or `device`, and `operator` is `is`, `isNot` or `contains`, defaulting to `is`. With `is` and `contains` a visit matching any of the values counts, with `isNot` one matching none of them, and country values are two-letter codes such as `DE`.

`failed`, `status`, `realtime`, `totals` and `breakdowns` come first and `series` comes last, as columns rather than points: `time`, `visitors`, `visits`, `pageviews`, `viewsPerVisit`, `bounceRate`, `visitDuration` and `partial` are lists of the same length, and entry `i` of each describes bucket `i`. `time` is the UTC start of the bucket and `partial` marks a bucket still filling, and this shape keeps a year of daily buckets or a month of hourly ones inside a single answer. A breakdown or the live count that could not be loaded comes back as `null` and is named in `failed`, while the totals and the series never fall back to zero, so if they cannot be loaded the call fails.

Each call costs 9 of the 1,200 analytics lookups access tokens share per site per hour, one for each part it reads, as [Rate limits and result size](https://modulify.ai/docs/mcp/tokens-and-scopes#rate-limits-and-result-size) explains. A part already cached costs nothing, and neither does a site that was never published. Over that limit it fails with `Access tokens, through MCP clients or the API, used their 1,200 analytics lookups for this site this hour. Wait and try again!` See [Visitor analytics](https://modulify.ai/docs/grow/analytics).

## Inputs

| Input | Type | Required | Description |
| --- | --- | --- | --- |
| `projectId` | string | Yes | The site id. |
| `period` | string | No | The window to report on: `day` (today so far), `24h`, `7d`, `30d`, `90d`, `12mo` or `all`. Defaults to `7d`. Leave it out when sending `from` and `to`. |
| `from` | string | No | The first day of a custom range as `YYYY-MM-DD` in UTC. Send it together with `to`. |
| `to` | string | No | The last day of a custom range as `YYYY-MM-DD` in UTC, included in the range. Send it together with `from`. |
| `interval` | string | No | The bucket size of the series, `hour`, `day` or `month`. It must fit the range, and leaving it out picks the default for the range. |
| `limit` | integer | No | Rows per breakdown, from 1 to 25. Defaults to 8. |
| `filters` | array of objects | No | Conditions that narrow every number, at most 10, and a visit has to match all of them. Each has a `dimension` (`page`, `source`, `country`, `browser`, `os` or `device`), an optional `operator` (`is`, `isNot` or `contains`, default `is`) and a `value`, one text or a list of up to 20. |