# LinkedIn account insights

> Followers and daily impressions and engagement for a LinkedIn Page or personal profile.

Canonical: <https://www.tryadeli.com/docs/api/analytics/linkedin-account-insights>

`GET https://app.tryadeli.com/api/v1/analytics/linkedin/account-insights`

Authorization: `Bearer <API key>` — see [Authentication](https://www.tryadeli.com/docs/authentication)

Returns followers and a daily series for a connected LinkedIn Page or personal
profile, over the last 1 to 30 complete UTC days. LinkedIn is available in
beta while Adeli's app is on LinkedIn's Development Tier.

Development Tier allows only a few hundred LinkedIn calls a day, so Adeli does
not call LinkedIn on every request. It serves a snapshot that is refreshed at
most every six hours. `fetchedAt` is when the snapshot was taken. When LinkedIn
rate-limits a refresh, the previous snapshot is returned with `stale: true`.

A Page needs `rw_organization_admin`. A personal profile needs
`r_member_postAnalytics` and `r_member_profileAnalytics`; accounts connected
before Adeli requested them get `403 permission_required` until they reconnect.

**Query parameters**

| Name        | Type      | Required | Description                                                                       |
| ----------- | --------- | -------- | --------------------------------------------------------------------------------- |
| `accountId` | `uuid`    | Yes      | A connected LinkedIn account.                                                     |
| `profileId` | `uuid`    |          | Optional, because accountId names its profile. If you pass both, they must agree. |
| `days`      | `integer` |          | The most recent complete UTC days, 1 to 30. Defaults to 28.                       |

Each day has `impressions`, `reactions`, `comments`, `shares`, and
`followerGain`. Pages also report `clicks` and `pageViews`; for a personal
profile those are always `null`. A metric LinkedIn did not return is `null`,
never zero, and its name is listed in `unavailable`.

**Errors** — `401 unauthorized`, `400 invalid_request`,
`403 permission_required`, `404 account_not_found`, `404 profile_not_found`,
`422 connection_expired`, `422 provider_not_available`,
`422 provider_not_configured`, `429 rate_limited`, `502 provider_error`,
`503 temporarily_unavailable`.

## Request examples

**cURL**

```bash
curl "https://app.tryadeli.com/api/v1/analytics/linkedin/account-insights?accountId=00000000-0000-4000-8000-000000000004&days=7" \
  -H "Authorization: Bearer $ADELI_API_KEY"
```

**JavaScript**

```javascript
const response = await fetch("https://app.tryadeli.com/api/v1/analytics/linkedin/account-insights?accountId=00000000-0000-4000-8000-000000000004&days=7", {
  headers: {
    Authorization: `Bearer ${process.env.ADELI_API_KEY}`,
  },
});
console.log(await response.json());
```

**Python**

```python
import os

import requests

response = requests.get(
    "https://app.tryadeli.com/api/v1/analytics/linkedin/account-insights",
    headers={"Authorization": f"Bearer {os.environ['ADELI_API_KEY']}"},
    params={
        "accountId": "00000000-0000-4000-8000-000000000004",
        "days": "7",
    },
)
print(response.json())
```

## Responses

### 200

```json
{
  "platform": "linkedin",
  "accountId": "00000000-0000-4000-8000-000000000004",
  "profileId": "00000000-0000-4000-8000-000000000001",
  "targetType": "organization",
  "followers": 1840,
  "startDate": "2026-10-21",
  "endDate": "2026-10-27",
  "daily": [
    { "date": "2026-10-21", "impressions": 512, "clicks": 14, "reactions": 22, "comments": 3, "shares": 1, "followerGain": 4, "pageViews": 37 }
  ],
  "unavailable": [],
  "fetchedAt": "2026-10-28T09:00:00.000Z",
  "stale": false
}
```

### 403

```json
{
  "error": {
    "code": "permission_required",
    "message": "linkedin requires r_member_postAnalytics for analytics.read. Restart OAuth to grant the permission."
  }
}
```
