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

Extract the recent posts of public LinkedIn company pages without logging in: post text, publish date, reactions, comments, images, video, article links, reposts with their original author, and the company's name, logo and follower count on every post.

- **URL**: https://apify.com/logical\_scrapers/linkedin-company-posts-scraper.md
- **Developed by:** [Goldmine](https://apify.com/logical_scrapers) (community)
- **Categories:** Social media, Marketing, Automation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.50 / 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

## 🏢 LinkedIn Company Posts Scraper — Scrape LinkedIn Company Posts Without Logging In

![LinkedIn Company Posts Scraper by Goldmine](https://www.logicalscrapers.com/banners/linkedin-company-posts-scraper.jpg?v=93758b4b75)

This **LinkedIn company posts scraper** turns the public page of any company on **[LinkedIn](https://www.linkedin.com/)** into structured data. Give it company page URLs or company names and it returns the company's recent **LinkedIn company posts**, newest first, each with its full text and hashtags, publish date, reaction and comment counts, images, video, link previews, reposts with their original author, and the company's name, logo and follower count. Teams use it to monitor what competitors announce, track which posts earn engagement, collect employer-branding content, and feed company news into CRMs and AI pipelines.

Paste as many companies as you like, choose how many posts you want from each and how far back to go, and get one dataset item per post, ready to export to JSON, CSV or Excel. No LinkedIn account, cookies or API key is needed.

***

### 🚀 Key Features

- 🔎 **Company URLs or names** — `microsoft`, `https://www.linkedin.com/company/microsoft/`, its `/posts/` tab, country versions such as `de.linkedin.com`, and showcase pages
- 🧾 **Post data** — full text, hashtags, publish date (exact to the second), the relative age LinkedIn shows, and an edited flag
- 📈 **Engagement on every post** — reaction count and comment count
- 🖼️ **Attachments** — image URLs, video file and thumbnail URLs, documents and carousels (title, page count, preview pages), link previews (URL, title, source site) and LinkedIn Live events
- 🔁 **Reposts** — flagged, with the original author, and the quoted post's text and media when the company added its own comment
- 🏷️ **Company details on every post** — name, page URL, slug, company id, logo and follower count
- 📑 **Newest first, per company** — `maxItems` limits posts **per company**, and `untilDate` stops at posts older than a date
- 🛡️ **No login** — reads only what LinkedIn shows logged-out visitors; each company gets its own proxy session and blocked requests are retried from a new one
- 📤 **Multiple export formats** — JSON, CSV, Excel, XML via the Apify dataset
- 🔁 **Schedulable runs** — run it daily with `untilDate` to collect each new post as it is published

***

### 👥 Who Is This Actor For?

- 🕵️ **Competitive and market analysts** — tracking product launches, hiring pushes and announcements across a list of companies
- 📣 **Marketing and social media teams** — benchmarking which company posts earn reactions and comments, and how often competitors post
- 💼 **Sales and account teams** — watching target accounts for news that opens a conversation
- 🧑‍💼 **Recruiters and employer-branding teams** — collecting how companies present their culture and open roles
- 🧠 **Researchers and journalists** — building datasets of corporate communication over time
- 🤖 **AI builders** — feeding company posts into summaries, alerts, sentiment analysis or a RAG index

### 💡 Common Use Cases

- Scrape LinkedIn company posts from a list of competitors every morning
- Export a company's last 50 LinkedIn posts with reactions and comments to a spreadsheet
- Get new posts since a date for 100 target accounts and push them to a CRM
- Compare posting frequency and engagement across companies in one industry
- Collect the images, videos and article links companies share

***

### 🔗 Supported URL Types

| URL Type | Example |
| -------- | ------- |
| **Company page** | `https://www.linkedin.com/company/microsoft/` |
| **Posts tab** | `https://www.linkedin.com/company/microsoft/posts/?feedView=all` |
| **Country or mobile domain** | `https://de.linkedin.com/company/siemens/about/` |
| **Company name from the URL** | `openai` |
| **Showcase page** | `https://www.linkedin.com/showcase/microsoft-cloud-platform/` |

***

### 📥 Input

| Field | Type | Description | Default |
| ----- | ---- | ----------- | ------- |
| `startUrls` | Array | LinkedIn company pages whose posts to scrape: a company page URL, its posts tab, the name from the URL (such as `microsoft`), or a showcase page. One entry per company. | Required |
| `maxItems` | Integer | Maximum number of posts to extract **per company** (start URL), newest first. LinkedIn shows logged-out visitors about the latest 70 posts of a company. | `10` |
| `untilDate` | String | Skip posts older than this date (`YYYY-MM-DD`) and stop scraping a company once its posts are older. Leave empty to scrape until `maxItems` is reached. | — |
| `proxyConfiguration` | Object | Proxy settings. Apify datacenter proxies are used by default; switch to residential proxies if companies come back blocked. | `{ "useApifyProxy": true }` |

#### Example Input

```json
{
  "startUrls": ["https://www.linkedin.com/company/microsoft/", "openai"],
  "maxItems": 10
}
```

***

### 📤 Output

Each dataset item is one post:

| Field | Type | Description |
| ----- | ---- | ----------- |
| `postId` | String | The post's activity id |
| `postUrn` | String | The post's URN, e.g. `urn:li:activity:7508925724787941376` |
| `shareUrn` | String | URN of the shared content behind the post (`urn:li:ugcPost:…` or `urn:li:share:…`) |
| `postUrl` | String | Link to the post |
| `text` | String | Full text of the post, with its line breaks, or `null` when it has none |
| `hashtags` | Array | Hashtags in the text, without `#` |
| `publishedAt` | String | Publish time (ISO 8601, UTC). For a repost without a comment, the time the original was published |
| `timeAgo` | String | The relative age LinkedIn shows, e.g. `5d`, `2w`, `3mo` |
| `isEdited` | Boolean | Whether LinkedIn marks the post as edited |
| `reactionCount` | Number | Reactions (likes and other reactions) |
| `commentCount` | Number | Comments |
| `mediaType` | String | `image`, `video`, `article`, `live`, `document`, `text`, or `repost` for a repost with no comment of its own |
| `images` | Array | Image URLs shown on the post |
| `imageCount` | Number | Number of images in the post, including ones LinkedIn hides behind a `+N` tile |
| `videoUrl` | String | Video file URL (highest quality offered), or `null` |
| `videoThumbnailUrl` | String | Video thumbnail URL, or `null` |
| `article` | Object | Link preview: `url`, `title`, `source` and `imageUrl`, or `null` |
| `document` | Object | Shared document or carousel: `title`, `pageCount` and `previewImageUrls` (the first pages LinkedIn previews), or `null` |
| `liveEvent` | Object | LinkedIn Live or event: `url`, `title` and `imageUrl`, or `null` |
| `authorName` | String | Who wrote the post shown: the company, or for a repost without a comment the original author |
| `authorUrl` | String | LinkedIn URL of that author |
| `authorType` | String | `company` or `person` |
| `isRepost` | Boolean | Whether the company shared someone else's post, with or without its own comment |
| `repostedAt` | String | For a repost without a comment, when the company reposted it; otherwise `null` |
| `originalAuthorName` | String | For a repost, the name of the original post's author |
| `originalAuthorUrl` | String | For a repost, the LinkedIn URL of the original author |
| `originalPost` | Object | For a post that quotes another one: the quoted post's `postId`, `postUrn`, `postUrl`, `publishedAt`, `timeAgo`, author, `text`, `hashtags`, `mediaType`, `images`, `videoUrl`, `article` and `document` |
| `companyName` | String | Name of the company |
| `companySlug` | String | The company's name in its LinkedIn URL |
| `companyId` | String | LinkedIn's numeric id for the company |
| `companyUrl` | String | The company's LinkedIn page |
| `companyLogoUrl` | String | The company's logo |
| `companyFollowers` | Number | The company's follower count |
| `inputUrl` | String | The start URL or company name this post was found from |

Image and video URLs are signed by LinkedIn, so download the files you need soon after the run.

#### Example Output

A real item from a run on `https://www.linkedin.com/company/microsoft/posts/?feedView=all`, with the image list shortened to one of its three URLs:

```json
{
  "postId": "7508925724787941376",
  "postUrn": "urn:li:activity:7508925724787941376",
  "shareUrn": "urn:li:ugcPost:7508925723823243264",
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7508925724787941376/",
  "text": "The path to quantum computing isn’t a single breakthrough. It’s a journey.\n\nIn Maryland, our new quantum research center is bringing together technology, researchers, and partners, including Microsoft’s topological quantum system for continued independent testing by DARPA. Learn how we're taking steps to turn scientific progress into real world impact. https://msft.it/6001a9EAJ",
  "hashtags": [],
  "publishedAt": "2026-09-24T16:30:01.883Z",
  "timeAgo": "5d",
  "isEdited": false,
  "reactionCount": 436,
  "commentCount": 31,
  "mediaType": "image",
  "images": [
    "https://media.licdn.com/dms/image/v2/D4E10AQGUDhS8AxswqQ/image-shrink_800/B4EaDUEwfFHoAg-/0/1790264413236?e=2147483647&v=beta&t=RAbYPa6T6PDCpBPZpZJsXktIk3jBIQ1sK21gFZPAgCI"
  ],
  "imageCount": 3,
  "videoUrl": null,
  "videoThumbnailUrl": null,
  "article": null,
  "document": null,
  "liveEvent": null,
  "authorName": "Microsoft",
  "authorUrl": "https://www.linkedin.com/company/microsoft",
  "authorType": "company",
  "isRepost": false,
  "repostedAt": null,
  "originalAuthorName": null,
  "originalAuthorUrl": null,
  "originalPost": null,
  "companyName": "Microsoft",
  "companySlug": "microsoft",
  "companyId": "1035",
  "companyUrl": "https://www.linkedin.com/company/microsoft",
  "companyLogoUrl": "https://media.licdn.com/dms/image/v2/D560BAQH32RJQCl3dDQ/company-logo_200_200/B56ZYQ0mrGGoAM-/0/1744038948046/microsoft_logo?e=2147483647&v=beta&t=ts9MGrTk7Lz3R1bmAfzCL8euuuuPWPCoXfdiLA2_IzM",
  "companyFollowers": 29185611,
  "inputUrl": "https://www.linkedin.com/company/microsoft/posts/?feedView=all"
}
```

You can export the dataset as **JSON, CSV, Excel, XML, RSS, or HTML** from the Apify Console or via the [Apify API](https://docs.apify.com/api/v2).

***

### 💰 Pricing

This Actor is **pay per event** (you pay per result): each post saved costs **$0.00349 on the free plan, so 1,000 posts cost $3.49**, falling to $0.0025 per post ($2.50 per 1,000) on Gold and higher Apify plans. Each run also has a $0.00005 start fee per GB of memory. Companies that are not found or have no public posts produce no items, so they cost nothing. A free Apify account is enough to try it.

***

### ❓ FAQ

#### What is the LinkedIn Company Posts Scraper?

It is a LinkedIn company posts scraper that takes company page URLs or names and returns each company's recent posts as structured data, with engagement counts, attachments and the company's details on every post. You can run it from the Apify Console, the API, or on a schedule.

#### Do I need a LinkedIn account, cookies or an API key?

No. The Actor reads only what LinkedIn shows to visitors who are not logged in, so your own account is never involved.

#### How many posts can I get per company?

Up to `maxItems` per company, newest first. LinkedIn shows logged-out visitors about the latest 70 posts of a company: in our tests, large companies such as McKinsey & Company, OpenAI and Ethiopian Airlines returned 67 to 70 posts each, and smaller companies returned every post LinkedIn showed (25 for ScrapingBee, 6 for a small agency). Posts older than that cannot be reached without logging in.

#### Do I need a proxy?

The default uses Apify datacenter proxies, and each company gets its own proxy session. LinkedIn limits how many pages one visitor can open in a row, so a blocked request is retried from a new session. If many companies come back blocked, switch the proxy setting to residential proxies.

#### Does it handle pagination automatically?

Yes. It keeps loading older posts until it reaches `maxItems`, the `untilDate`, or the last post LinkedIn shows logged-out visitors.

#### Why does a company return no posts?

Some companies have never posted, and a few large pages show logged-out visitors no posts at all. The run status names how many companies had no public posts and how many were not found, so a misspelled company name is easy to spot.

#### Does it return repost counts or the comments themselves?

No. LinkedIn does not show repost counts to logged-out visitors, and this Actor returns the comment count, not the comments. For the comments on a post, use the LinkedIn Post Scraper from the suite below.

#### How are reposts handled?

When a company reposts someone else's post without a comment, `isRepost` is `true`, the text, media and author are the original post's, and `repostedAt` says when the company reposted it. When the company adds its own comment, `text` is the company's comment and `originalPost` holds the post it quoted. In both cases `originalAuthorName` names the original author.

#### Can I schedule it or integrate it with my app?

Yes. Every Apify Actor exposes a REST API, webhooks, and integrations with Zapier, Make, Google Sheets and Slack, and can be called from an AI agent via the Apify MCP server.

#### Is it legal to scrape LinkedIn?

This Actor accesses only publicly available pages. You are responsible for making sure your use complies with LinkedIn's terms of service and the laws in your jurisdiction.

#### What if LinkedIn changes and the Actor breaks?

Open an issue on the Actor's **Issues** tab with a company URL that fails, so the problem can be reproduced.

***

### 🧩 Part of the LinkedIn Scraper Suite

Posts, profiles, companies, jobs and ads from LinkedIn. Also try:

- [LinkedIn Company Scraper](https://apify.com/logical_scrapers/linkedin-company-scraper) — company pages: about, size, headquarters, followers
- [LinkedIn Company Scraper Bulk (No Cookies)](https://apify.com/logical_scrapers/linkedin-company-scraper-pro) — company profiles in bulk without logging in
- [LinkedIn Post Scraper](https://apify.com/logical_scrapers/linkedin-posts-scraper) — single posts by URL with engagement, author and comments
- [LinkedIn Jobs Scraper](https://apify.com/logical_scrapers/linkedin-jobs-scraper) — job postings with title, company, location and description
- [LinkedIn Ads Scraper](https://apify.com/logical_scrapers/linkedin-ads-scraper) — ads from the LinkedIn Ad Library by keyword or advertiser
- [LinkedIn Profile Scraper No Cookies](https://apify.com/logical_scrapers/linkedin-profile-scraper-no-cookies) — public profiles without logging in
- [LinkedIn Company Details Scraper](https://apify.com/logical_scrapers/linkedin-company-scraper-deep) — detailed company data such as industry, size, headquarters, phone and employee count, with your own login cookies
- [LinkedIn People Search Scraper](https://apify.com/logical_scrapers/linkedin-people-search-scraper) — people search results as leads

See every Goldmine Actor at [apify.com/logical\_scrapers](https://apify.com/logical_scrapers).

***

### 📬 Contact & Support

- **Issues & feature requests**: use the Issues tab on this Actor's page. Include a company URL that fails so it can be reproduced.
- **Email**: `coredev.dan@gmail.com`
- **If this Actor saved you time, please leave a ⭐ rating on the Apify Store.** It helps us keep it maintained.

# Actor input Schema

## `startUrls` (type: `array`):

LinkedIn company pages whose posts to scrape. Paste a company page URL such as https://www.linkedin.com/company/microsoft/, its posts tab (…/microsoft/posts/), or just the name from the URL, such as microsoft. Showcase pages (/showcase/…) work too. One entry per company, and as many companies as you like.

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

Maximum number of posts to scrape from each company (start URL), newest first. LinkedIn shows logged-out visitors about the latest 70 posts of a company.

## `untilDate` (type: `string`):

Skip posts older than this date (format: YYYY-MM-DD) and stop scraping a company once its posts are older. Leave empty to scrape until maxItems is reached.

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

Proxy configuration. Apify datacenter proxies are used by default; each company gets its own proxy session, and a blocked request is retried from a new one. Switch to residential proxies if companies come back blocked.

## Actor input object example

```json
{
  "startUrls": [
    "https://www.linkedin.com/company/microsoft/",
    "openai"
  ],
  "maxItems": 10,
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `overview` (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 = {
    "startUrls": [
        "https://www.linkedin.com/company/microsoft/",
        "openai"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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