# Linkedin Posts Scraper (`logical_scrapers/linkedin-posts-scraper`) Actor

Extract rich, structured data from LinkedIn posts with our high-performance, AI-friendly scraping solution. Perfect for content analysis, social listening, and market research.

- **URL**: https://apify.com/logical\_scrapers/linkedin-posts-scraper.md
- **Developed by:** [Goldmine](https://apify.com/logical_scrapers) (community)
- **Categories:** Social media, Marketing, Automation
- **Stats:** 95 total users, 1 monthly users, 88.2% runs succeeded, 5 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $3.99 / 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?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## 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.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Post Scraper — scrape LinkedIn posts with engagement, author and comments

![LinkedIn Post Scraper](https://i.ibb.co/DH9bXVBZ/Screenshot-2026-09-26-at-11-34-40-AM.png)

This **LinkedIn post scraper** turns public **[LinkedIn](https://www.linkedin.com/)** posts into structured data. Paste the links of the LinkedIn posts you care about and get back the full post text, the author with their follower count, LinkedIn post engagement (reactions and comment count), the post image or video, and the top comments with each commenter's profile link. People use it to track how company and creator content performs, to collect posts for research and AI datasets, and to find who is commenting on a topic.

Give it a list of post URLs and get one record per post as JSON, CSV or Excel. It needs no LinkedIn account, no cookies and no API key.

***

### 🚀 Key Features

- 🔎 **Every post link format** — `linkedin.com/posts/...` share links, `feed/update/urn:li:activity:...` and `urn:li:ugcPost:...` links, and country subdomains such as `uk.linkedin.com`
- 🧾 **Post and author data** — text, headline, publish date, image or video, and the author's name, type (person or company), profile URL, photo and follower count
- 📈 **LinkedIn post engagement** — reactions count and comments count for every post
- 💬 **Top comments** — commenter name and profile URL, comment text, date and likes
- 🛡️ **No login** — works on public posts without a LinkedIn account or cookies, over Apify datacenter proxies by default
- 🧹 **Clean runs** — duplicate links are scraped once, non-post links are skipped with a warning, and deleted posts are reported instead of retried
- 📤 **Multiple export formats** — JSON, CSV, Excel, XML via the Apify dataset
- 🔁 **Schedulable runs** — re-scrape the same posts daily to track how engagement grows

***

### 👥 Who Is This Actor For?

- **Social media and content marketers** — measure how your own and competitors' LinkedIn posts perform
- **B2B sales and growth teams** — find the people commenting on posts in your market, with profile links
- **Researchers and analysts** — collect LinkedIn posts and their reactions for studies of professional discourse
- **Agencies** — report on client and influencer post engagement without logging in to LinkedIn
- 🤖 **AI builders** — feed post text and comments into RAG pipelines, classifiers or sentiment models

### 💡 Common Use Cases

- Scrape LinkedIn posts from a company page and compare their reactions and comment counts
- Track LinkedIn post engagement for a campaign by scheduling the same URLs every day
- Export the comments on a viral LinkedIn post, with each commenter's profile URL
- Collect the text of thought-leadership posts for content analysis
- Save LinkedIn video posts with their thumbnail and video file URL

***

### 🔗 Supported URL Types

| URL Type | Example |
| -------- | ------- |
| **Post share link** | `https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp` |
| **Short post link** (as company pages link them) | `https://www.linkedin.com/posts/activity-7509223583018115072-n-xQ` |
| **Feed update link** | `https://www.linkedin.com/feed/update/urn:li:activity:7508560408543199232/` |
| **ugcPost link** | `https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656` |
| **Country subdomain** | `https://uk.linkedin.com/posts/...` |

Tracking parameters such as `?utm_source=share` are fine. Profile, company and search URLs are not posts and are skipped.

***

### 📥 Input

| Field | Type | Description | Default |
| ----- | ---- | ----------- | ------- |
| `urls` | Array | Public LinkedIn post URLs, one per line, in any of the formats above. Each URL returns one post. | Required |
| `proxyConfiguration` | Object | Proxy used to reach LinkedIn. Apify datacenter proxies work for public posts; switch to residential if many posts come back blocked. | `{ "useApifyProxy": true }` |

There is no `maxItems` field: each post URL returns exactly one record, so the number of results is the number of URLs.

#### Example Input

```json
{
  "urls": [
    "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
    "https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

***

### 📤 Output

Each dataset item includes:

| Field | Type | Description |
| ----- | ---- | ----------- |
| `post_id` | String | LinkedIn activity ID of the post |
| `post_url` | String | Canonical URL of the post |
| `date_published` | String | When the post was published (ISO 8601) |
| `headline` | String | First line of the post as LinkedIn summarises it |
| `content` | String | Full text of the post |
| `image_url` | String | Post image, shared-article cover or video thumbnail; empty for text-only posts |
| `video_url` | String | Video file URL for video posts; empty otherwise |
| `reactions_count` | Number | Reactions on the post (likes, celebrates, and the other reaction types together) |
| `comments_count` | Number | Total comments on the post |
| `author.name` | String | Name of the person or company that posted |
| `author.type` | String | `Person` or `Organization` |
| `author.profile_url` | String | Author's LinkedIn profile or company page |
| `author.image_url` | String | Author's photo or company logo |
| `author.followers_count` | Number | Author's LinkedIn followers |
| `comments` | Array | The comments LinkedIn shows logged-out visitors, each with `author`, `author_profile_url`, `date_published`, `text` and `likes` |
| `url` | String | The URL as you gave it in the input |

The dataset has two views in the Console: **Overview** (one row per post) and **Comments** (one row per comment).

#### Example Output

A real item from a run on 2026-09-26, with one of its nine comments shown and image URL signatures trimmed:

```json
{
  "post_id": "7508569677040893954",
  "post_url": "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
  "date_published": "2026-09-23T16:55:13.484Z",
  "headline": "AI is technology that is built and improved by people, who have a responsibility to develop and deploy it thoughtfully.",
  "content": "AI is technology that is built and improved by people, who have a responsibility to develop and deploy it thoughtfully.\n\nAnd helping people benefit from AI means taking its challenges seriously.\n\nThe technology industry needs to do that work.",
  "image_url": "https://media.licdn.com/dms/image/v2/D4E05AQFwIFX--b2JDA/videocover-high/B4EaDPMQY7G4BQ-/0/1790182498192",
  "video_url": "https://dms.licdn.com/playlist/vid/v2/D4E05AQFwIFX--b2JDA/mp4-720p-30fp-crf28/B4EaDPMQY7G4CA-/0/1790182506183",
  "reactions_count": 1524,
  "comments_count": 150,
  "author": {
    "name": "NVIDIA",
    "type": "Organization",
    "profile_url": "https://www.linkedin.com/company/nvidia",
    "image_url": "https://media.licdn.com/dms/image/v2/D560BAQGV36q2EowSyw/company-logo_100_100/company-logo_100_100/0/1724881581208/nvidia_logo",
    "followers_count": 6630390
  },
  "comments": [
    {
      "author": "NVIDIA",
      "author_profile_url": "https://www.linkedin.com/company/nvidia",
      "date_published": "2026-09-23T16:56:18.446Z",
      "text": "Watch Jensen's full conversation on The Ezra Klein Show: https://youtu.be/HjurAWAr_nY ",
      "likes": 16
    }
  ],
  "url": "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp"
}
```

You can export the dataset as **JSON, CSV, Excel, XML, RSS, or HTML** from the Apify Console or
via the [Apify API](https://docs.apify.com/api/v2).

***

### 💰 Pricing

This Actor is **pay per event** (you pay per result): each post saved costs **$0.00499 on the free plan, so 1,000 posts cost $4.99**, falling to $0.00399 per post ($3.99 per 1,000) on Gold and higher Apify plans. Each run also has a $0.002 start fee. Deleted, private or blocked posts are not saved, so they cost nothing. A free Apify account is enough to try it.

***

### ❓ FAQ

#### What is the LinkedIn Post Scraper?

It is a LinkedIn post scraper that takes post URLs and returns each post's text, author, reactions, comment count, media and top comments as structured data. Use it to scrape LinkedIn posts without logging in.

#### Do I need a LinkedIn account, cookies or an API key?

No. The Actor reads only what LinkedIn shows logged-out visitors of a public post. You never share your LinkedIn session.

#### Do I need a proxy?

Apify Proxy is on by default, using datacenter IPs: in a test run on 2026-09-26 they returned 124 of 124 posts with no blocks. LinkedIn limits how many pages one IP can open without logging in, so the Actor switches to a fresh IP for each batch and retries blocked posts up to three times. If a run reports many blocked posts, select the residential proxy group.

#### How many results can I get per run?

One record per post URL, and there is no limit on the number of URLs. Duplicate URLs, including different link formats for the same post, are scraped once.

#### Does it return all comments on a post?

No. It returns the comments LinkedIn shows logged-out visitors of the post page, which was up to 10 per post in our tests on 2026-09-26. `comments_count` always gives the full total.

#### Can it scrape all posts from a profile or company page?

Not by itself: it scrapes the posts whose URLs you give it. Copy the post links from the profile or company page (each post's **Copy link to post** menu item) into the input.

#### What happens with deleted or private posts?

They are skipped and named in the run log as deleted or not public, and the run's status message counts them. You are not charged for them.

#### Can I schedule it or integrate it with my app?

Yes — every Apify Actor exposes a REST API, webhooks, and integrations with Zapier, Make, Google
Sheets and Slack, and can be called from an AI agent via the Apify MCP server.

#### Is it legal to scrape LinkedIn?

This Actor accesses only publicly available pages. You are responsible for making sure your use
complies with LinkedIn's terms of service and the laws in your jurisdiction, including data protection law when you store commenters' names.

#### What if LinkedIn changes and the Actor breaks?

Open an issue on the Actor's **Issues** tab with the post URL that failed.

***

### 🧩 Part of the LinkedIn Scraper Suite

Posts, profiles, companies, jobs and ads from LinkedIn. Also try:

- [LinkedIn Profile Scraper No Cookies](https://apify.com/logical_scrapers/linkedin-profile-scraper-no-cookies) — public profiles without logging in
- [LinkedIn Profile Scraper](https://apify.com/logical_scrapers/linkedin-profile-scraper) — full profile details: headline, experience, education and skills
- [LinkedIn People Search Scraper](https://apify.com/logical_scrapers/linkedin-people-search-scraper) — people search results as leads
- [LinkedIn Company Scraper](https://apify.com/logical_scrapers/linkedin-company-scraper) — company pages: about, size, headquarters, followers
- [LinkedIn Company Scraper Bulk (No Cookies)](https://apify.com/logical_scrapers/linkedin-company-scraper-pro) — company profiles in bulk without logging in
- [LinkedIn Company Detail Scraper](https://apify.com/logical_scrapers/linkedin-company-scraper-deep) — detailed data from a single company page
- [LinkedIn Jobs Scraper](https://apify.com/logical_scrapers/linkedin-jobs-scraper) — job postings with title, company, location and description
- [LinkedIn Ads Scraper](https://apify.com/logical_scrapers/linkedin-ads-scraper) — ads from the LinkedIn Ad Library by keyword or advertiser
- [LinkedIn Company Posts Scraper](https://apify.com/logical_scrapers/linkedin-company-posts-scraper) — recent posts of LinkedIn company pages with reactions, comments and media, without logging in

See every Goldmine Actor at [apify.com/logical\_scrapers](https://apify.com/logical_scrapers).

***

### 📷 Image Credit

Image credit: [linkedin.com](https://www.linkedin.com/)

***

### 📬 Contact & Support

- **Issues & feature requests**: use the Issues tab on this Actor's page — that is the most direct route to a fix.
- **Email**: `coredev.dan@gmail.com`
- **If this Actor saved you time, please leave a ⭐ rating on the Apify Store.** It helps us keep
  it maintained.

# Actor input Schema

## `urls` (type: `array`):

Public LinkedIn post URLs, one per line. Accepts linkedin.com/posts/... links (the Copy link to post format), linkedin.com/feed/update/urn:li:activity:... and urn:li:ugcPost:... links, and country subdomains such as uk.linkedin.com. Each URL returns one post. URLs that are not posts are skipped with a warning.

## `proxyConfiguration` (type: `object`):

Proxy used to reach LinkedIn. Apify datacenter proxies work for public posts. Switch to residential proxies if many posts come back blocked.

## Actor input object example

```json
{
  "urls": [
    "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
    "https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `comments` (type: `string`):

No description

## `full` (type: `string`):

No description

# 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 = {
    "urls": [
        "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
        "https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("logical_scrapers/linkedin-posts-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 = {
    "urls": [
        "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
        "https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("logical_scrapers/linkedin-posts-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 '{
  "urls": [
    "https://www.linkedin.com/posts/nvidia_ai-is-technology-that-is-built-and-improved-activity-7508569677040893954-sffp",
    "https://www.linkedin.com/feed/update/urn:li:ugcPost:7507922903468998656"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call logical_scrapers/linkedin-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,logical_scrapers/linkedin-posts-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/bFAbNvKAoG6bl2ZF7/builds/ghWKWMc0ytN4YDQGK/openapi.json
