# LinkedIn post insights

> Lifetime counters for specific LinkedIn posts.

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

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

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

Returns lifetime counters for up to five LinkedIn posts, or for the account's
recent posts when `postUrns` is omitted. Use the `providerId` that
[publishing](https://www.tryadeli.com/docs/api/posts/publish-linkedin) returned, such as
`urn:li:share:7251234567890123456`.

LinkedIn does not let Adeli list a personal profile's posts, so a personal
profile's analytics cover only posts published through Adeli. Any other post
returns `404 post_not_found`. A Page's recent posts include those made directly
on LinkedIn.

**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.                                            |
| `postUrns`  | `string` |          | Comma-separated post URNs (urn:li:share:… or urn:li:ugcPost:…), at most 5. Omit for the recent posts in the cached snapshot. |

Each post has `impressions`, `reactions`, and `comments`. Pages also report
`clicks` and `shares`; for a personal profile those are `null`. A counter
LinkedIn did not return is `null`.

**Errors** — `401 unauthorized`, `400 invalid_request`,
`403 permission_required`, `404 account_not_found`, `404 post_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/post-insights?accountId=00000000-0000-4000-8000-000000000004&postUrns=urn%3Ali%3Ashare%3A7251234567890123456" \
  -H "Authorization: Bearer $ADELI_API_KEY"
```

**JavaScript**

```javascript
const response = await fetch("https://app.tryadeli.com/api/v1/analytics/linkedin/post-insights?accountId=00000000-0000-4000-8000-000000000004&postUrns=urn%3Ali%3Ashare%3A7251234567890123456", {
  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/post-insights",
    headers={"Authorization": f"Bearer {os.environ['ADELI_API_KEY']}"},
    params={
        "accountId": "00000000-0000-4000-8000-000000000004",
        "postUrns": "urn:li:share:7251234567890123456",
    },
)
print(response.json())
```

## Responses

### 200

```json
{
  "platform": "linkedin",
  "accountId": "00000000-0000-4000-8000-000000000004",
  "profileId": "00000000-0000-4000-8000-000000000001",
  "targetType": "member",
  "posts": [
    {
      "postUrn": "urn:li:share:7251234567890123456",
      "permalink": "https://www.linkedin.com/feed/update/urn:li:share:7251234567890123456/",
      "title": "We just shipped LinkedIn analytics.",
      "publishedAt": "2026-10-20T15:04:00.000Z",
      "hasImage": false,
      "impressions": 930,
      "clicks": null,
      "reactions": 41,
      "comments": 6,
      "shares": null
    }
  ],
  "fetchedAt": "2026-10-28T09:00:00.000Z"
}
```

### 404

```json
{
  "error": {
    "code": "post_not_found",
    "message": "LinkedIn post not found: a personal profile's analytics cover only posts published through Adeli"
  }
}
```
