# LinkedIn Company Posts Scraper (`khadinakbar/linkedin-company-posts-scraper`) Actor

Scrape public LinkedIn company posts without user cookies. Uses ScrapeCreators as the primary provider and SociaVault as fallback/enrichment for company profile and post details. MCP/API-ready.

- **URL**: https://apify.com/khadinakbar/linkedin-company-posts-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 13 total users, 1 monthly users, 100.0% runs succeeded, 6 bookmarks
- **User rating**: No ratings yet

## Pricing

from $5.00 / 1,000 post scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#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

Scrape public posts from LinkedIn company pages without asking users for LinkedIn cookies.

This actor uses managed social-data APIs:

- Primary: ScrapeCreators `/v1/linkedin/company/posts`
- Secondary: SociaVault `/v1/scrape/linkedin/company` and `/v1/scrape/linkedin/post`

Both providers work with public data and provider API keys. The actor never accepts LinkedIn `li_at`, browser cookies, email/password login, or private member data.

### Input

```json
{
  "companyUrls": ["https://www.linkedin.com/company/shopify"],
  "maxPosts": 100,
  "maxPagesPerCompany": 1,
  "providerOrder": "scrapecreators-first",
  "includeCompanyProfile": true,
  "enrichPosts": false
}
```

### Output

Each dataset item is one company post:

```json
{
  "companyUrl": "https://www.linkedin.com/company/shopify",
  "companyName": "Shopify",
  "companyHandle": "shopify",
  "postId": "7429579034096726016",
  "postUrl": "https://www.linkedin.com/posts/shopify_example-activity-7429579034096726016-uX1e",
  "text": "Merchants can now use Sidekick voice mode.",
  "datePublished": "2026-02-17T17:34:36.617Z",
  "source": "scrapecreators",
  "scrapedAt": "2026-06-08T12:00:00.000Z"
}
```

If `enrichPosts` is enabled and SociaVault is configured, records can also include `reactionCount`, `likeCount`, `commentCount`, `engagementCount`, author fields, and a short comments preview when the provider returns those fields.

### Owner Setup

Add provider keys as Apify secrets:

```bash
apify secrets add SCRAPECREATORS_API_KEY "your-key"
apify secrets add SOCIAVAULT_API_KEY "your-key"
```

`SOCIALVAULT_API_KEY` is also read for compatibility with older local actors, but `SOCIAVAULT_API_KEY` is preferred.

### Provider Behavior

ScrapeCreators is the recommended primary source because it exposes a dedicated company posts endpoint with `url` and `page` parameters. The provider currently documents a maximum of 7 company-post pages because of LinkedIn public-page limitations.

SociaVault is used as a fallback via its company endpoint, which returns company metadata and recent posts when available. Its post endpoint can be used for optional per-post enrichment.

### Limits

- Public LinkedIn data only.
- No private profiles, logged-in-only posts, jobs, emails, connections, or employee graphs.
- No LinkedIn cookies accepted.
- `maxPagesPerCompany` is capped at 7.

### Run Summary

The actor writes `RUN_SUMMARY` and `OUTPUT` key-value records with:

- number of posts scraped and charged
- companies processed
- providers configured and used
- provider status-code telemetry
- duplicate count
- terminal `stopReason`

### Pricing

The included pay-per-event schema charges `post-scraped` at USD 0.005 per saved post. This keeps margin above the managed provider request costs even when occasional fallbacks or detail enrichments are needed.

# Actor input Schema

## `companyUrls` (type: `array`):

One or more public LinkedIn company page URLs, for example https://www.linkedin.com/company/shopify.

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

Maximum number of post records to save across all company URLs.

## `startPage` (type: `integer`):

ScrapeCreators company-post pages are numbered from 1.

## `maxPagesPerCompany` (type: `integer`):

ScrapeCreators currently exposes up to 7 company-post pages because of LinkedIn public-page limits.

## `providerOrder` (type: `string`):

Choose which managed API is tried first. ScrapeCreators is recommended for company posts.

## `includeCompanyProfile` (type: `boolean`):

When SociaVault is available, attach public company metadata such as name, handle, followers, industry, logo, and website.

## `enrichPosts` (type: `boolean`):

Fetch each post detail with SociaVault when available to add engagement counts and author/comment previews. This costs one provider request per post.

## `includeRawData` (type: `boolean`):

Include compact raw provider payloads for debugging and downstream custom parsing.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.linkedin.com/company/shopify"
  ],
  "maxPosts": 100,
  "startPage": 1,
  "maxPagesPerCompany": 1,
  "providerOrder": "scrapecreators-first",
  "includeCompanyProfile": true,
  "enrichPosts": false,
  "includeRawData": false
}
```

# Actor output Schema

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

Structured dataset records for scraped public LinkedIn company posts.

## `postsCsv` (type: `string`):

CSV export of the same LinkedIn company post records.

## `runSummary` (type: `string`):

Machine-readable telemetry with post counts, providers used, provider status codes, and stop reason.

## `outputSummary` (type: `string`):

Compact agent-friendly summary with posts scraped, companies processed, providers used, and stop reason.

# 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 = {
    "companyUrls": [
        "https://www.linkedin.com/company/shopify"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/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 = { "companyUrls": ["https://www.linkedin.com/company/shopify"] }

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/linkedin-company-posts-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyUrls": [
    "https://www.linkedin.com/company/shopify"
  ]
}' |
apify call khadinakbar/linkedin-company-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/linkedin-company-posts-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/pcdyX7pdaieYWnLm3/builds/9ZuGZURMwcvnD54cU/openapi.json
