# 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)
- **Features:** Limited permissions
- **Stats:** 72 total users, 35 monthly users, 97.1% runs succeeded, 1 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?

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 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 LinkedIn page URLs, company names, or numeric IDs, 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 URLs, names, or IDs**, enter one LinkedIn page URL, company name, or numeric LinkedIn company ID 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 | LinkedIn page URLs, company names, or numeric IDs. URLs and numeric IDs skip search. |
| `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": ["https://www.linkedin.com/company/microsoft/", "105291008", "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?

This Actor uses **pay-per-event pricing** with a **$0.10 minimum total charge per run**.

| Charge                              |        Free plan | Bronze-Diamond plans |
| ----------------------------------- | ---------------: | -------------------: |
| Actor start                         |            $0.01 |                $0.01 |
| Result saved to the default dataset | $0.01 per result |    $0.001 per result |

The Actor start event is charged once per GB of memory, with at least one event per run. The final cost depends mainly on how many company-post records are saved. Start with 10-50 posts per company and leave **Parse all posts** disabled until you confirm the output. Check the Actor's **Pricing** tab for the latest rates before starting a large run.

### Tips and advanced options

#### Improve company matching

Enter a LinkedIn company page URL to skip company search. The URL is sent directly to the posts API as `companyUrl`, without resolving a company ID. Showcase and school page URLs also work.

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.

If you know the numeric LinkedIn company ID, enter it directly (for example, `105291008`). The Actor sends `urn:li:company:105291008` to the posts API and skips the company search request.

#### 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.

### Other LinkedIn Scraping Tools

If you like this Actor, you might also find these LinkedIn tools useful:

- 👤 **[LinkedIn Profile Scraper](https://apify.com/api-ninja/linkedin-profile-scraper)**: Collect profile posts, reactions, comments, images, videos, documents, and events in one workflow.
- 👤 **[LinkedIn Profile Posts Scraper](https://apify.com/api-ninja/linkedin-profile-posts-scraper)**: Collect public posts published by LinkedIn member profiles.
- 💡 **[LinkedIn Post Reactions Scraper](https://apify.com/api-ninja/linkedin-post-reactions-scraper)**: Collect people who reacted to a post and their reaction types.
- 💼 **[LinkedIn Jobs Scraper](https://apify.com/api-ninja/linkedin-jobs-scraper)**: Search and extract structured LinkedIn job listings.
- 💬 **[LinkedIn Post Comments Scraper](https://apify.com/api-ninja/linkedin-post-comments-scraper)**: Extract comments and optional replies from public posts.
- 🔁 **[LinkedIn Post Reposters Scraper](https://apify.com/api-ninja/linkedin-post-reposters-scraper)**: Find people and companies that reposted a public post.
- 🔎 **[LinkedIn Post Search Scraper](https://apify.com/api-ninja/linkedin-post-search-scraper)**: Discover public posts by keyword and advanced filters.

### FAQ, disclaimers, and support

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

Yes. Add multiple LinkedIn page URLs, company names, or numeric IDs 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](https://apify.com/api-ninja/linkedin-company-posts-scraper/issues) on the Actor page and include the run ID, company name or ID, 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 a LinkedIn company, showcase, or school page URL, a company name, or a numeric LinkedIn company ID (for example, 105291008) per row. URLs and numeric IDs skip company search; use the full, exact name for the best match otherwise.

## `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": [
    "https://www.linkedin.com/company/google/",
    "Google",
    "105291008"
  ],
  "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": [
        "https://www.linkedin.com/company/google/",
        "Google",
        "105291008"
    ]
};

// 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": [
        "https://www.linkedin.com/company/google/",
        "Google",
        "105291008",
    ] }

# 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": [
    "https://www.linkedin.com/company/google/",
    "Google",
    "105291008"
  ]
}' |
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/3bEk6iMNLoYgbSwWt/openapi.json
