# LinkedIn Posts Search Scraper 🔍 — $2.50/1K 💰 (`viralanalyzer/linkedin-posts-search-pro`) Actor

Search and scrape LinkedIn posts by keyword, hashtag, or topic without login or cookies: text, author, engagement, and post URL. Only $2.50/1K posts.

- **URL**: https://apify.com/viralanalyzer/linkedin-posts-search-pro.md
- **Developed by:** [viralanalyzer](https://apify.com/viralanalyzer) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.25 / 1,000 post founds

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?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## LinkedIn Posts Search Scraper 🔍 \[No Cookies] — Only $2.5/1K 💰

You need to find public LinkedIn posts about your topic without a login, a cookie, or a session that expires by Friday.

> No login · no cookies · results in 3–5s · search by keyword, hashtag or topic

***

### 🔎 Where the data comes from — read this first

This actor **does not query LinkedIn search.** It runs a `site:linkedin.com/posts/` query against a
search engine (DuckDuckGo) and returns the indexed results. Consequences you should price in:

- `text` is the **search-result snippet**, not the body of the post. It is truncated by the search
  engine, not by this actor.
- `authorName` is derived from the **post URL slug** (`/posts/jane-doe_...` → `jane doe`). It is not
  a verified display name.
- Coverage is whatever the search engine has indexed. A post published minutes ago is usually not
  in it yet. "Real-time" is not what this actor does.

***

### ⚡ Highlights

- **100% No Cookies / No Login** — plain HTTP, nothing to expire, nothing to get banned.
- **Cheap discovery** — **$0.0025 per post found** ($2.50 per 1,000).
- **Nothing found, nothing charged** — a run with zero results returns a labeled diagnostic and
  charges no PPE event.

***

### 📥 Input

| Field | Type | Description |
|---|---|---|
| `searchQueries` | array | Keywords, hashtags or topics to search |
| `maxPosts` | integer | **Total** posts returned by the run, across all queries (default 20) |
| `proxyConfiguration` | object | Proxy settings (optional) |

> `maxPosts` is a whole-run budget, **not a per-query cap.** With two queries and `maxPosts: 20`, the
> first query can consume all 20 and the second returns nothing.

### 📤 Output

Every field the actor emits — there are six, plus `scrapedAt`:

```json
{
  "searchQuery": "Artificial Intelligence",
  "authorName": "jane doe",
  "headline": "Jane Doe on LinkedIn: In July's edition of The Monthly Tech-In...",
  "text": "In July's edition of The Monthly Tech-In, we explore how AI is helping clinicians...",
  "postUrl": "https://www.linkedin.com/posts/jane-doe_...",
  "scrapedAt": "2026-08-27T20:45:00.000Z"
}
```

### ✅ Capabilities & Limits

Stated up front, so you do not pay a run to find out.

**Built here:** `text` is a search-engine snippet. Two posts whose snippets are truncated at the same
sentence look identical in this dataset even when the posts differ — open `postUrl` before acting on
the content.

| Input / feature | Supported | Notes |
|---|---|---|
| Keyword / topic | ✅ | `searchQueries` accepts plain keywords and hashtags |
| Hashtag | ✅ | pass it inside `searchQueries` (e.g. `#AI`) |
| Post URL | ✅ | `postUrl` — the one field you can act on directly |
| Full post body | ❌ | snippet only, truncated by the search engine |
| Author profile URL | ❌ | not emitted; only the slug-derived `authorName` |
| Publication date | ❌ | not emitted — the search result does not carry it |
| Likes / comments / shares counts | ❌ | no engagement metric of any kind is emitted |
| Comment text | ❌ | not emitted |
| Author handle search | ❌ | this actor searches content, not profiles — use `linkedin-posts-scraper-pro` |
| Private / member-only posts | ❌ | public indexed results only |
| Real-time freshness | ❌ | limited by search-engine indexing lag, typically hours to days |
| Per-query result cap | ❌ | `maxPosts` is a global budget |

### 🎯 Use cases

1. Discovery — build a list of public post URLs on a topic, cheaply, then fetch what you need
2. Competitor listening — see whose posts on your category are indexed
3. Lead sourcing — surface authors already publishing about your problem space

### ❓ FAQ

**Do I need a LinkedIn account or cookie?**
No. The actor reads public search results over plain HTTP.

**Is this LinkedIn's own search?**
No. It is a `site:linkedin.com/posts/` search-engine query. See the note at the top.

**Can I get comments, likes or the publication date?**
No. This actor emits six fields and none of them is an engagement metric or a date. If you need
those, take `postUrl` into an actor that fetches the post itself.

**Why is `authorName` lowercase and odd-looking?**
It is the URL slug with hyphens replaced by spaces. It is an identifier, not a display name.

### 💰 Pricing

Pay Per Event — event `post-found`.

| Metric | Cost |
|---|---|
| Per post found | $0.0025 |
| Per 1,000 posts | $2.50 |

**You are never charged for a run that returned nothing.** When the search is blocked or matches
nothing, the actor returns a labeled diagnostic row and charges no PPE event.

***

### 🇧🇷 Português

Este actor **não consulta a busca do LinkedIn.** Ele executa uma consulta `site:linkedin.com/posts/`
em um buscador (DuckDuckGo) e devolve os resultados indexados. Consequências:

- `text` é o **snippet do resultado de busca**, não o corpo do post — truncado pelo buscador.
- `authorName` vem do **slug da URL** (`/posts/jane-doe_...` → `jane doe`), não é nome verificado.
- A cobertura é a do índice do buscador. Post publicado há minutos normalmente ainda não está lá:
  isto **não** é monitoramento em tempo real.

Não são emitidos: corpo completo do post, URL do perfil do autor, data de publicação, curtidas,
comentários ou qualquer métrica de engajamento. São seis campos, listados na seção em inglês.

`maxPosts` é orçamento **global da execução**, não limite por consulta.

Execução que não retorna nada não é cobrada: o actor devolve um diagnóstico rotulado, sem cobrar evento.

Campos de entrada, saída, limites e FAQ estão nas seções em inglês acima.

# Actor input Schema

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

List of keywords, topics, or hashtags to search on LinkedIn (e.g. \['Artificial Intelligence', 'B2B SaaS', 'remote hiring']).

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

Maximum number of posts to collect across all search queries.

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

Select Apify Proxy groups (Residential recommended for high volume search).

## Actor input object example

```json
{
  "searchQueries": [
    "Artificial Intelligence"
  ],
  "maxPosts": 20,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

Dataset containing scraped LinkedIn posts from search queries.

# 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": [
        "Artificial Intelligence"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("viralanalyzer/linkedin-posts-search-pro").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": ["Artificial Intelligence"] }

# Run the Actor and wait for it to finish
run = client.actor("viralanalyzer/linkedin-posts-search-pro").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": [
    "Artificial Intelligence"
  ]
}' |
apify call viralanalyzer/linkedin-posts-search-pro --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,viralanalyzer/linkedin-posts-search-pro"
        }
    }
}

```

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/dcmA1CEfPQwVhjMsv/builds/VdP7qu66R1BhnbZI6/openapi.json
