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

The LinkedIn Company Posts Scraper extracts the latest posts of any LinkedIn company page: text, exact post time, reactions and comments counts, images, MP4 videos, carousels and reposts, plus optional top comments with commenter profiles. No login. Ideal for LinkedIn competitor analysis.

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

## Pricing

from $1.00 / 1,000 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?

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

### 🚀 LinkedIn Company Posts Scraper: Download LinkedIn Posts of Any Company

Download the latest posts of any LinkedIn company page as JSON, CSV or Excel. The **LinkedIn Company Posts Scraper** returns each post's text, exact post time, reactions and comments counts, images, video files, documents (carousels), shared articles and reposts, plus up to 10 top comments with the commenter's profile link. It needs no LinkedIn account, and it works as a simple LinkedIn posts API for analytics, competitor analysis and content research.

### 🎯 Use Cases

- **LinkedIn competitor analysis**: see what rival companies post, how often, and which posts get the most reactions and comments.
- **LinkedIn post analytics**: track engagement on your own company page or a client's page over time, without page-admin access.
- **Download LinkedIn posts**: archive a brand's posts with their images, MP4 video links, captions and carousel pages.
- **Content research**: collect the hooks, formats and topics that work in your industry, ready for a spreadsheet or an LLM.
- **Social listening and leads**: with top comments on, see who engages with a company's posts and open their LinkedIn profiles.
- **LinkedIn data for dashboards**: feed company posts into Google Sheets, a BI tool or your own app on a schedule.

### ✨ Features

- **Full post text** with line breaks, plus the post's **exact publish time** (ISO date, to the millisecond), not "2w ago".
- **Engagement counts**: reactions and comments as numbers.
- **Media**: image URLs, the **MP4 video file** with thumbnail and captions file, **documents and carousels** (title, page count, page images), live video events, and shared article links with title, source and image.
- **Reposts and quote posts**: `type` tells a company's own post from a repost or a repost with comment, and `originalPost` names the original author (person or company), its time and text.
- **Top comments (optional)**: up to 10 comments per post as LinkedIn ranks them, with author name, profile URL, text, time and likes.
- **Company context on every row**: company name, slug, URL, LinkedIn ID and follower count.
- **Bulk input**: many companies per run, as URLs (any language subdomain) or slugs. The same company pasted twice is scraped once, and every post is saved once.
- **Fair billing**: you pay per post saved, and a post is billed as "with comments" only when comments actually came with it.

### 🛠️ How It Works

1. **Paste LinkedIn company URLs or slugs**, for example `https://www.linkedin.com/company/microsoft` or `microsoft`.
2. **Set Max posts per company** (default 50) and switch on **Include top comments** if you need them.
3. **Run the scraper** and download the posts, or pull them through the Apify API.

### ⚙️ Input

| Field | What it does |
| --- | --- |
| **Companies** | LinkedIn company page URLs or slugs, one per line. Showcase pages work too. |
| **Max posts per company** | How many of the latest posts to save per company. Default 50. LinkedIn shows about 70 publicly. |
| **Include top comments** | Also save up to 10 top comments per post. Off by default. |

```json
{
    "companies": [
        "https://www.linkedin.com/company/microsoft",
        "https://www.linkedin.com/company/apify"
    ],
    "maxItems": 50,
    "includeComments": false
}
```

### 💰 Pricing

Pay only for the posts you get. No monthly rental.

| Event | Price | What you get |
| --- | --- | --- |
| **Post** | $0.001 per post ($1.00 per 1,000) | One post with text, time, counts, media and company fields |
| **Post with top comments** | $0.002 per post ($2.00 per 1,000) | The same post plus its top comments. Charged instead of **Post**, only when "Include top comments" is on and the post has comments |
| **Actor start** | $0.00005 per run | Charged once when the run starts |

Examples:

- 50 posts from one company = $0.05.
- The latest 70 posts of 20 competitors (1,400 posts) = $1.40.
- 500 posts with top comments = $1.00.

### 📊 Sample Output Data

```json
{
    "id": "7516505833061474305",
    "urn": "urn:li:activity:7516505833061474305",
    "url": "https://www.linkedin.com/posts/microsoft_this-month-the-microsoft-atlanta-team-in-activity-7516505833061474305-T6ou",
    "type": "post",
    "text": "This month, the Microsoft Atlanta team, in partnership with Black in Technology, hosted the 404 Tech Summit (BitCon) for two days of conversations on AI and the future of work with Atlanta's tech community. Great to learn alongside the technologists, students, and leaders shaping what's next.",
    "createdAt": "2026-10-15T14:30:40.527Z",
    "author": {
        "name": "Microsoft",
        "url": "https://www.linkedin.com/company/microsoft",
        "type": "company"
    },
    "reactions": 272,
    "comments": 38,
    "images": [],
    "video": {
        "url": "https://dms.licdn.com/playlist/vid/v2/D4E10AQHKwQbKp0NJow/mp4-720p-30fp-crf28/B4EaE_.Jj7KwBs-/0/1792074630852?e=2147483647&v=beta&t=gkFXRmgk_4Ttc0lbG_pSa84iBqte7GNmeQ0KVysC10k",
        "thumbnail": "https://media.licdn.com/dms/image/v2/D4E10AQHKwQbKp0NJow/videocover-high/B4EaE_.Jj7KwAw-/0/1792074624542?e=2147483647&v=beta&t=ySpoteVJHzZb2bMyVBncXirsAE0cs0pncA41wAirwQc",
        "captionsUrl": null,
        "live": false,
        "title": null,
        "pageUrl": null
    },
    "article": null,
    "document": null,
    "originalPost": null,
    "topComments": [
        {
            "author": "Jorai Laurenceo",
            "authorUrl": "https://www.linkedin.com/in/jorailaurenceo",
            "text": "Creating space for underrepresented talent is an important part of building a stronger technology ecosystem.\n\nPartnerships like these can help connect emerging professionals with meaningful opportunities and industry networks.",
            "createdAt": "2026-10-15T15:04:08.401Z",
            "likes": 5
        }
    ],
    "companyName": "Microsoft",
    "companySlug": "microsoft",
    "companyUrl": "https://www.linkedin.com/company/microsoft",
    "companyId": "1035",
    "companyFollowers": 29341162,
    "scrapedAt": "2026-10-21T17:22:59.035Z"
}
```

`type` is `post` (the company's own post), `repost` (the company reposted someone else's post; `author` and `originalPost.author` are the original author) or `quote` (a repost with the company's own text; `originalPost` holds the reposted post). For reposts, `reactions` and `comments` are the original post's counts. `createdAt` is when the company posted or reposted. `topComments` is `null` when comments were not requested, and `[]` for a post with no comments. `document.pages` lists the page images of a PDF or carousel post. `video.url` is a direct MP4 link.

### 🔁 Schedule and Integrate

For LinkedIn competitor monitoring, run it **once a day or once a week** with the same company list and a small **Max posts per company** (10 to 20): each run picks up the new posts and the latest engagement counts. Set it up in Apify **Schedules**. Send the results to **Google Sheets**, **Zapier**, **Make**, **n8n** or a webhook with Apify **integrations**, so new posts land where your team already works.

### 🤖 Use with AI Agents (MCP)

This Actor works as a tool in Claude, ChatGPT, Cursor and other MCP clients through the Apify MCP server (`https://mcp.apify.com`). An agent can call it with:

```json
{ "companies": ["openai"], "maxItems": 10, "includeComments": true }
```

### ❓ FAQ

**Does LinkedIn have an official API for company posts?** LinkedIn's APIs that read posts are for page admins and approved partners, and they cover pages you manage, not other companies. This Actor needs no API key, no app approval and no account, and it returns the public posts of any company page.

**How many posts can I get per company?** About the latest 70. That is how far back LinkedIn shows a company's posts publicly. For very active companies that is a few weeks; for most it covers several months. The run's status message says when a company's public posts were all saved.

**Do I need a LinkedIn account or cookies?** No. The Actor reads only what LinkedIn shows publicly, so your account is never at risk.

**Can I download LinkedIn videos and carousels?** Yes. `video.url` is a direct MP4 file link, `video.captionsUrl` is the captions file when the video has one, and `document.pages` holds the page images of PDF and carousel posts.

**Why is there no repost count, and why is a field empty?** LinkedIn does not show the number of reposts publicly, so it is not in the output. `images`, `video`, `document` and `article` are empty when the post has no such media, `originalPost` is `null` for a company's own post, and `companyFollowers` is `null` when the page does not show it.

**Why did a company return no posts?** Some company pages show no posts to visitors (Deloitte, for example), and a mistyped slug has no page. Both are listed in the run's status message and are not charged.

**How do I do LinkedIn competitor analysis with this?** Add your competitors' company pages, run it weekly, and compare posting frequency, formats (video, document, image) and reactions per post across companies in a spreadsheet.

### 🔗 Related Scrapers

- [LinkedIn Company Scraper](https://apify.com/piotrv1001/linkedin-company-scraper): the full company profile (headcount, industry, website, HQ) for the same companies.
- [LinkedIn Company Jobs Scraper](https://apify.com/piotrv1001/linkedin-company-jobs-scraper): every open job a company lists on LinkedIn.
- [LinkedIn Video Transcript Scraper](https://apify.com/piotrv1001/linkedin-video-transcript-scraper): the spoken text of LinkedIn video posts.
- [LinkedIn Jobs Search Scraper](https://apify.com/piotrv1001/linkedin-jobs-search-scraper): LinkedIn job search results by keyword and location.

# Actor input Schema

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

LinkedIn company page URLs or slugs (the part after /company/), one per line.

## `includeComments` (type: `boolean`):

Also save up to 10 top comments per post (author, text, time, likes). Posts that come with comments cost more, see Pricing.

## `maxItems` (type: `integer`):

Stop after this many posts for each company. LinkedIn shows about the latest 70 posts of a company publicly.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/microsoft",
    "https://www.linkedin.com/company/apify"
  ],
  "includeComments": false,
  "maxItems": 50
}
```

# Actor output Schema

## `results` (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 = {
    "companies": [
        "https://www.linkedin.com/company/microsoft",
        "https://www.linkedin.com/company/apify"
    ],
    "maxItems": 50
};

// Run the Actor and wait for it to finish
const run = await client.actor("piotrv1001/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/microsoft",
        "https://www.linkedin.com/company/apify",
    ],
    "maxItems": 50,
}

# Run the Actor and wait for it to finish
run = client.actor("piotrv1001/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/microsoft",
    "https://www.linkedin.com/company/apify"
  ],
  "maxItems": 50
}' |
apify call piotrv1001/linkedin-company-posts-scraper --silent --output-dataset

```

## MCP server setup

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