# LinkedIn Post Scraper – Text, Media & Engagement (`scrapingmonkey/linkedin-post-details-scraper`) Actor

Extract public LinkedIn posts by URL. Get post text, author, media links, hashtags, engagement counts and visible comments in one row per post, without login.

- **URL**: https://apify.com/scrapingmonkey/linkedin-post-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 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

Extract public LinkedIn posts from known post or feed-update URLs. **LinkedIn Post Scraper** collects the text, author, publication date, media links, engagement counts and visible comments in one dataset row per post.

Use it to review company announcements, compare campaign messages or keep source-linked post records for research and reporting.

| At a glance | Details |
|---|---|
| 📥 Input | Full LinkedIn post or feed-update URLs |
| 📤 Output | Text, author, images, videos, hashtags, links, engagement and visible comments |
| 🔐 Login required | No LinkedIn credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One dataset row per processed post; one table and matching JSON fields |

### What the LinkedIn post scraper extracts 🔎

Each result brings the post and its available public context together, so media and comments remain attached to the post they describe.

- Post ID, URL, headline, text and publication date
- Author type, name, profile or company URL, image and visible followers
- Image URLs with available dimensions and captions
- Video URLs, thumbnails, durations and captions
- Hashtags and external links found in the post text
- Likes, comment count and repost count
- Comments embedded in the public response, including text, date, likes and author details

### How to scrape LinkedIn post details 🚀

1. Add a full public LinkedIn post URL or `/feed/update/` URL.
2. Include additional post URLs in `inputList` for a batch.
3. Start the Actor and review successful and failed results.
4. Export the post rows or pass them to a reporting workflow.

```json
{
  "inputList": [
    "https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"
  ]
}
```

Repeated valid inputs that resolve to the same post are normally processed once per run.

### LinkedIn post data fields and complete output 📦

| Field group | Included data |
|---|---|
| Post | ID, URL, headline, text and creation date |
| Author | Type, name, URL, image and followers |
| Media | Image dimensions and captions; video links, thumbnails and duration |
| References | Hashtags and external URLs extracted from text |
| Engagement and discussion | Likes, comment total, reposts and embedded comment details |

Complete illustrative success item with fictional content, not a live result:

```json
{
  "input": "https://www.linkedin.com/posts/northstar-research-example_activity-7123456789012345678-abcd/",
  "status": "success",
  "id": "7123456789012345678",
  "url": "https://www.linkedin.com/posts/northstar-research-example_activity-7123456789012345678-abcd/",
  "headline": "A new guide to research libraries",
  "text": "Our research library guide is ready. See the workflow and download the checklist: https://example.com/library-guide #Research #KnowledgeManagement",
  "created_at": "2026-09-01T10:00:00Z",
  "author.type": "Organization",
  "author.name": "Northstar Research",
  "author.url": "https://www.linkedin.com/company/northstar-research-example/",
  "author.image": "https://example.com/northstar-logo.png",
  "author.followers": 4200,
  "images.url": [
    "https://example.com/library-guide.jpg"
  ],
  "images.width": [
    1200
  ],
  "images.height": [
    628
  ],
  "images.caption": [
    "Research library checklist"
  ],
  "videos.url": [
    "https://example.com/library-walkthrough.mp4"
  ],
  "videos.thumbnail_url": [
    "https://example.com/library-walkthrough.jpg"
  ],
  "videos.duration": [
    "PT30S"
  ],
  "videos.caption": [
    "A short tour of the research library"
  ],
  "hashtags": [
    "#Research",
    "#KnowledgeManagement"
  ],
  "external_links": [
    "https://example.com/library-guide"
  ],
  "likes": 84,
  "comments_count": 12,
  "reposts": 7,
  "comments.text": [
    "The monthly review step is useful.",
    "Thanks for sharing the checklist."
  ],
  "comments.created_at": [
    "2026-09-02T10:00:00Z",
    "2026-09-02T11:30:00Z"
  ],
  "comments.likes": [
    3,
    1
  ],
  "comments.author.type": [
    "Person",
    "Person"
  ],
  "comments.author.name": [
    "Maya Chen",
    "Alex Rivera"
  ],
  "comments.author.url": [
    "https://www.linkedin.com/in/maya-chen-example/",
    "https://www.linkedin.com/in/alex-rivera-example/"
  ],
  "comments.author.image": [
    "https://example.com/maya-chen.jpg",
    "https://example.com/alex-rivera.jpg"
  ]
}
```

`author.name` is a literal field name in the table and JSON. Repeated fields remain lists: the first values in `comments.text` and `comments.author.name` belong to the same comment. Image, video and comment lists align within their own groups and stay in the post row.

On successful rows, unavailable values can be empty strings, empty lists or zero counts. A failed row retains `input`, sets `status` to `failed` and leaves the data fields null.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Default and rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | No default; at least one item. No fixed maximum number of inputs. |

Provide full HTTP or HTTPS LinkedIn URLs containing a `/posts/` or `/feed/update/` path and a numeric post identifier. Plain IDs, company pages and Pulse article URLs are not accepted. Tracking parameters are removed from the requested URL.

This Actor looks up individual posts. It does not crawl an author's feed or paginate the comment thread. Comments are limited to those embedded in the public post response, so `comments_count` can exceed the number of returned comments.

### LinkedIn post data use cases 🎯

#### Campaign reporting

Compare the copy, creative references and visible engagement of a selected set of campaign posts.

#### Company announcement research

Keep announcement text, publication dates and organization attribution together for a market-research timeline.

#### Content and link audits

Review hashtags, outbound destinations and media captions in posts you manage or have permission to analyze.

#### Discussion sampling

Read the comments made available with each post as a limited sample, with the source and author context retained.

### Pricing and billable post rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate. The Store configuration is authoritative.

Under dataset-item pricing, each saved success or failed row can count as a billable item. Automatic retry attempts do not independently create additional rows. Repeated valid inputs are normally processed once.

Media and embedded comments are part of the post row.

### LinkedIn post API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor API tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"]}'
```

Start runs through REST, Apify client libraries or schedules, and use webhooks to handle completion. Export the default dataset as JSON, CSV or Excel, or send it to Google Sheets, Make, Zapier and your own reporting tools.

### Reliability and limits ⚠️

Temporary request failures and selected access errors are retried automatically. Removed posts and responses without usable public post data produce failed rows. The Actor does not require LinkedIn credentials or cookies.

Some pages expose only a preview image or omit media details. Image width and height can therefore be zero, and video fields may be empty. Missing engagement counts also default to zero. Public comment previews are incomplete and should not be treated as a representative sample of the whole discussion.

### Frequently asked questions ❓

#### Can I use a feed-update URL?

Yes. Full LinkedIn post and feed-update URLs are accepted when they contain a numeric post identifier.

#### Does it collect all comments and replies?

No. It keeps comments embedded in the public post response and does not paginate comments or replies.

#### Can it download videos?

It returns available video or embed URLs, thumbnails and metadata. It does not save video files.

#### Why are there fewer returned comments than comments\_count?

The count describes public engagement metadata, while the response may expose only a small set of comment records.

#### Can I submit LinkedIn Pulse articles?

Use LinkedIn Article Details Scraper for Pulse articles and their body text.

### Support, responsible use, and related actors 🛟

For a reproducible issue, contact support with the run ID, approximate time and a safe public example URL. Keep credentials and private data out of support messages.

Use public data in line with applicable privacy, copyright and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add one full LinkedIn post or feed update URL per item.

## Actor input object example

```json
{
  "inputList": [
    "https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"
  ]
}
```

# Actor output Schema

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

Actor dataset rows. Use the status column to distinguish successful extraction from failed processing.

# 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 = {
    "inputList": [
        "https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/linkedin-post-details-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 = { "inputList": ["https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/linkedin-post-details-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 '{
  "inputList": [
    "https://www.linkedin.com/posts/linkedin_stay-up-to-date-on-your-linkedin-activity-activity-6124295313319538688-ILYg"
  ]
}' |
apify call scrapingmonkey/linkedin-post-details-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,scrapingmonkey/linkedin-post-details-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/YeM2DfkIb5aEtm2Jf/builds/486Abq6jjvx3OBOta/openapi.json
