LinkedIn Post Scraper avatar

LinkedIn Post Scraper

Pricing

from $1.00 / 1,000 results

Go to Apify Store
LinkedIn Post Scraper

LinkedIn Post Scraper

Scrape public LinkedIn posts from company pages, profiles, post links, searches and keywords with no login or cookies. Full text, author, media, reactions and comments. Date and type filters, auto proxy fallback. Export JSON, CSV or Excel.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

Data Minds

Data Minds

Maintained by Community

Actor stats

0

Bookmarked

8

Total users

3

Monthly active users

9 hours ago

Last modified

Categories

Security

Limited permissions

Share

What is LinkedIn Post Scraper?

LinkedIn Post Scraper is a LinkedIn post scraper that turns public posts from post links, profiles, company pages and content searches into structured data, with no cookies or login. Add your LinkedIn URLs or keywords and get one row per post: text, author, media, reactions, comments and publish time, ready for lead generation, competitor monitoring and social listening. Pay per post: $1.50 per 1,000 on the Free plan, $1.00 on Gold. ๐Ÿš€ Try it free

Use it when you want LinkedIn data extraction without building anything yourself:

  • Lead generation: find the people and companies posting about your topic, with author headline and follower count.
  • Competitor monitoring: follow what rival company pages publish and how their posts perform.
  • Social listening and brand monitoring: collect public posts about a keyword or hashtag.
  • Content marketing research: see which topics and formats earn reactions and comments, and spot trending topics.
  • Thought leadership research and influencer research: compare authors by headline, followers and the influencer flag.
  • B2B market research and sales intelligence: build a list of accounts and decision makers that post about your market.
  • Engagement analysis: compare reactions, top reaction types and comment counts, as LinkedIn post analytics in a table.
  • AI dataset building: use clean post text and metadata as AI training data or in an LLM data pipeline.

The Apify platform adds scheduling, an API, webhooks, integrations and export to JSON, CSV, Excel, XML or HTML.

What can LinkedIn Post Scraper do?

  • ๐Ÿ”— Scrape LinkedIn posts from any mix of post links, profile links, company, school and showcase pages, and content-search links.
  • ๐Ÿ”Ž Run a keyword or hashtag search and collect the matching public posts as a LinkedIn post search scraper.
  • ๐Ÿ“… Keep only recent posts with a date cut-off such as 30 days or 2026-01-01.
  • ๐Ÿ’ฌ Collect post comments with author, text, time and reactions, and see how many exist in total.
  • ๐ŸŽฏ Filter by post type, author type, minimum reactions or comments, phrases and hashtags.
  • ๐Ÿ“ฆ Download LinkedIn posts in bulk and export LinkedIn posts to CSV or JSON, with repost tracking through isRepost and repostedBy.
  • ๐Ÿ’ณ Pay only for stored posts, with a spend limit you control.

What data can LinkedIn Post Scraper extract?

Each dataset row is one LinkedIn post. With the option Flatten output turned on, nested fields are written as dotted keys such as author.name.

DataFieldsNotes
๐Ÿ”— Post identityurl, urn, activityId, attributedUrn, shareUrlLink and IDs of the post
๐Ÿ“… TimepostedAt, postedAtRelative, isEditedPublish time and whether the post was edited
๐Ÿ“ Contenttext, hashtags, mentions, links, languageFull text, tags, mentioned profiles and external links
๐Ÿงฉ TypepostType, isRepost, repostedBy, resharedtext, image, video, article, document, reshare or unknown
๐Ÿ‘ค Authorauthor.type, author.name, author.url, author.slug, author.headline, author.followers, author.imageUrl, author.isInfluencerPerson or company that wrote the post
๐ŸŽฌ Mediamedia.images, media.videos, media.article, media.documentImage URLs with alt text, video renditions, shared article, document or carousel
๐Ÿ‘ Engagementengagement.reactions, engagement.comments, engagement.reposts, engagement.topReactionTypes, likersReaction and comment totals
๐Ÿ’ฌ Commentscomments, commentsAvailable, commentsTruncatedEach comment has id, urn, parentUrn, text, postedAt, postedAtRelative, reactions, author
๐Ÿงพ Source and status_source.url, _source.type, _source.discoveredVia, _status, _note, _parseWarnings, _scrapedAt, _schemaVersionWhere the post came from and how complete the row is
๐Ÿ“ Raw datarawOnly when Get raw data is turned on

Note: Not every field exists on every post. _parseWarnings lists the core fields that could not be read for a row. engagement.reposts is part of each record but is currently left empty, and likers is always an empty list.

What data can't LinkedIn Post Scraper extract?

  • Posts that LinkedIn shows only to logged-in members. If you enter such a post link directly, you get a short record with _status set to gated instead.
  • The list of people who liked a post. Total reaction counts are returned.
  • More than the comments that logged-out visitors can see, about 10 per post.

How to scrape LinkedIn posts

  1. Create a free Apify account at console.apify.com/sign-up.
  2. Open LinkedIn Post Scraper on Apify.
  3. Paste one or more LinkedIn links into Source URLs, or add topics and hashtags to Keywords.
  4. Set Limit per source to the number of posts you want per link or keyword.
  5. Optionally add a Scrape until date, post type, author type or text filters.
  6. Click Start and watch posts appear in the Output tab while the run is going.
  7. Export the dataset as JSON, CSV, Excel, XML or HTML, or read it through the API.

How much does it cost to scrape LinkedIn?

LinkedIn Post Scraper uses pay-per-event pricing: you pay for each post stored in the dataset, plus a small start fee per run. Apify platform usage is billed in addition. The price per post depends on your Apify plan.

PlanPrice per postPrice per 1,000 posts
๐Ÿ†“ Free$0.0015$1.50
๐Ÿฅ‰ Bronze$0.0013$1.30
๐Ÿฅˆ Silver$0.0012$1.20
๐Ÿฅ‡ Gold$0.001$1.00

Each run also pays one start event of $0.00005, because the Actor starts with 1024 MB of memory (one start event per GB, minimum one).

Worked example: 1,000 posts on the Free plan cost $1.50 plus the $0.00005 start event, with platform usage billed in addition. The same 1,000 posts on the Gold plan cost $1.00.

Every row saved to the dataset is one billed post. That includes the short gated and deleted records for post links you entered directly, so turn off Include login-only posts if you do not want them. Set a maximum cost per run on Apify and the run stops cleanly when the limit is reached. See the pricing page for current prices.

Is scraping LinkedIn free?

You can try it without paying: every Apify account gets a monthly free credit of $5. At the Free plan price of $0.0015 per post, $5 covers about 3,333 posts before platform usage. Higher plans pay less per post.

Input

Only Source URLs is required in the input form. Keywords are optional and each keyword counts as one source. Here is the default input:

{
"urls": ["https://www.linkedin.com/company/amazon"],
"limitPerSource": 10,
"proxyConfiguration": { "useApifyProxy": false }
}

See the full input schema for every option.

FieldTypeRequiredDefaultDescription
urlsarrayyesnonePost, profile, company, school, showcase or content-search links, one per line
keywordsarraynononeTopics or hashtags to find public posts about
limitPerSourceintegerno10 (also the form prefill)Maximum posts per link or keyword; when left empty, 10 posts per source are collected
scrapeUntilstringnononeKeep posts on or after a date (YYYY-MM-DD) or a relative value such as 7 days
deepScrapebooleannotrueOpen each post page for comments, exact time, document info and related posts
fetchDocumentDetailsbooleannofalseFor document and carousel posts, add every page image and the text transcript
numCommentsintegerno5Maximum comments per post, 0 to 1000
numLikesintegerno0Accepted for compatibility; likers stays empty
rawDatabooleannofalseAdd the unprocessed post data under raw
discoverMorePostsbooleannotrueAlso collect older posts by the same author until the limit is reached
includeRepostsbooleannotrueKeep posts the author reposted
includeProfileActivitybooleannofalseFor profiles, also include posts by others that the person reposted or reacted to
includeGatedbooleannotrueReturn a short record for login-only post links you entered directly
postTypesarraynoallKeep only text, image, video, article, document, reshare or unknown posts
authorTypesarraynobothKeep only person or only company authors
minReactionsintegernononeSkip posts with fewer reactions
minCommentsintegernononeSkip posts with fewer comments
mustContainarraynononeKeep a post only if its text has at least one phrase (case-insensitive)
mustNotContainarraynononeSkip a post if its text has any of these phrases
hashtagsarraynononeKeep a post only if it uses at least one of these hashtags
saveMediabooleannofalseSave images, the best video rendition and document pages to the key-value store
maxMediaBytesintegerno52428800Skip media files larger than this many bytes (50 MB)
flattenOutputbooleannofalseWrite nested objects as dotted keys, handy for CSV
maxConcurrencyintegerno4Posts processed at the same time, 1 to 32
requestDelaySecondsnumberno2Seconds to wait between requests to the same site, 0 to 30
maxRetriesintegerno3Retries for a failed request, 0 to 10
requestTimeoutSecondsintegerno30Seconds to wait for one page, 5 to 120
proxyConfigurationobjectnononeOptional proxy setting; the default works for most runs

Tricky input fields

Source URLs (urls)

  • โœ… Good: https://www.linkedin.com/company/amazon for a company page
  • โœ… Good: https://www.linkedin.com/in/satyanadella for a profile
  • โœ… Good: a LinkedIn content-search link, whose keywords are searched
  • โŒ Bad: a link to a LinkedIn job, event or group, which is not a supported source

Limit per source (limitPerSource)

  • โœ… Good: 10 for a quick test of each link
  • โŒ Bad: leaving it empty and expecting every post, because an empty field collects 10 posts per source

Warning: The limit applies to each link and each keyword, not to the whole run. Five links with a limit of 10 can return up to 50 posts.

Scrape until date (scrapeUntil)

  • โœ… Good: 2026-01-01 or 3 months
  • โŒ Bad: last quarter, which is not understood and the date filter is ignored

Include login-only posts (includeGated)

  • โœ… Good: keep it on when you want to see which of your links were not readable
  • โŒ Bad: keeping it on when every stored record is billed and you only want full posts

Output

Results appear in the run's dataset as soon as each post is ready. You can browse them in the Output tab as Posts, Authors, Engagement, Media, Comments and Source views, and download them as JSON, CSV, Excel, XML or HTML. A SUMMARY record in the key-value store holds the run counts and the stop reason. Downloaded media files are saved to the same store when Download media is on.

JSON example

This example continues the input above, a post from a company page:

{
"urn": "urn:li:activity:7000000000000000000",
"activityId": "7000000000000000000",
"attributedUrn": null,
"url": "https://www.example.com/posts/example-company_launch-activity-7000000000000000000-AbCd",
"shareUrl": "https://www.example.com/posts/example-company_launch-activity-7000000000000000000-AbCd",
"postedAt": "2026-10-20T09:15:00+00:00",
"postedAtRelative": "2w",
"isEdited": false,
"author": {
"type": "company",
"name": "Example Company",
"url": "https://www.example.com/company/example-company",
"slug": "example-company",
"headline": "Example tagline",
"followers": 120000,
"imageUrl": "https://www.example.com/logo.png",
"isInfluencer": false
},
"text": "We just launched something new. Read more on our blog. #launch",
"hashtags": ["launch"],
"mentions": [],
"links": ["https://www.example.com/blog/launch"],
"postType": "image",
"isRepost": false,
"repostedBy": null,
"media": {
"videos": [],
"images": [
{ "url": "https://www.example.com/image-1.jpg", "alt": "Launch banner", "position": 0, "contentCredentials": null }
],
"article": null,
"document": null
},
"reshared": null,
"engagement": {
"reactions": 350,
"comments": 12,
"reposts": null,
"topReactionTypes": ["LIKE", "PRAISE"]
},
"comments": [
{
"id": "7000000000000000001",
"urn": "urn:li:comment:(urn:li:activity:7000000000000000000,7000000000000000001)",
"parentUrn": null,
"text": "Congratulations on the launch!",
"postedAt": "2026-10-20T10:00:00+00:00",
"postedAtRelative": "2w",
"reactions": 3,
"author": {
"type": "person",
"name": "Example Person",
"url": "https://www.example.com/in/example-person",
"slug": "example-person",
"headline": null,
"followers": null,
"imageUrl": null,
"isInfluencer": false
}
}
],
"likers": [],
"language": "en",
"_parseWarnings": [],
"commentsAvailable": 1,
"commentsTruncated": true,
"_source": {
"url": "https://www.example.com/company/example-company",
"type": "company",
"discoveredVia": "company-feed"
},
"_scrapedAt": "2026-11-07T12:00:00+00:00",
"_status": "ok",
"_schemaVersion": "1.0",
"_note": "Only 1 of 12 comments are visible to logged-out visitors"
}

Values for _source.type are post, company, profile or keyword. Values for _status are ok, gated, deleted or error. A _note field is added only when there is something to explain.

Notes and limitations

  • Only public posts are collected. Posts that need a login are skipped, or returned as a short gated record when you entered the link directly and Include login-only posts is on.
  • Logged-out visitors see about 10 comments per post. Use commentsAvailable and commentsTruncated to see whether more exist.
  • Company and profile pages show only the newest posts to visitors. Discover more posts adds older posts by the same author, up to your limit.
  • The number of posts found can be lower than your limit when filters remove posts or when there are fewer public posts.

Tips and advanced usage

  • Start with a limit of 10 per source, check the output, then raise it.
  • Combine Scrape until date with a larger limit to collect only fresh posts on a schedule.
  • Turn on Flatten output before exporting to CSV or Excel.
  • Use Text must contain and Hashtags filter to keep a LinkedIn social listening feed focused.
  • Turn off Scrape additional information for a faster run with fewer details per post. Comments and exact details are then limited.
  • Turn on Download media for a LinkedIn media download of images, videos and document pages; each media item then has a saved.location link.
  • Use scheduled scraping on Apify to monitor a company page every day and send results to a webhook.
  • Each row is structured JSON data that loads into a spreadsheet or database, and pay per result pricing keeps costs predictable.

Integrations and API

Can I use LinkedIn Post Scraper as an API?

Yes. Run it with the Apify API or the official apify-client libraries for Node.js and Python, then read the dataset items. Request examples are on the API tab of the Actor.

How to scrape LinkedIn posts with Python

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("data_minds/linkedin-post-scraper").call(run_input={
"urls": ["https://www.linkedin.com/company/amazon"],
"limitPerSource": 10,
"proxyConfiguration": {"useApifyProxy": False},
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["author"]["name"], item["text"])

Can I integrate LinkedIn Post Scraper with other apps?

Yes. Connect it to Make, Zapier, Google Sheets or Slack, or trigger your own endpoint with webhooks. You can also schedule runs so new posts arrive on a fixed interval.

Can I use LinkedIn Post Scraper with AI agents (MCP)?

Yes. The Actor can be used through Apify's MCP server, so AI assistants can call it and read the results. Setup details are on the MCP tab.

Other LinkedIn scrapers

ActorWhat it does
๐Ÿ“ข LinkedIn Ads Library ScraperTurns the public LinkedIn Ad Library into a dataset for competitor ad research.
๐Ÿ“ฃ LinkedIn Ads ScraperScrapes the LinkedIn Ad Library by keyword, company, advertiser, payer or search link.
๐Ÿ‘ฅ LinkedIn People Search ScraperFinds public LinkedIn profiles by keyword, job title, location and company.
๐Ÿ” Post Reshares & Reposts Scraper for LinkedIn (No Cookies)Scrapes public LinkedIn posts from links or IDs, including reposted originals.

FAQ

Scraping publicly available data is generally allowed in many places, but the rules depend on your country, the data and how you use it. Personal data may fall under privacy laws such as GDPR. Read the Apify guide on web scraping legality. This is not legal advice.

How does LinkedIn Post Scraper work?

You give it LinkedIn links or keywords and a limit per source. It reads the public posts it can see without logging in and saves one structured row per post to your dataset, with text, author, media, engagement and comments. You then export or fetch the results from the Apify platform.

Why scrape LinkedIn posts for lead generation and research?

Posts show who is talking about a topic, what companies announce and which content earns attention. Teams use the data for lead generation, competitor monitoring, brand monitoring, content research and engagement analysis. Author headline, follower count and reaction totals help you rank people and posts by relevance.

Why am I getting fewer LinkedIn posts than expected?

Several things can lower the count: your limit per source, filters such as post type, date or phrases, posts that need a login, deleted posts, and profiles that hide their activity from visitors. Check the run log and the SUMMARY record, then loosen filters or raise the limit.

Do I need a LinkedIn account or cookies to scrape posts?

No. The Actor works without a LinkedIn account, cookies or login, so there is no account of yours to put at risk. The trade-off is that it can only collect what a logged-out visitor can see, so members-only posts and full commenter lists are not available.

Can I scrape LinkedIn posts by keyword or hashtag?

Yes. Add topics or hashtags to the Keywords field, or paste a LinkedIn content-search link into Source URLs. Each keyword counts as one source with its own limit. Add Hashtags filter, Text must contain or a date cut-off to keep the matching public posts relevant.

Can I scrape comments from a LinkedIn post?

Yes. Each post row includes a comments list with author, text, time and reactions, up to the number you set in Number of comments to fetch. Logged-out visitors can see about 10 comments per post, so commentsTruncated tells you when the post has more.

Is LinkedIn Post Scraper not working?

First check that your links are public posts, profiles or company pages, and review the run log for the cause. If a run still fails or returns nothing unexpected, open the Issues tab with your run link and the input you used, and the team will look at it.

Support and feedback

This Actor is an independent tool, is not affiliated with or endorsed by LinkedIn, and collects only publicly available data. You are responsible for using the data in line with the site's terms and the laws that apply to you.