# LinkedIn Post Scraper ✅ Search by Keyword (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:** 31 total users, 14 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/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 Post Scraper - Search Posts by Keyword, No Cookies

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.

Because it runs without any LinkedIn credentials from you, **your own account is never involved and never at risk**. There is nothing to connect and nothing to keep logged in.

### 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 — and is only charged 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"
}
```

### How to search LinkedIn posts by keyword

Put your search terms into **Keywords** and run. Each term gets its own LinkedIn search, and every returned post records which term it matched in `matchedKeyword`, so one run can cover several topics and still be easy to split apart afterwards.

#### How to find only the most recent posts

Set **Sort by** to *Latest (date posted)* and **Date posted** to *Past 24 hours* or *Past week*. This is the setup to use for monitoring, where an old high-engagement post is noise rather than signal.

#### How to track a topic, brand, or competitor over time

Put the Actor on a [schedule](https://docs.apify.com/platform/schedules) with the same keywords and a *Past 24 hours* filter. Each run picks up what's new, so you accumulate a timeline of how a topic is discussed instead of a single snapshot.

#### How to find the best-performing posts on a theme

Leave **Sort by** on *Top match*, raise **Max posts per keyword**, and sort the resulting dataset by `stats.reactions` or `stats.comments`. This is a fast way to see what actually resonates in a niche before writing your own content.

#### How to turn posts into a lead list

Take the `postUrl` values from this Actor and feed them into our [LinkedIn Post Reactions & Comments Scraper](https://apify.com/data_pool/linkedin-post-engagement-scraper). You go from "people are talking about this topic" to "here are the people, with profile links", in two steps.

### LinkedIn Post Search API

Every run is reachable through the [Apify API](https://docs.apify.com/api/v2), so you can treat this Actor as a **LinkedIn post search API** rather than a manual tool. Start a run, poll it, and read the dataset as JSON from your own backend, or receive results through a [webhook](https://docs.apify.com/platform/integrations/webhooks) when a run finishes. Client libraries are available for Python and JavaScript.

### Integrations

- **n8n**, **Make**, and **Zapier** — trigger runs and route posts into your CRM, spreadsheet, or alerting tool using Apify's [official integrations](https://docs.apify.com/platform/integrations).
- **Google Sheets / Airtable / Slack** — push matching posts into a sheet or a channel as they are found.
- **AI agents (MCP)** — callable from AI agents through Apify's MCP server, so an assistant can search LinkedIn posts on request.
- **Webhooks** — fire your own endpoint the moment a run completes.

### 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.
- **Hiring and talent signals** — find people publicly posting about looking for work, or teams announcing they're growing.

### Limits and scale

- LinkedIn surfaces a few hundred posts per search realistically, so very broad keywords return a capped slice rather than everything ever posted. Narrower terms and date filters get you more useful coverage than one huge query.
- Search results vary between runs — LinkedIn's own ranking is not deterministic.
- Runs are paced deliberately to stay within normal usage patterns; large multi-keyword jobs take longer rather than being pushed through aggressively.

### Pricing

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

### FAQ

**Do I need a LinkedIn account, login, or cookies?**
No. You never connect an account, paste an `li_at` cookie, or log in anywhere.

**Can my LinkedIn account get banned for using this?**
Your account isn't used, so it isn't exposed. Tools that ask you to paste a cookie or connect your profile put *your* account in the loop — this one doesn't.

**Is scraping LinkedIn legal?**
Collecting publicly visible information is broadly permitted in many jurisdictions, but it is also restricted by LinkedIn's own terms, and personal data carries obligations under laws such as GDPR. You are responsible for having a lawful basis for what you collect and how you use it. If you are unsure — particularly for outreach in the EU — take legal advice.

**Can I export to Excel or CSV?**
Yes. Every run's dataset exports to JSON, CSV, Excel, XML, or RSS, from the Console or the API.

**Can I run this on a schedule?**
Yes, using Apify [Schedules](https://docs.apify.com/platform/schedules) — hourly, daily, weekly, or a custom cron expression.

**Does it work with n8n, Make, or Zapier?**
Yes, through Apify's official integrations for each. See [Integrations](#integrations) above.

**How many posts can I get for one keyword?**
As many as LinkedIn surfaces, realistically a few hundred per search. Set **Max posts per keyword** to `0` to take everything available.

**Why do results change between runs?**
LinkedIn's search ranking isn't deterministic, and new posts appear constantly. For monitoring, use *Latest* sorting with a date filter so runs are comparable.

**Can I search by hashtag?**
Yes — enter the hashtag as a keyword. It's treated as a search term like any other.

**Do I get the comments and likers of these posts?**
Not from this Actor — it returns the posts themselves. Feed the `postUrl` values into our [Reactions & Comments Scraper](https://apify.com/data_pool/linkedin-post-engagement-scraper) to get the people.

### More LinkedIn scrapers — no cookies required

- **[LinkedIn Post Reactions & Comments Scraper](https://apify.com/data_pool/linkedin-post-engagement-scraper)** — everyone who reacted to or commented on a post, deduplicated into one lead list.
- **[LinkedIn Jobs Scraper](https://apify.com/data_pool/linkedin-jobs-scraper)** — search job postings with LinkedIn's own filters.

### Support and feedback

Something not working, or a field you wish this returned? **[Open an issue](https://apify.com/data_pool/linkedin-post-scraper/issues)** — issues are read and answered quickly, and most requests are small changes.

If this Actor is useful to you, **please leave a review**. Reviews are the main way other people find it.

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

## Actor input object example

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

# 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(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 '{
  "keywords": [
    "generative ai"
  ]
}' |
apify call data_pool/linkedin-post-scraper --silent --output-dataset

```

## MCP server setup

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