---
title: "Collect posts of a profile"
method: POST
path: "/collect/linkedin/posts"
tags: ["scrapers"]
---

# Collect posts of a profile

`POST /collect/linkedin/posts`

Starts a collect run for recent posts of a LinkedIn profile or company page through the connected account. One page per call, paced. Returns a run id. Requires a connected account; there is no public preview. When moreAvailable is true, call again with more true only if the user asked or tapped Load more. Each page uses the connected account's action budget.

## Request body

- object
  - `profileUrl` string, required — LinkedIn profile or company page URL, vanity name, or URN. Company URLs use the organization feed; personal URLs use the profile activity feed.
  - `more` boolean — Next page of the same profile. Set only when the user asked for more posts or tapped Load more. Each page uses the connected account's action budget.

## Response `200`

Collect-run id for profile posts

- object
  - `success` true, required
  - `runId` string, required — Collect-run id. Posts arrive on the run record; this response may include the first pages already collected.
  - `status` string, required
  - `totals` object
    - `posts` number, nullable
  - `posts` object[]
    - `postUrl` string, required — Public URL of the post.
    - `text` string, required — Post text content.
    - `date` integer, required — Post creation timestamp (Unix milliseconds).
    - `likesCount` integer, required — Total reactions on this post.
    - `commentsCount` integer, required — Total top-level comments on this post.
    - `sharesCount` integer, required — Total shares/reposts of this post.
    - `postUrn` string, required — LinkedIn internal URN for this post. Use with engagement tools (like, comment, collect_engagers).
    - `postId` string, required — Numeric post identifier parsed from the URN.
    - `type` 'activity' | 'ugcPost' | 'share', required — LinkedIn post type: 'ugcPost' = standard post, 'share' = native share/repost, 'activity' = legacy format.
    - `isRepost` boolean — True when the post is a repost/reshare of another post. Absent for original posts.
    - `media` object — Media attached to the post (image, video, document, or article). Absent when the post is text-only.
      - `type` 'image' | 'video' | 'document' | 'article', required — Type of media attached to the post.
      - `urls` string[], required — Media URLs (image URLs for carousels, video streaming URL, article link, etc.).
      - `title` string — Title of the article or document, when available.
      - `thumbnailUrl` string — Thumbnail URL for videos, articles, or document covers.
    - `authorName` string — Display name of the post's author.
    - `authorProfileUrl` string — Author's profile URL.
    - `authorPublicIdentifier` string, nullable — Author's vanity slug, when they have one.
    - `authorProfileUrn` string, nullable — Author's profile URN.
    - `authorHeadline` string — Author's headline as shown on the post.
    - `authorImageUrl` string — Author's avatar URL.
    - `repostedFromName` string — On a repost, the ORIGINAL author's name when it differs from the resharer.
    - `reactionTypeCounts` object[] — Per-reaction-type breakdown, when LinkedIn exposes it.
      - `reactionType` string, required
      - `count` integer, required
    - `numImpressions` integer, nullable — Total impressions, exposed only on Creator-mode posts.
    - `highlightedReactorName` string, nullable — Social-proof attribution, when LinkedIn surfaces one in the feed.
    - `viewerLiked` boolean, nullable — Whether the authenticated account has reacted to this post.
  - `count` integer
  - `unreadable` integer — Pages of this profile's posts that LinkedIn would not serve. Above 0 means an empty or short list is unread rather than a profile that does not post, and must not be reported as one.
  - `postsUnavailable` integer — The same count, named for the surface it belongs to.
  - `moreAvailable` boolean — True when another page of posts exists. Do not fetch it unless the user asked or tapped Load more.
  - `hasMore` boolean
  - `remainder` string — When more pages exist: this page only — do not say fully collected, all pages, or no more remain.
  - `creditsUsed` integer, required — Credits consumed by this call. 0 for free endpoints, cached results, duplicates, and for every query that does not touch LinkedIn.
  - `retryAfter` integer, required — Seconds to wait before another call of the same type. 0 means no wait is needed.
  - `_meta` object — Credit balance carried on every response so a caller never has to ask for it separately. Absent when the caller has no connected account.
    - `credits` object, required
      - `current` number, required — Credits spent this period.
      - `limit` number, nullable, required — Period allowance, or null when unlimited.
      - `remaining` number, nullable, required — Allowance left, or null when unlimited.
      - `percentage` number, required — Share of the allowance spent, 0 to 100.
      - `isUnlimited` boolean, required
      - `accountPlan` string, required — The credential's plan.

## Other responses

- `400` — The server cannot or will not process the request due to something that is perceived to be a client error.
- `401` — Although HTTP specifies "unauthorized", this response means "unauthenticated". Authenticate to continue. NOTE: 401 is also returned with code "linkedin_not_connected" when the caller IS authenticated but has no connected LinkedIn account — connect LinkedIn (not re-authenticate) to continue.
- `403` — The client does not have access rights to the content.
- `404` — The server cannot find the requested resource.
- `409` — The request conflicts with the current state of the server.
- `410` — The requested content has been permanently deleted from the server.
- `422` — The request was well-formed but was unable to be followed due to semantic errors.
- `429` — Rate limit exceeded. Read error.retryAfter for the wait time in seconds.
- `500` — The server encountered a situation it does not know how to handle.
- `502` — LinkedIn returned a server error or the proxy connection failed. Retry after a few seconds.
- `503` — Proxy capacity temporarily exceeded. Retry after a few seconds.

---

[API](https://skmtc.net/berea/apis/bereach-api.md) · [All operations](https://skmtc.net/berea/apis/bereach-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/berea/bereach-api/revisions/a1e86af2406d/schema)
