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 "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.
{
"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
}| Field | What it holds |
|---|---|
data.items[].post | One group post in the shared post shape: text, media, author, counts, publish time. |
post.id | The group post's ID (urn:li:groupPost:…). |
post.url | The post's activity URL. Pass it to post/comments or post/reactions to read the discussion under it. |
post.ext.reaction_counts | Reactions split by type: LIKE, PRAISE and so on. |
post.ext.author_headline | The author's LinkedIn headline, so you see role and company without a profile call. |
post.ext.published_at_precision | How 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.
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_atis rounded to the hour or the day; checkext.published_at_precisionbefore 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_atyourself 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.viewsandengagement.savesarenull, which means unknown, not zero. - Comments are a separate call. Comment counts are included; the comments themselves come from
GET /v1/linkedin/post/commentswith the post'surl.
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.
Related
GET /v1/linkedin/group/postsreference: every parameter and field.GET /v1/linkedin/group: the group's name, rules, member count and owners.GET /v1/linkedin/post/comments: the comments under one group post.- LinkedIn endpoints: everything the API covers on LinkedIn.
Check when a LinkedIn member was last active
Find when a LinkedIn member last showed public activity, such as a post, with an exact timestamp, by profile URL. 50 credits per call.
Search public Facebook posts by keyword
Find public Facebook posts that match a keyword, with text, permalink, author, publish time, likes, comments and reactions. 10 to 50 credits per page.