LinkedIn Scraper
Group Posts
List posts shared inside a LinkedIn group, by group URL or ID.
Endpoint
Parameters
| Name | Type | Required | Note |
|---|---|---|---|
| groupstring · required | string | required | LinkedIn group URL or Group ID Example: |
| postedLimitstring · optional | string | optional | Filter by date (LinkedIn-side) One of: |
| limitnumber · optional | number | optional | Max number of posts to return (1-1000). Default: 100. The API has no count param, so results are auto-paginated and capped at this number. This is a COUNT — Posted Limit is a separate date filter and does not bound it. Default: Example: |
Response schema
{
"type": "object",
"$schema": "http://json-schema.org/draft-07/schema#",
"required": [
"elements"
],
"properties": {
"hasMore": {
"type": "boolean",
"description": "True only when the provider still had reachable data and this execution stopped early. A managed Agent must treat this as an incomplete batch, never as completion."
},
"elements": {
"type": "array",
"items": {
"type": "object",
"required": [
"id"
],
"properties": {
"id": {
"type": "string",
"description": "Unique identifier for the post"
},
"author": {
"type": "object",
"properties": {
"name": {
"type": "string",
"description": "Name of the person who posted"
},
"avatar": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"description": "Author's profile picture",
"additionalProperties": true
},
"linkedinUrl": {
"type": "string",
"description": "Link to the author's profile"
},
"publicIdentifier": {
"type": "string",
"description": "Author's public username"
}
},
"description": "Author details",
"additionalProperties": true
},
"repost": {
"type": "object",
"properties": {},
"description": "Full original post if this is a repost",
"additionalProperties": true
},
"article": {
"type": "object",
"properties": {
"link": {
"type": "string"
},
"title": {
"type": "string"
},
"subtitle": {
"type": "string"
}
},
"description": "Article or link shared in the post",
"additionalProperties": true
},
"content": {
"type": "string",
"description": "Full text of the post"
},
"postedAt": {
"type": "object",
"properties": {
"date": {
"type": "string",
"description": "When the post was published"
},
"timestamp": {
"type": "number",
"description": "Unix timestamp of when posted"
},
"postedAgoText": {
"type": "string",
"description": "Human-readable time since posted"
}
},
"description": "Posting time details",
"additionalProperties": true
},
"repostId": {
"type": "string",
"description": "ID of the original post if reposted"
},
"postVideo": {
"type": "object",
"properties": {
"url": {
"type": "string"
},
"thumbnailUrl": {
"type": "string"
}
},
"description": "Video attached to the post",
"additionalProperties": true
},
"engagement": {
"type": "object",
"properties": {
"likes": {
"type": "number",
"description": "Number of likes"
},
"shares": {
"type": "number",
"description": "Number of shares"
},
"comments": {
"type": "number",
"description": "Number of comments"
},
"reactions": {
"type": "array",
"items": {
"type": "object",
"properties": {
"type": {
"type": "string"
},
"count": {
"type": "number"
}
},
"additionalProperties": true
},
"description": "Breakdown of reaction types and counts"
}
},
"description": "Engagement metrics",
"additionalProperties": true
},
"postImages": {
"type": "array",
"items": {
"type": "object",
"properties": {
"url": {
"type": "string"
}
},
"additionalProperties": true
},
"description": "Images attached to the post"
},
"repostedBy": {
"type": "object",
"properties": {
"name": {
"type": "string"
},
"linkedinUrl": {
"type": "string"
}
},
"description": "Person who reposted",
"additionalProperties": true
},
"linkedinUrl": {
"type": "string",
"description": "Direct link to the post"
},
"newsletterUrl": {
"type": "string",
"description": "Link to newsletter if applicable"
},
"socialContent": {
"type": "object",
"properties": {},
"additionalProperties": true
},
"newsletterTitle": {
"type": "string",
"description": "Title of the newsletter"
}
},
"additionalProperties": true
}
},
"nextPage": {
"type": "integer",
"exclusiveMinimum": 0
},
"returned": {
"type": "number",
"description": "How many records this run returned, after any `limit` was applied. ONE EXCEPTION: on a chat preview — where `truncated` is true — this is the count actually FETCHED while `elements` carries only a short sample of them, so the two deliberately disagree. Read `truncated` before comparing this against the array length; in a workflow it is never set and the two always match. Matches the other LinkedIn data tools, whose `meta.returned` is the fetched count on a truncated preview too."
},
"truncated": {
"type": "boolean"
},
"stopReason": {
"enum": [
"cancelled",
"provider-error",
"empty-page-stall",
"caller-limit",
"presentation-preview",
"cursor-stall",
"runtime-page-window",
"time-budget"
],
"type": "string"
},
"suggestion": {
"type": "string"
},
"totalCount": {
"type": "number",
"description": "How many records the search MATCHES, per the provider — the grand total, routinely in the millions while the endpoint will only serve about a thousand of them. Do NOT compare it with the row count to decide whether a run was complete, and do not paginate towards it: use `servableCount` for what is actually reachable. Absent when the provider sent no count."
},
"totalPages": {
"type": "number"
},
"pagesScraped": {
"type": "number"
},
"servableCount": {
"type": "number",
"description": "How many records this endpoint will serve across all its pages — the real ceiling on what any number of runs can reach, which the provider caps well below `totalCount` on most search endpoints. Absent when the provider sent no count."
},
"totalElements": {
"type": "number",
"description": "DEPRECATED — despite the name this is the count RETURNED by this run, not a grand total, so it equals your `limit` on a limited run. Kept at that value so existing flows do not change meaning. Use `returned` for this number, `totalCount` for how many records match, or `servableCount` for how many are reachable."
},
"nextPaginationToken": {
"type": "string"
}
},
"additionalProperties": true
}