# Linkedin Post Reposters Scraper (`api-ninja/linkedin-post-reposters-scraper`) Actor

Collect raw LinkedIn repost records from one or more public post URLs.

- **URL**: https://apify.com/api-ninja/linkedin-post-reposters-scraper.md
- **Developed by:** [API ninja](https://apify.com/api-ninja) (community)
- **Stats:** 3 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does LinkedIn Post Reposters Scraper do?

**LinkedIn Post Reposters Scraper finds the people and companies that reposted public [LinkedIn](https://www.linkedin.com/) posts.** Add one or more post URLs, choose a maximum number of reposters or collect all available results, and receive a clean dataset with reposter profiles, repost types, commentary, publication dates, engagement, and direct links.

The Actor recognizes both **plain reposts** and **quote reposts with added commentary**. It resolves each URL to LinkedIn's internal post identifier, paginates through the available reposters, normalizes the deeply nested response, and retains the complete original object in `rawData`.

Running the scraper on [Apify](https://apify.com/) gives you cloud datasets, API access, scheduling, monitoring, webhooks, and integrations with Google Sheets, Make, Zapier, and other tools. Apify also supports proxy rotation for workflows that require direct web access; this Actor uses an API-backed workflow and does not expose proxy settings.

Main features:

- 🔗 Process one or many LinkedIn post URLs in a single run
- 👤 Identify person and company reposters
- 🔁 Distinguish plain `REPOST` records from `QUOTE_REPOST` records
- 💬 Extract commentary added to quote reposts
- 🖼️ Return profile images and direct profile or company links when available
- 📊 Extract repost reactions, comments, shares, identifiers, and timestamps
- ♾️ Set a predictable per-post limit or parse every available reposter
- 📦 Export results as JSON, CSV, Excel, HTML, XML, and other formats
- 🧰 Preserve the complete source object in `rawData`
- 🛡️ Retry temporary errors and unexpected API responses automatically

### Why use LinkedIn Post Reposters Scraper?

A repost is a strong signal: somebody considered a post relevant enough to share with their own network. This data can help you discover audiences, understand content distribution, and identify professionals or organizations actively discussing a topic.

Common use cases include:

- **Lead research** — find people and companies amplifying relevant industry content.
- **Audience discovery** — understand which communities help a post spread.
- **Influencer research** — identify professionals who regularly share content in a niche.
- **Brand monitoring** — analyze who reposts company announcements, launches, or campaigns.
- **Competitive intelligence** — study the distribution of competitors' public posts.
- **Content analysis** — compare plain reposts with quote reposts and review added commentary.
- **Partnership research** — discover organizations and individuals already engaging with a subject.
- **Workflow automation** — send normalized reposter data to a CRM, spreadsheet, database, or webhook.

Instead of manually opening repost lists and copying profiles, you receive structured, downloadable records suitable for filtering, analysis, enrichment, and automation.

### How to scrape LinkedIn post reposters

1. Open LinkedIn and copy the URL of a public post.
2. Open this Actor in Apify Console and click **Try for free** or **Start**.
3. Paste one or more URLs into **LinkedIn post URLs**, one URL per row.
4. Set **Maximum reposters per post**. Start with 100 for a quick test.
5. Enable **Parse all reposters** only if you need every result made available by the source.
6. Click **Start** and wait for the run to finish.
7. Open the **Output** tab and select **LinkedIn post reposters** for the clean overview.
8. Use Apify's **All fields** table when you need technical identifiers or the complete `rawData` object.
9. Download the dataset or connect it to another application.

Each post URL is processed independently. If one URL is invalid, inaccessible, or cannot be resolved, the Actor logs the problem and continues with the remaining URLs. Temporary failures and malformed responses are retried up to three times with a one-second delay.

### Input

Configure the Actor through the **Input** tab. Only `postUrls` is required.

| Field          | Type             | Default | Description                                                                               |
| -------------- | ---------------- | ------- | ----------------------------------------------------------------------------------------- |
| `postUrls`     | Array of strings | —       | One or more public LinkedIn post URLs. Duplicate and empty values are removed.            |
| `maxReposters` | Integer          | `100`   | Maximum number of reposters saved for each post. Must be at least `1`.                    |
| `parseAll`     | Boolean          | `false` | Collect all reposters made available by the source and ignore the `maxReposters` setting. |

#### LinkedIn post reposters scraper input example

```json
{
    "postUrls": [
        "https://www.linkedin.com/posts/example_company-update-activity-1234567890123456789",
        "https://www.linkedin.com/posts/example_product-launch-activity-9876543210987654321"
    ],
    "maxReposters": 500,
    "parseAll": false
}
```

The numeric limit applies **separately to each post**. With two URLs and `maxReposters` set to `500`, the Actor can save up to 1,000 dataset items. When `parseAll` is enabled, the Actor continues through pages of up to 100 records until it reaches the total reported by the source.

Only HTTPS LinkedIn URLs are accepted. Public post URLs copied from the LinkedIn website or mobile application can contain tracking parameters; the Actor handles them during post-ID resolution.

### Output

Each dataset item represents one repost. The **LinkedIn post reposters** table emphasizes the fields most useful for everyday review. Apify's **All fields** table includes every normalized property and the complete original API response under `rawData`.

The output explicitly distinguishes:

- `REPOST` — a repost without added commentary. LinkedIn may expose the actual reposter only in the record's header, so fields such as the reposter's headline or follower count can be unavailable.
- `QUOTE_REPOST` — a repost with commentary. These records usually contain richer reposter profile information and the added text in `repostText`.
- `UNKNOWN` — a fallback for an unexpected upstream structure. Inspect `rawData` when this appears.

#### Simplified output examples

Quote repost:

```json
{
    "reposterName": "Alex Morgan",
    "reposterType": "PERSON",
    "reposterHeadline": "AI product leader and startup advisor",
    "reposterConnectionDegree": "3rd+",
    "reposterUrl": "https://www.linkedin.com/in/alex-morgan",
    "reposterImageUrl": "https://media.licdn.com/dms/image/example/profile-photo.jpg",
    "repostType": "QUOTE_REPOST",
    "repostHasCommentary": true,
    "repostText": "A useful perspective on how AI agents change product development. #AI",
    "repostUrl": "https://www.linkedin.com/posts/alex-morgan_example-activity-7470127688037498880",
    "repostPublishedAt": "2026-06-09T15:00:29.089Z",
    "reactions": 12,
    "comments": 3,
    "shares": 1,
    "sourcePostUrl": "https://www.linkedin.com/posts/example_original-activity-7451603800441679873",
    "originalAuthorName": "Original Author",
    "originalPostUrl": "https://www.linkedin.com/posts/example_original-activity-7451603800441679873",
    "rawData": {
        "metadata": {},
        "actor": {},
        "resharedUpdate": {}
    }
}
```

Plain repost:

```json
{
    "reposterName": "Yashwanth Rao",
    "reposterType": "PERSON",
    "reposterUrl": "https://www.linkedin.com/in/yashwanth-rao-a4461736b",
    "repostType": "REPOST",
    "repostHasCommentary": false,
    "repostText": "",
    "repostUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7462603248558972930",
    "repostPublishedAt": "2026-05-19T20:41:02.920Z",
    "sourcePostId": "urn:li:ugcPost:7451603542672592896",
    "originalAuthorName": "Linas Beliūnas",
    "originalPostText": "The original post text appears here...",
    "rawData": {
        "metadata": {},
        "header": {},
        "actor": {}
    }
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. Results can also be retrieved through the [Apify API](https://docs.apify.com/api/v2), consumed by another Actor, or sent to a connected service.

### LinkedIn post reposters data table

| Field                       | Description                                                                 |
| --------------------------- | --------------------------------------------------------------------------- |
| `reposterName`              | Display name of the person or company that performed the repost.            |
| `reposterType`              | `PERSON`, `COMPANY`, or `UNKNOWN`.                                          |
| `reposterHeadline`          | Professional headline or company details when LinkedIn exposes them.        |
| `reposterFollowerCount`     | Available follower count, most commonly returned for company reposters.     |
| `reposterConnectionDegree`  | Connection label such as `1st`, `2nd`, or `3rd+`, when available.           |
| `reposterBadges`            | Available LinkedIn labels such as Premium, Verified, and connection degree. |
| `reposterUrl`               | Canonical LinkedIn profile, company, or showcase URL.                       |
| `reposterImageUrl`          | Highest-resolution profile photo or company logo available in the response. |
| `repostType`                | `REPOST` for a plain repost or `QUOTE_REPOST` when commentary was added.    |
| `repostHasCommentary`       | Whether the reposter added their own text.                                  |
| `repostText`                | Commentary added by the reposter; empty for a plain repost.                 |
| `repostUrl`                 | Direct URL of the repost or its LinkedIn activity page.                     |
| `repostPublishedAt`         | ISO timestamp derived from the repost activity identifier.                  |
| `repostPublishedText`       | Human-readable relative date returned for quote reposts, when available.    |
| `reactions`                 | Reactions belonging to the quote repost when available.                     |
| `reactionBreakdown`         | Reaction counts grouped by LinkedIn reaction type.                          |
| `comments` / `shares`       | Comment and share counts associated with the repost when available.         |
| `hashtags` / `contentLinks` | Unique hashtags and HTTP links found in added repost commentary.            |
| `sourcePostUrl`             | Original URL supplied in the Actor input.                                   |
| `sourcePostId`              | Resolved internal identifier of the requested LinkedIn post.                |
| `originalAuthorName`        | Author of the post being shared.                                            |
| `originalPostText`          | Text of the post being shared, when available.                              |
| `originalPostUrl`           | Canonical URL of the post being shared.                                     |
| `rawData`                   | Complete unmodified repost object returned by the source.                   |

Technical fields such as entity IDs, URNs, visibility, badge booleans, and original activity identifiers remain available in the **All fields** table and exports.

### How much does it cost to scrape LinkedIn post reposters?

The exact price depends on the pricing model shown in the Actor's **Pricing** tab and the Apify plan active when you run it. The main cost factors are:

- Number of LinkedIn post URLs
- Number of reposters requested per post
- Whether **Parse all reposters** is enabled
- Number of pagination requests and temporary retries
- Dataset storage and data transfer

The Actor normally makes one request to resolve each post URL, followed by approximately one reposters request per 100 results. A post with 500 available reposters therefore generally needs about six successful upstream requests: one lookup and five result pages. Retries can increase that number.

For a reliable estimate, run one representative public post with `maxReposters` set to `100`, review the run cost in Apify Console, and scale from there. Leave `parseAll` disabled when you need predictable usage, especially for viral posts with thousands of reposts.

Apify's [Free plan](https://apify.com/pricing) currently includes **$5 of monthly platform usage** and requires no credit card, which is suitable for testing and smaller workloads. Plan limits, Actor pricing, and included usage can change, so always check the current **Pricing** tab before a large run.

### Tips and advanced options

#### Start with a small LinkedIn repost dataset

Test one public post with a limit of 50–100 reposters. Confirm that the output contains the profile and repost fields needed by your workflow before increasing the limit or enabling `parseAll`.

#### Understand missing fields on plain reposts

For a plain repost, LinkedIn can place the actual reposter in a lightweight header while placing the original author in the main actor object. The Actor corrects this attribution, but the header may provide only the reposter's name, image, profile URL, and entity ID. A missing headline, follower count, connection degree, or badge does not necessarily indicate an error.

The engagement block in this response shape can describe the original post rather than the individual repost. To avoid misleading output, the Actor does not attribute those original totals to a plain repost. The untouched values remain available in `rawData`.

#### Use quote reposts for qualitative research

Filter `repostType` to `QUOTE_REPOST` when you want opinions, summaries, objections, or other text people added while sharing a post. Use `hashtags` and `contentLinks` to categorize those responses.

#### Schedule monitoring and automate exports

After testing the input, save it as an Apify Task and use [Apify schedules](https://docs.apify.com/platform/schedules) to run it regularly. Connect datasets to Google Sheets, Make, Zapier, webhooks, or your own application. Use repost activity URNs in your downstream database to help identify records already processed.

#### Access LinkedIn reposters through an API

Every Actor can be started through the Apify API, JavaScript client, Python client, or CLI. Pass the same JSON input shown above, wait for the run to finish, and retrieve the default dataset. The Actor's **API** tab provides request examples for your account. Keep Apify tokens in server-side secrets or environment variables, never in browser code or a public repository.

#### Related LinkedIn Actors

Combine this Actor with related tools from the same creator:

- **LinkedIn Post Reactions Scraper** — collect people who reacted and compare them with reposters.
- **LinkedIn Company Posts Scraper** — find company posts before analyzing who shared them.
- **LinkedIn Profile Posts Scraper** — collect posts published by selected LinkedIn members.
- **LinkedIn Jobs Scraper** — extract structured LinkedIn job listings for recruiting research.

### FAQ, disclaimers, and support

#### Can I scrape multiple LinkedIn posts in one run?

Yes. Add multiple URLs to `postUrls`. The `maxReposters` limit applies independently to each URL, and a failure for one post does not prevent the Actor from processing the others.

#### What is the difference between a repost and a quote repost?

A plain `REPOST` shares the original post without adding new commentary. A `QUOTE_REPOST` includes text written by the person or company sharing it. LinkedIn structures these records differently, and the Actor normalizes both into the same dataset while preserving `repostType`.

#### Why is `repostText` empty?

Plain reposts contain no added commentary, so `repostText` is intentionally empty. The shared post's content is available under `originalPostText` when returned by the source.

#### Why are some reposter details missing?

LinkedIn may return only lightweight header data for a plain repost. Quote reposts usually expose richer actor details. Private, restricted, deleted, company, or incomplete profiles can also omit fields. Check `rawData` to see exactly what the source returned.

#### Does Parse all guarantee every repost ever made?

No. It collects all pages made available by the upstream source at run time. Deleted, private, restricted, unsupported, or otherwise unavailable reposts cannot be returned, and LinkedIn or the provider may limit historical coverage.

#### Does the Actor require LinkedIn cookies or login credentials?

No LinkedIn cookies, usernames, passwords, or session tokens are part of the input. The Actor uses its configured API-backed data provider. You only supply public LinkedIn post URLs and the desired result limit.

#### Can I use the results programmatically?

Yes. Every run and dataset is accessible through the [Apify API](https://docs.apify.com/api/v2). You can trigger runs from JavaScript, Python, the Apify CLI, Make, Zapier, webhooks, and other supported integrations.

#### Is it legal to scrape LinkedIn repost data?

Web scraping laws, privacy rules, and platform terms vary by country and use case. Use the Actor only for lawful purposes, collect only data you are permitted to process, respect LinkedIn's terms, and do not use results for spam, harassment, discrimination, or misuse of personal information. You are responsible for how you configure and use the Actor. This Actor is not affiliated with or endorsed by LinkedIn.

#### What should I do if a run fails or returns no reposters?

Confirm that the post URL is correct, public, and still accessible. Review the run log for URL-resolution or upstream-response errors. Some posts can display a repost count while individual reposter records remain unavailable to the source.

#### Where can I report an issue or request a custom solution?

Open the Actor's **Issues** tab and include the run ID, a public example post URL, and a short description of the expected result. Never include passwords, tokens, cookies, or private information. Custom LinkedIn scraping, enrichment, export, and integration solutions are also available on request.

# Actor input Schema

## `postUrls` (type: `array`):

Add one or more public LinkedIn post URLs. Each URL is resolved to its internal post ID before reposters are collected.

## `maxReposters` (type: `integer`):

Maximum number of normalized reposter records to save for each post. Ignored when Parse all reposters is enabled.

## `parseAll` (type: `boolean`):

Keep requesting pages for each post until all reposters reported by the API have been collected.

## Actor input object example

```json
{
  "postUrls": [
    "https://www.linkedin.com/posts/linasbeliunas_openclaw-creator-just-dropped-the-best-ted-activity-7451603800441679873-5CBt"
  ],
  "maxReposters": 100,
  "parseAll": false
}
```

# Actor output Schema

## `results` (type: `string`):

Open the dataset to browse normalized reposters and repost details or inspect the complete raw API records.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "postUrls": [
        "https://www.linkedin.com/posts/linasbeliunas_openclaw-creator-just-dropped-the-best-ted-activity-7451603800441679873-5CBt"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("api-ninja/linkedin-post-reposters-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "postUrls": ["https://www.linkedin.com/posts/linasbeliunas_openclaw-creator-just-dropped-the-best-ted-activity-7451603800441679873-5CBt"] }

# Run the Actor and wait for it to finish
run = client.actor("api-ninja/linkedin-post-reposters-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "postUrls": [
    "https://www.linkedin.com/posts/linasbeliunas_openclaw-creator-just-dropped-the-best-ted-activity-7451603800441679873-5CBt"
  ]
}' |
apify call api-ninja/linkedin-post-reposters-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,api-ninja/linkedin-post-reposters-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/12RQwAmeDd0wb7oJE/builds/GPPnhiUERQCKj5WoO/openapi.json
