InsightSocial API
How-to

Get the people who reacted to or reposted a LinkedIn post

List who reacted to a LinkedIn post, with each reaction type, and who reposted it, by post URL. 100 credits a page of reactors, 50 a page of reposts.

To see who engaged with a LinkedIn post, call GET /v1/linkedin/post/reactions with the post's url for the people who reacted, and GET /v1/linkedin/post/reposts with the same url for the people who reposted it. Reactions return each person's name, headline, profile URL and the reaction they left (like, praise, empathy and so on). Reposts return each reshare with the resharer and any text they added. A page of reactors costs 100 credits; a page of reposts costs 50. For the people who commented, use GET /v1/linkedin/post/comments (50 credits a page).

Cost

post/reactions is metered at 100–500 credits a page. A plain page costs 100 credits. Adding include=profile joins each row to the member's profile, so the call holds up to 500 credits when it starts and you're charged what it used. Send dry_run=1 for a free quote. post/reposts is 50 credits per page of 10. Asking for the same page again within 6 hours is answered from the shared cache for 2 credits. Failed calls and empty results are free.

How do I find the post URL?

The url has to carry the post's activity ID, in one of two forms:

  • https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928
  • https://www.linkedin.com/posts/<slug>-activity-<id>-<code>

On LinkedIn, open the post's menu and choose "Copy link to post". If you got the post from another endpoint (profile/posts, company/posts, search/posts), copy its post.url field. Don't rebuild the URL from post.id, which is not always the activity ID.

Make the request

cURL
POST_URL="https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"

curl -G "https://api.insightsocial.app/v1/linkedin/post/reactions" \
  --data-urlencode "url=$POST_URL" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"

curl -G "https://api.insightsocial.app/v1/linkedin/post/reposts" \
  --data-urlencode "url=$POST_URL" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"

What comes back

Real responses from 2026-10-14, shortened: one or two rows instead of a full page, long URLs and cursors cut, and private members replaced with placeholders.

post/reactions response (shortened)
{
  "success": true,
  "endpoint": "/v1/linkedin/post/reactions",
  "schema_version": "2",
  "data": {
    "items": [
      {
        "author": {
          "id": "ACoAAD7nmw…",
          "username": null,
          "display_name": "Example User",
          "avatar_url": "https://media.licdn.com/dms/image/v2/…",
          "bio": "Data analyst | Business intelligence",
          "verified": null,
          "followers": null,
          "url": "https://www.linkedin.com/in/ACoAAD7nmw…",
          "ext": { "urn": "ACoAAD7nmw…", "reaction_type": "LIKE", "member_id": "1055365895" }
        }
      }
    ],
    "total": null,
    "truncated": null
  },
  "pagination": { "next_cursor": "v2c.BLUP7GMD…", "has_more": true, "page_size": 44 },
  "unavailable": [
    "items[].author.verified",
    "items[].author.followers",
    "items[].author.following",
    "items[].author.joined_at"
  ],
  "credits_used": 100
}
post/reposts response (shortened)
{
  "success": true,
  "endpoint": "/v1/linkedin/post/reposts",
  "schema_version": "2",
  "data": {
    "items": [
      {
        "post": {
          "id": "7511864524241833985",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7511864524241833985",
          "content": { "text": null },
          "author": { "id": "ACoAACZmjG…", "username": "example_user", "display_name": "Example User" },
          "engagement": { "likes": 3758, "comments": 349, "shares": 318 },
          "published_at": null,
          "ext": { "author_type": "user", "is_repost_quote": false }
        }
      },
      {
        "post": {
          "id": "7509225672431562753",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7509225672431562753",
          "content": { "text": "This long and invasive pathways belongs to the past. Today, a simple blood test…" },
          "author": { "id": "28438218", "username": "roche-belux", "display_name": "Roche Belgium & Luxembourg" },
          "engagement": { "likes": 5, "comments": 0, "shares": 0 },
          "published_at": null,
          "ext": { "author_followers": 15816, "author_type": "company", "is_repost_quote": true, "published_at_precision": "week" }
        }
      }
    ],
    "total": 318,
    "truncated": null
  },
  "pagination": { "next_cursor": "v2c.6dxQa3CY…", "has_more": true, "page_size": 10 },
  "unavailable": ["items[].post.published_at"],
  "credits_used": 50
}
FieldWhat it holds
reactions: data.items[].authorOne person or page that reacted, in the shared author shape: name, headline (bio), avatar, profile URL.
reactions: author.ext.reaction_typeThe reaction they left: LIKE, PRAISE, EMPATHY, APPRECIATION, INTEREST and others.
reactions: author.ext.member_idLinkedIn's numeric member ID. Company pages that react have no member_id; their url is the company page.
reposts: data.items[].postOne reshare in the shared post shape, with the resharer in post.author.
reposts: post.ext.is_repost_quotetrue when the resharer added their own text. Then content.text is that text and engagement counts their reshare.
reposts: data.totalHow many reposts the post has. 318 here, the same as the original post's share count.
reposts: post.ext.author_typeuser for a member, company for a company page.

How do I get every reactor and reposter?

Both endpoints paginate. Send pagination.next_cursor back as cursor, with the same url, and stop when pagination.has_more is false. Each reactions page costs 100 credits (more with include=profile); each reposts page costs 50.

Python: walk every reactor, up to 20 pages
import os
import requests

BASE = "https://api.insightsocial.app/v1"
HEADERS = {"x-api-key": os.environ["INSIGHTSOCIAL_API_KEY"]}

params = {"url": "https://www.linkedin.com/feed/update/urn:li:activity:7501466755261820928"}
people = []
for _ in range(20):
    body = requests.get(f"{BASE}/linkedin/post/reactions", params=params, headers=HEADERS, timeout=120).json()
    people += [item["author"] for item in body["data"]["items"]]
    if not body["pagination"]["has_more"]:
        break
    params["cursor"] = body["pagination"]["next_cursor"]

To list only one kind of reaction, add type (like, praise, empathy, appreciation, interest, or all). See Pagination for the full rules.

What are the limits?

  • Reactor handles. Most reactor rows have username: null, and url points to the member's ID-based profile link (/in/ACoAA…) rather than their vanity handle. The link still opens the profile.
  • Follower counts. followers, following, verified and joined_at are null on reactor rows, which means unknown, not zero. Add include=profile to fill the exact follower count and connection count from each member's profile, at a higher price.
  • No reactions total. data.total is null on post/reactions. The post's like, comment and share counts are on GET /v1/linkedin/post.
  • Plain reposts carry the original's numbers. On a repost without added text, content.text is null and engagement repeats the original post's likes, comments and shares. Only quote reposts (is_repost_quote: true) have their own text and counts.
  • No repost dates. published_at is null on every repost row.
  • Repeat reposters. The same member can appear more than once if they reshared the post several times. Deduplicate on post.author.id if you want people, not reshares.

What can I build with it?

  • Lead lists from engagement. The people who react to a competitor's or a thought leader's post are an audience already interested in the topic. Their headlines tell you role and company.
  • Campaign reach reports. For your own post, count reactions by reaction_type and list the company pages and members who reshared it with their own commentary.
  • Advocate tracking. Run the reposts endpoint across a company's recent posts to see which employees and partners reshare most often.

On this page