# LinkedIn Posts Search Scraper (`insights_data/posts-search-scraper-for-linkedin-no-cookies`) Actor

Search public LinkedIn posts by keyword, phrase or hashtag, or paste post, profile and company links. Get full text, author, reactions, comments, date, hashtags, media and emails in the text as clean JSON. Bulk input, no account or cookies needed.

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

## Pricing

from $2.80 / 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 Posts Search Scraper?

**LinkedIn Posts Search Scraper** helps sales teams, recruiters and marketers with LinkedIn lead generation, hiring signals and brand mentions: you enter keywords, phrases or hashtags (or post, profile and company links) and get the matching public posts with author, company details, reactions, comments, date and media. This LinkedIn posts scraper needs no LinkedIn account and no cookies. You can try it on the Apify Free plan with the $5 monthly credit, and Free-plan runs work the same as paid runs.

Use it to collect LinkedIn hiring posts, to find people who ask for a product like yours, or for social listening around your brand.

- 🎯 **Find leads in conversations:** collect posts where people ask for a tool, an agency or a freelancer. You get the author's company, industry, size and website when LinkedIn shows them publicly, plus any email or phone number the author wrote in the post.
- 📣 **Spot companies that are hiring:** search `hiring` with a role and see who is posting openings in your market.
- 👂 **Track your brand:** a daily search for your brand or product name gives you simple LinkedIn brand monitoring and LinkedIn social listening, with reactions and comments.
- 🥊 **Watch competitors:** paste competitor company pages for LinkedIn competitor analysis: what they post, which formats they use, and how much engagement each post gets.
- 📈 **Learn from top creators:** collect LinkedIn thought leadership posts in your niche and see which hooks and formats get reactions.
- 🤖 **Build a LinkedIn posts dataset:** get clean, structured JSON for analysis, dashboards or AI pipelines.

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

- 🔍 **Search public posts** by keyword, exact phrase, alternatives with `OR`, excluded words with `-word`, or hashtag.
- 🔗 **Read pasted links:** post links, bare post IDs, profile links (`/in/…`) and company links (`/company/…`).
- 🗓️ **Filter by date** (past hour, 24 hours, week or month) and sort by relevance or newest first.
- 🔥 **Keep only popular posts** with a minimum number of reactions.
- 👤 **Add author details** such as company, location, industry, company size, website and followers, when LinkedIn shows them publicly.
- 📇 **Pull contacts out of the text:** emails, phone numbers and web links, when the author wrote them in the post.
- 🗂️ **Get separate tables** for authors, comments, mentions and contacts, filled while the run is going, plus an Inputs table with one status row per keyword or link, written when all inputs are done.
- 🔌 **Use the Apify platform:** run it via API, schedule runs, and connect Slack, Make, Zapier or n8n.

***

### 📊 What LinkedIn posts data can LinkedIn Posts Search Scraper extract?

You get one row per post with these fields (names as in the dataset):

| Field | What you get |
|---|---|
| 🔗 `post_url` | Link to the post |
| 📝 `text` | Full post text, plus `word_count` |
| 🆔 `activity_id`, `full_urn` | LinkedIn post ID and URN |
| 👤 `author` | `name`, `type` (person, company or school), `public_id`, `profile_url`, `image_url`, `followers` |
| 🏢 `author` details | `company`, `location`, `country_code`, `connections`, `industry`, `company_size`, `headquarters`, `company_type`, `website`, `specialties`, `tagline`, `about` (with **Add author details** on) |
| ❤️ `stats` | `total_reactions` and `comments` |
| 🗓️ `posted_at` | `display_text` (age such as 5h or 2d), `date` (UTC) and `timestamp` |
| 🏷️ `hashtags` | Hashtags in the post text |
| 🖼️ `content` | Attachment `type` (text, image, images, video, article, document or job) with title, link, images, video thumbnail and duration, article source, or job company and location |
| 🔁 `is_reshare`, `reshared_post` | Whether the post reshares another one, with the original author, text and link |
| 📌 `mentions` | People and companies tagged in the post |
| 📧 `emails` | Email addresses written in the post text |
| ☎️ `phones` | Phone numbers written in the post text |
| 🌐 `links` | Web links in the post text |
| 💬 `top_comments` | Comments shown publicly under the post (author, text, date, likes) |
| ℹ️ `metadata`, `search_input` | Rank in the list of posts found, the time the run started (`scraped_at`, the same for every post in a run), and the keyword or link that found the post |

> **Note:** author details come from public profile and company pages, and LinkedIn does not show every detail to visitors, so some author fields can be empty. `emails`, `phones` and `links` are filled only when the author typed them into the post. Most posts contain none, so expect empty lists for many rows. The Contacts table collects LinkedIn emails from posts only where an address was typed.

> **About `0` counters:** a public post page leaves out the reaction or comment counter when it is zero, and the Actor saves a missing counter as `0`. If you set **Minimum reactions** above 0, posts saved with `0` are skipped.

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

- The author's headline, the reaction breakdown by type, share counts and numeric member IDs.
- The full comment list: only comments that LinkedIn shows publicly under the post.
- Private posts or posts that only logged-in members can see.
- Media files: you get image and video links, not downloads.

For full profile data such as headline, experience, education and skills, run the author links through [LinkedIn Profile Extractor & Enricher (No Login Required)](https://apify.com/insights_data/linkedin-profile-extractor-enricher).

***

### 🔍 How to scrape LinkedIn posts

You don't need any coding or scraping experience.

1. [Create a free Apify account](https://console.apify.com/sign-up) with your email.
2. Open [LinkedIn Posts Search Scraper](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies) and click **Try for free**.
3. In **Keywords or LinkedIn links**, add one keyword or link per line, for example `hiring "marketing manager"`.
4. Pick **Posted within** and **Posts per keyword or link**, then click **Start**.
5. Watch posts appear in the run's **Output** tab. When the run ends, export LinkedIn posts from the run's **Storage** tab: pick the table, then **Export** (CSV, Excel, JSON, XML or HTML).

You can start with the default input (`hiring`, 10 posts) to see the output before you add your own keywords.

#### What to type for hiring and lead searches

All words on one line must appear in the post (as whole words, upper or lower case). Quotes keep a phrase together. Copy one of these lines and change the words:

| You want | Type this line |
|---|---|
| 📣 Marketing manager openings | `hiring "marketing manager"` |
| 📣 Openings that mention a city | `hiring developer London` |
| 📣 "We are hiring" posts for a role | `"we are hiring" designer` |
| 🎯 People asking for a tool, without job posts | `"looking for" CRM -job` |
| 🎯 People asking for an agency | `"recommend an agency"` |

> ⚠️ The words are matched against the post text, the author name, the hashtags, the reshared text and the attachment title. A city such as `London` must be written in the post. It is not matched against the author's location. There is no job-title or location filter, so put these words into the keyword line.

***

### 💲 LinkedIn posts scraper pricing: how much does it cost?

LinkedIn Posts Search Scraper uses **pay-per-event** pricing. Your bill has three parts:

1. **Saved posts:** one charge for each post saved to the main **Posts** table. Keywords or links that save nothing cost nothing here. The Authors, Comments, Mentions, Contacts and Inputs tables are free.
2. **Start fee:** a tiny fee each time a run starts, $0.00005 at the default memory.
3. **Platform usage:** the compute your run uses, billed at your Apify plan's rates.

| Apify plan | Price per post | Price per 1,000 posts |
|---|---|---|
| 🆓 Free | $0.004 | $4.00 |
| ⭐ Starter | $0.0036 | $3.60 |
| 🚀 Scale | $0.0032 | $3.20 |
| 🏛️ Business and higher | $0.0028 | $2.80 |

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.

For example, 1,000 saved posts cost $3.60 in result fees on the Starter plan, plus the start fee and platform usage. Platform usage depends on your keywords and settings, so check your real total with a small test run: after the run, open it in Apify Console, and the run page shows what it cost. See the [pricing tab](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies/pricing) for the event list.

#### Overlapping keywords are charged once per keyword

Each keyword or link gets its own list of posts. If two of your lines find the same post, it is saved and charged once for each line (check `search_input`). For example, `hiring` and `#hiring` find largely the same posts, because the `#` sign is ignored when matching. With both lines and 10 posts each, you can pay for the same post twice. Pick keywords that don't overlap.

#### Is the LinkedIn posts scraper free?

You can try it on the [Apify Free plan](https://apify.com/pricing):

- Your $5 monthly credit pays for the post charges ($0.004 per post on Free) and the platform usage of your runs.
- Free-plan runs work the same as paid runs: **Posts per keyword or link** decides how many posts you get.
- Start with a small test run and set a maximum charge limit so you know what a run costs.

#### How do I control my spend?

Set a **maximum charge limit** in the run options before you click **Start**. When the limit is reached, the run stops, keeps every post saved so far, and its status says "Maximum charge limit reached."

***

### ⬇️ LinkedIn posts scraper input

The only required field is **Keywords or LinkedIn links**. Every other field has a default. Fill in the Console form, or send JSON via the API (the value names are shown in brackets).

#### Settings most people change

| Setting | What it does | Default |
|---|---|---|
| 🔍 **Keywords or LinkedIn links** (`urls`) | Keywords, phrases, hashtags, or LinkedIn post, profile and company links, one per line | `hiring` (prefill) |
| 🗓️ **Posted within** (`date_filter`) | Any time (`any`), Past hour (`past-1h`), Past 24 hours (`past-24h`), Past week (`past-week`), Past month (`past-month`) | Any time |
| 🧭 **Sort posts by** (`sort_type`) | Relevance (`relevance`) or Newest first (`date_posted`) | Relevance |
| 🔢 **Posts per keyword or link** (`total_posts`) | Posts to save for **each** line. `0` = everything that can be found | `10` |
| 🔥 **Minimum reactions** (`min_reactions`) | Keep only posts with at least this many reactions. `0` = no filter | `0` |
| 👤 **Add author details** (`enrich_authors`) | Adds company, location, industry, size and website for each author when public. Turn it off for a faster run | On |
| 🛡️ **Proxy** (`proxyConfiguration`) | Optional. Leave as is unless you want to use your own proxy | Off |

Here's an example that finds this week's newest hiring posts:

```json
{
  "urls": ["hiring"],
  "date_filter": "past-week",
  "sort_type": "date_posted",
  "total_posts": 10,
  "min_reactions": 0,
  "enrich_authors": true
}
```

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

#### LinkedIn posts search syntax

Each keyword line is a LinkedIn posts search with a few simple rules:

- ✅ `"product launch"`: the exact phrase.
- ✅ `"hiring" OR "growth"`: either one. Write `OR` in capital letters.
- ✅ `marketing -crypto`: posts with marketing but without crypto.
- ✅ `#ai`: posts that use the tag #ai or the word ai. The `#` sign is ignored when matching, so a hashtag line works like the same word typed without it.
- ❌ `https://www.linkedin.com/search/results/content/?keywords=hiring`: a LinkedIn search page is not a post, profile or company link, so it is treated as a plain keyword. Type the keyword instead.

Posts that don't match the line are skipped and not charged.

#### Company and profile links

Paste a company link (`https://www.linkedin.com/company/microsoft`) or a profile link (`https://www.linkedin.com/in/…`) to get that author's recent public posts that can be found. That makes the Actor a LinkedIn company posts scraper for competitor pages and a LinkedIn profile posts scraper for people you follow. Post links (`/posts/…` or `/feed/update/…`) and bare post IDs return exactly that post. Links are not checked against keywords, but the date filter and minimum reactions still apply.

#### Choose a date range

**Posted within** gives you a LinkedIn post search by date. It keeps only posts published inside the range, for keywords **and** pasted links. A pasted post that is older than the range is skipped, so choose **Any time** when you paste specific posts.

***

### ⬆️ LinkedIn posts scraper output

Posts are saved the moment they are read, so you can watch them in the run's **Output** tab. The extra tables are in the same run, under its **Output** and **Storage** tabs. To download, use one path: open the run's **Storage** tab, pick the table, then **Export**.

**Tables** are separate lists. Only the first one is billed:

| Table | One row per |
|---|---|
| 📰 Posts | Saved post (the only billed table) |
| 👤 Authors table | Author seen in the run, with all public author details |
| 💬 Comments table | Public comment under a saved post |
| 📌 Mentions table | Person or company tagged in a post |
| 📇 Contacts table | Email, phone number or web link found in post text |
| 🧾 Inputs table | Keyword or link you entered: type, status, posts found, posts saved |

The run also saves a **Run summary** record (shown in the Output tab) with totals: posts saved and charged, inputs with problems, posts checked, skipped posts by reason, and whether your maximum charge limit was reached.

**Views** are column sets of the Posts table, not extra data: Posts, Author columns, Engagement (reactions, comments, age, word count and rank, useful for LinkedIn engagement analysis), Media & links, Contact columns and Reshares.

The `status` in the Inputs table means:

- `ok`: posts were saved, but fewer than **Posts per keyword or link**, usually because no more matching posts were found.
- `limit`: the number you asked for was reached, or the run stopped at your maximum charge limit.
- `empty`: no matching posts were found. Try a broader keyword or a wider date range.
- `error`: the link is not a valid post link, or the profile or company page could not be read. Check the link.
- `unreachable`: LinkedIn could not be reached and nothing was saved for this input, so it has no post charges. Wait a while and run again. If it keeps happening, open an issue.

#### JSON example

One post from the input example above (shortened):

```json
{
  "activity_id": "7519060723906301953",
  "post_url": "https://www.linkedin.com/posts/beach-commute_57-hidden-remote-jobs-hiring-october-activity-7519060723906301953-UEuo",
  "text": "Apply quickly!! Your odds of applying early increase your odds of getting an interview up to 8x!",
  "full_urn": "urn:li:activity:7519060723906301953",
  "author": {
    "name": "Beach Commute",
    "type": "company",
    "public_id": "beach-commute",
    "profile_url": "https://www.linkedin.com/company/beach-commute",
    "followers": 4232,
    "industry": "Professional Training and Coaching",
    "company_size": "11-50 employees",
    "website": "https://beachcommute.com"
  },
  "stats": { "total_reactions": 0, "comments": 0 },
  "posted_at": { "display_text": "5h", "date": "2026-10-22 15:42:53", "timestamp": 1792683773972 },
  "hashtags": [],
  "content": { "type": "article", "title": "57 Hidden remote jobs hiring October 22nd, 2026", "source": "Jeff Baker on LinkedIn" },
  "is_reshare": true,
  "reshared_post": { "author_name": "Jeff Baker", "author_url": "https://www.linkedin.com/in/find-remote-job" },
  "mentions": [],
  "emails": [],
  "phones": [],
  "links": [],
  "top_comments": [],
  "word_count": 17,
  "metadata": { "rank": 34, "scraped_at": "2026-10-22 21:07:24" },
  "search_input": "hiring"
}
```

How to read this example:

- It matched `hiring` through the attached article title. The post text itself does not contain the word.
- It is a reshare, so `reshared_post` names the original author.
- `rank: 34` is its position in the list of posts found for the keyword. Several posts are read at a time, and some found posts don't pass the filters, so a saved post can have a rank above your **Posts per keyword or link** number. That is normal.
- `0` reactions and comments mean LinkedIn showed no counter on the public page.
- The contact lists are empty because the post contains no email, phone or link.

***

### 💡 Tips and advanced usage

#### How many posts can you get?

You get up to **Posts per keyword or link** posts for each line, so 3 keywords with `50` give up to 150 posts. The real number depends on how many public posts match, the date range and **Minimum reactions**. `0` does not mean unlimited: each run checks only a limited number of posts for each keyword or link. With a very strict filter, the run can stop before it reaches your number and says so in the log. You only pay for saved posts. To cap the cost, set a maximum charge limit.

#### Find LinkedIn viral posts with Minimum reactions

Set **Minimum reactions** to, for example, `100` and **Sort posts by** to Relevance. You keep only posts with real traction on your topic and can see which hooks, formats and hashtags work.

#### Get faster or cheaper runs

- Turn off **Add author details** when you only need the posts.
- Use a narrower date range and a lower **Posts per keyword or link** for a test run.
- Avoid overlapping keywords (see pricing).

#### Run it on a schedule for LinkedIn keyword monitoring

1. Enter your brand, product or competitor names, or `hiring` plus a role, in **Keywords or LinkedIn links**. Set **Posted within** to Past 24 hours and **Sort posts by** to Newest first.
2. Save the input as a task: on the Actor's input page in Apify Console, save it as a new task (or create one under **Saved tasks**).
3. In Apify Console, open **Schedules**, create a schedule, add your task and run it daily (see [Apify schedules](https://docs.apify.com/platform/schedules)).
4. The Actor does not remember earlier runs. A post can show up in two daily runs, so expect some repeats and remove them in your sheet or database by `post_url` (see the Google Sheets tip below).

***

### 🔌 Integrations and API

#### Get a Slack message after each run

Open your task in Apify Console, go to the **Integrations** tab, choose **Slack**, connect your workspace and pick a channel. You get a message with a link to the run each time it finishes, so your team can check new brand or hiring posts every morning. This is the simplest way to set up LinkedIn post monitoring.

#### Send posts to a Google Sheet with Make or Zapier

Build a LinkedIn posts Google Sheets tracker with [Make or Zapier](https://apify.com/integrations): use the Apify "run finished" trigger, get the dataset items, and add each post as a row. Because daily runs can repeat posts, clean the sheet from time to time: select the sheet, open **Data → Data cleanup → Remove duplicates** and tick only the `post_url` column.

#### Use n8n

The Apify node is a simple way to scrape LinkedIn posts n8n workflows can reuse: add the node, choose this Actor, pass your keywords as input, and send the posts to your CRM, a database or an AI step that sorts leads from non-leads.

#### Can I use the LinkedIn posts scraper API from my own code?

Yes. With the [Apify API](https://docs.apify.com/api/v2) you can use the Actor as a LinkedIn posts API: start runs, schedule them and fetch the results as JSON. Use `apify-client` for [Node.js](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies/api/javascript) or [Python](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies/api/python), or copy ready-made code from the [API tab](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies/api). The snippet below is a short way to scrape LinkedIn posts Python scripts can run on a schedule:

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("insights_data/posts-search-scraper-for-linkedin-no-cookies").call(run_input={
    "urls": ["hiring"],
    "date_filter": "past-week",
    "sort_type": "date_posted",
    "total_posts": 10,
})

for post in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(post["post_url"], post["stats"]["total_reactions"])
```

In API input, other key names such as `keyword`, `query`, `maxItems`, `datePosted` and `sortBy` are also accepted. Filters by company, industry, job title or member (for example `author_company_urns` or `author_job_title`) need a LinkedIn login, so they are ignored with a warning in the log.

#### Can I use it with AI agents (MCP)?

Yes. Through the Apify MCP server you can add it as a LinkedIn scraper MCP tool in Claude and other AI assistants. Open the [MCP tab](https://apify.com/insights_data/posts-search-scraper-for-linkedin-no-cookies/api/mcp) for setup steps.

***

### 🔗 Other LinkedIn scrapers and social listening tools

If you need a LinkedIn data scraper for jobs or profiles rather than posts, or the same kind of search on other networks, these Actors from the same developer can help:

- 💼 [Advanced LinkedIn Job Search API](https://apify.com/insights_data/advanced-linkedin-job-search-api): public LinkedIn jobs by search URL, job URL or title and location, with salary, seniority, applicants and full description.
- 👤 [LinkedIn Profile Extractor & Enricher (No Login Required)](https://apify.com/insights_data/linkedin-profile-extractor-enricher): public profiles with headline, current role, experience, education and skills.
- 🧵 [Search Threads By Keywords](https://apify.com/insights_data/search-threads-by-keywords): Threads posts by keyword, #hashtag, phrase or @username.
- 📘 [Facebook Post Scraper](https://apify.com/insights_data/facebook-post-scraper): public Facebook posts from pages, profiles, groups and post links.
- 🗞️ [Google News Scraper](https://apify.com/insights_data/google-news-scraper): news by search term, topic or link, with date, country and language filters.

***

### ❓ FAQ

#### Is it legal to scrape LinkedIn?

Collecting publicly available data is generally legal, but you are responsible for how you use it. Posts and author details can contain personal data, so you need a legitimate reason under laws such as the GDPR, and you should take [LinkedIn's User Agreement](https://www.linkedin.com/legal/user-agreement) into account. This is not legal advice; ask a lawyer for your use case.

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

This LinkedIn posts search scraper works like a visitor reading public LinkedIn posts, only faster. For each keyword it finds public posts, opens each one, checks your keyword, date range and minimum reactions, adds public author details, and saves the post. It never uses your LinkedIn account. Each keyword or link runs side by side with its own number of posts.

#### Can I run a LinkedIn scraper without login or cookies?

Yes. This is a LinkedIn post scraper no cookies are needed for: you don't paste a session cookie or log in anywhere. Like any LinkedIn post scraper that reads only public pages, it can't see posts that are visible only to logged-in members. Unlike a browser-extension LinkedIn post extractor, it runs in the cloud, so you can schedule it.

#### How is this different from LinkedIn post search?

LinkedIn post search on linkedin.com runs inside your own account and is made for reading, one screen at a time. This Actor gives you the posts as structured data in bulk, with author details and contacts pulled out, ready to filter, export or schedule.

#### Can I use it as a LinkedIn hashtag scraper?

Yes. Type the tag, for example `#remotework`. You get posts that use the tag or the same word, because the `#` sign is ignored when matching. For a stricter LinkedIn hashtag search, combine the tag with another word that must also appear, such as `#remotework jobs`.

#### Why scrape LinkedIn posts?

- **Sales:** find buying signals and companies to contact.
- **Recruiting:** follow hiring posts by role and city.
- **Marketing:** track brand mentions, campaign hashtags and competitors, and do LinkedIn content research on which posts get traction.
- **Research:** use the posts for LinkedIn market research and LinkedIn trend analysis.

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

- Only public posts that match your keyword and filters are returned. A narrow keyword, a short date range or a high minimum reactions gives fewer posts.
- The date filter also removes pasted post links that are older than the range.
- With very strict filters, the run can stop after checking its limit of posts (see Tips).
- Open the **Inputs** table: the `status` shows what happened for each keyword or link.

#### Why are some author fields empty?

LinkedIn shows only some details publicly, and it sometimes refuses author pages. The post is still saved with the details found on the post itself. For full profiles, use [LinkedIn Profile Extractor & Enricher (No Login Required)](https://apify.com/insights_data/linkedin-profile-extractor-enricher).

#### Can I filter by company, industry or job title?

Not directly, because those filters need a LinkedIn login. Put the words into the keyword line, such as `hiring "software engineer"`, or paste company links. For job listings rather than posts, use [Advanced LinkedIn Job Search API](https://apify.com/insights_data/advanced-linkedin-job-search-api).

***

### 📧 Support and feedback

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

Need a **custom solution** or more data? Contact us at hello.insights.data@gmail.com.

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

# Actor input Schema

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

Keywords or phrases (use "double quotes" for an exact phrase, OR between alternatives, -word to exclude, #hashtag), or LinkedIn post, profile and company links. One per line. Add as many as you like.

## `date_filter` (type: `string`):

Only keep posts published inside this time range.

## `sort_type` (type: `string`):

Relevance keeps the order of the best matches. Newest first puts the latest posts on top.

## `total_posts` (type: `integer`):

Number of posts to save for EACH keyword or link (3 keywords with 50 give up to 150 posts). 0 = everything that can be found.

## `min_reactions` (type: `integer`):

Keep only posts with at least this many reactions. 0 = no filter.

## `enrich_authors` (type: `boolean`):

Adds company, location, industry, size and website for each author when LinkedIn shows them publicly. Turn off for a faster run.

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

Optional. Runs without a proxy first and switches to a stronger proxy automatically if LinkedIn rejects requests.

## Actor input object example

```json
{
  "urls": [
    "hiring"
  ],
  "date_filter": "any",
  "sort_type": "relevance",
  "total_posts": 10,
  "min_reactions": 0,
  "enrich_authors": true,
  "proxyConfiguration": {
    "useApifyProxy": false
  }
}
```

# Actor output Schema

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

All saved posts with the most useful columns.

## `authorsView` (type: `string`):

Author details next to each post.

## `engagement` (type: `string`):

Reactions, comments, age and rank.

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

Attachments of each post.

## `contactsView` (type: `string`):

Emails, phones, links and hashtags per post.

## `reshares` (type: `string`):

Reshared posts with the original.

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

One row per author seen.

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

One row per public comment.

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

One row per tagged profile.

## `contacts` (type: `string`):

One row per email, phone or link.

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

One row per keyword or link.

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

Counts for this 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": [
        "hiring"
    ],
    "proxyConfiguration": {
        "useApifyProxy": false
    }
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,insights_data/posts-search-scraper-for-linkedin-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/DXigQCEUeTUm4rY4R/builds/a9oeAnJEzzBhI4qld/openapi.json
