# LinkedIn Company Posts Scraper | Comments & Reactions (`crawlkite/linkedin-company-posts`) Actor

Collect LinkedIn company posts with content, media and engagement. Add comments and reactions, filter dates and reposts, and export structured JSON, CSV or Excel.

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

## Pricing

from $1.35 / 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.
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 | Comments & Reactions

Collect LinkedIn company posts with content, media and engagement. Add comments and reactions, filter dates and reposts, and export structured JSON, CSV or Excel.

### Key benefits

- No customer cookies or login required for supported public-data operations.
- Structured records for research, engagement analysis and data workflows.
- Bounded pagination, request and spending controls.
- Export JSON, CSV or Excel from the run dataset.

### How it works

1. Add your targets using the Input tab or JSON below.
2. Set a small result limit and maximum run spending.
3. Start the actor and inspect Output and the run SUMMARY.
4. Export results or use the Apify API to retrieve the dataset.

Posts retain content, author, dates, media and available engagement. Enabled comments and reactions produce separately billed typed rows and their available nested arrays. Main/enrichment features not exposed by this input form are not advertised. Country-specific contexts are disabled; use any.

### Example input

```json
{
  "targetUrls": [
    "https://www.linkedin.com/company/microsoft"
  ],
  "maxPosts": 5
}
```

### Input options

| Field | Meaning |
|---|---|
| `targetUrls` | LinkedIn company, profile or post URLs. Each target is processed within its configured post limit. |
| `maxPosts` | Maximum posts per target. Zero continues within page, request and spending limits. |
| `postedLimit` | Keep available records within this age window. Results depend on source availability. |
| `postedLimitDate` | Include posts on or after this date, using a supported date/time string. |
| `includeQuotePosts` | Include shared posts that contain added commentary. |
| `includeReposts` | Include shared posts without added commentary. |
| `scrapeReactions` | Collect reactions as additional separately billed records. |
| `maxReactions` | Maximum reactions per post. Zero collects available reactions within run limits. |
| `scrapeComments` | Collect comments as additional separately billed records. |
| `maxComments` | Maximum comments per post. Zero collects available comments within run limits. |
| `commentsPostedLimit` | Apply this age window to collected comments. |
| `contextCountry` | Use any. Country-specific contexts are currently unavailable. |

A zero result limit means available results within page, request, spending and trial caps; it is not an unlimited-volume guarantee. Free-plan trial runs are restricted to two source requests and two primary records. Additional requests may be needed for reply previews and enrichment.

### Data and output example

Fields retain their nested structure and can be absent or empty. The shortened example below uses fictional values to illustrate structure. It is not a real result or a promise of complete fields.

```json
[
  {
    "id": "example-post",
    "linkedinUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7348831781036400646/",
    "content": "Illustrative post text",
    "author": {
      "name": "Example Author"
    },
    "engagement": {
      "likes": 10,
      "comments": 2
    },
    "type": "post",
    "reactionIds": [],
    "commentIds": []
  }
]
```

### CrawlKite pricing

The actor's Pricing tab is authoritative. Enrichment and enabled engagement have separate billing events. See each event's unit below; request counts and returned item counts are different.

| Billing event / unit | Free | Starter | Scale | Business |
|---|---:|---:|---:|---:|
| Post / 1,000 | $1.8 | $1.8 | $1.575 | $1.35 |
| Reaction / 1,000 | $1.8 | $1.8 | $1.575 | $1.35 |
| Comment / 1,000 | $1.8 | $1.8 | $1.575 | $1.35 |
| 0-result query / event | $0.0009 | $0.0009 | $0.0009 | $0.0009 |
| Actor Start / event | $0.000045 | $0.000045 | $0.000045 | $0.000045 |

#### Price comparison

| Event / unit | Plan | HarvestAPI | CrawlKite | Lower by |
|---|---|---:|---:|---:|
| Post / 1,000 | Free | $2 | $1.8 | 10% |
| Post / 1,000 | Starter | $2 | $1.8 | 10% |
| Post / 1,000 | Scale | $1.75 | $1.575 | 10% |
| Post / 1,000 | Business | $1.5 | $1.35 | 10% |
| Reaction / 1,000 | Free | $2 | $1.8 | 10% |
| Reaction / 1,000 | Starter | $2 | $1.8 | 10% |
| Reaction / 1,000 | Scale | $1.75 | $1.575 | 10% |
| Reaction / 1,000 | Business | $1.5 | $1.35 | 10% |
| Comment / 1,000 | Free | $2 | $1.8 | 10% |
| Comment / 1,000 | Starter | $2 | $1.8 | 10% |
| Comment / 1,000 | Scale | $1.75 | $1.575 | 10% |
| Comment / 1,000 | Business | $1.5 | $1.35 | 10% |
| 0-result query / event | Free | $0.001 | $0.0009 | 10% |
| 0-result query / event | Starter | $0.001 | $0.0009 | 10% |
| 0-result query / event | Scale | $0.001 | $0.0009 | 10% |
| 0-result query / event | Business | $0.001 | $0.0009 | 10% |
| Actor Start / event | Free | $0.00005 | $0.000045 | 10% |
| Actor Start / event | Starter | $0.00005 | $0.000045 | 10% |
| Actor Start / event | Scale | $0.00005 | $0.000045 | 10% |
| Actor Start / event | Business | $0.00005 | $0.000045 | 10% |

Checked 2026-11-02 against [the corresponding public actor pricing](https://apify.com/harvestapi/linkedin-company-posts/pricing). The comparison covers the four plans listed and individual billing events; total costs depend on results and selected options. Higher-plan rates currently follow our Business rates. This is a price comparison, not a guarantee of identical coverage, speed or data values.

### API example

Keep your Apify token in an environment variable.

```bash
curl -X POST 'https://api.apify.com/v2/acts/crawlkite~linkedin-company-posts/runs' \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"targetUrls":["https://www.linkedin.com/company/microsoft"],"maxPosts":5}'
```

Use the API tab for SDK examples and run/dataset endpoints.

### FAQ

**Why are there fewer results than a visible counter?** Availability, deleted records, filters, source pagination and your run caps can reduce output. Nested reply previews are not separate records.

**Can I resume?** Run state tracks targets, cursors and delivered IDs. Use the platform's resume/resurrection controls for the same input; start a fresh run when changing input.

**Are failed lookups billed as successful records?** Successful output rows trigger their configured events. The platform start event and an empty-target event also apply as listed above. Review SUMMARY and Pricing for the events used.

### Responsible use

Use collected data for a clear purpose, respect privacy and applicable requirements, and retain only the fields your workflow needs.

### Support

Open an issue and share the affected run with the developer so we can inspect the error. Never put tokens, cookies or database credentials in a public issue.

### More CrawlKite LinkedIn tools

- [linkedin profile scraper](https://apify.com/crawlkite/linkedin-profile-scraper)
- [linkedin company](https://apify.com/crawlkite/linkedin-company)
- [linkedin profile posts](https://apify.com/crawlkite/linkedin-profile-posts)
- [linkedin post search](https://apify.com/crawlkite/linkedin-post-search)
- [linkedin profile search](https://apify.com/crawlkite/linkedin-profile-search)
- [LinkedIn Post Comments Scraper | Replies & Authors](https://apify.com/crawlkite/linkedin-post-comments)
- [LinkedIn Post Reactions Scraper | Likes & Profiles](https://apify.com/crawlkite/linkedin-post-reactions)
- [LinkedIn Profile Comments Scraper | Comment History](https://apify.com/crawlkite/linkedin-profile-comments)
- [LinkedIn Profile Reactions Scraper | Activity & Posts](https://apify.com/crawlkite/linkedin-profile-reactions)

# Actor input Schema

## `targetUrls` (type: `array`):

LinkedIn company, profile or post URLs. Each target is processed within its configured post limit.

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

Maximum posts per target. Zero continues within page, request and spending limits.

## `postedLimit` (type: `string`):

Keep available records within this age window. Results depend on source availability.

## `postedLimitDate` (type: `string`):

Include posts on or after this date, using a supported date/time string.

## `includeQuotePosts` (type: `boolean`):

Include shared posts that contain added commentary.

## `includeReposts` (type: `boolean`):

Include shared posts without added commentary.

## `scrapeReactions` (type: `boolean`):

Collect reactions as additional separately billed records.

## `maxReactions` (type: `integer`):

Maximum reactions per post. Zero collects available reactions within run limits.

## `scrapeComments` (type: `boolean`):

Collect comments as additional separately billed records.

## `maxComments` (type: `integer`):

Maximum comments per post. Zero collects available comments within run limits.

## `commentsPostedLimit` (type: `string`):

Apply this age window to collected comments.

## `contextCountry` (type: `string`):

Use any. Country-specific contexts are currently unavailable.

## `maxRequests` (type: `integer`):

Stop before exceeding this request count.

## `maxResults` (type: `integer`):

Total primary result cap across all targets.

## `maxPages` (type: `integer`):

Upper pagination bound. Request and spending limits also apply.

## Actor input object example

```json
{
  "targetUrls": [
    "https://www.linkedin.com/in/satyanadella/",
    "https://www.linkedin.com/company/google",
    "https://www.linkedin.com/posts/microsoft-events_microsoft-build-has-arrived-in-seattle-and-ugcPost-7329991434395160578-GnK7/",
    "https://www.linkedin.com/feed/update/urn:li:activity:7391573088309534720/"
  ],
  "maxPosts": 5,
  "includeQuotePosts": true,
  "includeReposts": true,
  "maxReactions": 5,
  "maxComments": 5,
  "maxRequests": 10000,
  "maxResults": 100000,
  "maxPages": 100
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "targetUrls": [
        "https://www.linkedin.com/in/satyanadella/",
        "https://www.linkedin.com/company/google",
        "https://www.linkedin.com/posts/microsoft-events_microsoft-build-has-arrived-in-seattle-and-ugcPost-7329991434395160578-GnK7/",
        "https://www.linkedin.com/feed/update/urn:li:activity:7391573088309534720/"
    ],
    "maxPosts": 5,
    "maxReactions": 5,
    "maxComments": 5
};

// Run the Actor and wait for it to finish
const run = await client.actor("crawlkite/linkedin-company-posts").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 = {
    "targetUrls": [
        "https://www.linkedin.com/in/satyanadella/",
        "https://www.linkedin.com/company/google",
        "https://www.linkedin.com/posts/microsoft-events_microsoft-build-has-arrived-in-seattle-and-ugcPost-7329991434395160578-GnK7/",
        "https://www.linkedin.com/feed/update/urn:li:activity:7391573088309534720/",
    ],
    "maxPosts": 5,
    "maxReactions": 5,
    "maxComments": 5,
}

# Run the Actor and wait for it to finish
run = client.actor("crawlkite/linkedin-company-posts").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 '{
  "targetUrls": [
    "https://www.linkedin.com/in/satyanadella/",
    "https://www.linkedin.com/company/google",
    "https://www.linkedin.com/posts/microsoft-events_microsoft-build-has-arrived-in-seattle-and-ugcPost-7329991434395160578-GnK7/",
    "https://www.linkedin.com/feed/update/urn:li:activity:7391573088309534720/"
  ],
  "maxPosts": 5,
  "maxReactions": 5,
  "maxComments": 5
}' |
apify call crawlkite/linkedin-company-posts --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,crawlkite/linkedin-company-posts"
        }
    }
}
```

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/825maigdglB99ohUy/builds/IT1DXiz7y0zGkFhnK/openapi.json
