# get_posts_statistics (/docs/build/mcp-reference/get_posts_statistics)

{/* GENERATED by scripts/generate-mcp-reference.mjs from the MCP server tools/list. Do not edit. */}

| Group | Access | MCP name |
| --- | --- | --- |
| Statistics and activity | Read-only | `get_posts_statistics` |

## Description [#description]

The description the MCP server sends to the model, word for word. Its rules apply to every call.

> Read this writer's Substack post statistics for every newsletter selected on Posts Statistics, in one call. Returns views, unique email opens, Substack's reported open rate, emails sent and delivered, email traffic share, email-attributed views, likes, comments, restacks, shares, clicks, and signups, plus each newsletter's subscriber split and ARR. Open rate is unique opens divided by emails delivered. Use the returned openRate. Do not recompute it, and do not treat emailTrafficShare as the open rate: that share is the portion of views that came from email, including repeat views. Defaults to the last 30 days, highest views first. Omit publicationId unless they named one newsletter. Requires the posts statistics feature and WriteStack extension 1.5.25 or newer. On failure, follow the error text.

## Arguments [#arguments]

| Argument | Type | Required | Description |
| --- | --- | --- | --- |
| `dateRange` | `string` | No | Time period. Use custom with startDate and endDate. One of: `"last_7_days"`, `"last_30_days"`, `"last_90_days"`, `"last_12_months"`, `"all_time"`, `"custom"`. Default `"last_30_days"`. |
| `endDate` | `string` | No | Format `date-time`. |
| `limit` | `integer` | No | How many posts to return, highest views first (default 15, max 30). Min 1. Max 30. Default `15`. |
| `publicationId` | `integer` | No | Limit to one newsletter by its Substack publication id. Omit to include every newsletter selected on Posts Statistics. |
| `startDate` | `string` | No | Format `date-time`. |

## Example call [#example-call]

The smallest valid request: required arguments only, with placeholder values.

```json
{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "get_posts_statistics",
    "arguments": {}
  }
}
```

## Result [#result]

The result has `structuredContent` that matches this schema. The same data is also in `content` as JSON text.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `dateRange` | `string` | Yes |  |
| `endDate` | `string` | Yes |  |
| `extensionVersion` | `string` | Yes |  |
| `message` | `string` | No |  |
| `postCount` | `number` | Yes |  |
| `posts` | `object[]` | Yes |  |
| `posts[].clicks` | `number` | Yes |  |
| `posts[].comments` | `number` | Yes |  |
| `posts[].delivered` | `number` | Yes |  |
| `posts[].emailTrafficShare` | `any` | Yes |  |
| `posts[].emailViews` | `any` | Yes |  |
| `posts[].engagementRate` | `any` | Yes |  |
| `posts[].likes` | `number` | Yes |  |
| `posts[].openRate` | `any` | Yes |  |
| `posts[].postDate` | `string \| null` | Yes |  |
| `posts[].postId` | `number` | Yes |  |
| `posts[].publicationId` | `number` | Yes |  |
| `posts[].restacks` | `number` | Yes |  |
| `posts[].sent` | `number` | Yes |  |
| `posts[].shares` | `number` | Yes |  |
| `posts[].signups` | `number` | Yes |  |
| `posts[].title` | `string` | Yes |  |
| `posts[].uniqueOpens` | `number` | Yes |  |
| `posts[].url` | `string \| null` | Yes |  |
| `posts[].views` | `number` | Yes |  |
| `publications` | `object[]` | Yes |  |
| `publications[].arr` | `any` | Yes |  |
| `publications[].comps` | `number` | Yes |  |
| `publications[].delivered` | `number` | Yes |  |
| `publications[].emailTrafficShare` | `any` | Yes |  |
| `publications[].emailViews` | `number` | Yes |  |
| `publications[].free` | `number` | Yes |  |
| `publications[].freeTrials` | `number` | Yes |  |
| `publications[].gifts` | `number` | Yes |  |
| `publications[].name` | `string` | Yes |  |
| `publications[].openRate` | `any` | Yes |  |
| `publications[].paid` | `number` | Yes |  |
| `publications[].paying` | `number` | Yes |  |
| `publications[].postCount` | `number` | Yes |  |
| `publications[].publicationId` | `number` | Yes |  |
| `publications[].sent` | `number` | Yes |  |
| `publications[].totalSubscribers` | `number` | Yes |  |
| `publications[].uniqueOpens` | `any` | Yes |  |
| `publications[].views` | `number` | Yes |  |
| `startDate` | `string` | Yes |  |
| `summary` | `object` | Yes |  |
| `summary.delivered` | `number` | Yes |  |
| `summary.deliveryRate` | `any` | Yes |  |
| `summary.emailTrafficShare` | `any` | Yes |  |
| `summary.emailViews` | `number` | Yes |  |
| `summary.openRate` | `number \| null` | Yes |  |
| `summary.sent` | `number` | Yes |  |
| `summary.uniqueOpens` | `any` | Yes |  |
| `summary.views` | `number` | Yes |  |

## Annotations [#annotations]

| Hint | Value |
| --- | --- |
| `readOnlyHint` | `true` |
| `destructiveHint` | `false` |
| `openWorldHint` | `false` |

The full input and output JSON Schemas for every tool are in [/mcp-tools.json](/mcp-tools.json).
