# LinkedIn Top Content Scraper (No Cookies or Login Required) (`curly/linkedin-top-content-scraper`) Actor

Select LinkedIn Top Content categories or trending topics from a built-in picker and scrape ranked public posts with authors, dates, media, and engagement. Sort by LinkedIn rank, date, reactions, comments, or total engagement. No login or proxy setup. ($0.50 USD per 1,000 results)

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

## Pricing

$0.50 / 1,000 top content results

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

## LinkedIn Top Content Scraper (No Cookies or Login Required)

Scrape and sort ranked public posts from LinkedIn Top Content and trending-topic pages. Select categories, editor picks, or trending subjects from the built-in picker, choose a post limit and sort order, then get structured post text, ranking, author details, publication dates, media, articles, hashtags, mentions, and engagement.

No LinkedIn cookies, account, login, or proxy setup is required. Proxies, rotation, validation, and retries are included.

### Quick start

1. Select one or more categories or trending topics from the multi-select list. No URL is required.
2. Set the maximum number of posts returned from each topic, from 1 to 10.
3. Choose how posts should be sorted within each topic.
4. Click **Start** and download the results as JSON, CSV, Excel, XML, or another supported dataset format.

That is the entire setup. The Actor has no technical controls to configure.

#### Recommended input: topic picker

```json
{
  "topics": [
    "marketing",
    "artificial-intelligence",
    "innovation/ai-trends-and-innovations/top-emerging-ai-use-cases-and-their-capabilities"
  ],
  "maxResultsPerTopic": 5,
  "sortBy": "most_engagement"
}
```

The picker includes:

- All main LinkedIn Top Content categories
- LinkedIn editor picks and popular subtopics
- A current snapshot of the trending subjects featured on LinkedIn's Top Content homepage

You can select up to 100 topics per run and request from 1 to 10 posts from each topic. The result limit applies separately to every selected topic. Duplicate topics are processed once.

#### Advanced URL mode

LinkedIn adds new and deeply nested topics over time. If a topic is not listed in the picker, leave `topics` empty and use `topicUrls`:

```json
{
  "topicUrls": [
    "https://www.linkedin.com/top-content/marketing/social-media-engagement-tactics/",
    "career/mentorship-coaching/how-to-find-the-right-mentor-for-your-career"
  ],
  "maxResultsPerTopic": 5,
  "sortBy": "linkedin_rank"
}
```

Topic-picker mode and URL mode cannot be combined in one run. URL mode accepts complete `linkedin.com/top-content/...` URLs or the path after `/top-content/`. LinkedIn company pages, personal profiles, post URLs, and non-LinkedIn URLs are rejected.

Sorting options:

- `linkedin_rank`: LinkedIn's original order
- `newest`: newest publicly dated posts first
- `most_engagement`: highest combined reactions, comments, and reposts first
- `most_reactions`: highest reaction count first
- `most_comments`: highest comment count first

Only `linkedin_rank` is LinkedIn's native page order. The other options sort the publicly available posts inside the scraper. Sorting is applied separately within each topic. `topic_rank` always preserves LinkedIn's original ranking, while `sort_position` identifies the returned position for the selected sort.

### What you get

Each dataset item is one ranked LinkedIn post and includes:

- Topic title, category, path, URL, original LinkedIn rank, and selected sort position
- Post ID, canonical post URL, text, and publication time
- Author name, profile URL, headline, follower count, avatar, and public badges
- Content type: text, image, video, document, article, poll, or event
- Public media and linked-article details
- Hashtags, mentions, and external URLs
- Reaction, comment, and repost counts when publicly visible

Example result:

```json
{
  "topic_title": "Marketing",
  "topic_path": "marketing",
  "topic_url": "https://www.linkedin.com/top-content/marketing/",
  "topic_category": "marketing",
  "topic_rank": 1,
  "sort_position": 1,
  "sort_by": "most_engagement",
  "post_id": "7432410076788781057",
  "post_url": "https://www.linkedin.com/posts/example_marketing-activity-7432410076788781057-abcd",
  "author": {
    "name": "Example Author",
    "url": "https://www.linkedin.com/in/example",
    "headline": "Founder at Example",
    "follower_count": 12345,
    "avatar_url": "https://media.licdn.com/example-avatar.jpg",
    "badges": ["Influencer"]
  },
  "text": "An example public post about a marketing lesson.",
  "published_at": "2026-02-25T13:04:09.808Z",
  "relative_time": "5mo",
  "content_type": "image",
  "is_repost": false,
  "media": [
    {
      "type": "image",
      "url": "https://media.licdn.com/example-post.jpg",
      "thumbnail_url": null,
      "title": null,
      "alt_text": "Example chart"
    }
  ],
  "article": null,
  "hashtags": ["Marketing"],
  "mentions": [],
  "external_urls": [],
  "reaction_count": 703,
  "comment_count": 98,
  "repost_count": null,
  "scraped_at": "2026-07-29T12:00:00.000Z",
  "source": "linkedin_top_content"
}
```

The output always uses the same complete schema. Fields that LinkedIn does not expose publicly remain `null` or an empty array. No `_html` fields are returned.

### Price

The price is **$0.0005 per stored post** — **$0.50 per 1,000 results**. You pay for returned dataset items, not invalid or failed topic inputs.

### Run with the API

```bash
curl -X POST \
  "https://api.apify.com/v2/acts/curly~linkedin-top-content-scraper/run-sync-get-dataset-items?format=json" \
  -H "Authorization: Bearer $APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  --data '{"topics":["marketing","artificial-intelligence"],"maxResultsPerTopic":5,"sortBy":"most_engagement"}'
```

The same input works with the Apify API client, schedules, webhooks, and integrations.

### Limits and responsible use

- LinkedIn's public Top Content page currently exposes up to 10 ranked posts per topic.
- Trending-topic suggestions in the picker are a snapshot of LinkedIn's public homepage. Use Advanced URL mode for a new topic that appears before the next picker update.
- A post can appear under multiple topics with a different topic and rank.
- Rankings and engagement counts can change whenever LinkedIn updates the public page.
- Some optional author, engagement, article, or media fields may not be public on every card.
- Use the Actor only for lawful purposes and comply with applicable privacy, data-protection, and platform rules.

### FAQ

#### Do I need LinkedIn cookies or an account?

No. The Actor reads public Top Content pages without your LinkedIn credentials.

#### Do I need to configure a proxy?

No. Proxy access and rotation are included automatically.

#### How many posts does each topic return?

Choose any value from 1 to 10 in **Maximum posts per topic**. LinkedIn currently publishes at most 10 posts on each no-login Top Content topic page.

#### Can I scrape a nested topic?

Yes. Select a listed subtopic from the picker. If it is not listed, leave the picker empty and put its complete URL or the path after `/top-content/` in **Advanced URL mode**.

#### How do I know which topics are available?

Start with the categories, editor picks, and current trending suggestions in the multi-select. If a topic is not listed and you already have its topic URL or path, paste it into **Advanced URL mode**.

#### Can I sort by date or engagement?

Yes. Choose newest, total engagement, reactions, comments, or LinkedIn's original ranking. LinkedIn ranking is native; the other sorts are calculated by the scraper from the public posts. The original LinkedIn position remains available in `topic_rank`.

#### Why is a field `null`?

LinkedIn does not expose every value on every public card. The Actor preserves missing values instead of guessing.

# Actor input Schema

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

Select one or more LinkedIn categories, editor picks, or current trending subjects. No LinkedIn URL is required.

## `maxResultsPerTopic` (type: `integer`):

Set the maximum number of public posts returned separately from each selected topic.

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

LinkedIn ranking uses the page's native order. Date and engagement options are calculated by the scraper from the public posts; the original rank is always kept in topic\_rank.

## `topicUrls` (type: `array`):

Advanced fallback for a topic not yet listed in the picker. Paste complete LinkedIn Top Content URLs or topic paths. Leave the topic picker empty; the two modes cannot be combined.

## Actor input object example

```json
{
  "topics": [
    "marketing",
    "artificial-intelligence"
  ],
  "maxResultsPerTopic": 10,
  "sortBy": "linkedin_rank",
  "topicUrls": []
}
```

# Actor output Schema

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

No description

## `runSummary` (type: `string`):

No description

## `failedInputs` (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 = {
    "topics": [
        "marketing",
        "artificial-intelligence"
    ],
    "maxResultsPerTopic": 10,
    "sortBy": "linkedin_rank"
};

// Run the Actor and wait for it to finish
const run = await client.actor("curly/linkedin-top-content-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 = {
    "topics": [
        "marketing",
        "artificial-intelligence",
    ],
    "maxResultsPerTopic": 10,
    "sortBy": "linkedin_rank",
}

# Run the Actor and wait for it to finish
run = client.actor("curly/linkedin-top-content-scraper").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 '{
  "topics": [
    "marketing",
    "artificial-intelligence"
  ],
  "maxResultsPerTopic": 10,
  "sortBy": "linkedin_rank"
}' |
apify call curly/linkedin-top-content-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/Fyb1Fsut0ZB1RuaWt/builds/3vc3jTovbpcJCdByO/openapi.json
