# LinkedIn Posts - What Actually Got Reach (`reapx/linkedin-posts-monitor`) Actor

Find out what actually got reach on LinkedIn. Which posts landed, which quietly went nowhere, and what the ones that worked had in common - so you can write the next one.

- **URL**: https://apify.com/reapx/linkedin-posts-monitor.md
- **Developed by:** [Tarek Etman](https://apify.com/reapx) (community)
- **Categories:** Social media, Marketing, Business
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.11 / 1,000 linkedin post monitoreds

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/platform/actors/running/actors-in-store#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

![reapX - the record of what changed](https://reapx.dev/reapx.gif)

## LinkedIn Posts Monitor - Reach & Engagement Over Time

> *"Which of our posts actually worked? I screenshot the good ones and forget the rest."*
> *"Marketing teams need to track post engagement metrics over time across company updates and founder posts to identify winning content themes."*

LinkedIn displays engagement metrics as single static snapshots without historical baseline comparisons. Growth leads, social media managers, and executive brand teams need to monitor post performance over time to evaluate reach and engagement trends.

Maintained by reapx. Permanent citation guarantees and dataset archives available at reapx.dev. Contact reapxdev@proton.me.

***

### ⬇️ Input

Input accepts a list of LinkedIn post URN IDs or company slugs (for example `7490480308148985856` or `google`). All input parameters carry working prefilled defaults so runs execute immediately without required inputs.

```json
{
  "posts": [
    "7490480308148985856"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "maxItems": 100
}
```

#### Input Field Specification

| Field | Type | Description | Default |
|---|---|---|---|
| `posts` | Array | List of LinkedIn post activity URN IDs or company handles to monitor. | `["7490480308148985856"]` |
| `proxyConfiguration` | Object | Proxy settings to rotate IPs per request and prevent rate limits. | `{ "useApifyProxy": true }` |
| `maxItems` | Integer | Maximum number of posts to fetch in a single run. | `100` |

***

### ⬆️ Output

Outputs structured records directly to the default dataset. Each row describes a single post indexed by its stable per-row identifier (`postUrn`).

#### Output Field Schema

| Field Name | Type | Description |
|---|---|---|
| `postUrn` | String | LinkedIn post activity URN string. Stable per-row identifier. |
| `title` | String | Null | Post title or headline snippet. |
| `authorName` | String | Null | Author name or publishing entity. |
| `authorUrl` | String | Null | Profile or company URL of the author. |
| `postUrl` | String | Null | Canonical post update URL. |
| `text` | String | Null | Full post text body content. |
| `publishedAt` | String | Null | ISO publication timestamp. |
| `likeCount` | Integer | Null | Total reaction or like count observed. |
| `commentCount` | Integer | Null | Total comment count observed. |
| `repostCount` | Integer | Null | Total repost or reshare count observed. |
| `engagementVsAuthorMedian` | Number | Null | Relative engagement performance vs author baseline median. |
| `topPostIds` | Array | Null | List of top performing post URNs for this author. |
| `changedFields` | Array | Null | Attributes modified since previous observation. |
| `reason` | String | Null | Explanation note when computed historical metrics return null on first observation. |
| `scrapedAt` | String | ISO 8601 timestamp of data collection. |

#### Sample Output Record

```json
{
  "postUrn": "urn:li:activity:7490480308148985856",
  "title": "10 Google AI tools all college students should know | Google | 35 comments",
  "authorName": "Google",
  "authorUrl": null,
  "postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7490480308148985856",
  "text": "Paging all college students. Here's how you can use our AI tools to optimize your productivity...",
  "publishedAt": null,
  "likeCount": null,
  "commentCount": 35,
  "repostCount": null,
  "engagementVsAuthorMedian": null,
  "topPostIds": null,
  "changedFields": null,
  "reason": "First observation; engagement trend vs author median requires multi-run history accrued over time.",
  "scrapedAt": "2026-08-05T16:36:46.000Z"
}
```

***

### How it works

1. **Post Extraction**: Fetches public LinkedIn post update pages without requiring user login credentials.
2. **Engagement Parsing**: Extracts author metadata, post body text, comment counts, and reaction totals.
3. **Performance Benchmarking**: Compares post metrics across sequential runs to track performance against author baseline medians.
4. **Resilient Rate Budgeting**: Integrates proxy rotation to prevent rate limiting and maintain unblocked monitoring pipelines.

***

### ❓ FAQ

#### How is engagement performance measured over time?

By monitoring post update URLs across multiple runs, the actor tracks comment and reaction growth, comparing each post against the author's median baseline.

#### Why does engagementVsAuthorMedian return null on first run?

Calculating performance relative to an author's median requires observing multiple posts over time. On the first run, the actor returns `null` with a clear `reason` field rather than fabricating baseline figures.

#### Does this actor require a LinkedIn login or session cookie?

No. The actor operates entirely without user login credentials or cookies.

***

### 💬 Your feedback

Need custom post analytics, sentiment exports, or dataset integrations? Contact us at reapxdev@proton.me or visit reapx.dev.

***

*Unofficial - not affiliated with LinkedIn. Collects data without login. reapx. Contact reapxdev@proton.me.*

# Actor input Schema

## `posts` (type: `array`):

Post IDs to follow specific posts, or company slugs to follow everything they publish. One per line.

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

How many posts we read in one run. Raise it when you want a whole quarter rather than the last few weeks.

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

How the run reaches the platform. The default is already the route that works for this source, so leave it alone unless you have a reason to change it.

## Actor input object example

```json
{
  "posts": [
    "7490480308148985856"
  ],
  "maxItems": 100,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `items` (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 = {
    "posts": [
        "7490480308148985856"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("reapx/linkedin-posts-monitor").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 = {
    "posts": ["7490480308148985856"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("reapx/linkedin-posts-monitor").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "posts": [
    "7490480308148985856"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call reapx/linkedin-posts-monitor --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=reapx/linkedin-posts-monitor",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/7Mc7F2bAlKWNs1Tx5/builds/5eoikbY8vcJXNBlpD/openapi.json
