# LinkedIn Company Posts Scraper & Content Monitor (No Login) (`generous_fog/linkedin-company-posts-scraper`) Actor

Scrape public LinkedIn company posts without login. Extract full text, verified dates, reactions, comments, media, links, author and company details, filters, identity evidence, and quality scores for brand monitoring, competitor research, lead signals, and content intelligence.

- **URL**: https://apify.com/generous\_fog/linkedin-company-posts-scraper.md
- **Developed by:** [Cracks API](https://apify.com/generous_fog) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$1.50 / 1,000 verified company posts

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

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 Company Posts Scraper & Content Monitor

Extract structured public LinkedIn company posts without a LinkedIn login or customer cookies. The Actor discovers publicly indexed company post URLs, verifies the company author, and enriches each result from its public LinkedIn post page.

### What you get

- Full visible post text and publication date
- LinkedIn post URL and stable activity/post ID when available
- Requested company name, URL, and slug
- Verified post author name and public author/company page URL
- Total reaction and comment counts exposed by public JSON-LD
- Media metadata, thumbnails, and visible external links
- Up to 10 directly visible comment previews with comment like counts
- Content type, quality score, identity evidence, and source evidence
- Structured JSON, CSV, Excel, XML, RSS, or API access through Apify datasets

### Quick start

```json
{
  "targetUrls": [
    "https://www.linkedin.com/company/netflix/"
  ],
  "maxPostsPerCompany": 5,
  "contentTypes": ["all"]
}
```

You may also provide a direct public LinkedIn post or feed/update URL. Direct URL mode verifies that the post author is a company page before emitting a paid result.

### Input

- `targetUrls` (required): LinkedIn company/showcase URLs or direct public post/feed URLs
- `maxCompanies`: maximum unique targets to process
- `maxPostsPerCompany`: maximum approved posts per company
- `dateFrom`, `dateTo`: optional ISO publication-date filters
- `keywords`: optional OR-style keyword filter over visible text, author, and links
- `contentTypes`: `all`, `post`, `article`, `video`, `image`, `document`, `poll`, `newsletter`, `repost`, or `unknown`
- `requestDelaySecs`, `maxRetries`: pacing and transient retry controls
- `maxTotalCharge`: optional local USD charge guard
- `dryRun`: validate inputs without network requests or paid events
- `proxyConfiguration`: optional Apify proxy configuration

### Quality and billing rules

Only identity-confirmed, rich company-authored posts emit the `company-post` paid event. The Actor requires a public post URL, confirmed company identity, author, valid publication date, and useful engagement, media, or external-link evidence.

Invalid URLs, no-result responses, identity mismatches, charge-limit rows, and insufficient-data diagnostics are stored without a paid result event.

### How it works

1. Normalizes and deduplicates company or post URLs.
2. Confirms a company page and canonical public name.
3. Discovers indexed LinkedIn post URLs using multiple public web indexes.
4. Opens each public LinkedIn post page and parses its JSON-LD and visible metadata.
5. Verifies the author against the requested company URL/name.
6. Applies date, keyword, content-type, deduplication, and quality filters.
7. Stores only approved records as paid `company-post` events.

### Output example

```json
{
  "companyName": "Netflix",
  "companyUrl": "https://www.linkedin.com/company/netflix/",
  "companySlug": "netflix",
  "postUrl": "https://www.linkedin.com/posts/netflix_example-activity-1234567890-abc/",
  "authorName": "Netflix",
  "text": "Public post text...",
  "publishedAt": "2026-09-01T12:00:00.000Z",
  "contentType": "image",
  "reactionsCount": 1250,
  "commentsCount": 84,
  "media": [],
  "externalLinks": [],
  "commentsPreview": [],
  "identityConfirmed": true,
  "identityEvidence": ["author text matches 1/1 company name token(s)"],
  "qualityScore": 90,
  "status": "success"
}
```

### Important limitations

This is a public-data Actor. LinkedIn does not expose a complete no-login company feed or unlimited history. Results depend on public index coverage and what LinkedIn exposes on each public post page. The Actor may therefore return fewer posts than authenticated or proprietary session-backed services. It does not claim to return every historical post, every reaction, or every comment.

For direct profile posts, use the separate **LinkedIn Profile Posts Scraper & Content Monitor** Actor.

### API use

```javascript
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('generous_fog/linkedin-company-posts-scraper').call({
  targetUrls: ['https://www.linkedin.com/company/netflix/'],
  maxPostsPerCompany: 5,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### Responsible use

Use the Actor only for lawful purposes and respect applicable privacy, data-protection, and platform rules. Do not use results for spam, harassment, or unauthorized profiling.

**Unofficial — not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn® is a registered trademark of LinkedIn Corporation.**

# Actor input Schema

## `targetUrls` (type: `array`):

Public LinkedIn company/showcase page URLs, or direct public post/feed URLs to verify a single post. Duplicate and invalid URLs are removed automatically.

## `maxCompanies` (type: `integer`):

Maximum unique valid company targets (and direct post seeds) to process in this run.

## `maxPostsPerCompany` (type: `integer`):

Maximum rich post records returned per company after public discovery, direct post-page enrichment, filters, sorting, and deduplication.

## `dateFrom` (type: `string`):

Optional ISO date or timestamp. Posts without a directly available publication date are excluded when a date filter is active.

## `dateTo` (type: `string`):

Optional ISO date or timestamp. Date-only values include the full UTC day.

## `keywords` (type: `array`):

Optional case-insensitive keywords. A post is returned when its visible text or links match at least one keyword.

## `contentTypes` (type: `array`):

Optional values: all, post, article, video, image, document, poll, newsletter, repost, or unknown.

## `requestDelaySecs` (type: `number`):

Base polite delay. Direct post-page enrichment, jitter, and retry backoff are handled automatically.

## `maxRetries` (type: `integer`):

Retries for transient network errors, rate limits, server errors, and LinkedIn 999 responses.

## `maxTotalCharge` (type: `number`):

Optional local USD cap. No paid post event is emitted after this cap would be exceeded. Apify run limits remain authoritative.

## `dryRun` (type: `boolean`):

Normalize and validate target URLs, then emit planned records with no network requests or paid events.

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

Optional Apify proxy. Residential proxy groups improve public search and post-page availability for larger or scheduled runs.

## Actor input object example

```json
{
  "targetUrls": [
    "https://www.linkedin.com/company/netflix/"
  ],
  "maxCompanies": 100,
  "maxPostsPerCompany": 10,
  "keywords": [],
  "contentTypes": [
    "all"
  ],
  "requestDelaySecs": 1,
  "maxRetries": 2,
  "dryRun": false,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

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

No description

## `successfulPosts` (type: `string`):

No description

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

No description

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

No description

## `errors` (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 = {
    "targetUrls": [
        "https://www.linkedin.com/company/netflix/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("generous_fog/linkedin-company-posts-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 = {
    "targetUrls": ["https://www.linkedin.com/company/netflix/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("generous_fog/linkedin-company-posts-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 '{
  "targetUrls": [
    "https://www.linkedin.com/company/netflix/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call generous_fog/linkedin-company-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,generous_fog/linkedin-company-posts-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/jUmgkN0go21rokpxF/builds/bFkL5u1htiXOrA9EN/openapi.json
