# LinkedIn Article Scraper – Text, Authors & Links (`scrapingmonkey/linkedin-article-details-scraper`) Actor

Extract public LinkedIn Pulse articles by URL. Get body text, available HTML, authors, publishers, images, links, dates and engagement in one row per article.

- **URL**: https://apify.com/scrapingmonkey/linkedin-article-details-scraper.md
- **Developed by:** [ScrapingMonkey](https://apify.com/scrapingmonkey) (community)
- **Categories:**
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.00 / 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?

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

Extract the text and supporting details of public LinkedIn Pulse articles from their URLs. **LinkedIn Article Scraper** collects the article body, available HTML, author, publisher, images, links and engagement in one dataset row per article.

Use it to build a searchable reading library, compare published viewpoints or keep an editorial reference with the original author and source attached.

| At a glance | Details |
|---|---|
| 📥 Input | One or more full LinkedIn Pulse article URLs |
| 📤 Output | Article text, author, publisher, media, links, dates and engagement |
| 🔐 Login required | No LinkedIn credentials or cookies |
| ⚡ Processing | Up to 5 requests concurrently with automatic retries |
| 💾 Delivery | One dataset row per processed article; one table and matching JSON fields |

### What the LinkedIn article scraper extracts 🔎

The Actor reads the public article page and keeps its content together with the details needed to identify and cite it.

- Title, description, full available body text and article-body HTML
- Article URL and slug, publication and modification dates
- Author name, profile URL, image, type and visible follower count
- Publisher name, website and logo
- Cover image, article images, image alt text and cover flags
- Body links, section headings, language and keywords
- Word count, displayed reading time, likes and comment count

### How to scrape LinkedIn article details 🚀

1. Add a full `linkedin.com/pulse/…` article URL to `inputList`.
2. Add further article URLs for a batch.
3. Start the Actor and review the result status.
4. Export the dataset or connect it to your content workflow.

```json
{
  "inputList": [
    "https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"
  ]
}
```

Repeated valid inputs that resolve to the same article are normally processed once per run.

### LinkedIn article data fields and complete output 📦

| Field group | Included data |
|---|---|
| Content | Title, description, body, HTML and section headings |
| Attribution | Author and publisher names, links and images |
| Media and references | Cover image, image URLs, alt text and article links |
| Publication | Dates, language, keywords, word count and reading time |
| Engagement | Likes, comment count and author followers |

Complete illustrative success item with fictional content, not a live result:

```json
{
  "input": "https://www.linkedin.com/pulse/planning-a-research-library-maya-chen/",
  "status": "success",
  "slug": "planning-a-research-library-maya-chen",
  "url": "https://www.linkedin.com/pulse/planning-a-research-library-maya-chen/",
  "title": "Planning a research library",
  "description": "A practical starting point for organizing a team's published research.",
  "body": "Start with the questions your team needs to answer. Group source material by topic and record its publication date.\n\nReview the library each month. Remove outdated guidance and keep a link to the original publication.",
  "body_html": "<h2>Choose a focus</h2><p class=\"article-main__content\">Start with the questions your team needs to answer. Group source material by topic and record its publication date.</p><h2>Keep it useful</h2><p class=\"article-main__content\">Review the library each month. Remove outdated guidance and keep a link to the original publication.</p><img src=\"https://example.com/research-library.jpg\" alt=\"Research topics arranged by month\"/><a href=\"https://example.com/library-guide\">Library guide</a>",
  "cover_image": "https://example.com/library-cover.jpg",
  "images.url": [
    "https://example.com/library-cover.jpg",
    "https://example.com/research-library.jpg"
  ],
  "images.alt": [
    "",
    "Research topics arranged by month"
  ],
  "images.is_cover": [
    true,
    false
  ],
  "links.text": [
    "Library guide"
  ],
  "links.url": [
    "https://example.com/library-guide"
  ],
  "sections": [
    "Choose a focus",
    "Keep it useful"
  ],
  "author.type": "Person",
  "author.name": "Maya Chen",
  "author.url": "https://www.linkedin.com/in/maya-chen-example/",
  "author.image": "https://example.com/maya-chen.jpg",
  "author.followers": 1800,
  "publisher.name": "Northstar Research",
  "publisher.url": "https://example.com",
  "publisher.logo": "https://example.com/northstar-logo.png",
  "published_at": "2026-09-01T10:00:00Z",
  "modified_at": "2026-09-02T10:00:00Z",
  "reading_time": "1 min read",
  "word_count": 35,
  "likes": 24,
  "comments_count": 3,
  "language": "en",
  "keywords": [
    "Research",
    "Knowledge management"
  ]
}
```

Fields such as `author.name` and `publisher.url` are literal column names in both the table and JSON. The `images.*` lists align by position, as do `links.text` and `links.url`. Images and references stay inside the article row.

On successful rows, unavailable values can be empty strings, empty lists or zero counts. A failed row retains `input`, sets `status` to `failed` and leaves the data fields null.

### Input requirements and coverage ⚙️

| Parameter | Type | Required | Default and rules |
|---|---|---|---|
| `inputList` | array of strings | Yes | No default; at least one item. No fixed maximum number of inputs. |

Accepted inputs are full HTTP or HTTPS LinkedIn URLs with a `/pulse/` article path. Plain article slugs, profile URLs and ordinary feed posts are not accepted. Tracking parameters are removed from the requested URL.

The Actor collects known articles; it does not discover articles by keyword or paginate an author's publications. A readable article body is required for a successful result. HTML and optional metadata can be empty when LinkedIn exposes only part of the public page.

### LinkedIn article data use cases 🎯

#### Editorial research

Keep source text, publication dates, section headings and outbound references together when researching a topic.

#### Thought-leadership analysis

Compare themes and publication patterns across a selected set of articles while retaining author and publisher attribution.

#### Internal reading libraries

Index article text with its source URL so colleagues can find relevant material and return to the original publication.

#### Content reference audits

Review the links, images and keywords used in articles you manage or have permission to analyze.

### Pricing and billable article rows 💰

Check the Actor's **Pricing** tab for the current charging model and rate. The Store configuration is authoritative.

Under dataset-item pricing, each saved success or failed row can count as a billable item. Automatic retry attempts do not independently create additional rows. Repeated valid inputs are normally processed once.

Images, references and author details are part of the article row.

### LinkedIn article API and integrations 🔌

Replace `$ACTOR_ID` with the ID shown in the Actor API tab and `$APIFY_TOKEN` with your Apify token.

```bash
curl -X POST "https://api.apify.com/v2/acts/$ACTOR_ID/runs?token=$APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"inputList":["https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"]}'
```

Start runs through REST, Apify client libraries or schedules, and use webhooks to handle completion. Export the default dataset as JSON, CSV or Excel, or send it to Google Sheets, Make, Zapier and your own reporting tools.

### Reliability and limits ⚠️

Temporary request failures and selected access errors are retried automatically. A deleted article or a page without a usable article body produces a failed result. The Actor reads publicly available pages without LinkedIn credentials.

`body` contains plain text; `body_html` preserves the available article-body markup. The two can differ because image markup, headings and links are handled separately. Word count is taken from the page when supplied or calculated from the collected text. Missing engagement counts default to zero, which does not prove an article has no engagement.

### Frequently asked questions ❓

#### Does it collect the full article text?

It collects the body available on the public article page. An article without a readable body fails; gated or removed content is not unlocked.

#### Can I use a regular LinkedIn post URL?

Use LinkedIn Post Details Scraper for feed posts. This Actor accepts LinkedIn Pulse article URLs.

#### Are article comments included?

The output includes a comment count when exposed. It does not collect the comment texts.

#### Does it download article images?

It returns image URLs and available alt text. Image files are not saved as dataset attachments.

#### Why is body\_html empty when body has text?

LinkedIn can expose article text without the corresponding body markup. The text can still be returned successfully.

### Support, responsible use, and related actors 🛟

For a reproducible issue, contact support with the run ID, approximate time and a safe public example URL. Keep credentials and private data out of support messages.

Use public data in line with applicable privacy, copyright and platform requirements.

# Actor input Schema

## `inputList` (type: `array`):

Add one full linkedin.com/pulse article URL per item.

## Actor input object example

```json
{
  "inputList": [
    "https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"
  ]
}
```

# Actor output Schema

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

Actor dataset rows. Use the status column to distinguish successful extraction from failed processing.

# 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 = {
    "inputList": [
        "https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapingmonkey/linkedin-article-details-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 = { "inputList": ["https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"] }

# Run the Actor and wait for it to finish
run = client.actor("scrapingmonkey/linkedin-article-details-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 '{
  "inputList": [
    "https://www.linkedin.com/pulse/what-linkedin-pulse-article-why-matters-more-than-you-kerry-baker-adlwe"
  ]
}' |
apify call scrapingmonkey/linkedin-article-details-scraper --silent --output-dataset

```

## MCP server setup

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