InsightSocial API
How-to

Get the posts in a LinkedIn group

Read a LinkedIn group's discussion feed: post text, author, headline, likes, comments, shares and publish time, by group ID. 50 credits per page.

To read the posts in a LinkedIn group, call GET /v1/linkedin/group/posts with the group's numeric group_id. Each post comes back with its text, the author's name and headline, like, comment and share counts with a breakdown by reaction type, attached media, and when it was published. It costs 50 credits a page of up to 10 posts. LinkedIn's own Groups API is open only to approved partners, so for most developers this is the way to read a group feed.

Cost

50 credits per page of up to 10 posts. Reading 5 pages (50 posts) costs 250 credits. 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 group ID?

The group_id is the number in the group's URL: https://www.linkedin.com/groups/62438/ has the ID 62438. Open the group on LinkedIn and copy the number after /groups/.

To check a group before reading its feed, GET /v1/linkedin/group (50 credits) returns its name, description, member count, posting rules, owners, and whether it is public.

Make the request

cURL
curl "https://api.insightsocial.app/v1/linkedin/group/posts?group_id=62438" \
  -H "x-api-key: $INSIGHTSOCIAL_API_KEY"

What comes back

A real response from 2026-10-14, shortened: one post instead of 10, long URLs cut, and the author replaced with a placeholder.

Response (shortened)
{
  "success": true,
  "endpoint": "/v1/linkedin/group/posts",
  "schema_version": "2",
  "data": {
    "items": [
      {
        "post": {
          "id": "urn:li:groupPost:62438-7515763090810978304",
          "url": "https://www.linkedin.com/feed/update/urn:li:activity:7515763091653943296",
          "content": { "text": "This article examines the risks of autonomous AI agents…", "media_urls": null },
          "author": { "id": "ACoAAACQPQ…", "username": "example_user", "display_name": "Example User", "avatar_url": "https://media.licdn.com/dms/image/v2/…" },
          "engagement": { "views": null, "likes": 2, "comments": 0, "shares": 0, "saves": null },
          "published_at": "2026-10-13T00:00:00.000Z",
          "ext": {
            "reaction_counts": [{ "count": 2, "type": "LIKE" }],
            "post_type": "ugc",
            "published_at_precision": "day",
            "author_headline": "Founder at an analytics consultancy",
            "author_type": "user"
          }
        }
      }
    ],
    "total": 10,
    "truncated": null
  },
  "pagination": { "next_cursor": null, "has_more": false, "page_size": 10 },
  "unavailable": [],
  "credits_used": 50
}
FieldWhat it holds
data.items[].postOne group post in the shared post shape: text, media, author, counts, publish time.
post.idThe group post's ID (urn:li:groupPost:…).
post.urlThe post's activity URL. Pass it to post/comments or post/reactions to read the discussion under it.
post.ext.reaction_countsReactions split by type: LIKE, PRAISE and so on.
post.ext.author_headlineThe author's LinkedIn headline, so you see role and company without a profile call.
post.ext.published_at_precisionHow exact published_at is: hour or day. LinkedIn shows relative times, so the time is rounded.

How do I get older posts?

Send pagination.next_cursor back as cursor, with the same group_id, and stop when pagination.has_more is false. Each page is 50 credits.

Python: read up to 5 pages
import os
import requests

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

params = {"group_id": "62438"}
posts = []
for _ in range(5):
    body = requests.get(f"{BASE}/linkedin/group/posts", params=params, headers=HEADERS, timeout=120).json()
    posts += body["data"]["items"]
    if not body["pagination"]["has_more"]:
        break
    params["cursor"] = body["pagination"]["next_cursor"]

In our test on 2026-10-14 the group returned one page of 10 posts with has_more: false, so don't count on a deep history for every group. See Pagination for the full rules.

What are the limits?

  • Rounded times. published_at is rounded to the hour or the day; check ext.published_at_precision before comparing times.
  • Order. Posts came back mostly newest first, but not strictly: in our test the first post was a day older than the nine after it. Sort by published_at yourself if order matters.
  • Feed depth. The test group gave one page of 10 posts and no cursor. How far back a group's feed goes is not guaranteed.
  • No view or save counts. engagement.views and engagement.saves are null, which means unknown, not zero.
  • Comments are a separate call. Comment counts are included; the comments themselves come from GET /v1/linkedin/post/comments with the post's url.

What can I build with it?

  • Community monitoring. Poll the groups in your industry daily and alert on posts that mention your brand, a competitor, or a problem you solve.
  • Topic research. Collect a group's posts and the reaction counts to see which topics its members respond to.
  • Finding active members. The authors and their headlines show who posts in a group, a starting list for partnerships or outreach.

On this page