LinkedIn Scraper

Group Posts

List posts shared inside a LinkedIn group, by group URL or ID.

1 creditNo API key needed

Endpoint

Parameters

NameTypeRequiredNote
groupstring · requiredstringrequired

LinkedIn group URL or Group ID

Example: Group URL or ID

postedLimitstring · optionalstringoptional

Filter by date (LinkedIn-side)

One of: (Any time), 24h (Last 24 hours), week (Last week), month (Last month)

limitnumber · optionalnumberoptional

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: 100

Example: 100

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
}

Get started

How to use this tool

  1. Connect your AI

    Add Connie to ChatGPT, Claude or Slack once, and this tool comes with it. There’s no API key or account to set up.

  2. Ask for the outcome

    Describe what you need in plain words. Your AI runs this tool when the job calls for it, along with any others it needs.

  3. Make it a workflow

    Add it as a step in a workflow that runs the same way every time, on a schedule or when something happens.

  4. Stay in control

    Choose whether it runs on its own or asks first. When it asks, you see an Allow or Deny card before any credits are spent.