# LinkedIn Post Search Scraper (No Cookies) (`insights_data/linkedin-post-search-scraper-no-cookies`) Actor

Find public LinkedIn posts by keyword, author or company. Get full text, author with followers, exact date, likes, comment count, comments, images and video as clean JSON. Exact date filter, live results, no account or cookies needed.

- **URL**: https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies.md
- **Developed by:** [Insights Data](https://apify.com/insights_data) (community)
- **Security:** Limited permissions
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 results

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?

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

### 🔍 What is LinkedIn Post Search Scraper (No Cookies)?

**LinkedIn Post Search Scraper (No Cookies)** helps marketing, PR, sales and research teams track LinkedIn brand mentions, spot buying signals and study what their market posts about, by collecting public LinkedIn posts for any keyword, person or company into one table. Type a keyword or paste a profile, company or post link and click **Start**: no LinkedIn account, no login and no cookies are needed, and you can try it on the Apify Free plan, where the $5 monthly credit pays for result charges and platform usage. For each post you get the full text, the author with their follower count, the exact publish date, likes, the comment count, the public comments, hashtags, tagged people and companies, images and video links.

- 📣 **Track LinkedIn brand mentions:** search for your brand or product name on a schedule and read who is talking about you. Use a wide date window such as the last 3 months, and paste the post links of the newest posts you already know about (see the note below the list).
- 📰 **LinkedIn media monitoring for PR teams:** follow a spokesperson, a campaign name or a news topic and collect the matching posts with the first public comments of each.
- 🌟 **Find LinkedIn influencers on a topic:** see who posts about a topic, with each author's follower count and the likes and comments of their posts, then sort the export by followers.
- 🎯 **Spot LinkedIn buying signals:** search for the words people use when they describe a problem you solve, then open the author's profile link from the result.
- 📊 **Benchmark LinkedIn post performance:** paste competitor company links and compare their posts, formats (text, image, video or article), likes and comments side by side.
- 🧲 **Recruiting research:** collect LinkedIn "we are hiring" posts for a role or skill and see which companies are hiring.

> **Good to know:** keyword search mainly finds posts whose opening words contain all of your words, so a post that mentions your keyword only further down may not be found, and the newest few weeks can be missing from keyword results. You get the matching public posts the search can find, not a complete list of every post on LinkedIn. For a post you already know, paste its link.

#### What can LinkedIn Post Search Scraper do?

- 🔑 **Keyword search:** a word or phrase, in any language, finds public posts that match it.
- 🧑 **Posts by a person:** paste a LinkedIn profile link to get that person's public posts.
- 🏢 **Posts by a company:** paste a company page link (also school and showcase pages).
- 🔗 **Single posts:** paste a post link or a 19-digit post ID to read that one post.
- 📆 **Date filter:** keep posts from the last hour up to the last year, or from an exact start date.
- 🔃 **Two sort orders:** Relevance (the search's own order, with popular matching posts near the top) or Date (newest first).
- 💬 **Comments included:** the public comments under each post come with it at no extra charge, so you don't need a separate LinkedIn post comments scraper.
- 🏷️ **Hashtags and mentions:** every hashtag and every tagged person or company, in their own table.
- 🗂️ **Six result tables plus a run summary:** all posts, authors, comments, mentions and hashtags, media, and one row per search.
- ⏰ **Scheduled runs and API:** run it daily or weekly, connect Google Sheets, Slack, Make, Zapier or n8n, or call it from your own code.

You can mix keywords, profile links, company links and post links in one run. A post that is found twice (for example by two keywords) is saved once.

People often search for a "LinkedIn post search scraper no cookies" tool, because giving a scraper your LinkedIn session cookie can put your own account at risk. This Actor reads only what any logged-out visitor can see, so there is no account to risk.

***

### 🗃️ LinkedIn Post Search Scraper data: what can you extract?

This LinkedIn post data extractor saves one row per post. The field names below are the exact names in the dataset (the results table of a run).

| Field | What it means |
|---|---|
| 📄 `type` | Always `Post` |
| 🆔 `id` | Numeric LinkedIn ID of the post |
| 🔗 `linkedinUrl` | Public link of the post |
| 🔖 `headline` | Short title line, when LinkedIn shows one |
| 📝 `content` | Full text of the post |
| 👤 `author` | `name`, `publicIdentifier` (the name part of the profile or company link, such as `playwrightweb`), `type` (Person or Organization), `linkedinUrl`, `avatar` and `followers` |
| 📅 `postedAt` | Exact publish time: `timestamp` (milliseconds since 1 January 1970, handy for sorting), `date` (ISO format, the standard date-and-time notation such as `2025-08-29T07:57:54.536000+00:00`, in UTC, the world standard time) and `postedAgoShort` (age such as `3d` or `1y`) |
| 🖼️ `postImages` | Image links of the post |
| 🎬 `postVideo` | LinkedIn-hosted video: `url`, `durationSeconds` and `thumbnail` (`null` when there is no video) |
| 🧩 `mediaType` | `text`, `image`, `video` or `article` |
| 👍 `engagement` | `likes`, `comments` and `shares` |
| 🏷️ `hashtags` | Hashtags used in the post text |
| 📌 `mentions` | People and companies tagged in the post: `name`, `publicIdentifier`, `type`, `linkedinUrl` |
| 🧮 `commentsCount` | Total number of comments on the post |
| 💬 `comments` | Saved public comments: `text`, `author`, `authorUrl`, `postedAt` and `likes` |

Because `postedAt` holds the exact date and time, you don't need a separate LinkedIn post date extractor. The likes, comment count and shares also make this a LinkedIn post engagement scraper for any public post.

> **Note:** `shares` is often empty (`null`), because LinkedIn hides it from visitors who are not logged in. `headline`, `postImages`, `postVideo`, `hashtags`, `mentions` and `comments` are empty when the post has none. A field LinkedIn does not show is left empty, never guessed.

#### What data can't LinkedIn Post Search Scraper extract?

- Reaction types (like, celebrate, insightful) and the list of people who reacted: only the total `likes`.
- More comments than LinkedIn shows to logged-out visitors (usually a first set), and reply threads. `commentsCount` still shows the real total.
- Contact details such as emails or phone numbers. If you need emails written in the post text, [LinkedIn Posts Search Scraper](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies) lists them.
- Full profile details of an author (experience, education, skills). For those, pass the author links to [LinkedIn Profile Extractor & Enricher (No Login Required)](https://apify.com/insights_data/linkedin-profile-extractor-enricher).
- Private posts, posts only visible after login, deleted posts, and files: images and videos come as links, not downloads.

***

### ▶️ How to find public LinkedIn posts by keyword, author or company

LinkedIn Post Search Scraper is made for an easy start, even if you've never collected data from the web before. New to Apify? The short glossary below the steps explains the words used in them.

1. [Create a free Apify account](https://console.apify.com/sign-up) with your email.
2. Open [LinkedIn Post Search Scraper (No Cookies)](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies) and click **Try for free**.
3. In **Search queries, post links or profile links**, replace the prefilled keyword `b2b sales` with your own keywords, profile links, company links or post links, one per line. Type keywords as plain text; no quotes are needed.
4. Keep **Max posts per search** at 10 for a first test and click **Start**.
5. Wait until the run's status shows **Succeeded**. How long it takes depends on how many posts you ask for; the status line shows how many posts were collected so far, and posts appear in the **Output** tab while the run is still going. Open **All posts** first; the other tables are optional views of the same posts. To export LinkedIn post data as JSON, CSV, Excel, XML or HTML, go to **Storage → Datasets → Export**.

#### Words you'll see in Apify

- **Apify Console:** the web app where you start runs and see results.
- **Run:** one start of the Actor with your settings.
- **Dataset:** a results table of a run. This Actor fills six of them (posts, authors, comments, mentions and hashtags, media, searches).
- **Key-value store:** a small file store that comes with each run. The run totals are saved there.
- **Task:** a saved set of input settings that you can run again or schedule.
- **Pay-per-event:** you pay for each result the Actor saves, plus a small start fee, instead of a monthly rent.

***

### 💲 LinkedIn Post Search Scraper pricing: how much does it cost?

LinkedIn Post Search Scraper uses **pay-per-event** pricing. Your bill for a run has three parts:

1. **Results:** you pay for each post saved to the posts table. The price depends on your Apify plan (table below). Comments, the five extra tables and the run summary cost nothing extra. Posts that are skipped (deleted, private, duplicates or outside your date filter) or that could not be read are not charged.
2. **Start fee:** $0.00005 per run at the default 1 GB of memory. It is charged once per GB of run memory, so it only grows if you raise the memory yourself.
3. **Platform usage:** the compute resources the run uses, billed at your Apify plan's own rates.

| Apify plan | Price per post | Price per 1,000 posts |
|---|---|---|
| 🆓 Free | $0.003 | $3.00 |
| 🚀 Starter | $0.0027 | $2.70 |
| 📈 Scale | $0.0024 | $2.40 |
| 🏦 Business and higher | $0.002 | $2.00 |

The plan discount applies to the result price only. The start fee is the same on every plan, and platform usage is billed at your Apify plan's own rates.

**Example:** 1,000 posts cost $3.00 in result charges on the Free plan, $2.70 on Starter, $2.40 on Scale and $2.00 on Business, plus the $0.00005 start fee and platform usage. The prefilled input (one keyword, 10 posts) saves up to 10 posts: at most $0.03 in result charges on the Free plan, plus the start fee and platform usage.

To see the full cost for your own searches, do a small test run (for example 10 posts per search) and read the cost on the run's page in Apify Console. See the [pricing tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/pricing) for the current prices.

#### Is it free to search LinkedIn posts with this Actor?

You can start without paying. On the Apify Free plan, the $5 monthly credit pays for result charges and platform usage, and Free-plan runs work the same as paid runs.

#### How do I keep the cost under control?

- Set **Max posts per search**. It counts per keyword or author, so 3 keywords with 20 each can save up to 60 posts.
- Set a **maximum charge limit**. In Apify Console, open **Run options** below the input form and fill in **Maximum cost per run** before you click **Start** (through the API, send `maxTotalChargeUsd`). It caps what the Actor charges for results; platform usage is billed on top. When the limit is reached, the run stops and keeps the posts it already saved.

***

### ⬇️ Input

You only need **one keyword or one link** in **Search queries, post links or profile links**. Everything else has a default. Set the input in Apify Console or send it as JSON through the API.

#### Settings most people change

| Setting (Console title) | What it does | Default |
|---|---|---|
| 📋 Search queries, post links or profile links (`urls`) | Keywords, profile links, company links, post links or post IDs, one per line. Required | Console prefill: `b2b sales` |
| 🎚️ Max posts per search (`maxPosts`) | Most posts to save for each keyword or author. 0 = every post that can be found, and each one is a paid result, so use a number for tests and schedules. Not used for post links you paste | 10 |
| 🔃 Sort by (`sortBy`) | Relevance (`relevance`): the search's own order, with popular matching posts near the top, not a strict ranking by likes. Date (`date`): newest first | Relevance |
| ⌛ Posted within (`postedLimit`) | Any time, last hour, last 24 hours, last week, last month, last 3 months, last 6 months or last year | Any time |
| 📆 Posted on or after (`postedLimitDate`) | Exact start date in the format YYYY-MM-DD. When set, it replaces **Posted within** | Empty |
| 💬 Collect comments (`scrapeComments`) | Saves the public comments under each post, at no extra charge | On |
| ✂️ Max comments per post (`maxComments`) | Most comments saved per post. 0 = every comment that LinkedIn shows (no 100 limit). A number above 100 is lowered to 100 | 5 |
| 🌐 Proxy configuration (`proxyConfiguration`) | Optional. By default no proxy is used. If LinkedIn refuses requests, the Actor switches to Apify Proxy by itself. Proxy traffic is part of platform usage | No proxy |

The prefilled input searches one keyword and saves up to 10 posts:

```json
{
  "urls": ["b2b sales"],
  "maxPosts": 10,
  "sortBy": "relevance",
  "postedLimit": "any",
  "scrapeComments": true,
  "maxComments": 5
}
```

This input reads one post from its link, the same post shown in the Output example below:

```json
{
  "urls": [
    "https://www.linkedin.com/posts/playwrightweb_playwright-vs-ai-activity-7366162211532173313-UfJI"
  ],
  "scrapeComments": true,
  "maxComments": 5
}
```

See the [input tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/input-schema) for every field.

#### Search queries, post links or profile links

Each line can be one of three things, and you can mix them:

- **A keyword or phrase.** A LinkedIn keyword post search mainly finds public posts whose opening words contain all of your words. Short keywords find the most posts.

- **A profile or company link.** To get LinkedIn posts by person, paste their profile link (`https://www.linkedin.com/in/...`). To search LinkedIn page posts of a company, paste its page link (`https://www.linkedin.com/company/...`); school and showcase pages work too. This way you collect LinkedIn posts by company without typing the company name as a keyword.

- **A post link or post ID.** `https://www.linkedin.com/posts/...`, `https://www.linkedin.com/feed/update/urn:li:activity:...` or the 19-digit ID alone. You get that one post.

- ✅ Good: `b2b sales`, `we are hiring data engineer`, `https://www.linkedin.com/company/google`

- ❌ Bad: a long sentence of 10 or more words, or a single letter such as `C`

> ⚠️ Keep keywords short: very long keywords are shortened and single letters are dropped. Keyword search mainly looks at the opening words of a post, so a post that mentions your keyword only near the end may not be found. The newest few weeks of posts can be missing from keyword results: for the newest posts, paste the post links.

#### Max posts per search

The number applies to each keyword or author on its own. With 3 keywords and 20, you get up to 60 posts. Post links you paste are not limited by this number. The real number of posts per keyword also depends on how many matching public posts the search finds, so a test run is the best way to know.

- ✅ Good: 10 for a first test, 50 for a weekly topic report
- ❌ Bad: 0 on a broad keyword in your first run. It saves every post the search finds for that keyword, and each saved post is a paid result.

#### Posted within and Posted on or after

The date filter also applies to post links you paste: posts older than your filter are skipped, logged and not charged. Use **Posted on or after** for an exact day such as `2026-01-31`; it wins over **Posted within**.

#### Max comments per post

The default is 5 comments per post. Without a login, LinkedIn shows only a first set of comments for each post, so you may get fewer comments than `commentsCount`. If you type a number above 100, it is lowered to 100, with a note in the log; 0 saves every comment LinkedIn shows. Switch **Collect comments** off when you only need the posts.

Options that need a LinkedIn login, such as reaction lists, profile enrichment or industry and company filters, are not offered. If you send them through the API, they are ignored and the log says so.

***

### ⬆️ Output

Each post becomes one row in the posts dataset (All posts), and the Actor also splits it into four extra tables (Authors, Comments, Mentions and hashtags, Media), plus a Searches table with one row per input, six tables in all. The Output tab lists them together with a seventh entry, the run summary. Open **All posts** first; the other tables are optional. Open the **Output** tab while the run is going or after it finishes:

| Output tab | One row per |
|---|---|
| 📑 All posts | Post. Views: Posts overview, Authors, Engagement, Text, hashtags and mentions, Media, Comments |
| 👤 Authors | Post, with the author's name, type, link, avatar and followers, and the post's likes, comments and shares |
| 💬 Comments | Public comment: `text`, `comment_author`, `comment_author_url`, `likes`, `commented_at` |
| 🏷️ Mentions and hashtags | Tagged person or company (`kind` = `mention`) or hashtag (`kind` = `hashtag`) |
| 🎞️ Media | Image or video: `url`, `thumbnail_url`, `duration_seconds` |
| 📒 Searches | Keyword, author or group of pasted links: `candidates` (posts the search found for that input, after duplicates and posts outside your date filter were removed, before they were read), `saved`, `skipped` (deleted, private, already saved, or older than your date filter once the post was read) and `failed` (could not be read) |
| 🧾 Run summary | Totals of the run |

Every row of the Authors, Comments, Mentions and hashtags and Media tables carries `post_id`, `post_url`, `post_author` and `found_by`, so you can join it back to the post. These tables use flat names such as `posted_at` instead of `postedAt.date`. `found_by` tells you which of your inputs led to the post: it shows the keyword (in quotes, shortened after 22 characters), the author identifier, or `posts` for links you pasted.

To download, go to **Storage → Datasets**, open the dataset you need (the posts or one of the extra tables) and click **Export**, then pick JSON, CSV, Excel, XML or HTML. To export LinkedIn comments as one flat table, export the Comments dataset. The Comments table works like a LinkedIn comments scraper output: one row per comment, linked to its post.

The Mentions and hashtags table is a good start for your own LinkedIn hashtag analytics: count how often each hashtag appears across the posts of a topic.

> **Run totals:** the run summary is saved as the `RUN_SUMMARY` record under **Storage → Key-value stores**. It includes `posts_saved` (posts in All posts), `rows_charged` (posts charged as results), `posts_not_readable` (posts, or whole searches, that could not be read), `posts_outside_date_filter` (posts dropped by your date filter), `posts_deleted_or_private`, `duplicate_posts_merged` (posts that turned out to be one already saved, and were not saved again), `duration_seconds` and `spend_limit_reached` (`true` when the maximum charge limit stopped the run).

#### JSON example

Example row for the post-link input above (values from a real post, `content` and `comments` shortened):

```json
{
  "type": "Post",
  "id": "7366162211532173313",
  "linkedinUrl": "https://www.linkedin.com/posts/playwrightweb_playwright-vs-ai-activity-7366162211532173313-UfJI",
  "headline": "Join us for a Playwright Live session where we show off Playwright in VS Code...",
  "content": "Join us for a Playwright Live session where we show off Playwright in VS Code with the Playwright VS Code Extension and more. ...",
  "author": {
    "name": "Playwright",
    "publicIdentifier": "playwrightweb",
    "type": "Organization",
    "linkedinUrl": "https://www.linkedin.com/company/playwrightweb",
    "avatar": "https://media.licdn.com/dms/image/...",
    "followers": 55520
  },
  "postedAt": {
    "timestamp": 1756454274536,
    "date": "2025-08-29T07:57:54.536000+00:00",
    "postedAgoShort": "1y"
  },
  "postImages": [],
  "postVideo": null,
  "mediaType": "text",
  "engagement": { "likes": 413, "comments": 135, "shares": null },
  "hashtags": ["AI", "Playwright", "VS"],
  "mentions": [],
  "commentsCount": 135,
  "comments": [
    {
      "text": "Next session i recommended \"Fixtures\" concepts",
      "author": "Naveenkumar Baskaran",
      "authorUrl": null,
      "postedAt": "2025-08-29T09:01:40.097000+00:00",
      "likes": 1
    }
  ]
}
```

The same post in the Authors table (example row):

```json
{
  "author_name": "Playwright",
  "author_id": "playwrightweb",
  "author_type": "Organization",
  "author_url": "https://www.linkedin.com/company/playwrightweb",
  "author_avatar": "https://media.licdn.com/dms/image/...",
  "followers": 55520,
  "media_type": "text",
  "posted_at": "2025-08-29T07:57:54.536000+00:00",
  "likes": 413,
  "comments": 135,
  "shares": null,
  "post_id": "7366162211532173313",
  "post_url": "https://www.linkedin.com/posts/playwrightweb_playwright-vs-ai-activity-7366162211532173313-UfJI",
  "post_author": "Playwright",
  "found_by": "posts"
}
```

***

### 💡 Tips and advanced usage

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

As many matching public posts as the search finds, up to your **Max posts per search**. The number depends on how many public posts match your words, how long the keyword is and your date filter. Short keywords find more posts than long phrases. Do a test run with 10 to 50 posts and look at the Searches table: `candidates` shows how many possible posts were found for each keyword.

#### How to find LinkedIn top performing posts on a topic

Search your topic with **Sort by** set to Relevance, which puts popular matching posts near the top. After the export, sort the table by `engagement.likes` or `commentsCount` to rank them yourself; the Relevance order is not a strict ranking by likes. The Engagement view in the Output tab shows likes, comments, shares and the post age side by side.

#### How to set up LinkedIn engagement tracking

Each run saves the likes and comments a post has at that moment. To follow them over time, run the same input on a schedule and compare the rows by `id`:

1. Enter your brand name or your competitors' company links, set **Max posts per search** to 50, **Sort by** to Date and **Posted within** to Last month.
2. Save the input as a task (**Save as new task** in Apify Console).
3. Open **Schedules**, add a [schedule](https://docs.apify.com/platform/schedules) for that task (for example every Monday at 8:00) and save.
4. Each run creates new datasets and charges for every post it saves, also posts an earlier run already saved, so keep **Max posts per search** modest. Because the window is a month and the run is weekly, posts appear in several runs: match them by `id` to see how their likes and comments grew, and treat an `id` you have not seen before as a new post. Without code, collect the runs in one Google Sheet and use **Data → Data cleanup → Remove duplicates** on `id`.

The month window gives keyword results time to catch up, since the newest few weeks can be missing from keyword search.

#### How to get cheaper results

- Lower **Max posts per search** and add a date filter, so only the posts you need are saved.
- Put all keywords and links into one run instead of one run each: you pay the start fee once.

#### Known issues

- ⚠️ Keyword search mainly looks at the opening words of a post, and the newest few weeks of posts can be missing from keyword results. Paste post links for the newest posts.
- ⚠️ Only the comments LinkedIn shows to logged-out visitors can be saved. A number above 100 in **Max comments per post** is lowered to 100.
- ⚠️ `shares` is often `null`.
- ⚠️ If LinkedIn keeps refusing requests, the run stops early and keeps the posts it already saved. Its status then says "Stopped early after N posts because LinkedIn kept refusing requests or could not be reached." Run it again later.
- ⚠️ If LinkedIn changes its pages, some fields can come back empty until the Actor is updated.

***

### 🔌 LinkedIn Post Search Scraper API and integrations

#### Can I use LinkedIn Post Search Scraper as a LinkedIn post search API?

Yes. The [Apify API](https://docs.apify.com/api/v2) lets you start runs, wait for them and fetch the posts as JSON from your own code, so you get a LinkedIn search posts API without building a scraper yourself. Use the `apify-client` [NPM package](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/api/javascript) for Node.js or the `apify-client` [PyPI package](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/api/python) for Python. The [API tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/api) has ready-to-copy code. Each run's dataset then acts as a LinkedIn post data API: read the items as JSON, CSV or Excel from its URL.

#### LinkedIn post scraper Python example

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/linkedin-post-search-scraper-no-cookies").call(run_input={
    "urls": ["b2b sales"],
    "maxPosts": 10,
    "sortBy": "relevance",
    "postedLimit": "any",
    "scrapeComments": True,
    "maxComments": 5,
})

for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["postedAt"]["date"], post["author"]["name"], post["engagement"]["likes"])
```

#### Can I integrate LinkedIn Post Search Scraper with other apps?

Yes. Connect it with almost any app through [Apify integrations](https://apify.com/integrations), including Make, Zapier, n8n, Slack, Google Sheets and Google Drive. A webhook is a message Apify sends to another app when a run event happens, for example when a run succeeds. Webhooks fire on run events, not on each new post. Three workflows:

- 📗 **Brand mentions in Google Sheets:** open your scheduled task's **Integrations** tab and add Google Sheets, so every run adds its posts to a shared sheet. Remove repeats by `id`, then sort by `postedAt.date`.
- 🔔 **Slack digest for your team:** add a [webhook](https://docs.apify.com/platform/integrations/webhooks) that fires when a run succeeds and points to a Make or Zapier scenario. The scenario reads the dataset and posts the author, text and link of each post from that run to a Slack channel.
- 🔁 **LinkedIn post scraper n8n workflow:** in n8n, use the Apify node to run the task, then route the posts to your CRM, a database or an AI step that summarizes the week's posts.

#### Can I use LinkedIn Post Search Scraper with AI agents (MCP)?

Yes. MCP (Model Context Protocol) is the standard that AI assistants use to call outside tools. Connect the Actor to Claude and other AI assistants through the Apify MCP server, so an assistant can search LinkedIn posts on a topic and summarize them for you. Open the [MCP tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/api/mcp) for setup steps.

***

### 🧭 Other LinkedIn scrapers

These LinkedIn Actors work alongside this LinkedIn post data scraper: the latest company posts, profile details, people at a company and jobs.

| Actor | What it adds |
|---|---|
| 🔎 [LinkedIn Posts Search Scraper](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies) | Public posts by keyword, phrase or hashtag, or from post, profile and company links, with reactions, comments, hashtags, media and emails in the text |
| 🏙️ [LinkedIn Company Posts Scraper (No Cookies)](https://apify.com/insights_data/linkedin-company-posts-scraper-no-cookies) | The latest public posts of any company, newest first, from a company link or name |
| 📇 [LinkedIn Profile Extractor & Enricher (No Login Required)](https://apify.com/insights_data/linkedin-profile-extractor-enricher) | Public profiles from URLs: headline, location, about, followers, current role, experience, education and skills |
| 👥 [LinkedIn Company Employees Scraper](https://apify.com/insights_data/linkedin-company-employees-scraper) | Public employees of a company with name, headline, title, seniority, department and location |
| 💼 [Advanced LinkedIn Job Search API](https://apify.com/insights_data/advanced-linkedin-job-search-api) | Public LinkedIn jobs with title, company, salary, seniority, applicants and the full description |

***

### ❓ FAQ

#### How is LinkedIn Post Search Scraper (No Cookies) different from LinkedIn Posts Search Scraper and LinkedIn Company Posts Scraper?

All three read public LinkedIn posts without a login. Pick the one that matches your starting point:

| | LinkedIn Post Search Scraper (No Cookies) | LinkedIn Posts Search Scraper | LinkedIn Company Posts Scraper (No Cookies) |
|---|---|---|---|
| Start from | Keywords, profile links, company links or post links | Keywords, phrases or hashtags, or post, profile and company links | A company link or company name |
| Best for | Keyword search with the author's follower count, an exact date filter and comments | Searches that also need emails written in the post text | The latest posts of one company, newest first |

If you want a LinkedIn company posts extractor that lists the newest posts of a company by name, use [LinkedIn Company Posts Scraper (No Cookies)](https://apify.com/insights_data/linkedin-company-posts-scraper-no-cookies). If you need emails found in post text, use [LinkedIn Posts Search Scraper](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies). For keyword research across many authors, with followers and comments in their own tables, use this Actor.

#### How does LinkedIn Post Search Scraper work?

It works like a logged-out visitor reading public posts, only automated. For each keyword or author it finds matching public post links, drops posts outside your date filter and posts it already has, then opens each public post and saves it with its author, date, engagement, comments, hashtags, mentions and media. Posts appear in the Output tab one by one. The Searches table and the run summary show what was found, saved, skipped and could not be read.

#### Can I see LinkedIn posts without login?

Yes, public posts. The Actor reads only posts that anyone can open without a LinkedIn account, and it does not ask for your login or cookies. Posts that are visible only to logged-in members are not returned.

#### Does LinkedIn post search without login show everything a member sees?

No. A LinkedIn post search without login returns public posts and the public part of each post: text, author, date, likes, comment count and the first set of comments. Reaction types and the list of people who reacted are hidden from logged-out visitors, and share counts often are too.

#### Can you filter LinkedIn posts by date?

Yes. **Posted within** keeps posts from the last hour, 24 hours, week, month, 3 months, 6 months or year. **Posted on or after** takes an exact date such as `2026-01-31` and wins over the time window. The filter works for keywords, authors and pasted post links.

#### How to check LinkedIn post date and time?

Paste the post link into the Actor. The `postedAt` field gives the exact publish time as `date` (ISO date and time in UTC), as `timestamp` in milliseconds and as a short age such as `3d`. It works for any public post, also old ones.

#### Is LinkedIn Post Search Scraper a LinkedIn post finder for a topic?

Yes. Type the topic as a keyword, add a date filter and pick Relevance or Date. You get the matching public posts with their authors, which you can then sort by likes or followers.

#### How is it different from the LinkedIn post search tool in the LinkedIn app?

The LinkedIn post search tool in the app shows posts on screen for you to read one by one. This Actor needs no LinkedIn account and saves every post as a row with the author's followers, the exact date, likes and comments, ready to export or to run on a schedule.

#### Can I use it as a LinkedIn post engagement scraper for my competitors?

Yes. Paste your competitors' company links, set a date window and export the Engagement view. You get likes, comments and (when shown) shares for each of their public posts, plus the post format in `mediaType`.

#### Why search LinkedIn posts?

- 🌟 **LinkedIn influencer marketing:** shortlist creators who post about your topic, using their follower count and the engagement of their posts.
- 🎯 **LinkedIn intent signals:** collect posts where people ask for recommendations or describe a need, and read them before you reach out.
- 🗣️ **LinkedIn audience research:** the Comments table shows who reacts to posts about a topic and what they say.
- 💭 **Voice of customer LinkedIn research:** read how buyers describe a problem in their own words, in posts and comments.
- 🧪 **LinkedIn content analysis:** compare topics, hashtags and formats (`mediaType`) by the likes and comments they earn.
- ✍️ **LinkedIn content ideas for B2B:** see which posts in your niche get discussed and plan your own posts from that.
- 🧲 **LinkedIn we are hiring posts:** search `we are hiring` plus a role to see which companies are hiring for it.

#### Is collecting public LinkedIn posts legal?

Collecting publicly visible data is generally allowed, but you are responsible for how you use it. Posts and comments contain personal data such as names and profile links, so you need a legitimate reason to store them under data protection rules such as the GDPR (the EU's data protection law). Posts are written by other people, so don't republish them without permission. Also take [LinkedIn's User Agreement](https://www.linkedin.com/legal/user-agreement) into account. This is not legal advice; ask a lawyer for your specific case.

#### Why am I getting fewer results than expected?

1. Check the Searches table: `candidates` shows how many possible posts were found, `skipped` how many were deleted, private, already saved or older than your date filter once read, and `failed` how many could not be read.
2. Use shorter keywords. Keyword search mainly matches the opening words of a post, so long phrases find fewer posts.
3. Widen the date filter. The newest few weeks can be missing from keyword results; for the newest posts, paste the post links.
4. Check **Max posts per search**. It limits each keyword or author.
5. The run may have stopped at your maximum charge limit. Its status then says "Maximum charge limit reached after N posts."

#### What should I do if the run fails or finds no posts?

Open the run in Apify Console and read the **Log** tab first; it says what happened in plain words. You are billed only for posts that were saved to the posts table, plus the start fee and platform usage, so a run that saved nothing costs only those two.

- **"Nothing to scrape - add at least one keyword, post link, profile link or company link."** The input list was empty or had no usable entry. Add a keyword or link and start again.
- **"No posts were collected. See the log for the reason."** The run can still end as **Succeeded** with an empty posts table. The log shows why, for example which input found no public posts.
- **"No public posts found"** for a keyword: try fewer or broader words, a wider date range, or paste post links directly.
- **"Stopped early after N posts because LinkedIn kept refusing requests or could not be reached."** Wait a while and run again; the posts saved so far stay in the dataset.
- **Still stuck?** Create an issue on the [Issues tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/issues/open) and include the link to your run, so we can look at the log.

***

### 📧 Support and feedback

Found a bug or have an idea for a feature? Please create an issue on the [Issues tab](https://apify.com/insights_data/linkedin-post-search-scraper-no-cookies/issues/open).

Need a **custom solution**, more fields or posts from another site? Write to us at hello.insights.data@gmail.com.

Built and maintained by [Insights Data](https://apify.com/insights_data).

# Actor input Schema

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

One per line. A keyword or phrase (b2b sales, hiring software engineer) finds public posts that match it. A profile or company link (linkedin.com/in/williamhgates, linkedin.com/company/google) returns that author's posts. A post link (linkedin.com/posts/... or linkedin.com/feed/update/urn:li:activity:...) or a post ID returns that single post. You can mix all three.

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

Stop after this many posts for each keyword or author. Use 0 for every post that can be found. Does not apply to post links you paste yourself.

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

Relevance shows the most popular matching posts first. Date shows the newest posts first.

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

Only keep posts published within this time window. Ignored when an exact date is set below.

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

Only keep posts published on or after this date (YYYY-MM-DD). Takes priority over the time window above.

## `scrapeComments` (type: `boolean`):

Save the public comments shown under each post: text, commenter, likes and time. Included at no extra charge.

## `maxComments` (type: `integer`):

Cap on saved comments for each post. Use 0 to save every comment that is shown. Only used when comments are switched on.

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

By default no proxy is used. If LinkedIn refuses the request, the Actor switches to a stronger proxy automatically and keeps using it.

## Actor input object example

```json
{
  "urls": [
    "b2b sales"
  ],
  "maxPosts": 10,
  "sortBy": "relevance",
  "postedLimit": "any",
  "scrapeComments": true,
  "maxComments": 5,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

One row per post with author, date, engagement, media, hashtags, mentions and comments.

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

One row per post with the person or company that published it, including followers.

## `comments` (type: `string`):

One row per public comment.

## `mentions` (type: `string`):

One row per tagged person or company and per hashtag.

## `media` (type: `string`):

One row per image or video.

## `searches` (type: `string`):

One row per keyword, author or post-link group with how many posts were found and saved.

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

Counts and timing of the run.

# 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": [
        "b2b sales"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("insights_data/linkedin-post-search-scraper-no-cookies").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": ["b2b sales"],
    "proxyConfiguration": { "useApifyProxy": False },
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insights_data/linkedin-post-search-scraper-no-cookies"
        }
    }
}
```

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/RFGgip1Uo0TKWBUIv/builds/8QwHrKzuL5N9s188g/openapi.json
