LinkedIn Posts API | Scrape Profile Posts & Engagement avatar

LinkedIn Posts API | Scrape Profile Posts & Engagement

Pricing

from $0.01 / 1,000 results

Go to Apify Store
LinkedIn Posts API | Scrape Profile Posts & Engagement

LinkedIn Posts API | Scrape Profile Posts & Engagement

Collect public LinkedIn posts as clean, structured JSON. Discover every post from a profile URL, or fetch specific post URLs, with text, reactions, comments, shares, media, hashtags, and author details. Pay per post, MCP-ready for Claude and AI agents.

Pricing

from $0.01 / 1,000 results

Rating

0.0

(0)

Developer

John

John

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

an hour ago

Last modified

Share

πŸ“ LinkedIn Posts API | Scrape Profile Posts & Engagement

The LinkedIn Posts API turns public LinkedIn posts into clean, structured JSON. Use this actor with Claude, Cursor, or any MCP-compatible AI agent to collect post text, reactions, comments, shares, media, hashtags, and author details, billed per post.

Give it a profile URL and it discovers that person's recent posts, or give it specific post URLs to fetch directly. It works as a straightforward LinkedIn posts scraper for content research, post engagement analysis, and social listening, and it is built API-first and MCP-ready so AI agents can call it as a tool.


πŸ“‹ What this API returns

FieldDescription
postUrl, postIdThe post's public URL and identifier.
postTypeThe kind of post (post, article, repost).
datePostedWhen the post was published.
title, textThe post title (for articles) and body text.
hashtagsHashtags used in the post.
authorName, authorHeadline, authorUrlWho posted it and their headline / profile URL.
authorFollowers, authorTypeAuthor audience size and person/company type.
numLikes, numComments, numSharesEngagement counts.
images, videos, embeddedLinksMedia and links attached to the post.
taggedCompanies, taggedPeopleEntities tagged in the post.
topCommentsA sample of the most visible comments.
summaryA plain-language one-line interpretation of the post.

🎯 Use cases

  • Content research. Pull a creator's or brand's recent posts to study what performs.
  • Competitive monitoring. Track a competitor's LinkedIn posts and engagement over time.
  • Social listening. Collect posts and their reactions and comments for sentiment and trend analysis.
  • Lead generation. Find the most-engaged posts from target accounts to spot warm prospects.
  • Personal brand analytics. Measure reactions, comments, and shares across your own posts.
  • AI agent workflows. Drive this API over MCP from Claude to fetch and summarize posts in-conversation.

πŸ” Use it as a LinkedIn posts scraper at scale

Point this LinkedIn posts scraper at a profile and it returns that person's recent posts, one clean row each, with the same flat fields every time, which is what makes the output easy to load into a sheet, a database, or a BI tool. Cap each profile with maxPostsPerProfile so a large run never overshoots your budget, and narrow discovery with startDate and endDate to a specific window.

Every row carries the post engagement you care about: reactions, comments, and shares, alongside the post text, hashtags, and author details. That makes it a ready source for content research, tracking a creator or brand, and finding the highest-engagement influencer posts. If a profile has no public posts, you get a clear error row instead of a failed run, so one empty profile never sinks the batch.


βš™οΈ Input examples

Discover a profile's posts

{
"profileUrls": ["https://www.linkedin.com/in/williamhgates"],
"maxPostsPerProfile": 20
}

Limit discovery to a date range

{
"profileUrls": ["https://www.linkedin.com/in/williamhgates"],
"maxPostsPerProfile": 50,
"startDate": "2025-01-01",
"endDate": "2025-12-31"
}

Fetch specific posts by URL

{
"postUrls": [
"https://www.linkedin.com/posts/williamhgates_activity-7446904645010210816"
]
}

maxPostsPerProfile caps how many posts are returned per profile, so you control cost. The API returns one row per post.


πŸ“€ Example output

Each post is returned as one JSON row:

{
"result_type": "post",
"postId": "7446904645010210816",
"postUrl": "https://www.linkedin.com/posts/williamhgates_activity-7446904645010210816",
"postType": "post",
"datePosted": "2025-06-01T12:00:00.000Z",
"text": "A few books shaped how I think about clean energy this year...",
"hashtags": ["cleanenergy", "books"],
"authorName": "williamhgates",
"authorHeadline": "Co-chair, Bill & Melinda Gates Foundation",
"authorUrl": "https://www.linkedin.com/in/williamhgates",
"numLikes": 12045,
"numComments": 843,
"numShares": 210,
"summary": "Post by williamhgates, 12,045 reactions, 843 comments, posted 2025-06-01"
}

πŸ’° Pricing (pay-per-event)

You pay per post returned. There is no per-run setup fee. The current per-event price is shown on the Store card and in the Actor's Monetization details. Because billing is per post, you only pay for the posts actually delivered, and maxPostsPerProfile lets you cap the volume of each run.


πŸ”Œ Use the LinkedIn Posts API from Claude (MCP)

This Actor is MCP-server-compatible, so Claude Code (free trial), Claude (desktop and web), Cursor, and other MCP clients can call it as a tool through Apify's hosted MCP server.

Add it with this Actor-specific URL:

https://mcp.apify.com/?tools=actors,docs,johnvc/linkedin-posts-api

Apify MCP integration docs: https://docs.apify.com/platform/integrations/mcp

Setup walkthrough:

New to Claude Code or Claude Cowork? Start a free trial.

Then ask Claude:

"Use the LinkedIn Posts API to pull Bill Gates's last 10 posts and summarize which got the most engagement."


πŸ”Œ Integrations: track post engagement on a schedule

This API earns its keep as a recurring step in a pipeline, not a one-off run:

  • Tasks and Schedules. Save a set of profile URLs as a Task, then attach a Schedule to pull new posts and their engagement daily, weekly, or monthly with no code.
  • n8n, Make, and Zapier. Trigger a run on a schedule, then route new posts into a content dashboard, a Slack channel, or your CRM. Apify has native connectors for each.
  • Supabase, Google Sheets, and databases. Send the dataset straight to storage with a webhook or the Apify API so the rows land where your team already works.
  • MCP. Call the API as a tool from Claude and other AI agents (see the section above) to fetch and summarize posts inside an agent workflow.
  • Webhooks. Fire a webhook on run completion to kick off the next step in your own system, such as scoring the most-engaged posts.

Build a full picture of a person, their posts, and where they work by pairing this with the rest of the LinkedIn suite:

Comparison point: many LinkedIn posts tools on the Store cover only one slice of engagement (for example harvestapi/linkedin-post-reactions, reactions only). This API returns the full post, text, reactions, comments, and shares, in one row, with pay-per-post billing and MCP access from AI agents.


πŸ“Ž Applications

Ready-made task pages for common jobs. Open one, run it, or duplicate it as a starting point:

Scrape LinkedIn Posts to Structured JSON

Turn a profile URL into clean JSON: post text, reactions, comments, date, and author, newest first.

Track a Profile's LinkedIn Posts

Pull a profile's recent posts on a schedule, filtered to a date range.

Analyze LinkedIn Post Engagement

Get reactions, comments, shares, author, and follower count per post, ready for a dashboard.

Collect Influencer Posts from LinkedIn

Pull a creator's recent posts with reach and engagement for influencer research.

LinkedIn Posts Data API for Python

Call the API from Python: a profile URL in, structured posts out.

Scrape LinkedIn Posts in an n8n Workflow

Add post data to an n8n workflow: pass profile URLs, get structured rows back.

Get LinkedIn Posts in Claude via MCP

Use posts as a tool in Claude and other AI agents over MCP.

Fetch Specific LinkedIn Posts by URL

Paste up to 1000 post URLs and get one clean row each.


πŸš€ How to get started

  1. Open the Actor and paste one or more LinkedIn profile URLs into profileUrls (or post URLs into postUrls).
  2. Set maxPostsPerProfile to bound the volume, then run it and read the results from the dataset (JSON, CSV, Excel, or API).

View on Apify Store

Example code: Python quick-start + MCP setup on GitHub - call the API from Python, or install it as a tool in Claude, Cursor, and ChatGPT.


❓ FAQ

Is this a LinkedIn Posts API or a LinkedIn posts scraper?

Both descriptions fit. You call it like an API (a profile or post URL in, structured JSON out), and under the hood it is a LinkedIn posts scraper that reads public posts. You never touch scraping infrastructure; you get clean, one-row-per-post data back.

What input should I provide?

A public LinkedIn profile URL (e.g. https://www.linkedin.com/in/williamhgates) to discover its posts, and/or specific post URLs to fetch directly. Supply at least one.

How many posts do I get per profile?

As many as maxPostsPerProfile (default 20, up to 200). Newest posts are returned first, and you can narrow the range with startDate and endDate.

Do you return comment and reaction counts?

Yes. Each post row includes reaction, comment, and share counts, plus a sample of the most visible comments, so the output doubles as post engagement data.

This actor collects only public post data. Public-data scraping has been addressed in court cases such as hiQ Labs v. LinkedIn, but you are responsible for your own use, including GDPR and platform terms. Consult your own counsel for your use case.

Can I run it from Claude or another AI agent over MCP?

Yes. The Actor is MCP-server-compatible, so Claude Code (free trial) and other MCP clients call it as a tool. See the MCP section above for the setup URL.

Can I schedule it or connect it to my other apps?

Yes. Save your profile URLs as a Task and attach a Schedule for recurring runs, and connect the output to n8n, Make, Zapier, Supabase, or your own system by webhook. See the Integrations section above.

What if a profile has no public posts?

The API returns a clear error row for that profile explaining why, so one empty profile does not fail the whole run.


Last Updated: 2026.07.10