LinkedIn Post Scraper
Pricing
from $2.99 / 1,000 results
LinkedIn Post Scraper
LinkedIn Post Scraper — Extract LinkedIn post data including text, author details, post URLs, timestamps, likes, comments, shares, media, hashtags, and engagement metrics. Useful for content research, competitor analysis, lead generation, audience insights, and social media monitoring.
Pricing
from $2.99 / 1,000 results
Rating
0.0
(0)
Developer
Social Data API
Maintained by CommunityActor stats
0
Bookmarked
8
Total users
5
Monthly active users
7 days ago
Last modified
Categories
Share
LinkedIn Post Scraper — Post Text, Dates, Comments and Reactions
LinkedIn Post Scraper extracts public posts from LinkedIn company pages, personal profiles and single post links. Each post comes back with its text, link, publish date, author name and headline, images or video cover, up to 10 comments, reaction types and the reaction and comment counts. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a social listening pipeline. No LinkedIn account or cookies needed. Start with one company page, then add every account you follow.
What data can I extract with LinkedIn Post Scraper?
Using this LinkedIn Post API, you will be able to extract the following LinkedIn post data:
| 📝 Post text | 🔗 Post link and ID | 📅 Publish date and age | 🔁 Repost or original |
|---|---|---|---|
| 🖼️ Images, video cover or document pages | 🎞️ Media type (image, video, document, article, text) | 👤 Author name and type (company or person) | 💼 Author headline or About text |
| 🆔 Author ID and profile link | 🏞️ Author logo or photo and cover image | 💬 Up to 10 comments with author and time | 👍 Reaction count |
| 🔢 Comment count | 😀 Reaction types shown on the post | 📣 @-mentions with the mentioned profile's details | ✂️ Comments-truncated flag |
| 🔓 Whether reacting, commenting and sharing are open | 🌍 Share audience (public) |
Values LinkedIn does not show to logged-out visitors, such as the share count and who reacted, come back as null.
How to use LinkedIn Post Scraper
Marketers, sales teams and researchers use it to scrape LinkedIn posts from a list of companies or people and get one clean JSON row per post from a single run.
Copy to your AI assistant:
LinkedIn Post Scraper is an Apify Actor that returns public LinkedIn posts from company pages, profiles or single post links as structured JSON: post text, post link, publish date, author name and headline, images or video cover, media type, up to 10 comments, reaction types, and reaction and comment counts. Use it whenever someone needs LinkedIn posts without cookies, a login, or a browser - tracking what competitors publish, spotting hiring or launch announcements, building a dataset of an executive's public posts. Inputs: urls (array of strings, required: LinkedIn company, showcase or school page links, public profile links, or single post links), limitPerSource (integer, posts per link, minimum 1, default 10), scrapeUntil (string date YYYY-MM-DD, keeps posts published on or after it), deepScrape (boolean, default true: also opens each post's own page for exact time, full text, comments, reaction types and media), rawData (boolean, default false: also saves the downloaded pages as one file in the key-value store), proxyConfiguration (object, Apify proxy settings). Every dataset row is one post; there are no summary or error rows, and only saved posts are billed (one row_result event each). LinkedIn shows at most about 10 comments per post to logged-out visitors, so comments-truncated is true when the post has more; share counts and the names of people who reacted are not public and stay null.
LinkedIn Post Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor
Point your AI assistant at the Apify MCP server and it can find, add and call this Actor on its own through the server's search, add and call tools. No glue code, no scraping logic in your prompts.
$claude mcp add --transport http apify "https://mcp.apify.com"
Step by step
- Create a free Apify account.
- Open this Actor in the Apify Store.
- Paste the LinkedIn company, profile or post URLs, one per line.
- Click Start (or send your API request).
- Download or stream your results in JSON, CSV or Excel.
How to scale LinkedIn Post Scraper to bulk
Add as many links as you need to the urls list of one run: every link is worked on in parallel and returns up to your per-link limit, so one run can be a bulk LinkedIn post scraper for a whole account list. A post that turns up for two links is saved only once. To monitor LinkedIn company posts over time, save the input as a task and run it on an Apify schedule with a publish-date limit, or start runs from your own code through the Apify API.
✨ Features
LinkedIn Post Scraper fetches clean, structured posts from LinkedIn ⚡. It's ideal for competitor content tracking, sales trigger alerts, executive research and building datasets for AI. Think of it as a LinkedIn posts extractor that also reads each post's own page for the details a page preview leaves out.
It extracts, per post:
- Post text and link – the full text, the post link and LinkedIn's post ID
- Publish date – exact date and time, plus the age shown on LinkedIn (for example "3d")
- Author – name, company or person, headline or About text, ID, logo or photo and cover image
- Media – image links, video cover, document pages or article preview, with the media type
- Engagement – reaction count, comment count and which reaction types the post received
- Comments – up to 10 comments with text, time, mentioned profiles and the commenter's name, photo and headline
- Reposts – whether the post shares another author's post
⚡ When a page shows fewer posts than you asked for, the Actor looks for that author's older posts and checks each one on its own page before keeping it, so every row belongs to the author you asked for.
Use cases 💡
- Content marketer — track competitor post text, media type and reaction counts every week.
- Sales rep — spot hiring and launch posts from target accounts by publish date.
- Researcher — export LinkedIn posts to CSV for a timeline of an executive's commentary.
- Social media manager — compare comment counts and reaction types across company pages.
- AI agent builder — feed post text and author headlines into a RAG index for account research.
Building an AI agent? Connect LinkedIn Post Scraper over MCP and let it call the actor on its own.
Why choose this actor?
- Posts with their full details in one run. A recorded run returned 6 posts from 2 sources (Google's company page and Satya Nadella's profile) in 92 seconds, each with its exact publish time, comments and reaction types.
- The numbers behind each post. A recorded Google post came back with 674 reactions, 52 comments, 3 images, 3 reaction types and the first 10 comments with each commenter's name and photo.
- 34 fields, 6 inputs. A LinkedIn post engagement scraper that takes company, showcase, school, profile and single-post links, with a per-link limit, a publish-date limit and an optional detail step.
⬇️ Input
The Actor takes a list of LinkedIn links: company, showcase or school pages, public profiles, or single posts. Only urls is required; the other fields set how many posts you get and how much detail.
Accepted link formats:
https://www.linkedin.com/company/google/(company, also/showcase/...and/school/...)https://www.linkedin.com/in/satyanadella/(public profile)https://www.linkedin.com/posts/google_...-activity-7511155958451105792-acJP(single post)https://www.linkedin.com/feed/update/urn:li:activity:7511155958451105792(single post;urn:li:share:...andurn:li:ugcPost:...links work too)
| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
urls | Yes | array | LinkedIn company, showcase, school, profile or post links, one or many. Other links are skipped. | ["https://www.linkedin.com/company/google/"] |
limitPerSource | No | integer | Posts to collect from each link. Minimum 1, default 10. | 3 |
scrapeUntil | No | string | Keep only posts published on or after this date (YYYY-MM-DD). Empty = no date limit. | "2026-09-01" |
deepScrape | No | boolean | Also open each post's own page for exact time, full text, up to 10 comments, reaction types and media. Default true. In both modes, a page with fewer posts than your limit also triggers the search for that author's older posts. | true |
rawData | No | boolean | Also save the downloaded pages and parsed posts as one file (raw_pages.json) in the key-value store. Meant for small runs. Default false. | false |
proxyConfiguration | No | object | Apify proxy settings. LinkedIn pages are first requested without a proxy; after the first block the Actor switches to Apify's residential proxy. | {"useApifyProxy": true} |
Example input
The input of the recorded run (2 sources, 6 posts in 92 seconds):
{"urls": ["https://www.linkedin.com/company/google/","https://www.linkedin.com/in/satyanadella/"],"limitPerSource": 3,"scrapeUntil": "2026-09-01","deepScrape": true,"rawData": false,"proxyConfiguration": {"useApifyProxy": true}}
⬆️ Output
Every post is one typed, normalized JSON item with the same 34 keys on every run, so you can export LinkedIn posts as JSON (default), CSV or Excel. All posts of a run are also saved together as linkedin_posts.json in the key-value store.
Example output
A Google post from the recorded run above (abridged: one comment and two reaction entries shown):
{"urn": "urn:li:activity:7511489262819831809","text": "As an account executive, Jenna solves problems that don't always look like traditional advertising problems. Working in Google Ads, she acts as a strategic consultant for restaurant brands, using data and customer behavior to uncover opportunities for growth. ...","url": "https://www.linkedin.com/posts/google_as-an-account-executive-jenna-solves-problems-activity-7511489262819831809-a_lL","postedAtTimestamp": 1790878596977,"postedAtISO": "2026-10-01T18:16:36.977000Z","timeSincePosted": "3d","isRepost": false,"authorType": "Company","authorProfileUrl": "https://www.linkedin.com/company/google/","authorProfileId": "1441","authorHeadline": "A problem isn't truly solved until it's solved for all. Googlers build products that help create opportunities for everyone, whether down the street or across the globe. ...","authorFullName": "Google","image": "https://media.licdn.com/dms/image/v2/D5610AQHiq7uhZDnNug/image-shrink_1280/B56aD4ro0wGcAc-/0/1790878584366?e=2147483647&v=beta&t=7dOm2skVsMujjjzm0sLIeGMalOmXZqk6fE08K0kgjZk","type": "image","images": ["https://media.licdn.com/dms/image/v2/D5610AQHiq7uhZDnNug/image-shrink_1280/B56aD4ro0wGcAc-/0/1790878584366?e=2147483647&v=beta&t=7dOm2skVsMujjjzm0sLIeGMalOmXZqk6fE08K0kgjZk","https://media.licdn.com/dms/image/v2/D5610AQHx_S9-uB-WrA/image-shrink_1280/B56aD4ro.3JwAg-/0/1790878585241?e=2147483647&v=beta&t=Xp4Qvx7DYgZdvoVtIaP-6Ey7fQVd9X0v3zr5VEFl8-8","https://media.licdn.com/dms/image/v2/D5610AQHJ9BeYMu2KRQ/image-shrink_1280/B56aD4rpJ6G4Ac-/0/1790878586208?e=2147483647&v=beta&t=A1EjbDmpMk4ylkJ9ZwBlY8M9LDA-XmxtzG_KyDnwZKU"],"author": {"firstName": null,"lastName": null,"occupation": "A problem isn't truly solved until it's solved for all. ...","id": "1441","publicId": "google","trackingId": null,"profileId": "1441","picture": "https://media.licdn.com/dms/image/v2/D4E0BAQGv3cqOuUMY7g/company-logo_200_200/B4EZmhegXHGcAM-/0/1759350753990/google_logo?e=2147483647&v=beta&t=Hzaw0d0Yz1Yi-_mDuQ6JQo-Ph41AG50Z8pWjyaeTI0k","backgroundImage": "https://media.licdn.com/dms/image/v2/D563DAQGtANfXBwQdug/image-scale_191_1128/B56Z2dEWlfIAAg-/0/1776456657776/google_cover?e=2147483647&v=beta&t=f1V4NKVCAzcuXjhn2gdiiYr59LjUbtJ9k3oddKeymtk"},"authorName": "Google","authorTitle": "A problem isn't truly solved until it's solved for all. ...","attributes": [],"comments": [{"time": 1791018455895,"link": "https://www.linkedin.com/feed/update/urn:li:activity:7511489262819831809?commentUrn=urn%3Ali%3Acomment%3A%28urn%3Ali%3AugcPost%3A7511489262035476480%2C7512075873630715904%29","text": "The interesting part here isn't the predictive AI, it's the business fluency behind how it was applied. ...","entities": [],"pinned": false,"originalLanguage": null,"author": {"firstName": "Shubham","lastName": "Chaudhary","occupation": null,"id": "shubham-chaudhary-investing","publicId": "shubham-chaudhary-investing","trackingId": null,"profileId": "shubham-chaudhary-investing","picture": "https://media.licdn.com/dms/image/v2/D5603AQHQOHmsPdHs0g/profile-displayphoto-scale_400_400/B56Z2Z.nXjKIAg-/0/1776404823641?e=2147483647&v=beta&t=ZhTgmToB6cVbLja6HWLqm1lCTU4BV2USOlpyRj_oWz0","backgroundImage": null,"distance": "OUT_OF_NETWORK"}}],"reactions": [{ "type": "LIKE", "profile": { "firstName": null, "lastName": null, "occupation": null, "id": null, "publicId": null, "trackingId": null, "profileId": null, "picture": null, "backgroundImage": null } },{ "type": "PRAISE", "profile": { "firstName": null, "lastName": null, "occupation": null, "id": null, "publicId": null, "trackingId": null, "profileId": null, "picture": null, "backgroundImage": null } }],"numShares": null,"numLikes": 674,"numComments": 52,"commentsTruncated": true,"commentsComplete": false,"reactionsTruncated": true,"canReact": true,"canPostComments": true,"canShare": true,"commentingDisabled": false,"allowedCommentersScope": "ALL","rootShare": true,"shareAudience": "PUBLIC"}
How does it work?
The Actor reads public LinkedIn pages — the same company, profile and post pages any visitor sees without logging in — so no LinkedIn account is needed. It opens each page you give it, reads the posts shown there and, with the detail step on, opens every post's own page for the exact time, full text, comments and reaction types. When a page shows fewer posts than your limit, it looks for that author's older posts in public web results and keeps only the ones whose own page confirms the same author. It uses plain HTTP requests, no browser. Requests start without a proxy; when LinkedIn blocks one, the Actor retries and switches to a proxy with a new address for each request. Rows keep the same normalized schema on every run. Values LinkedIn hides from logged-out visitors come back as null.
How do you integrate LinkedIn Post Scraper into your stack?
It works with what you already use: the REST API from any language, MCP for AI agents, and no-code tools.
MCP integration for AI agents
Add the Apify MCP server to your agent with one command:
$claude mcp add --transport http apify "https://mcp.apify.com"
This registers LinkedIn Post Scraper as a tool your agent can call directly: the agent finds it with the server's search tool, adds it, and calls it with a list of LinkedIn links. It works in Claude Code, Cursor and Windsurf, and any MCP-compatible client can use the same server address.
No-code tools (n8n, Make, LangChain)
- n8n — use the Apify node's "Run an Actor" operation, then read the run's dataset items in the next node. You can also call the Apify API's run-sync endpoint from an HTTP Request node with your token.
- Make — add the Apify app's "Run an Actor" module, then "Get Dataset Items" to map each post into a sheet, a Slack message or your CRM.
- LangChain — install
langchain-apifyand load the run's dataset withApifyDatasetLoader, mapping each post's text and author to a document for your agent or vector store.
Is it legal to scrape LinkedIn data?
Scraping publicly available LinkedIn data is generally legal, but how you store and use it is regulated. The Actor returns only publicly available data — what any user sees without logging in. Under GDPR, collecting public data is generally permissible, but posts and comments contain names and headlines, so storing and using them must comply with local data-protection law. Consult legal counsel if your use case involves bulk storage of personal data.
Frequently asked questions
What fields does LinkedIn Post Scraper return?
It returns each post's text, link, publish date, author name and headline, plus images, comments, reaction types and the reaction and comment counts. See the data fields section.
Does LinkedIn Post Scraper require a LinkedIn account or login?
No. You can scrape LinkedIn posts without login: only public post data is extracted, and no credentials or cookies are needed.
How fast does LinkedIn Post Scraper run?
A recorded run returned 6 posts from 2 sources in 92 seconds with the detail step on; most of that time went to waiting and retrying when LinkedIn limited requests. Data is fetched live, not cached.
What happens if a post is private or doesn't exist?
Links that do not exist or stay blocked after all retries are listed in the run log and skipped, and links that are not LinkedIn company, profile or post links are skipped too. No row is saved and nothing is charged for them. If no link can be read at all, the run ends with a status message saying so.
Can I scrape multiple LinkedIn posts at once?
Yes. Put any number of company, profile or post links in the urls list; each one returns up to your per-link limit, and duplicates across links are saved once.
Does LinkedIn Post Scraper work with Claude, ChatGPT, and other AI agent tools?
Yes — LinkedIn Post Scraper is available as an MCP tool through the Apify MCP server. Register it in Claude Code, Cursor or Windsurf with claude mcp add --transport http apify "https://mcp.apify.com". Any agent that can call an HTTP endpoint can use the REST API directly, so it also works as a LinkedIn posts API.
Does LinkedIn Post Scraper return data in a format LLMs can use directly?
Yes. Typed, normalized JSON with consistent field names. No HTML parsing, no selectors. Pass it straight to an LLM, index it into a vector store, or feed it to an agent tool — no transformation step.
What happens when LinkedIn changes its layout or updates its anti-bot system?
The Actor is maintained. When LinkedIn changes, the Actor is updated — your calls keep returning the same JSON schema with no changes on your end.
Can I use LinkedIn Post Scraper without managing proxies or browser infrastructure?
Yes. Retries and the switch to a proxy run on the actor's side, and it needs no browser. You send one request and get structured JSON back. No proxy accounts, no headless browser setup, no maintenance.
Which LinkedIn post fields work best for AI training data and RAG indexing?
For RAG, the text-rich LinkedIn post data is the most useful: the post text, the author headline or About text, and the comment texts. For training data, use the numeric and boolean fields: reaction count, comment count, publish time, the repost flag and the comments-truncated flag. Fields are typed strings, integers, booleans and nested objects — no normalization needed.
Your feedback
Found a bug or missing a field? Let us know through the Actor's Issues tab in the Apify Console. Every report is read, and fixes ship regularly.