# LinkedIn Posts Scraper API (No Cookies) (`sauliusautomatesit/linkedin-posts-scraper-api`) Actor

LinkedIn posts API and scraper: full text, author, exact date, reactions, comments count, top comments, images, video and reshared post from post links, plus recent posts from company pages. No login, no cookies. $1 per 1,000 posts.

- **URL**: https://apify.com/sauliusautomatesit/linkedin-posts-scraper-api.md
- **Developed by:** [Saulius AutomatesIT](https://apify.com/sauliusautomatesit) (community)
- **Categories:** Lead generation, Social media, AI
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.85 / 1,000 posts

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 Posts Scraper API (No Cookies)

Get public LinkedIn posts from post links or company pages: full text, author with followers and headline,
exact date, reactions, comments count, up to 10 top comments, hashtags, mentions, links, images, video,
documents and the reshared post. No LinkedIn account, no cookies, no browser extension. **$1 per 1,000
posts**, half the usual $2.

### What you get per post

| Field | Example |
|---|---|
| `url`, `id`, `urn`, `shareUrn` | https://www.linkedin.com/posts/openai\_..., 7508226717191376897, urn:li:activity:..., urn:li:ugcPost:... |
| `postedAt` | 2026-09-22T18:12:25.484Z (exact, from the post ID) |
| `author` | name, url, type (person or company), headline, followers, image |
| `text` | full post text with line breaks |
| `hashtags`, `mentions`, `links` | \["AIAgents"], \[{ name, url }], \["https://lnkd.in/..."] |
| `reactions`, `comments` | 14,552, 475 |
| `topComments` | up to 10: author, authorUrl, authorHeadline, text, postedAt, likes (post links, or company posts with "Open each company post") |
| `images`, `video`, `hasDocument`, `article` | image links; video file and thumbnail; carousel flag; shared article link and title |
| `sharedPost` | the reshared post: author, text, date, media |
| `isRepost`, `repostedBy` | company page reposts of other people's posts |
| `companyUrl`, `companyName`, `input`, `source` | where the post came from |

### Input

- **Post links**: `https://www.linkedin.com/posts/...`, `https://www.linkedin.com/feed/update/urn:li:activity:.../`,
  `urn:li:ugcPost:...` links, local links (`uk.linkedin.com/posts/...`) or a bare activity URN or ID.
- **Company, school or showcase links**: `https://www.linkedin.com/company/apify/` gives the recent posts
  LinkedIn shows on the public page (about 10, newest first, reposts included unless you turn them off).
- **Posted after**: a date (`2026-10-01`) or a period (`7 days`) for company posts. Skipped posts are free.
- **Open each company post for comments**: adds top comments and exact counts to company posts. Same price.

```json
{
  "urls": [
    "https://www.linkedin.com/company/apify/",
    "https://www.linkedin.com/company/microsoft/",
    "https://www.linkedin.com/posts/openai_a-warm-welcome-to-gpt-6-sol-and-luna-activity-7508226717191376897-Gj6-"
  ],
  "postedAfter": "7 days",
  "postDetails": true
}
```

### Pricing

Pay per post: **$1 per 1,000 posts** on the free plan, less on paid Apify plans (Bronze $0.95, Silver $0.90,
Gold and above $0.85). Comments, media and the reshared post are included. Not found links, profile links
and pages with no posts are free error rows. You also pay a tiny start fee of $0.00005 per run.

### Use cases

- **Competitor and brand monitoring**: schedule company pages daily with `postedAfter: "1 day"` and get every
  new post with its engagement.
- **Content research**: collect top posts in your niche with their text, hashtags and reactions.
- **Social selling and lead generation**: top comments come with the commenter's profile link and headline.
- **AI agents and RAG**: give an agent the full text of any LinkedIn post link someone shares.

### Error rows (free)

| `error` | Meaning |
|---|---|
| `NOT_FOUND` | The post was deleted, is private or is visible to connections only |
| `NO_POSTS` | The company page shows no recent posts to logged out visitors, or none match your filters |
| `BLOCKED` | LinkedIn refused the page on 4 fresh IPs; run it again later |
| `NOT_SUPPORTED` | A profile (`/in/`) link: LinkedIn hides profile activity from logged out visitors. Add the person's post links instead |

### API, MCP and integrations

Run it from the Apify API, the Python or JavaScript client, Make, n8n, Zapier, or as a tool for AI agents in
the Apify MCP server (`https://mcp.apify.com/?tools=sauliusautomatesit/linkedin-posts-scraper-api`).
For company size, industry, website and headquarters use
[LinkedIn Company Scraper API](https://apify.com/sauliusautomatesit/linkedin-company-scraper-api).

### Notes

- Data comes from LinkedIn's public post and company pages, the same pages anyone sees without signing in. No
  login and no private data.
- Company pages show about 10 recent posts to logged out visitors; older posts need their post links.
- Datacenter IPs only: no residential proxy cost passed on to you.

# Actor input Schema

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

Post links (https://www.linkedin.com/posts/..., /feed/update/urn:li:activity:..., or a bare activity URN) give one row per post with comments. Company, school or showcase links (https://www.linkedin.com/company/apify/) give the recent posts LinkedIn shows on the public page, about 10, newest first.

## `maxPostsPerCompany` (type: `integer`):

How many recent posts to take from each company page. LinkedIn shows about 10 to logged out visitors.

## `postedAfter` (type: `string`):

Only company posts on or after this date (2026-10-01) or within this period (7 days, 2 weeks, 1 month). Leave empty for all. Skipped posts are not charged.

## `includeReposts` (type: `boolean`):

Keep posts the company reposted from other people or pages. Each repost row says who reposted it.

## `postDetails` (type: `boolean`):

Also open every post found on a company page to add up to 10 top comments, exact reaction and comment counts and the author's followers. Same price per post; slower.

## `maxConcurrency` (type: `integer`):

How many LinkedIn pages to load at once. Capped at one per 64 MB of run memory (8 at the default 512 MB); raise the run memory for more.

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

Apify datacenter proxy by default; no residential proxy is needed.

## Actor input object example

```json
{
  "urls": [
    "https://www.linkedin.com/company/apify/",
    "https://www.linkedin.com/posts/openai_a-warm-welcome-to-gpt-6-sol-and-luna-activity-7508226717191376897-Gj6-"
  ],
  "maxPostsPerCompany": 10,
  "includeReposts": true,
  "postDetails": false,
  "maxConcurrency": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One item per post. Download as JSON, CSV or Excel, or read it from this API endpoint.

## `summary` (type: `string`):

Posts delivered, errors and requests.

# 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/company/apify/",
        "https://www.linkedin.com/posts/openai_a-warm-welcome-to-gpt-6-sol-and-luna-activity-7508226717191376897-Gj6-"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("sauliusautomatesit/linkedin-posts-scraper-api").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/company/apify/",
        "https://www.linkedin.com/posts/openai_a-warm-welcome-to-gpt-6-sol-and-luna-activity-7508226717191376897-Gj6-",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("sauliusautomatesit/linkedin-posts-scraper-api").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/company/apify/",
    "https://www.linkedin.com/posts/openai_a-warm-welcome-to-gpt-6-sol-and-luna-activity-7508226717191376897-Gj6-"
  ]
}' |
apify call sauliusautomatesit/linkedin-posts-scraper-api --silent --output-dataset

```

## MCP server setup

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

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/D6lIpRXYwcA7XSgBd/builds/1qQoMq2p1fBnifq1C/openapi.json
