# Linkedin Company Posts Scraper (`api-ninja/linkedin-company-posts-scraper`) Actor

Collect recent LinkedIn posts from one or more company pages. Enter company names choose the content type, and set how many posts to retrieve per company.

- **URL**: https://apify.com/api-ninja/linkedin-company-posts-scraper.md
- **Developed by:** [API ninja](https://apify.com/api-ninja) (community)
- **Categories:**
- **Stats:** 7 total users, 7 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 1,000 results

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
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

### What does LinkedIn Company Posts Scraper do?

**LinkedIn Company Posts Scraper collects recent posts, engagement metrics, author details, and media from LinkedIn company pages.** Enter one or more company names, choose the type of content you need, and receive a clean dataset ready for research, reporting, or analysis.

The Actor turns complex [LinkedIn](https://www.linkedin.com/) post data into practical fields such as post text, publication time, reactions, comments, shares, company logos, author profiles, images, videos, and documents. Every result also includes the complete source response for advanced workflows.

Running on the Apify platform gives you:

- 🔌 API access for automated data collection
- 🗓️ Scheduling for recurring company monitoring
- 🔗 Integrations with tools such as Make, Zapier, Google Drive, and webhooks
- 📊 Structured datasets downloadable in multiple formats
- 📈 Run monitoring, logs, and reusable task configurations

### Why use LinkedIn Company Posts Scraper?

Use this LinkedIn company posts scraper to follow brand activity without manually checking company feeds.

- **Competitive intelligence:** monitor announcements, campaigns, launches, and partnerships.
- **Content research:** discover topics, formats, and posts generating strong engagement.
- **Brand monitoring:** track what companies and their collaborators publish or repost.
- **Market research:** compare messaging and activity across several organizations.
- **Lead research:** understand company priorities before outreach or sales conversations.
- **Reporting:** export publication and engagement data into spreadsheets or dashboards.

The Actor supports regular posts as well as image, video, article, and document content. It also recognizes reposts and retains information about the original author and post when available.

### How to scrape LinkedIn company posts

1. Open the Actor in Apify Console.
2. In **Company names**, enter one company name per row. Use the full, exact company name for the best match.
3. Select the post type you want: all posts, images, videos, articles, or documents.
4. Set the maximum number of posts to collect for each company.
5. Enable **Parse all posts** only when you want the Actor to continue until no more results are available.
6. Click **Start** and wait for the run to finish.
7. Open the **Output** tab to browse the visual LinkedIn posts table or download the complete dataset.

For your first run, try one well-known company with a limit of 10 posts. This makes it easy to review the output before starting a larger collection.

### Input

The Input tab contains four simple settings:

| Field       | Type             | Description                                                                 |
| ----------- | ---------------- | --------------------------------------------------------------------------- |
| `companies` | Array of strings | Company names to search. Add one exact company name per row.                |
| `filter`    | Select           | Return `ALL`, `IMAGES`, `VIDEOS`, `ARTICLES`, or `DOCUMENTS`.               |
| `maxPosts`  | Integer          | Maximum number of posts saved for each company.                             |
| `parseAll`  | Boolean          | Continue through every available page. When enabled, `maxPosts` is ignored. |

Example input:

```json
{
    "companies": ["Microsoft", "Google", "GitHub"],
    "filter": "ALL",
    "maxPosts": 50,
    "parseAll": false
}
```

### Output

Each dataset item contains normalized fields for convenient use and a `rawData` object with the complete source post. The default **LinkedIn posts** view highlights the most valuable fields and renders images, links, dates, numbers, and booleans using appropriate table formats.

Simplified output example:

```json
{
    "companyName": "Microsoft",
    "companyId": "urn:li:fsd_company:1035",
    "companyUrl": "https://www.linkedin.com/company/microsoft/",
    "companyLogoUrl": "https://media.licdn.com/example-company-logo.jpg",
    "authorName": "Satya Nadella",
    "authorHeadline": "Chairman and CEO at Microsoft",
    "authorUrl": "https://www.linkedin.com/in/example",
    "authorImageUrl": "https://media.licdn.com/example-profile-image.jpg",
    "postText": "Post text appears here...",
    "postUrl": "https://www.linkedin.com/posts/example",
    "postType": "VIDEO",
    "publishedAt": "2026-09-09T12:30:00.000Z",
    "publishedText": "17 hours ago • Visible to anyone on or off LinkedIn",
    "reactions": 1077,
    "reactionBreakdown": {
        "LIKE": 896,
        "EMPATHY": 90,
        "PRAISE": 76
    },
    "comments": 94,
    "shares": 12,
    "mediaPreviewUrl": "https://media.licdn.com/example-video-preview.jpg",
    "mediaUrl": "https://media.licdn.com/example-video.mp4",
    "isRepost": false,
    "rawData": {}
}
```

You can download the dataset in various formats such as JSON, HTML, CSV, or Excel. You can also access results programmatically through the Apify API or send them to connected services.

### LinkedIn posts data table

| Data             | Description                                                                    |
| ---------------- | ------------------------------------------------------------------------------ |
| Company          | Company name, identifier, page link, and logo preview                          |
| Author           | Author name, type, headline, follower count, profile link, and image           |
| Post             | Text, LinkedIn post link, content type, context, visibility, and identifiers   |
| Publication      | Calculated publication timestamp, relative publication text, and edited status |
| Engagement       | Total reactions, reaction breakdown, comments, shares, views, and impressions  |
| Images           | Primary media preview and all extracted image URLs                             |
| Videos           | Preview image, playable media URL, duration, and caption files                 |
| Documents        | Cover image, title, PDF link, and page count                                   |
| Reposts          | Repost status plus original author, text, and post link when available         |
| Content metadata | Hashtags and links found in the post text                                      |
| Raw data         | Complete unmodified source post stored in `rawData`                            |

Some fields can be empty because LinkedIn does not return every metric or media type for every post. For example, impressions and views are not always publicly available.

### How much does it cost to scrape LinkedIn company posts?

The final price depends on the pricing shown in the Actor's **Pricing** tab, the number of companies, the requested post limit, and how many pages must be retrieved. Small, limited runs complete faster and are the best way to estimate the cost for your use case.

To control usage:

- Start with 10–50 posts per company.
- Select a specific content filter when you do not need every post type.
- Leave **Parse all posts** disabled for predictable runs.
- Save a tested configuration as an Apify Task before scheduling it.

If your Apify plan includes platform credits, eligible run costs are deducted from those credits according to the current plan and Actor pricing.

### Tips and advanced options

#### Improve company matching

Use the complete company name shown on LinkedIn. Short or ambiguous names can match a different organization because the Actor uses the first company search result.

#### Choose focused content filters

Use `VIDEOS`, `IMAGES`, or `DOCUMENTS` when analyzing a particular content strategy. Use `ALL` for general monitoring and competitive research.

#### Handle media links promptly

LinkedIn media URLs can be temporary and may expire. Download or process important media soon after the run completes instead of treating the URLs as permanent storage.

#### Schedule recurring monitoring

Create an Apify Task from your tested input and schedule it daily or weekly. Connect a webhook or integration to move each new dataset into your preferred analytics workflow.

#### Work with complete source data

The normalized fields cover common analysis needs. If you need a field that is not displayed in the main table, inspect `rawData`, which preserves the complete post response.

### FAQ, disclaimers, and support

#### Can I scrape several companies in one run?

Yes. Add multiple company names to the `companies` input. The post limit applies separately to each company.

#### Does the Actor collect images, videos, and documents?

Yes. When present, results include media previews, image URLs, video streams and captions, or document covers and files. Availability depends on what LinkedIn returns for each post.

#### Why is a metric or media field empty?

LinkedIn does not expose every field for every post. A text post has no media URL, and view or impression counts may be unavailable. Check `rawData` to confirm what was returned.

#### Is scraping LinkedIn legal?

Web scraping laws and platform terms vary by country and use case. Scrape only publicly available information, respect applicable laws and LinkedIn's terms, and do not use the Actor to collect or misuse sensitive personal data. You are responsible for how you configure and use the Actor. This Actor is not affiliated with or endorsed by LinkedIn.

#### Can I use the results through an API?

Yes. Every run exposes its dataset through the Apify API. You can also schedule runs, trigger them from your application, and connect outputs to supported integrations.

#### Where can I report a problem or request a feature?

Open the [Issues tab](./issues) on the Actor page and include the run ID, company name, selected filter, and a short description of the expected result. Custom scraping, enrichment, and integration solutions are also available on request.

# Actor input Schema

## `companies` (type: `array`):

Enter company names such as Microsoft Azure, Google, or GitHub. Add one company per row and use the full, exact name for the best match.

## `filter` (type: `string`):

Only return posts matching this content type.

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

Maximum posts to save for each company. Ignored when Parse all posts is enabled.

## `parseAll` (type: `boolean`):

Keep requesting pages for each company until the API returns an empty page.

## Actor input object example

```json
{
  "companies": [
    "Google"
  ],
  "filter": "ALL",
  "maxPosts": 100,
  "parseAll": false
}
```

# Actor output Schema

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

Open the dataset to browse normalized posts, authors, engagement, and media links.

# 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 = {
    "companies": [
        "Google"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("api-ninja/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 = { "companies": ["Google"] }

# Run the Actor and wait for it to finish
run = client.actor("api-ninja/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 '{
  "companies": [
    "Google"
  ]
}' |
apify call api-ninja/linkedin-company-posts-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,api-ninja/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/kHc26UegRjg9kc6fX/builds/EmN1bWB2NGL0GfRAh/openapi.json
