LinkedIn Post Search Scraper | Keywords, Hashtags & Profiles avatar

LinkedIn Post Search Scraper | Keywords, Hashtags & Profiles

Pricing

from $0.75 / 1,000 results

Go to Apify Store
LinkedIn Post Search Scraper | Keywords, Hashtags & Profiles

LinkedIn Post Search Scraper | Keywords, Hashtags & Profiles

Search LinkedIn posts by keyword or hashtag and export the full text, author, reactions, comments, images and posting date. Also works from a profile or a company page, or from exact post links you already have. No login and no cookies needed, in any language LinkedIn publishes and country.

Pricing

from $0.75 / 1,000 results

Rating

0.0

(0)

Developer

SilentFlow

SilentFlow

Maintained by Community

Actor stats

3

Bookmarked

115

Total users

11

Monthly active users

6 days ago

Last modified

Share

LinkedIn Post Scraper

Search LinkedIn posts by keyword, by profile or by link, and get back the post text, its author, its date and its reactions in one structured row per post. A default run brings back 10 posts with their full content in about 40 seconds.

No login. No account. Paste a keyword, press Start, get a spreadsheet.

โœจ Why teams choose this over other LinkedIn post scrapers

Copying posts by hand, one browser tab at a time? Ending a run with a file full of links and no idea what the posts actually said? Losing an afternoon to a scraper that asked you to sign in first?

  • ๐Ÿ“ The post text comes back on every run. Every row carries what the post actually says, who wrote it, when, and how many people reacted. There is no option to hunt for and no faster mode that quietly drops the content you came for.
  • ๐Ÿšซ Rows with nothing to read are never delivered. If a post is found but its content cannot be opened, it is left out of your results instead of shipping as a link with an empty text column, and it is never charged.
  • ๐Ÿ”Ž Three ways in. Search by keyword or hashtag, follow a profile or a company page, or paste exact post links you already have. One actor covers all three.
  • ๐Ÿ”“ No login, no account, no personal data of yours involved. You never hand over LinkedIn credentials to run this.
  • ๐ŸŒ Any language, any country. Posts are read as LinkedIn publishes them, in Spanish, German, Portuguese, Japanese or anything else, with the original text preserved.
  • ๐Ÿ“Š Stable columns. Every advertised field exists on every row, empty when a post genuinely has no images or no hashtags. Your spreadsheet formulas and your database import do not break between runs.
  • โฑ๏ธ You can watch it work. While the run is going, the number it shows you is the number of rows already in your dataset, not the number of pages it opened, and it ends with a sentence saying what it delivered.

๐ŸŽฏ What you can do with LinkedIn post data

TeamWhat they build
Content marketingA weekly board of the highest-reaction posts on your topic, to see which angles travel
Demand generationA watchlist of competitor company pages, so every launch post lands in Slack the day it goes out
SalesA list of prospects who posted about a pain your product solves, with the exact sentence to quote in the first email
RecruitingA feed of "we are hiring" posts in a niche, before the role reaches the job boards
Product researchA corpus of what users say about a category, ranked by reactions, to feed a positioning study
Investor relationsA timeline of what a portfolio company publishes, archived with dates and engagement counts

๐Ÿ“ฅ Input parameters

ParameterTypeDescriptionDefault
keywordsArraySearch terms or hashtags. Each one runs its own search.["AI"]
postUrlsArrayExact post links to read, in /posts/ or /feed/update/ form.[]
profileUrlsArrayProfile or company page links to collect posts from.[]
dateFilterEnumpast-week, past-month, or any time.Any time
limitIntegerMaximum posts per keyword or per profile, 1 to 100.10
proxyObjectConnection settings. Residential is recommended.Apify Residential

Every run opens the posts it finds and returns their content. There is no faster mode that returns links only, because a row without the post is not worth a row.

๐Ÿ“Š Output data

One row per post:

{
"postId": "openai_the-openai-podcast-activity-7468347768948936704-yw3W",
"url": "https://www.linkedin.com/posts/openai_the-openai-podcast-activity-7468347768948936704-yw3W",
"text": "Last month AI found something mathematicians had missed for decades. Reasoning researchers join the podcast to discuss how.",
"type": "image",
"postedAt": "2026-06-04T17:07:43.292Z",
"postedAtISO": "2026-06-04T17:07:43.292Z",
"authorName": "OpenAI",
"authorProfileUrl": "https://www.linkedin.com/company/openai",
"authorProfileId": "openai",
"authorImage": "https://media.licdn.com/dms/image/...",
"numLikes": 221,
"numComments": 51,
"numShares": 0,
"images": ["https://media.licdn.com/dms/image/..."],
"hashtags": ["ai", "research"],
"isRepost": false,
"isSponsored": false,
"scrapedAt": "2026-08-15T19:44:41Z"
}

๐Ÿ—‚๏ธ Data fields

โœ… means the column is on 100% of rows, measured on 55 rows collected from all three ways in, keywords, profile pages and exact links. The Notes say when a value inside it can be empty. โš ๏ธ means the column appears only on the rows that have it.

FieldTypeColumn on every rowNotes
postIdstringโœ…Identifier of the post. Filled on 55 rows out of 55.
urlstringโœ…Direct link to the post. Filled on 55 out of 55.
textstringโœ…What the post says. Filled on 55 out of 55. Can be empty on a post made of an image with no caption.
typestringโœ…text, image, video, article or document. Filled on 55 out of 55.
postedAtstringโœ…Publication date and time. Filled on 55 out of 55.
postedAtISOstringโœ…Same date in ISO 8601. Filled on 55 out of 55.
authorNamestringโœ…Person or company who published. Filled on 55 out of 55.
authorProfileUrlstringโœ…Link to that author. Filled on 55 out of 55.
authorProfileIdstringโœ…Author identifier, stable across runs. Filled on 55 out of 55.
authorImagestringโœ…Avatar link. Empty when the page does not show one, on 13 rows out of 55.
authorHeadlinestringโš ๏ธTagline under the author name, only when the post page shows it
authorTypestringโš ๏ธPerson or Company, when the post page says which
numLikesnumberโœ…Reactions counted on the post page. 0 when the post has none.
numCommentsnumberโœ…Comments counted on the post page. LinkedIn often hides this count: 0 on 22 rows out of 55.
numSharesnumberโœ…Reposts. LinkedIn hides this count on public pages: 0 on all 55 rows.
imagesarrayโœ…Empty list when the post has no image, on 12 rows out of 55.
videostringโš ๏ธPresent on video posts
hashtagsarrayโœ…Empty list when the post has none, on 32 rows out of 55.
mentionsarrayโš ๏ธPeople and pages tagged in the post
isRepostbooleanโœ…Whether the post repeats someone else's
isSponsoredbooleanโœ…Whether the post is an ad
articleTitlestringโš ๏ธTitle of the article a post links to
articleUrlstringโš ๏ธLink the post points to
scrapedAtstringโœ…When the row was collected. Filled on 55 out of 55.

๐Ÿš€ Examples

Get the latest posts about a topic

{
"keywords": ["AI agents"],
"limit": 20
}

Track what a company published this week

{
"profileUrls": ["https://www.linkedin.com/company/openai"],
"dateFilter": "past-week",
"limit": 25
}
{
"postUrls": [
"https://www.linkedin.com/posts/openai_the-openai-podcast-activity-7468347768948936704-yw3W",
"https://www.linkedin.com/feed/update/urn:li:activity:7468347768948936704"
]
}

Watch several competitors at once

{
"profileUrls": [
"https://www.linkedin.com/company/stripe",
"https://www.linkedin.com/company/adyen",
"https://www.linkedin.com/company/checkout-com"
],
"dateFilter": "past-month",
"limit": 30
}

Find recent hiring posts in a niche

{
"keywords": ["hiring data engineer", "we are hiring analytics"],
"dateFilter": "past-week",
"limit": 50
}

Posts take a few days to become searchable, so the freshest results you can expect are about three days old. Ask for a period only when you would rather have fewer posts than older ones.

๐Ÿค– Copy to your AI assistant

Actor: SilentFlow/linkedin-posts-scraper-ppr on Apify.
It searches LinkedIn posts and returns one row per post.
Input fields:
- keywords: array of strings, search terms or hashtags (default ["AI"])
- postUrls: array of exact post links (/posts/ or /feed/update/ form)
- profileUrls: array of profile or company page links
- dateFilter: "" | "past-week" | "past-month" (default "")
- limit: integer 1-100, posts per keyword or profile (default 10)
- proxy: proxy configuration object
Every post found is opened and read; there is no option to skip that.
Output fields per row:
postId, url, text, type, postedAt, postedAtISO, authorName, authorProfileUrl,
authorProfileId, authorImage, authorHeadline, authorType, numLikes,
numComments, numShares, images, video, hashtags, mentions, isRepost,
isSponsored, articleTitle, articleUrl, scrapedAt
Rows that carry no readable content are never returned, and the counts the run
reports are counts of rows written to the dataset.

๐Ÿ’ป Integrations

Run it from Python:

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("SilentFlow/linkedin-posts-scraper-ppr").call(run_input={
"keywords": ["AI agents"],
"limit": 20,
})
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["postedAtISO"], post["authorName"], post["numLikes"])
print(post["text"][:200])

Run it from JavaScript:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: '<YOUR_APIFY_TOKEN>' });
const run = await client.actor('SilentFlow/linkedin-posts-scraper-ppr').call({
profileUrls: ['https://www.linkedin.com/company/openai'],
dateFilter: 'past-week',
limit: 25,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
const topPost = items.sort((a, b) => b.numLikes - a.numLikes)[0];
console.log(topPost.authorName, topPost.numLikes, topPost.url);

Send new posts to Slack, Google Sheets, Airtable or a webhook straight from the Apify Integrations tab, or schedule the run every morning and read the dataset from your warehouse.

๐Ÿ“ˆ Performance

WhatMeasured
Default run, 10 posts with full text41 seconds
Five sources at once, 30 posts delivered48 seconds
One keyword, 100 posts asked for100 delivered in 2 minutes 27
Posts per keyword or per profileup to 100
Keywords, profiles and links per runno fixed limit

Every figure above is a count of rows delivered to your dataset, not of pages the run opened.

๐Ÿ’พ Data export

Every run writes a dataset you can download as JSON, CSV, Excel, XML or HTML from the Storage tab, read from the API, or pipe into another tool through Integrations.

๐Ÿ’ก Tips for best results

  1. Start with 5 posts. Check the text and the dates on a small run before scaling to 100.
  2. Prefer company pages for profile mode. Company pages publish publicly and are indexed far better than personal profiles.
  3. For a person, search their name as a keyword instead of passing their profile link. It reaches more of what they published.
  4. Use dateFilter when recency matters. Without it, a search can return posts from several years back, which is fine for research and wrong for monitoring.
  5. Give keywords two or three words. A single very common word returns whatever is most indexed, not what you meant.
  6. Add keywords rather than raising the limit. Each keyword has a finite pool of public posts. Three keywords at 50 collect more than one keyword at 150.

โš ๏ธ What this scraper cannot do

  • Private and connection only posts stay private. Only what LinkedIn shows publicly can be collected.
  • Personal profiles are thinly indexed. A personal profile link often returns few posts or none. Searching the person's name as a keyword works better.
  • Reaction counts are what the post page shows. Comment counts are frequently absent on LinkedIn's public pages and come back as 0, and share counts are usually hidden.
  • Some posts cannot be opened. When that happens the row is dropped rather than delivered empty, so a run can return fewer posts than the limit you set. The run says so in its final message.

โ“ FAQ

Do I need a LinkedIn account or password? No. Nothing is required beyond the keyword or link you type in.

Why did I get fewer posts than my limit? The limit is a ceiling, not a promise. What LinkedIn publishes publicly for a narrow keyword runs out, the date filter may exclude some, and posts that could not be opened are left out rather than delivered empty. When a run falls short it says so in its final message, with both numbers. Running the same keyword again returns the same posts; adding keywords is what collects more.

Why is numComments 0 on many posts? LinkedIn's public post pages often show the reaction count without the comment count. When the number is not on the page, the row keeps 0 instead of inventing one.

Can I get the comments themselves? No. This actor returns posts. Comment text is not part of the output.

Does it work for non English posts? Yes. The post text is returned exactly as published, in any language and any country.

What is the difference between keywords and profileUrls? keywords searches across all of LinkedIn for a topic. profileUrls collects what one specific person or company published.

Can I pass a hashtag? Yes, put it in keywords, with or without the #.

How do I get one specific post? Put its link in postUrls. It is read directly, no search involved.

Can I schedule it? Yes. Use the Schedules tab in Apify to run it every hour, every day or every week, and connect the output to Slack, Sheets or a webhook.

Can I get a faster run that returns only the links? No. Every run opens the posts and returns their content. A list of links with no text is not what a post scraper is for, and you would be paying per row for it.

This actor collects only publicly visible LinkedIn content, the same pages any visitor can open without signing in. It does not access private profiles, connection only posts, or anything behind a login. You remain the controller of the data you collect: if your use involves personal data, make sure it has a lawful basis and respects GDPR, CCPA, PIPL and the local rules that apply to you, including retention limits and deletion requests. Use it for research, monitoring and analysis, not for spam or harassment.

More LinkedIn actors, for profiles, company pages, jobs and ads, are published on the SilentFlow profile in the Apify Store.

๐Ÿ“ฌ Support

Rate the actor and leave a review on its Apify Store page. Reviews are read and acted on, and they shape what gets fixed next.

Made by SilentFlow