# LinkedIn Trending Posts & Top Voices Feed Scraper (`vexaloom-labs/linkedin-trending-posts-and-top-voices-feed`) Actor

Pull LinkedIn's trending and top-performing posts by topic keyword, with reaction/comment/repost counts, a per-reaction-type breakdown, author headline, and media type, so you can filter by engagement thresholds, date window, or media type.

- **URL**: https://apify.com/vexaloom-labs/linkedin-trending-posts-and-top-voices-feed.md
- **Developed by:** [vexaloom-labs](https://apify.com/vexaloom-labs) (community)
- **Categories:** Social media, Lead generation, Automation
- **Stats:** 1 total users, 0 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.49 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.
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 Top Content & Top Voices Directory Scraper

Scrape **LinkedIn's public Top Content directory** and its quarterly **Top Voices** class articles. The directory is LinkedIn's own editorial collection of topic pages — each page ranks 9–10 posts from recognized professionals — and the Top Voices articles list the honorees of each class. No login, cookie, API key, or proxy setup is required.

### What this actor does

- **Three modes:** `topContent` for the curated topic directory, `topVoices` for quarterly class lists, and `postUrls` to enrich specific public posts.
- **Depth 2–4:** scrape only the selected topic pages, add their subtopics, or add the leaf pages beneath those subtopics.
- **Exact dates and full text:** every post carries its real ISO publish date, full text, first-line headline, author, follower count, avatar, media, topic path, and editorial rank.
- **Top comments:** the public post page embeds up to 10 comments with author, date, text, and reactions.
- **Filters and sorting:** date windows, exact date bounds, media type, minimum reactions/comments, Influencer-badged authors, and five sort orders.
- **Honest output:** unavailable fields are omitted, never filled with zero or a placeholder. Duplicate posts across topics are delivered once.

### Output per post (`mode = topContent` or `postUrls`)

- `recordType` — `post`
- `postId` — LinkedIn activity ID
- `postUrl` — canonical public post URL
- `headline` — the post's first line
- `content` — full post text
- `postedAt` — exact ISO 8601 publish timestamp
- `authorName`, `authorProfileUrl`, `authorAvatar`
- `authorHeadline` — author subtitle when the page shows one
- `authorFollowers` — follower count shown by LinkedIn
- `authorIsInfluencer` — whether the public author card carries the Influencer marker
- `authorBadge` — `Influencer` when that marker is present
- `reactionsCount`, `commentsCount` — real served counts
- `comments[]` — up to `maxComments` embedded comments, each with `authorName`, `text`, `postedAt`, and `reactionsCount`
- `mediaType` — `text`, `image`, `video`, or `article`
- `mediaUrls[]`, `mediaItems[]` — image/video URLs, plus thumbnail, duration, and caption URL for videos
- `articleTitle`, `articleUrl` — shared article or newsletter link
- `linkPreview` — `{url, title}` for shared article links
- `hashtags[]`, `mentions[]`, `externalUrls[]` — parsed from the post text
- `topicPath`, `topicTitle`, `topicCategory`, `topicUrl` — the directory location that surfaced the post
- `topicRank` — 1-based position on that topic page
- `engagementScore` — `reactions + 3 × comments`
- `scrapedAt` — ISO 8601 timestamp of the run

### Output per Top Voices honoree (`mode = topVoices`)

- `recordType` — `topVoice`
- `voiceName`, `voiceProfileUrl`
- `voiceHeadline` — when the honoree card shows one
- `voiceFollowers` — follower count on the card
- `voiceBadge` — `Influencer` when the card carries the marker
- `voiceClass` — class label such as `September 2026 US`
- `voiceRegion` — `US` or `Global` when the class title identifies it
- `sourceUrl` — the class article URL
- `scrapedAt`

### Input

| Field | Type | Default | Description |
|---|---|---|---|
| `mode` | string | `auto` | `auto`, `topContent`, `topVoices`, or `postUrls`. Auto picks post URLs first, then Top Voices class URLs, then the directory. |
| `topics` | array | – | Topic or subtopic paths selected from the picker, or custom `/top-content/...` paths and URLs. |
| `maxDepth` | string | `2` | `2` = selected topic pages only; `3` = add subtopics; `4` = add leaf pages beneath subtopics. |
| `startUrls` | array | – | Exact Top Content pages to scrape instead of expanding topics. |
| `postUrls` | array | – | Public post, activity, share, or ugcPost URLs to enrich. |
| `topVoiceClassUrls` | array | – | LinkedIn News Top Voices class articles; leave empty for the latest US class. |
| `maxVoices` | integer | `100` | Maximum honorees after deduplication. |
| `maxPosts` | integer | `50` | Maximum posts delivered after deduplication, filters, and sorting. |
| `sortBy` | string | `linkedin_rank` | `linkedin_rank`, `newest`, `most_reactions`, `most_comments`, or `most_engagement`. |
| `dateRange` | string | – | `24h`, `7d`, `30d`, `90d`, or `1y`; leave empty for any time. |
| `postedAfter` | string | – | Inclusive lower date bound (`YYYY-MM-DD`). |
| `postedBefore` | string | – | Inclusive upper date bound (`YYYY-MM-DD`). |
| `minReactions` | integer | `0` | Minimum reactions. |
| `minComments` | integer | `0` | Minimum comments. |
| `mediaTypeFilter` | string | – | `text`, `image`, `video`, or `article`. |
| `onlyInfluencers` | boolean | `false` | Keep only authors with the public Influencer marker. |
| `includeComments` | boolean | `true` | Attach the embedded comments. |
| `maxComments` | integer | `10` | Comments to keep per post (1–10; public pages embed about 10). |
| `includeVideoTranscript` | boolean | `false` | Add a transcript when the public video publishes one. |
| `proxyConfiguration` | object | – | Optional override. The actor works without a proxy. |

#### Example: a quick topic sample

```json
{
  "mode": "topContent",
  "topics": ["artificial-intelligence"],
  "maxDepth": 2,
  "maxPosts": 10,
  "includeComments": true
}
```

#### Example: deeper crawl with filters

```json
{
  "mode": "topContent",
  "topics": ["leadership", "future-of-work"],
  "maxDepth": 3,
  "maxPosts": 200,
  "sortBy": "most_engagement",
  "dateRange": "1y",
  "minReactions": 50,
  "onlyInfluencers": true,
  "includeComments": false
}
```

#### Example: exact topic pages

```json
{
  "mode": "topContent",
  "startUrls": [
    "https://www.linkedin.com/top-content/artificial-intelligence/advancing-ai-development/",
    "https://www.linkedin.com/top-content/career/resume-tips/"
  ],
  "maxPosts": 20
}
```

#### Example: enrich specific posts

```json
{
  "mode": "postUrls",
  "postUrls": [
    "https://www.linkedin.com/posts/williamhgates_in-many-parts-of-the-world-the-standard-activity-7462665106229727232-ud0G",
    "https://www.linkedin.com/feed/update/urn:li:activity:7504986609365352448/"
  ],
  "maxComments": 5
}
```

#### Example: a Top Voices class

```json
{
  "mode": "topVoices",
  "topVoiceClassUrls": ["https://www.linkedin.com/pulse/meet-september-2026-us-top-voices-experts-leaders-creators-d0tjc"],
  "maxVoices": 100
}
```

### Use cases

- **Content research:** see which posts LinkedIn's editors rank first in a topic, with exact dates and full text.
- **Influencer discovery:** collect authors, follower counts, and public Influencer badges from a niche.
- **PR and media prospecting:** build a list of Top Voices honorees with profile URLs and headlines.
- **Benchmarking:** compare reactions, comments, and media formats across topics and time windows.
- **Corpus building:** export complete posts with their top comments for analysis or RAG pipelines.

### Limitations and data freshness

- **The directory is curated, not a live trending feed.** In the October 2026 research sample the newest post was dated **2026-09-18**. Posts are often weeks or months old, and a 24-hour or 7-day filter is frequently empty. Every record carries its exact `postedAt`, and the run status reports the newest date found.
- **Each topic page ranks 9–10 posts.** There is no public pagination; use `maxDepth` and more topics, subtopics, or `startUrls` to reach more posts.
- **Comments are capped at the roughly 10 embedded on the public post page.** Commenter profile URLs are not published in that data.
- **Public fields vary by post.** Author headlines appear on about two thirds of sampled posts, and the Influencer marker on about seven in ten. Avatar and follower count are present on every sampled post.
- **Some fields are not published on the public surface:** repost counts, reaction-type breakdowns, view counts, and company-tagged mentions are omitted rather than fabricated.
- **Top Voices class layouts differ.** The US class cards expose name, headline, followers, badge, and profile URL; some global class articles expose the honorees named in the article body with name and profile URL only. Comment-section and recommended profiles are not counted as honorees.
- **A depth-4 crawl is large.** The directory has roughly 16,000 leaf pages; set `maxPosts` and expect a long run when expanding a topic all the way down.
- **Public pages and LinkedIn's terms.** This actor reads only public pages and never logs in. LinkedIn's robots policy restricts automated access; you are responsible for how you use the data. This actor is not affiliated with or endorsed by LinkedIn.

### FAQ

**Do I need a LinkedIn account, cookie, or API key?** No. Every mode reads public pages. Old tasks that still send a `cookie` or `language` value keep running; those values are ignored and mentioned in the run status.

**Is this a live "trending now" feed?** No. It is LinkedIn's editorial Top Content directory, which is updated on LinkedIn's schedule. Check `postedAt` rather than assuming today's date.

**Why did I get fewer posts than `maxPosts`?** A topic page holds only 9–10 posts, duplicates across topics are removed, and your filters may remove more. Increase `maxDepth`, add topics or `startUrls`, or loosen the filters.

**Why is my date filter empty?** The curated directory often has no posts inside 24 hours, 7 days, or 30 days. Try `90d` or `1y`, or leave the date filter empty.

**Are the comments complete?** No. Public post pages embed about 10 comments; the actor delivers those, up to `maxComments`, and does not invent the rest.

**What does `authorIsInfluencer` mean?** It reflects the public Influencer marker on the author card. It is not a claim that the author belongs to a current Top Voices class — use the `topVoices` mode for class lists.

**Why are reposts, reaction breakdowns, or views missing?** Those values are not published on the public pages. They are omitted instead of being returned as zero.

**Can I scrape a subtopic or leaf page directly?** Yes. Put any `/top-content/...` path in `topics` or a full URL in `startUrls`.

**What is the difference between `topContent` and `topVoices`?** `topContent` returns ranked directory posts. `topVoices` returns honoree records from LinkedIn News class articles, using the `voice*` fields.

# Actor input Schema

## `mode` (type: `string`):

What to scrape. 'Top Content directory' crawls LinkedIn's public curated topic pages; 'Top Voices class' reads a quarterly LinkedIn News honoree list; 'Post URLs' enriches specific public posts.

## `topics` (type: `array`):

Pick one or more Top Content topics or subtopics, or paste any /top-content/... path or URL (custom values are accepted). Topic page = ~9-10 ranked posts; subtopics add ~20 more pages each. (mode=topContent/auto)

## `maxDepth` (type: `string`):

How deep to crawl each selected topic. 2 = the topic page only (~10 posts); 3 = topic + its 20 subtopics; 4 = subtopics + their leaves (very large; use maxPosts). (mode=topContent/auto)

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

Exact /top-content/... pages to scrape instead of expanding topics. Each page returns its ranked posts only. (mode=topContent/auto)

## `postUrls` (type: `array`):

Public LinkedIn post URLs to enrich directly: /posts/..., /feed/update/urn:li:activity|share|ugcPost:..., or country subdomains. (mode=postUrls/auto)

## `topVoiceClassUrls` (type: `array`):

LinkedIn News Top Voices class articles (/pulse/...). Leave empty to use the latest US class. (mode=topVoices/auto)

## `maxVoices` (type: `integer`):

Maximum Top Voices honorees to return after deduplication. (mode=topVoices)

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

Maximum posts to deliver after deduplication, filtering and sorting. Depth 2 across one topic usually has fewer than 10 unique posts; deeper crawls have more.

## `sortBy` (type: `string`):

Order of the delivered posts. 'LinkedIn rank' preserves each page's editorial order.

## `dateRange` (type: `string`):

Only return posts published inside this window. LinkedIn Top Content is a curated archive, so 24h/7d/30d windows are often empty.

## `postedAfter` (type: `string`):

Only return posts published on or after this date (YYYY-MM-DD).

## `postedBefore` (type: `string`):

Only return posts published on or before this date (YYYY-MM-DD).

## `minReactions` (type: `integer`):

Only return posts with at least this many reactions.

## `minComments` (type: `integer`):

Only return posts with at least this many comments.

## `mediaTypeFilter` (type: `string`):

Only return posts of one media type. Public Top Content pages contain text, image, video and article posts.

## `onlyInfluencers` (type: `boolean`):

Return only posts whose author carries LinkedIn's public 'Influencer' badge. This is not the same as a Top Voices class membership.

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

Attach the public comments embedded on each post page (up to maxComments).

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

Comments to keep per post. Public post pages embed about 10.

## `includeVideoTranscript` (type: `boolean`):

Add the transcript when a public video post publishes one.

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

Optional proxy override. The actor works without a proxy; it only falls back to Apify's datacenter proxy if LinkedIn blocks the request.

## Actor input object example

```json
{
  "mode": "topContent",
  "topics": [
    "artificial-intelligence"
  ],
  "maxDepth": "2",
  "startUrls": [],
  "postUrls": [],
  "topVoiceClassUrls": [],
  "maxVoices": 100,
  "maxPosts": 3,
  "sortBy": "linkedin_rank",
  "dateRange": "",
  "postedAfter": "",
  "postedBefore": "",
  "minReactions": 0,
  "minComments": 0,
  "mediaTypeFilter": "",
  "onlyInfluencers": false,
  "includeComments": true,
  "maxComments": 10,
  "includeVideoTranscript": false
}
```

# Actor output Schema

## `posts` (type: `string`):

Dataset containing scraped Top Content posts and Top Voices honoree records.

# 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 = {
    "mode": "topContent",
    "topics": [
        "artificial-intelligence"
    ],
    "maxDepth": "2",
    "startUrls": [],
    "postUrls": [],
    "topVoiceClassUrls": [],
    "maxVoices": 100,
    "maxPosts": 3,
    "sortBy": "linkedin_rank",
    "dateRange": "",
    "postedAfter": "",
    "postedBefore": "",
    "minReactions": 0,
    "minComments": 0,
    "mediaTypeFilter": "",
    "onlyInfluencers": false,
    "includeComments": true,
    "maxComments": 10,
    "includeVideoTranscript": false
};

// Run the Actor and wait for it to finish
const run = await client.actor("vexaloom-labs/linkedin-trending-posts-and-top-voices-feed").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 = {
    "mode": "topContent",
    "topics": ["artificial-intelligence"],
    "maxDepth": "2",
    "startUrls": [],
    "postUrls": [],
    "topVoiceClassUrls": [],
    "maxVoices": 100,
    "maxPosts": 3,
    "sortBy": "linkedin_rank",
    "dateRange": "",
    "postedAfter": "",
    "postedBefore": "",
    "minReactions": 0,
    "minComments": 0,
    "mediaTypeFilter": "",
    "onlyInfluencers": False,
    "includeComments": True,
    "maxComments": 10,
    "includeVideoTranscript": False,
}

# Run the Actor and wait for it to finish
run = client.actor("vexaloom-labs/linkedin-trending-posts-and-top-voices-feed").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 '{
  "mode": "topContent",
  "topics": [
    "artificial-intelligence"
  ],
  "maxDepth": "2",
  "startUrls": [],
  "postUrls": [],
  "topVoiceClassUrls": [],
  "maxVoices": 100,
  "maxPosts": 3,
  "sortBy": "linkedin_rank",
  "dateRange": "",
  "postedAfter": "",
  "postedBefore": "",
  "minReactions": 0,
  "minComments": 0,
  "mediaTypeFilter": "",
  "onlyInfluencers": false,
  "includeComments": true,
  "maxComments": 10,
  "includeVideoTranscript": false
}' |
apify call vexaloom-labs/linkedin-trending-posts-and-top-voices-feed --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,vexaloom-labs/linkedin-trending-posts-and-top-voices-feed"
        }
    }
}
```

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/GKUGR8NfNU7naugLT/builds/aAKya3BezjIgnbmjm/openapi.json
