# LinkedIn Posts by Keywords (No Cookies) (`data_pool/linkedin-post-scraper`) Actor

Crawl LinkedIn posts by keywords.  No login or cookies required.

- **URL**: https://apify.com/data\_pool/linkedin-post-scraper.md
- **Developed by:** [Data Pool](https://apify.com/data_pool) (community)
- **Categories:** Social media, Lead generation, News
- **Stats:** 7 total users, 3 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $1.50 / 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.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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 Post Keyword Scraper — No Cookies, No Login

Search **LinkedIn posts by keyword** and get clean, structured results — **without connecting your LinkedIn account, logging in, or pasting any cookies**. Just enter keywords and run.

### What you get

For every matching post:

- **Author** — name, headline, profile URL, and whether it's a person or company
- **Post text** and a direct **permalink**
- **Timestamp** the post was published
- **Engagement** — reactions, comments, reposts, and impressions (when available)
- **Media** attached to the post (images, documents, videos)
- The **keyword** each post matched

Results are **de-duplicated** within a run, so a post matching two of your keywords appears once.

### Input

| Field | Description |
|---|---|
| **Keywords** (required) | One or more search terms. The Actor runs a separate LinkedIn post search per term. Each term must be 85 characters or fewer. |
| **Max posts per keyword** | How many posts to return per keyword. Use `0` for as many as LinkedIn surfaces (realistically a few hundred per search). Default `100`. |
| **Sort by** | *Top match (relevance)* or *Latest (date posted)*. |
| **Date posted** | Limit to *Past 24 hours*, *Past week*, or *Past month*. Default: any time. |

#### Example input

```json
{
  "keywords": ["generative ai", "b2b sales"],
  "maxItems": 25,
  "sortBy": "date_posted",
  "datePosted": "week"
}
```

### Output

Each post is one dataset item you can export to JSON, CSV, Excel, or pull via the API:

```json
{
  "postUrl": "https://www.linkedin.com/posts/jane-doe_activity-7212...",
  "text": "Excited to share how our team closed the quarter…",
  "postedAtIso": "2026-07-01T12:00:00Z",
  "author": {
    "name": "Jane Doe",
    "headline": "VP Sales @ Acme",
    "profileUrl": "https://www.linkedin.com/in/jane-doe",
    "type": "person"
  },
  "stats": { "reactions": 340, "comments": 25, "reposts": 12, "impressions": 9000 },
  "media": [ { "type": "image", "url": "https://…" } ],
  "isRepost": false,
  "matchedKeyword": "b2b sales"
}
```

### Common uses

- **Lead generation** — surface people and companies posting about your market.
- **Social listening** — track how a topic, product, or brand is discussed.
- **Content research** — find the best-performing posts on a theme by engagement.
- **Market & competitor monitoring** — follow keyword-driven conversations over time.

### Pricing

**$1.50 per 1,000 posts — that's it.** No subscription, no per-run fee, no charge for posts you don't receive. You can set a maximum spend per run so costs stay predictable.

### Notes

- Please use scraped data responsibly and in line with applicable laws (including data-protection rules such as GDPR) and LinkedIn's terms. You are responsible for having a lawful basis to collect and process the data you request.
- LinkedIn search results can vary between runs, and result availability depends on what LinkedIn surfaces for a given keyword at the time of the run.

# Actor input Schema

## `keywords` (type: `array`):

Search terms. One LinkedIn post search runs per term. Each term must be 85 characters or fewer (LinkedIn's limit).

## `maxItems` (type: `integer`):

Maximum number of posts to return per keyword. Use 0 for as many as the source allows (LinkedIn realistically surfaces a few hundred per search).

## `sortBy` (type: `string`):

Order results by relevance (Top match) or most recent.

## `datePosted` (type: `string`):

Only return posts from this time window. Leave as 'Any time' for no date filter.

## `source` (type: `string`):

Backend used to fetch posts. 'Managed pool' (default) uses our LinkedIn account pool — no cookies needed. 'My LinkedIn cookie' is planned and not yet available.

## `linkedinCookie` (type: `string`):

Only used when Data source = 'My LinkedIn cookie'. Paste your li\_at session cookie. WARNING: using your own cookie can get your LinkedIn account restricted or banned and violates LinkedIn's User Agreement. Prefer a secondary account. Stored encrypted, never logged.

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

Proxy used only for the user-cookie path. The managed pool supplies its own per-account proxies.

## Actor input object example

```json
{
  "keywords": [
    "b2b sales",
    "product management"
  ],
  "maxItems": 100,
  "sortBy": "relevance",
  "datePosted": "",
  "source": "managed_pool",
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `posts` (type: `string`):

The LinkedIn posts matched by your keywords, one item per post.

# 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 = {
    "keywords": [
        "generative ai"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("data_pool/linkedin-post-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 = { "keywords": ["generative ai"] }

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

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

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

```

## CLI example

```bash
echo '{
  "keywords": [
    "generative ai"
  ]
}' |
apify call data_pool/linkedin-post-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=data_pool/linkedin-post-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/UGtJ8BCuB2GGJw4lK/builds/RzG4odKLnP9PnBUea/openapi.json
