# LinkedIn Posts Scraper 📝 \[No Cookies] — $2.50/1K 💰 (`viralanalyzer/linkedin-posts-scraper-pro`) Actor

Extract public LinkedIn posts, reactions, comments count, media attachments, and timestamps from any creator without cookies or login. Only $2.50/1K posts.

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

## Pricing

from $1.25 / 1,000 post scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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

## LinkedIn Posts Scraper 📝 \[No Cookies] — Only $2.5/1K 💰

You want to watch what one profile or company page publishes — without keeping a logged-in session alive, and without your scraper dying the day the cookie expires.

> No login · no cookies · profiles and company pages · 20+ posts in under 5s

***

### ⚡ Highlights

- **100% No Cookies Required**: Zero risk of account bans or expired sessions.
- **Profiles & Companies Supported**: Scrape both individual executive posts and official brand page announcements.
- **Ultra-Affordable**: Only **$0.0025 per post** ($2.50 per 1,000 posts) — 50% cheaper than API Maestro ($5.00/1K).
- **Fast HTTP Speed**: Extracts up to 20+ posts in under 5 seconds.

***

### 📥 Input

| Field | Type | Description |
|---|---|---|
| `targetUrls` | array | LinkedIn profile or company page URLs |
| `maxPosts` | integer | Cap for the **whole run**, across every URL — not per URL (default 20) |
| `proxyConfiguration` | object | Proxy settings (optional) |

**`maxPosts` is a budget for the entire run.** With 3 URLs and `maxPosts: 20`, the first URL can
consume all 20 — the actor then stops the loop and never requests the other two, which come back
with zero rows. Targets are fetched in the order you pass them, so put the one that matters first.
If you want 20 posts from each of 3 profiles, set `maxPosts: 60`, or run one URL per run.

### 📤 Output

```json
{
  "type": "DiscussionForumPosting",
  "authorName": "Satya Nadella",
  "authorUrl": "https://www.linkedin.com/in/satyanadella",
  "targetUrl": "https://www.linkedin.com/in/satyanadella",
  "headline": "...",
  "text": "Some more detail on the ROIC Intelligence App I built yesterday...",
  "datePublished": "2026-07-30T01:35:47.220Z",
  "postUrl": "https://www.linkedin.com/posts/satyanadella_some-more-detail-on-the-roic-intelligence-activity-7488406960443183104-g52O",
  "scrapedAt": "2026-08-19T12:28:00.000Z"
}
```

### ✅ Capabilities & Limits

**Built here:** each target is fetched with exactly one plain HTTP GET - no browser, no scrolling, no pagination, no retry. A non-200 (LinkedIn's `999`, or `429`) is logged and the URL is abandoned, so the post count per target is whatever LinkedIn embeds in that single guest HTML response and a partial IP throttle shrinks your dataset instead of failing the run.

What this actor does and does not do — stated up front, so you do not pay to find out.

| Input / feature | Supported | Notes |
|---|---|---|
| Profile URL | ✅ | individual member pages |
| Company page URL | ✅ | official brand pages |
| Keyword search | ❌ | this actor reads known URLs — use `linkedin-posts-search-pro` |
| Comment text | ❌ | reaction and comment counts only |
| Private profiles | ❌ | public content only |
| Reactions by person | ❌ | aggregate counts, never who reacted |
| Per-URL post cap | ❌ | `maxPosts` is a run-wide budget — one URL can eat the whole quota (see the note under Input) |
| Reaction / comment counts | ⚠️ | shipped as `interactionStatistic`, and only for posts read from the page's JSON-LD block; posts recovered by the HTML fallback carry no counts field |

### 🎯 Use cases

1. Competitor monitoring — track what rival brands announce and how it performs
2. Executive tracking — follow what decision-makers publish before a sales call
3. Content benchmarking — compare your posting cadence against a peer set
4. Newsjacking — catch announcements the moment they go up

### ❓ FAQ

**Profiles or companies?**\
Both. Pass either URL type in `targetUrls`.

**Will this get my account banned?**\
There is no account involved. No login, no cookies, nothing to ban.

**Can I get who reacted?**\
No — only the counts. Identifying individual reactors is out of scope.

### 💰 Pricing

Pay Per Event. The rate depends on your Apify plan tier:

| Plan tier | Per actor start | Per 1,000 |
|---|---|---|

**You are never charged for a run that returned nothing.** When the source blocks and nothing
is extracted, the actor returns a labeled diagnostic and charges no PPE event.

***

### 🇧🇷 Português

Você quer acompanhar o que um perfil ou uma página de empresa publica — sem manter sessão logada e sem que o scraper morra no dia em que o cookie expira.

> Sem login · sem cookies · perfis e páginas · 20+ posts em menos de 5s

Sem login e sem cookies. Preço por evento, com desconto por tier do seu plano Apify —
veja a tabela acima. Execução que não retorna nada não é cobrada: quando a fonte bloqueia,
o actor devolve um diagnóstico rotulado, sem cobrar evento.

**`maxPosts` é orçamento da execução inteira, não por URL.** Com 3 URLs e `maxPosts: 20`, a primeira
URL pode consumir os 20; o actor encerra o laço e nem chega a requisitar as outras duas, que voltam vazias.
As URLs são processadas na ordem em que você as envia. Para 20 posts de cada um dos 3 perfis, use `maxPosts: 60`.

Campos de entrada, saída, limites e FAQ estão nas seções em inglês acima.

# Actor input Schema

## `targetUrls` (type: `array`):

List of LinkedIn profile or company URLs (e.g. \['https://www.linkedin.com/in/satyanadella', 'https://www.linkedin.com/company/microsoft']).

## `maxPosts` (type: `integer`):

Maximum number of posts to collect across all target URLs.

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

Select Apify Proxy groups (Residential recommended for high volume scraping).

## Actor input object example

```json
{
  "targetUrls": [
    "https://www.linkedin.com/in/satyanadella",
    "https://www.linkedin.com/company/microsoft"
  ],
  "maxPosts": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing scraped LinkedIn posts.

# 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 = {
    "targetUrls": [
        "https://www.linkedin.com/in/satyanadella",
        "https://www.linkedin.com/company/microsoft"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/linkedin-posts-scraper-pro").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 = { "targetUrls": [
        "https://www.linkedin.com/in/satyanadella",
        "https://www.linkedin.com/company/microsoft",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("viralanalyzer/linkedin-posts-scraper-pro").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 '{
  "targetUrls": [
    "https://www.linkedin.com/in/satyanadella",
    "https://www.linkedin.com/company/microsoft"
  ]
}' |
apify call viralanalyzer/linkedin-posts-scraper-pro --silent --output-dataset

```

## MCP server setup

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

```

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/SHcu9n4MsNdLStbyY/builds/Z2Kz5R5meUKYJfbVd/openapi.json
