LinkedIn Post Scraper avatar

LinkedIn Post Scraper

Pricing

from $2.50 / 1,000 linkedin post results

Go to Apify Store
LinkedIn Post Scraper

LinkedIn Post Scraper

Extract public LinkedIn post text, author details, publish time, likes, comments, reposts when shown, media links, captions, and transcripts from known post URLs.

Pricing

from $2.50 / 1,000 linkedin post results

Rating

0.0

(0)

Developer

Chronometrica

Chronometrica

Maintained by Community

Actor stats

0

Bookmarked

3

Total users

2

Monthly active users

a day ago

Last modified

Share

📊 What does LinkedIn Post Scraper do?

LinkedIn Post Scraper turns known public LinkedIn post URLs into clean post rows. Use it for content research, author research, campaign tracking, reports, and scheduled post checks.

Each input creates one row. A successful row can contain stable post and author identity, post text, publish time, public engagement counts, author details, and public media details.

This Actor reads public LinkedIn post pages. It does not sign in, use customer LinkedIn accounts, collect private data, or reveal hidden post details.

With LinkedIn Post Scraper, you can:

  • 🆔 Collect typed activity IDs, UGC post IDs, post URNs, and author IDs.
  • 📝 Save public post text, headlines, and publish times.
  • 📊 Collect public likes, comments, reposts, and author follower counts.
  • 🎬 Save public media details, thumbnails, captions, and transcripts when LinkedIn shows them.
  • 📦 Export rows as JSON, JSONL, CSV, Excel, XML, RSS, or HTML.
  • 🔄 Send post rows to an API, webhook, spreadsheet, or data pipeline.

📦 What LinkedIn post data can I extract?

One dataset row represents one attempted public LinkedIn post input.

Data groupExample fields
🔗 Post identityinputUrl, url, activityId, ugcPostId, postUrn, postType
🆔 Author identityauthorId, authorUrn, authorPublicIdentifier, authorUrl
🧑 Author detailsauthorName, authorType, authorImageUrl, authorFollowersCount
📝 Post detailsheadline, text, publishedAt
📊 Public countslikesCount, commentsCount, repostsCount
🎬 Media detailsdurationMs, width, height, contentUrl, thumbnailUrl, captionUrl, transcript
🚦 Row statestatus, statusReason, observedAt

Missing public values stay null. The Actor does not guess hidden values or change missing counts to zero.

⚙️ Can I use this Actor through an API?

Yes. Run the Actor in Apify Console or connect it through:

  • Apify API
  • Python SDK
  • JavaScript SDK
  • Webhooks
  • Scheduled runs
  • Apify integrations

This lets you send fresh post rows to a spreadsheet, database, warehouse, or internal service.

🎯 Why scrape LinkedIn posts?

Use caseHow the data helps
🔎 Content researchReview public post text, media, authors, and engagement.
📈 Post monitoringCompare public post snapshots from scheduled runs.
🧑 Author researchConnect posts with stable public author identity when available.
📣 Campaign reportsSave public engagement counts for known campaign posts.
🧱 Data pipelinesLoad clean post rows into a database or internal tool.

💵 Pricing Event

This Actor uses pay-per-result pricing. One paid result means one successfully resolved public post row. Failed, private, deleted, missing, or unsupported posts are not paid results.

Apify planPrice per 1,000 successful posts
Free$3.50
Starter$3.00
Scale$2.75
Business$2.50

Platform usage is included. Use Apify's maximum charge setting to limit paid results before a run.

🚀 How do I use LinkedIn Post Scraper?

  1. Open LinkedIn Post Scraper in Apify Console.
  2. Add one or more public LinkedIn post URLs.
  3. Click Start.
  4. Open the Output tab while the run is active to see completed rows.
  5. Download the dataset or connect it to your workflow.

⬇️ Input

🔗 LinkedIn post URLs

Add public LinkedIn post URLs to startUrls.

{
"startUrls": [
"https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX"
]
}

The Actor supports standard and country LinkedIn domains with a /posts/ path. Tracking parameters can remain in the input URL. The output includes the clean post URL when the post is available. The clean URL uses the standard www.linkedin.com host and has no query string or fragment.

Exact duplicate input strings are checked once. Different URL forms for the same post can create separate attempts.

Results are saved as soon as each post finishes.

⬆️ Output sample

The sample below shows the exact field order. Public values vary by post and run time.

{
"inputUrl": "https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX",
"url": "https://www.linkedin.com/posts/timferriss_i-took-my-whole-genome-dumped-it-into-ai-activity-7333162625675038720-TJPX",
"activityId": "7333162625675038720",
"ugcPostId": null,
"postUrn": "urn:li:activity:7333162625675038720",
"postType": "VideoObject",
"authorName": "Tim Ferriss",
"authorType": "Person",
"authorId": "15499",
"authorUrn": "urn:li:member:15499",
"authorPublicIdentifier": "timferriss",
"authorUrl": "https://www.linkedin.com/in/timferriss",
"authorImageUrl": "https://media.licdn.com/dms/image/v2/D4E03AQFJUaA3RAZDIw/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1687979278495?e=2147483647&v=beta&t=jU3Gf5QEuNbTGOvCToR36R3NEIvZFbzySzZzySeGofw",
"authorFollowersCount": 1538200,
"headline": "\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\" — Kevin Rose",
"text": "\"I took my whole genome, dumped it into AI, and we worked out a playbook together.\" — Kevin Rose",
"publishedAt": "2025-05-27T16:10:13.501Z",
"likesCount": 60,
"commentsCount": 10,
"repostsCount": null,
"durationMs": 43000,
"width": 720,
"height": 1280,
"contentUrl": "https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/mp4-720p-30fp-crf28/B4DZcSgOoFGUBM-/0/1748362198190?e=2147483647&v=beta&t=5uuNhUZ1SMfCepiAg5rgM8UcJHrv1_CaWw0dQpcXMPc",
"thumbnailUrl": "https://media.licdn.com/dms/image/v2/D4D05AQGulHZiCPUQxA/videocover-high/B4DZcSgOoFGUBo-/0/1748362192116?e=2147483647&v=beta&t=a0_ktMIjBTUTKt_Teat8e4cE4-I9ckXCAAz59Ln_iQg",
"captionUrl": "https://dms.licdn.com/playlist/vid/v2/D4D05AQGulHZiCPUQxA/video-auto-caption-srt-acs-singleton/B4DZcSgOoFGUEE-/0/1748362211491?e=2147483647&v=beta&t=kUV4b-IXm1eu5KoIfEbhgoSd82sx16X-i8y6Yv1khAU",
"transcript": "I took my whole genome, dumped it into AI and we worked out a playbook together on where we could find mental doctors to and which methylated B vitamins I could give to help fix the broken cycle because I have the MTHFR genetic mutation. It's a very fancy way of saying 1 biomarker completely jacked up. My dad died of heart disease. I don't want to have heart disease. How can we fix this ****? We work through a way for me to supplement and start adding on supplements. I'm 8 weeks. In and for the first time, my homocysteine is at normal levels after many years of trying to figure this out, and I was working through this process in tandem with my AI.",
"status": "ok",
"statusReason": null,
"observedAt": "2026-08-13T14:05:36.171Z"
}

📌 Run summary

The OUTPUT record contains:

  • actorName: stable Actor output name;
  • schemaVersion: public output contract version;
  • startedAt and finishedAt: run times;
  • inputCount: number of unique input strings;
  • usefulRows: number of successful post rows;
  • failedRows: number of failed post rows;
  • datasetId: ID of the result dataset;
  • stopReason: why the Actor stopped.

🎯 Status and quality fields

  • ok: the Actor found a public post and saved its public data.
  • failed: the public post could not be read or did not expose enough data.
  • invalid_url: the input is not a supported LinkedIn post URL.

Failed rows keep the same field order as successful rows. Unknown values stay null. Check statusReason for a safe explanation.

activityId contains only an activity ID. ugcPostId contains only a UGC post ID. postUrn keeps the typed post URN shown by LinkedIn. These values can be different. The stable authorId and authorUrn identify the author when LinkedIn shows them. The public author identifier and profile URL can change.

🔒 Source boundary

This Actor reads only public LinkedIn post pages available without a customer account. It does not:

  • sign in to LinkedIn;
  • use customer passwords, saved browser data, or accounts;
  • open private posts or hidden post sections;
  • collect private contact details;
  • guess values that LinkedIn does not show.

⚠️ Limits and interpretation

  • LinkedIn can show different public fields by post, visitor region, and time.
  • Private, deleted, missing, or login-limited posts can return failed rows.
  • A public count, author field, caption, transcript, or media field can be missing.
  • Public media, image, thumbnail, and caption links can change or expire.
  • Results are post snapshots. Use scheduled runs to build history.
  • LinkedIn can change its public pages. A later change can require an Actor update.

❓ FAQ

Does this Actor need a LinkedIn login or API key?

No. It reads public post pages without a customer LinkedIn account.

Why is a field null?

LinkedIn did not show that value publicly for the post at run time. The Actor does not guess the value or change a missing count to zero.

Why did I receive a failed row?

The post can be private, missing, deleted, limited to signed-in visitors, or unavailable at run time. Check statusReason and confirm that the input is a public LinkedIn /posts/ URL.

How are duplicate posts handled?

The Actor checks an exact duplicate input string once per run. Different URL forms for the same post can create separate attempts.

Continue the same workflow on this platform or compare public data across platforms.

Continue on LinkedIn

🛟 Support

For help, share the run ID, public post URL, expected result, and actual result. State whether the issue affects one row or the full run. Never share a LinkedIn password, saved browser data, or private token.

Use public data in line with applicable laws, LinkedIn rules, and Apify rules.