LinkedIn Profile Posts Scraper avatar

LinkedIn Profile Posts Scraper

Pricing

from $1.00 / 1,000 post scrapeds

Go to Apify Store
LinkedIn Profile Posts Scraper

LinkedIn Profile Posts Scraper

Scrape LinkedIn profile posts with automatic pagination. No cookies needed. Get rich post data including engagement metrics, content categories, hashtags, mentioned companies/profiles, and computed fields not available in other actors.

Pricing

from $1.00 / 1,000 post scrapeds

Rating

5.0

(1)

Developer

Capable Cauldron

Capable Cauldron

Maintained by Community

Actor stats

1

Bookmarked

20

Total users

6

Monthly active users

8 hours ago

Last modified

Share

Scrape every post from any LinkedIn profile with no cookies and no login. You get the text, media, article links, a full reaction breakdown, comment and repost counts, and 55 enriched fields per post including computed engagement totals, content category, hashtags and mentioned companies. Give it one or more profile usernames, set how many posts you want, and it paginates on its own.

Nothing touches your own LinkedIn account. Built on Apify, so you can schedule runs to track a profile over time, trigger them from the API or a webhook, and push results to Google Sheets or your warehouse. Click Try for free to open it in Console. Apify's free plan includes $5 of monthly credit, which buys about 1,600 posts.

See it run in 21 seconds:

What can LinkedIn Profile Posts Scraper do?

  • ๐Ÿ”“ No account needed, so there is no risk to your LinkedIn profile
  • ๐Ÿ“œ Automatic pagination: ask for 10 posts or 2,000 and the Actor handles paging
  • ๐Ÿ‘ฅ Many profiles per run, one username or hundreds
  • ๐Ÿงฎ 55 fields per post, pre-computed so you don't have to:
    • total engagement (reactions + comments + reposts)
    • content category (text, image, video, article, document, carousel, poll)
    • hashtags extracted and counted
    • mentioned companies and profiles as structured objects
    • reaction breakdown (like, love, celebrate, support, insight, funny, curious)
    • ISO-8601 dates for clean sorting, word and character counts
  • ๐Ÿ” Repost filter: keep only the profile's own writing with includeReposts: false
  • ๐Ÿ’ธ Hard cost cap on dataset items
  • ๐Ÿ“ค Export to CSV, Excel, JSON or XML, or pull results via API

What data can you extract from LinkedIn posts?

Grouped by what you would use them for:

GroupFields
Identityactivity_urn, share_urn, full_urn, post_url, post_type, is_repost, is_shared_content
Contenttext, content_category, word_count, char_count, hashtags, hashtag_count
Mediamedia_type, media_url, media_thumbnail
Article / documenthas_article, article_url, article_title, article_subtitle, has_document, document_title, document_page_count
Authorauthor_name, author_headline, author_username, author_profile_url, author_profile_picture
Engagementtotal_reactions, reaction_like, reaction_love, reaction_celebrate, reaction_support, reaction_insight, reaction_funny, reaction_curious, num_comments, num_reposts, total_engagement
Mentionsmentioned_companies, mentioned_profiles
Datesposted_date, posted_relative, posted_timestamp, posted_date_iso
Run metadataprofile_username, scraped_at

Three pre-built dataset views in Console: Overview, Engagement Metrics and Content Analysis.

How to scrape LinkedIn posts from a profile

linkedin profile posts scraper input form

  1. Click Try for free to open the Actor in Apify Console.
  2. Enter one or more usernames. That is the last part of a profile URL, e.g. satyanadella from linkedin.com/in/satyanadella. Full URLs and member IDs work too.
  3. Set Max posts per profile. 100 is enough to see what the data looks like.
  4. Turn off Include reposts if you only want the profile's own writing.
  5. Click Start. Posts stream into the dataset as each page arrives.
  6. Open the Storage tab and export as CSV, Excel or JSON, or fetch the dataset from the API.

How much does it cost to scrape LinkedIn posts?

Pricing is per event. There is no charge for compute time.

EventWhen it firesPrice
post-scrapedEach post added to your dataset$0.003
profile-processedEach profile in usernames$0.01
Actor startStandard Apify fee per run$0.00005

Volume discounts on paid Apify plans bring the per-post price down to $0.001.

Worked examples

  • 100 posts from 1 profile costs $0.31
  • 1,000 posts from 10 profiles costs $3.11
  • 5,000 posts from 50 profiles costs $15.51

Apify's free plan ($5/month) covers about 1,600 posts. Nothing is charged on top. maxDatasetItems is a hard ceiling; the run stops as soon as it is reached.

Input

FieldTypeRequiredDefaultDescription
usernamesarrayyesโ€”LinkedIn usernames, profile URLs or member IDs, e.g. ["satyanadella", "williamhgates"]
maxPostsPerProfileintegerno100Posts to collect per profile, 1โ€“2,000
includeRepostsbooleannotrueWhen false, returns only posts the profile authored (see below)
maxDatasetItemsintegerno10,000Hard cap on total posts across all profiles
maxRetriesintegerno3Retries for a failed request
{
"usernames": ["adamselipsky"],
"maxPostsPerProfile": 100,
"includeReposts": true,
"maxDatasetItems": 10000
}

Filtering out reposts

A LinkedIn feed mixes three kinds of posts:

post_typeWhat it isKept when includeReposts: false?
regularWritten by the profileYes
repostSomeone else's post, reshared as-isNo
quoteSomeone else's post with added commentaryNo

Set includeReposts to false for voice analysis, content audits or training data where reshared material is noise. Every row also carries is_shared_content so you can verify the filter yourself.

You still get the full count you asked for. Filtering happens per page, and the Actor keeps paginating until it has maxPostsPerProfile original posts. The only exception is a profile that does not have that many, in which case you get everything available and the log says how many were filtered. Reshare-heavy profiles take a little longer to reach the count.

Output

One item per post. This is what the input above produces:

{
"activity_urn": "7470793400858984449",
"share_urn": "7470793399273537536",
"full_urn": "urn:li:activity:7470793400858984449",
"post_url": "https://www.linkedin.com/posts/adamselipsky_achieving-success-with-ai-the-official",
"post_type": "repost",
"is_repost": true,
"is_shared_content": true,
"text": "My conversations with customers today are less about whether to adopt AI...",
"content_category": "article",
"word_count": 157,
"char_count": 990,
"hashtags": ["AI", "CloudComputing"],
"hashtag_count": 2,
"media_type": "image",
"media_url": "https://media.licdn.com/dms/image/...",
"media_thumbnail": "https://media.licdn.com/dms/image/...",
"has_article": true,
"article_url": "https://blogs.microsoft.com/blog/2026/06/16/achieving-success-with-ai/",
"article_title": "Achieving success with AI - The Official Microsoft Blog",
"article_subtitle": "blogs.microsoft.com",
"has_document": false,
"document_title": "",
"document_page_count": null,
"author_name": "Adam Selipsky",
"author_headline": "CEO of Helix Digital Infrastructure. Former CEO at Amazon Web Services.",
"author_username": "adamselipsky",
"author_profile_url": "https://www.linkedin.com/in/adamselipsky",
"author_profile_picture": "https://media.licdn.com/dms/image/...",
"total_reactions": 2173,
"reaction_like": 1882,
"reaction_love": 44,
"reaction_celebrate": 204,
"reaction_support": 12,
"reaction_insight": 30,
"reaction_funny": 1,
"reaction_curious": 0,
"num_comments": 187,
"num_reposts": 55,
"total_engagement": 2415,
"mentioned_companies": [
{ "name": "Amazon Web Services (AWS)", "urn": "https://www.linkedin.com/company/amazon-web-services/" }
],
"mentioned_profiles": [],
"posted_date": "2026-06-11 11:05:47",
"posted_relative": "1w",
"posted_timestamp": 1781175947394,
"posted_date_iso": "2026-06-11T11:05:47.394000+00:00",
"profile_username": "adamselipsky",
"scraped_at": "2026-06-17T15:30:00.000000+00:00"
}

Each link opens a pre-filled run you can start in one click:

API and integrations

Run it from your own code with the Apify API. Swap in your token; the Actor id stays as written.

Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_API_TOKEN>")
run = client.actor("capable_cauldron/linkedin-profile-posts-scraper").call(run_input={
"usernames": ["satyanadella"],
"maxPostsPerProfile": 100,
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["posted_date_iso"], item["total_engagement"], item["text"][:80])

JavaScript

import { ApifyClient } from "apify-client";
const client = new ApifyClient({ token: "<YOUR_API_TOKEN>" });
const run = await client.actor("capable_cauldron/linkedin-profile-posts-scraper").call({
usernames: ["satyanadella"],
maxPostsPerProfile: 100,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();

CLI

$echo '{"usernames": ["satyanadella"], "maxPostsPerProfile": 100}' | apify call capable_cauldron/linkedin-profile-posts-scraper --silent --output-dataset

Connect results to Google Sheets, Airtable, Slack, Make, Zapier or n8n from the Actor's Integrations tab, run it on a Schedule to track a profile weekly, or fire a webhook when a run finishes.

FAQ

This Actor collects posts that are publicly visible on LinkedIn, without logging in. You are responsible for how you use the data, including compliance with LinkedIn's terms and the data-protection laws that apply to you (GDPR, CCPA). The Actor is an independent tool and is not affiliated with or endorsed by LinkedIn.

Do I need LinkedIn cookies or an account?

No. The Actor reads public post data without a session, so there is nothing to export or refresh and your own account is never involved.

Why did I get fewer posts than I asked for?

The profile has fewer posts than maxPostsPerProfile, or maxDatasetItems was reached across all profiles. With includeReposts: false, a profile that mostly reshares may not have enough original posts. The run log reports the count and how many were filtered.

Can I scrape company pages?

This Actor is built for personal profiles (linkedin.com/in/...). Company page URLs are not supported.

How far back does it go?

As far as the profile's activity feed allows. Set maxPostsPerProfile up to 2,000 to walk a long history.

Can I scrape LinkedIn posts with Python?

Yes. See the Python snippet under API and integrations. The apify-client package is on PyPI; pass the same input you would use in Console.

How do I also get the comments on each post?

Feed the post_url values into LinkedIn Comment Scraper. That Actor needs your LinkedIn cookies because LinkedIn hides comments from anonymous visitors.

Other Actors by capable_cauldron

ActorWhat it does
LinkedIn Comment ScraperComments and replies from any LinkedIn post, with commenter name, headline and profile URL
Multi-Channel Ad IntelligenceCompetitor ads from the Meta, Google, LinkedIn and TikTok ad libraries in one normalized dataset
Investor Database Search145,000+ VCs, angels and family offices with partner emails, filtered by stage, industry and geography

Support

Found a bug or need a field that isn't here? Open an issue on the Actor's Issues tab. Issues are usually answered within 24 hours. If you need a custom version (company pages, comment threads, a private deployment), describe it in an issue and we will scope it.