To scrape LinkedIn posts, use an Apify actor that targets public post URLs, profiles, company pages, or hashtags and returns structured JSON — no login, cookies, or proxy setup required. The cheapest reliable option is the LinkedIn Post Scraper (no cookies), which charges $0.004 per successful post and returns author, text, media, reactions, and comment counts. You can run it from the Apify console, the REST API, or a Python/Node SDK in under five minutes.
Quick Answer
To scrape LinkedIn posts, send a list of profile URLs, company URLs, or hashtags to a hosted scraper actor and read the JSON output. The no-cookies LinkedIn Post Scraper on Apify costs $0.004 per post and returns 10+ structured fields including reactions, comments count, post URL, and embedded media. It works without your personal LinkedIn account, so there is zero risk of session bans. Typical throughput is 200–500 posts per minute depending on input type. Output can be exported as JSON, CSV, Excel, or pushed to a webhook.
Is it legal to scrape LinkedIn posts?
Scraping public LinkedIn posts — content visible without logging in — is legal in the US following the hiQ Labs v. LinkedIn ruling (9th Circuit, 2022). Private posts, member-only content, and anything behind authentication are off-limits and violate LinkedIn's Terms of Service.
Practical rules to stay safe:
- Only scrape posts that are publicly indexed (visible to a logged-out browser).
- Do not store personal data of EU citizens beyond what GDPR's "legitimate interest" allows — keep retention short.
- Do not re-publish scraped content verbatim; use it for analytics, lead research, or training internal models.
- Never use stolen cookies or paid LinkedIn accounts to bypass auth — that crosses the line into CFAA territory.
The actor recommended here works only against public endpoints, so you stay on the legal side by default.
How do you scrape LinkedIn posts without logging in?
The trick is to avoid the cookie-based approach entirely. Most LinkedIn scrapers ask you to paste a li_at session cookie, which (a) gets your personal account flagged and (b) breaks every 24–72 hours.
The no-cookies approach hits LinkedIn's public-facing HTML and JSON endpoints — the same ones Google indexes — and parses them server-side on Apify's infrastructure. You give it three possible inputs:
- Profile URLs —
https://www.linkedin.com/in/williamhgates/returns that person's recent public posts. - Company URLs —
https://www.linkedin.com/company/microsoft/returns that company's feed. - Hashtags —
#aireturns recent public posts tagged with it.
No login. No cookie rotation. No account warm-up. The actor handles proxies, retries, and rate limits for you.
What data can you extract from a LinkedIn post?
Each scraped post returns a JSON object with these fields:
| Field | Example |
|---|---|
postUrl | https://www.linkedin.com/posts/... |
text | Full post body, including line breaks |
authorName | "Satya Nadella" |
authorHeadline | "Chairman and CEO at Microsoft" |
authorProfileUrl | https://www.linkedin.com/in/satyanadella/ |
publishedAt | ISO 8601 timestamp |
reactionsCount | 12,847 |
commentsCount | 423 |
repostsCount | 1,209 |
images | Array of CDN URLs |
videoUrl | Direct MP4 link if present |
hashtags | ["#AI", "#Copilot"] |
That's enough to build a competitor monitoring dashboard, a hashtag trend tracker, or a sales-trigger pipeline (e.g., "alert me when a CTO at a Series B startup posts about hiring").
Step-by-step: scrape LinkedIn posts with Apify
Here is the fastest path from zero to data:
1. Open the actor
Go to LinkedIn Post Scraper (no cookies) and click Try for free. Sign up for Apify if you haven't — you get $5 in monthly free credit on the free plan, which is 1,250 posts.
2. Set your input
In the Input tab, paste a JSON config like:
{
"profileUrls": [
"https://www.linkedin.com/in/williamhgates/",
"https://www.linkedin.com/in/satyanadella/"
],
"maxPostsPerProfile": 50
}
For hashtags:
{
"hashtags": ["ai", "saas"],
"maxPostsPerHashtag": 100
}
3. Run it
Click Start. A 50-post profile scrape typically finishes in 30–60 seconds. The cost: 50 × $0.004 = $0.20.
4. Export
Go to the Dataset tab and pick a format: JSON, CSV, Excel, RSS, or HTML table. Or call the API:
curl "https://api.apify.com/v2/datasets/DATASET_ID/items?format=json&token=YOUR_TOKEN"
5. Automate it
Use Apify's scheduler to re-run the actor every hour, day, or week. Pipe the dataset to a webhook → Zapier / n8n / your own backend → Slack alert / CRM enrichment / BigQuery.
How to scrape LinkedIn posts with Python
If you prefer code, use the Apify Python SDK:
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run_input = {
"profileUrls": ["https://www.linkedin.com/in/williamhgates/"],
"maxPostsPerProfile": 25,
}
run = client.actor("apify-linkedin-post-scraper").call(run_input=run_input)
for post in client.dataset(run["defaultDatasetId"]).iterate_items():
print(post["authorName"], "—", post["reactionsCount"], "reactions")
print(post["text"][:200])
print("---")
That's the entire integration. Total runtime: under 30 seconds for 25 posts. Total cost: $0.10.
How much does it cost to scrape LinkedIn posts?
The no-cookies LinkedIn Post Scraper uses pay-per-event pricing: $0.004 per successful post. Failed requests are free. There is no monthly subscription, no per-minute compute charge, and no proxy fees.
Real-world examples:
- Daily monitoring of 10 competitors, 20 posts each = 200 posts/day × 30 days = $24/month.
- Hashtag scrape for #saas, 500 posts/week = 2,000 posts/month = $8/month.
- One-time lead-gen pull of 50 industry leaders × 100 posts = 5,000 posts = $20.
Compare that to Phantombuster ($69/month minimum, requires your cookie) or building it yourself (8–20 hours of dev time plus residential proxies at ~$5/GB). For most teams, the actor is 10–50× cheaper than alternatives.
How do you scrape LinkedIn posts by hashtag?
Hashtag scraping is useful for trend analysis, competitor content audits, and finding ungated leads. Pass the hashtag without the #:
{
"hashtags": ["webscraping", "automation"],
"maxPostsPerHashtag": 200
}
The actor returns the most recent public posts per tag, sorted newest-first. Note that LinkedIn's hashtag feed updates roughly every 5–15 minutes, so for near-realtime monitoring, schedule the actor to run every 15 minutes.
A common pipeline:
- Scrape
#hiringposts every 30 minutes. - Filter for posts mentioning "data engineer" or "ML engineer".
- Push matched author profiles to a Google Sheet.
- Outreach team gets a fresh lead list every morning.
How do you avoid getting blocked when scraping LinkedIn?
When you run the actor on Apify, you don't need to think about this — it handles rotating residential proxies, browser fingerprints, and retry logic. If you're building your own scraper, these are the mistakes that get IPs banned:
- Hitting authenticated endpoints with the same cookie repeatedly. LinkedIn flags accounts that pull >500 profiles/day.
- Datacenter IPs. LinkedIn blocks AWS, GCP, and Azure ranges aggressively. You need residential or mobile proxies.
- No header randomization. Always rotate User-Agent, Accept-Language, and viewport.
- Sequential request patterns. Add jitter (1–4 second random delays).
- Ignoring 429s. Back off exponentially when you get rate-limited.
The actor implements all of the above by default, which is why "no cookies" works reliably.
FAQ
Q: Can I scrape LinkedIn posts for free? You can scrape up to 1,250 posts per month for free using Apify's free tier ($5 monthly credit ÷ $0.004 per post). After that it's pay-as-you-go with no monthly minimum.
Q: Does this actor get my LinkedIn account banned? No. The actor never touches your account because it doesn't use cookies or login. It only reads publicly available post data through unauthenticated endpoints, so there's nothing tying activity back to your profile.
Q: How many posts can I scrape per profile?
LinkedIn publicly exposes roughly the last 50–100 posts per profile depending on the account's activity. The actor will pull whatever is publicly visible up to your maxPostsPerProfile limit.
Q: Can I scrape LinkedIn comments and likes on a post? This actor returns the counts of comments, reactions, and reposts, plus the post URL. For full comment text and the list of reactors, you'd need a separate dedicated actor — those endpoints require deeper authentication and are priced differently.
Q: How fresh is the scraped data? Data is fetched live at the moment you run the actor — no cache. A post made 30 seconds ago will appear in your next run if LinkedIn's public feed has indexed it (typically within 1–5 minutes of publishing).