# LinkedIn Post Search Scraper (No Login) (`automly/linkedin-post-search-scraper`) Actor

Search public LinkedIn posts by keyword: text, author, date, likes, comment count, images, video and the first comments. Filter by date or author. No login or cookies.

- **URL**: https://apify.com/automly/linkedin-post-search-scraper.md
- **Developed by:** [Automly](https://apify.com/automly) (community)
- **Stats:** 2 total users, 1 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 posts

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?

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 Post Search Scraper (No Login)

### What is LinkedIn Post Search Scraper?

**LinkedIn Post Search Scraper** is a tool that lets you **search public LinkedIn posts by keyword** and download each post's full text, author, publish date, likes, comment count, images, video and the first comments. Type a keyword such as `b2b sales` or `hiring software engineer`, click **Start**, and download the posts as Excel, CSV or JSON. No LinkedIn account, cookies or API key needed.

- ⚡ **Speed:** about 75 posts per minute (300 posts for 3 keywords in 4 minutes in our test)
- 🎯 **On topic:** every post mentions all the words of your keyword (hashtags and plurals count too)
- 📅 **Date filters:** past 24 hours, week, month, year, or since any date you pick
- 👤 **Author filter:** only posts by the people or companies you choose
- 🔓 **No login:** no LinkedIn account, cookies or browser extension

### What can LinkedIn Post Search Scraper do?

- Search LinkedIn posts by keyword, hashtag or phrase without logging in
- Find **LinkedIn posts from the past week or month** about any topic
- Get the **full text of each post**, not a cut-off preview
- See **who posted**: name, profile or company page link, person or company, follower count and photo
- Get **likes and comment counts** for every post, plus the first comments if you want them
- Get the post's **images and video** (video link, thumbnail and length)
- See when a post **shares another post**, with the original post's link and author
- Find **what a specific person or company posted** about a topic, for example what Microsoft posts about AI
- Search many keywords in one run, with up to 1,000 posts per keyword
- Get results in seconds over the **real-time API**, without starting a run
- Export to Excel, CSV, JSON, HTML or XML, or send the posts to Google Sheets, Make, Zapier and more

### What data can you extract from LinkedIn posts?

| | | |
|---|---|---|
| 📝 Full post text | 📅 Publish date and time | 🔗 Post link and ID |
| 👤 Author name | 🏢 Person or company | 👥 Author's followers |
| 🖼️ Author photo or logo | 👍 Likes | 💬 Number of comments |
| 🗨️ First comments (optional) | 🖼️ Images | 🎬 Video, thumbnail and length |
| ♻️ Shared post (text, link, author) | 🔎 Keyword it was found for | 🏅 Position in the search results |

### How to scrape LinkedIn posts by keyword

1. [Create a free Apify account](https://console.apify.com/sign-up) (no credit card needed).
2. Open **LinkedIn Post Search Scraper**.
3. Type one or more **keywords**, for example `b2b sales` or `generative ai`.
4. Choose how many posts you want per keyword and, if you like, a date range or a list of authors. Click **Start**.
5. When the run finishes, download your posts as Excel, CSV, JSON, HTML or XML.

### ⬇️ Input

| Setting | What it does |
|---|---|
| Search keywords | The words the posts must mention, one search per line. Every word must appear in the post (hashtags count, so `#b2bsales` matches `b2b sales`). Put `OR` between alternatives: `saas sales OR b2b sales` |
| Maximum posts per keyword | How many posts to save for each keyword (default 50). Set 0 for as many as can be found, up to 1,000 |
| Posted within | Only posts from the past hour, 24 hours, week, month, 3 months, 6 months or year |
| Posted on or after | Only posts published on or after a date, for example `2026-09-01` |
| Authors | Only posts by these people or companies: profile or company links, or the name in their link (`satyanadella`, `microsoft`). Each keyword is searched once per author |
| Include comments | Add the first comments shown on each post (up to 10), with their text, date, author name and likes |

Example: 100 posts about B2B sales and 100 about hiring software engineers.

```json
{
  "searchQueries": ["b2b sales", "hiring software engineer"],
  "maxPosts": 100
}
```

Example: last week's posts about generative AI, with their first comments.

```json
{
  "searchQueries": ["generative ai"],
  "maxPosts": 50,
  "postedLimit": "week",
  "includeComments": true
}
```

Example: what Satya Nadella and Microsoft post about AI.

```json
{
  "searchQueries": ["ai"],
  "authorFilter": ["https://www.linkedin.com/in/satyanadella", "https://www.linkedin.com/company/microsoft/"],
  "maxPosts": 30
}
```

### ⬆️ Output

You get one row per post. The **Posts** tab in Apify Console shows the posts as a table and the **Authors** tab lists who wrote them. You can download everything as Excel, CSV, JSON, HTML or XML.

```json
{
  "query": "ai",
  "searchRank": 35,
  "url": "https://www.linkedin.com/posts/microsoft_join-us-on-october-21-live-for-the-microsoft-activity-7252800593738510337-P4hW",
  "id": "7252800593738510337",
  "type": "post",
  "text": "Join us on October 21 live for the Microsoft AI Tour in London with Satya Nadella and Jared Spataro to learn how Microsoft is ushering in an era of AI-first business process. RSVP now: https://msft.it/6003mLS9h",
  "postedAt": "2024-10-17T22:00:12.030Z",
  "author": {
    "name": "Microsoft",
    "url": "https://www.linkedin.com/company/microsoft/",
    "type": "company",
    "followers": 29170653,
    "image": "https://media.licdn.com/dms/image/v2/D560BAQH32RJQCl3dDQ/company-logo_100_100/..."
  },
  "likes": 90,
  "commentsCount": 2,
  "comments": [],
  "video": null,
  "images": [
    "https://media.licdn.com/dms/image/v2/D5610AQFry8lJYlN6Kw/image-shrink_1280/..."
  ],
  "sharedPost": null
}
```

With **Include comments** on, `comments` holds the first comments LinkedIn shows (up to 10):

```json
"comments": [
  {"text": "Sounds amazing! Can't wait to learn from Satya!", "postedAt": "2024-10-18T06:15:08.939Z", "authorName": "Jane Doe", "likes": 1}
]
```

`type` is `post`, `video` or `article`. Video posts also have `video` with the video link, thumbnail and length (for example `PT3M21S`, 3 minutes 21 seconds). `searchRank` is the post's position in the keyword's search results.

Each run also saves a short report with how many keywords and posts it covered, and any search it could not finish with the reason.

### How can I use LinkedIn post data?

- **Lead generation and social selling:** find people posting about the problem your product solves, for example `looking for a crm` or `hiring sdr`
- **Recruiting:** find hiring posts for a role, for example `hiring data engineer`, and the people and companies behind them
- **Market and trend research:** see what your industry is talking about this week and which posts get the most engagement
- **Competitor monitoring:** track what competitors and their leaders post about a topic
- **Content research:** find the post formats, hooks and hashtags that work in your niche
- **Brand monitoring:** see who mentions your brand, product or event on LinkedIn

### How does the search work?

The scraper finds public LinkedIn posts that are indexed on the web, the same posts anyone can open without logging in, and reads each one from LinkedIn. Results come in search-relevance order, not newest first. To get recent posts, use **Posted within** or **Posted on or after**: posts outside the dates are skipped before they are read, so filtering costs you nothing.

How many posts a keyword gives depends on how much is written about it: in our tests, a popular topic such as `b2b sales` or `generative ai` gave several hundred posts, and a narrow one such as `kubernetes security` gave about 100. To get more posts on a broad subject, split it into several keywords (`b2b sales`, `saas sales`, `enterprise sales`).

### ❓FAQ

#### How much does it cost to scrape LinkedIn posts?

You pay per post saved. See the **Pricing** tab for the current price. A search that finds no posts costs almost nothing.

#### How many posts can I get per keyword?

Up to 1,000 per keyword. Most keywords give between 100 and 500 posts that really mention them; see *How does the search work?* above for getting more.

#### Can I get the newest posts first?

Posts come in search-relevance order. Use **Posted within** (for example *Past week*) to get only recent posts, then sort by `postedAt` in your spreadsheet.

#### Do I need a LinkedIn account or cookies?

No. The scraper reads only what LinkedIn shows to visitors who are not logged in. Your LinkedIn account is never used, so it cannot be restricted.

#### Can I scrape all the reactions and comments of a post?

LinkedIn shows visitors the number of likes and comments and the first comments (up to 10) of each post. The full list of comments and the list of people who reacted are only visible to logged-in members, so they are not included.

#### Can I scrape private posts?

No. Posts that are visible to connections only, or to logged-in members only, are skipped.

#### Is it legal to scrape LinkedIn posts?

The scraper collects only public posts that anyone can see without logging in. Posts and comments can contain personal data, which laws such as the GDPR in Europe and the CCPA in California protect. You are responsible for having a lawful reason to collect and use the data, and for following anti-spam laws such as CAN-SPAM if you contact people. If you are unsure, ask a lawyer. LinkedIn Post Search Scraper is not affiliated with, endorsed by or sponsored by LinkedIn.

#### Can I use it through an API?

Yes. Start runs and download results with the Apify API, or call the real-time endpoint `/search?q=b2b%20sales&limit=20` in Standby mode to get posts back in one request. The **API** tab has ready-to-use code for Python, JavaScript and cURL.

#### Something doesn't work. What should I do?

Open the **Issues** tab and tell us the keyword and what you expected.

# Actor input Schema

## `searchQueries` (type: `array`):

Words the posts must mention, one search per line, e.g. b2b sales. Every word must appear in the post (hashtags count). Use OR between alternatives: saas sales OR b2b sales.

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

How many posts to save for each keyword (and each author). Set 0 for as many as can be found, up to 1,000.

## `postedLimit` (type: `string`):

Only posts published in this period.

## `postedLimitDate` (type: `string`):

Only posts published on or after this date, e.g. 2026-09-01 (UTC if no time zone). With 'Posted within' too, the later of the two applies.

## `authorFilter` (type: `array`):

Only posts by these people or companies: profile or company links, or their public names from the link (e.g. satyanadella). Each keyword is searched once per author.

## `includeComments` (type: `boolean`):

Add the first comments shown on each post (up to 10) with their text, date, author name and likes.

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

Proxy settings. The default works for most runs.

## Actor input object example

```json
{
  "searchQueries": [
    "b2b sales"
  ],
  "maxPosts": 20,
  "postedLimit": "any",
  "authorFilter": [],
  "includeComments": false,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (type: `string`):

No description

## `authors` (type: `string`):

No description

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

No description

## `report` (type: `string`):

No description

# 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 = {
    "searchQueries": [
        "b2b sales"
    ],
    "maxPosts": 20,
    "authorFilter": [],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("automly/linkedin-post-search-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 = {
    "searchQueries": ["b2b sales"],
    "maxPosts": 20,
    "authorFilter": [],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("automly/linkedin-post-search-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 '{
  "searchQueries": [
    "b2b sales"
  ],
  "maxPosts": 20,
  "authorFilter": [],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call automly/linkedin-post-search-scraper --silent --output-dataset

```

## MCP server setup

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