---
title: "Get LinkedIn aggregate stats"
method: GET
path: "/v1/accounts/{accountId}/linkedin-aggregate-analytics"
tags: ["Analytics"]
---

# Get LinkedIn aggregate stats

`GET /v1/accounts/{accountId}/linkedin-aggregate-analytics`

Returns aggregate analytics across all posts for a LinkedIn personal account. Only includes posts published through Zernio (LinkedIn API limitation). Org accounts should use /v1/analytics instead. Requires r_member_postAnalytics scope. Saves (POST_SAVE) and sends (POST_SEND) are available for personal accounts; organization pages always return 0 for these two metrics because LinkedIn does not expose them on the organization analytics endpoint.

## Path parameters

- `accountId` string, required

## Query parameters

- `aggregation` 'TOTAL' | 'DAILY'
- `startDate` string, date
- `endDate` string, date
- `metrics` string

## Response `200`

Aggregate analytics data

- union
  - LinkedInAggregateAnalyticsTotalResponse — Response for TOTAL aggregation (lifetime totals)
    - `accountId` string
    - `platform` string
    - `accountType` string
    - `username` string
    - `aggregation` 'TOTAL'
    - `dateRange` object, nullable
      - `startDate` string, date
      - `endDate` string, date
    - `analytics` object
      - `impressions` integer — Total impressions across all posts
      - `reach` integer — Unique members reached across all posts
      - `reactions` integer — Total reactions across all posts
      - `comments` integer — Total comments across all posts
      - `shares` integer — Total reshares across all posts
      - `saves` integer — Total times posts were saved (personal accounts only)
      - `sends` integer — Total times posts were sent via LinkedIn messaging (personal accounts only)
      - `engagementRate` number — Overall engagement rate, as a percentage rounded to 2 decimals: (reactions + comments + shares + saves + sends) / impressions * 100. Clicks are not counted, and there is no fallback denominator, so this is 0 whenever impressions is 0. This is NOT the same formula as PostAnalytics.engagementRate on GET /v1/analytics.
    - `note` string
    - `lastUpdated` string, date-time
  - LinkedInAggregateAnalyticsDailyResponse — Response for DAILY aggregation (time series breakdown)
    - `accountId` string
    - `platform` string
    - `accountType` string
    - `username` string
    - `aggregation` 'DAILY'
    - `dateRange` object, nullable
      - `startDate` string, date
      - `endDate` string, date
    - `analytics` object — Daily breakdown of each metric as date/count pairs. Reach not available with DAILY aggregation.
      - `impressions` object[]
        - `date` string, date
        - `count` integer
      - `reactions` object[]
        - `date` string, date
        - `count` integer
      - `comments` object[]
        - `date` string, date
        - `count` integer
      - `shares` object[]
        - `date` string, date
        - `count` integer
      - `saves` object[] — Daily saves (personal accounts only)
        - `date` string, date
        - `count` integer
      - `sends` object[] — Daily sends via LinkedIn messaging (personal accounts only)
        - `date` string, date
        - `count` integer
    - `skippedMetrics` string[] — Metrics that were skipped due to API limitations
    - `note` string
    - `lastUpdated` string, date-time

## Other responses

- `400` — Invalid request
- `401` — Unauthorized
- `402` — Analytics access required. Legacy plans need the Analytics add-on; included by default on usage-based plans.
- `403` — Missing required LinkedIn scope
- `404` — Account not found

---

[API](https://skmtc.net/zernio/apis/zernio-api.md) · [All operations](https://skmtc.net/zernio/apis/zernio-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/zernio/zernio-api/revisions/15e893e69e8c/schema)
