LinkedIn Scraper: Posts, Reactions, Comments & Engagement
Pricing
$14.99/month + usage
LinkedIn Scraper: Posts, Reactions, Comments & Engagement
Scrapes full data from any public LinkedIn company page, including About info, employees, posts, insights, specialties, locations, size, and industry. Ideal for lead enrichment, competitor analysis, market research, and automated company intelligence at scale
Pricing
$14.99/month + usage
Rating
5.0
(1)
Developer
Scrapio
Maintained by CommunityActor stats
0
Bookmarked
100
Total users
6
Monthly active users
5 days ago
Last modified
Categories
Share
LinkedIn Post Scraper — Reactions, Comments and Engagement Analytics
LinkedIn Scraper: Posts, Reactions, Comments & Engagement extracts a public LinkedIn company page's profile plus its recent posts, per-post reaction and comment counts, top reaction types, embedded images and videos, and derived engagement analytics — all as one typed JSON row per company URL. Unlike scraping frameworks that return raw HTML, this actor returns typed JSON — ready for your model, your database, or your pipeline without any parsing. It runs fully logged-out, with automatic proxy escalation on a block. This guide covers every input and output field and how sales, marketing, and research teams deploy it.
🧭 What Does LinkedIn Scraper: Posts, Reactions, Comments & Engagement Do?
LinkedIn Scraper: Posts, Reactions, Comments & Engagement scrapes a public LinkedIn company page (for example linkedin.com/company/netflix/) and returns three layers of data in a single dataset row per URL: the company's firmographic profile, its recent posts enriched with real reaction/comment counts and media, and derived engagement analytics computed across those posts. No LinkedIn account, cookie, or session is required — the actor fetches the server-rendered public page and its embedded JSON-LD directly, logged out.
Key capabilities:
- Company profile extraction — name, description, location, headcount, website, logo, slogan, industry, size, founded year, headquarters, org type, specialties, similar pages, and a sample of employees shown on the page.
- Post discovery — up to the 10 most recent posts LinkedIn embeds on the public page, each with its
url,datePublished, andtext. - Reaction and comment enrichment —
reactionsCount,commentsCount, andtopReactionTypesmatched to the correct post by its real numeric LinkedIn activity ID, never by list position. - Media extraction — full-resolution
images[]and multi-bitratevideos[]per post (optional, on by default). - Derived engagement analytics —
postingCadenceDaysAvg,avgReactionsPerPost,avgCommentsPerPost,totalReactionsAllPosts,totalCommentsAllPosts, andpostEngagementRatecomputed per company per run. - Optional AI sentiment/topic tagging on post text, across seven AI providers.
- Automatic proxy escalation to Apify's Residential proxy group on a block or authwall redirect.
⚡ Features & Capabilities
The feature set splits into three parts: what's extracted from the page, how it's kept reliable, and where it fits alongside the rest of the Scrapio LinkedIn lineup.
Core features
- Company profile parsed from the page's own JSON-LD
Organizationblock plus its About-us detail cards:name,description,location(city/state/country),headquartersStreetAddress,employeeCount,website,logo,slogan,industry,size,founded,headquarters,type,specialties[],similarPages[],employees[]. - Per-post engagement matched by real activity ID, not position: each
posts[]item carriesurl,datePublished,text,postUrn,reactionsCount,commentsCount,topReactionTypes[],images[],videos[]. - Configurable post window —
maxPostsToAnalyze(1–10) andoldestPostDate(absolute or relative) control which posts feed bothposts[]and the analytics. - Derived analytics computed per run:
postingCadenceDaysAvg,avgReactionsPerPost,avgCommentsPerPost,totalReactionsAllPosts,totalCommentsAllPosts,postEngagementRate, andpostEngagementRateDenominator(states which denominator — currently alwaysemployeeCount— was used). - Optional AI sentiment/topic tagging (
enableSentimentTagging) across 26 selectable models spanning Anthropic, OpenAI, Google, xAI, DeepSeek, Perplexity, and Mistral, auto-detected from theaiModelname prefix. - Automatic proxy escalation from direct/user-selected to Apify Residential on HTTP 403/407/429/999 or an authwall redirect, with exponential-backoff retries up to
maxRetryAttempts. - Legacy input aliases (
urls,proxy,maxRetries,requestTimeoutSec,concurrency) still work, so existing base-actor input JSON runs unchanged.
LinkedIn Scraper: Posts, Reactions, Comments & Engagement within the Scrapio data stack
LinkedIn Scraper: Posts, Reactions, Comments & Engagement covers company posts, their reactions/comments, and derived engagement analytics. For plain company firmographics and similar-company discovery without post-level data, use linkedin-company-about-scraper-with-similar-companies-affiliates. For the people behind a company page, use linkedin-company-employees-scraper-public-contact-info. To search LinkedIn posts by keyword across companies and individuals rather than one company at a time, use linkedin-post-scraper-by-keyword. For individual profile data, see linkedin-profile-scraper-by-similar-profile-finder, and for B2B contact emails, linkedin-b2b-emails-scraper-by-phone-email-finder.
Why do developers and data teams scrape LinkedIn?
Teams scrape LinkedIn company pages for reasons that fall into a handful of recurring buckets — commercial, technical, and research.
🏢 Sales, marketing and PR teams
Sales development reps and social sellers feed companyUrls for target accounts into a run, then read avgReactionsPerPost, postEngagementRate, and postingCadenceDaysAvg to prioritize which prospects are actively posting and getting traction on LinkedIn before a cold outreach — a company posting weekly with rising engagement is a warmer signal than one that hasn't posted in months. Marketing and competitive-intelligence teams point the same run at a list of competitor pages and compare avgReactionsPerPost/avgCommentsPerPost and postingCadenceDaysAvg side by side in a spreadsheet or BI tool. Brand and PR teams run it against their own company page on a schedule to track post performance over time without manual screenshotting, using posts[].reactionsCount and commentsCount as the source of truth.
📊 AI training data and RAG indexing
The highest-information text field here is posts[].text — the company's own LinkedIn post copy — alongside description/slogan/specialties[] from the company profile. For RAG enrichment, indexing posts[].text with postUrn and datePublished lets an agent answer "what has this company posted about recently" with a citable source post and date, while name, industry, and employeeCount give the retrieval layer company-level context to filter or rank by. For training data, posts[].text paired with the optional sentiment and topics[] fields (when enableSentimentTagging is on) gives labeled examples for a sentiment or topic classifier without hand-labeling — every post carries the same structure (url, datePublished, text, reactionsCount, commentsCount) across every company and every run, so no per-record schema handling is needed before it reaches a training set or vector store.
📱 Competitive and market intelligence
Competitive and market-intelligence teams track postingCadenceDaysAvg and avgReactionsPerPost across a watchlist of competitor companyUrls to see who is posting more often and getting more traction, and diff employeeCount and specialties[] run over run to catch headcount growth or a stated pivot in focus. topReactionTypes[] on individual posts is a fast read on how an audience is reacting (LIKE vs PRAISE vs EMPATHY) without opening LinkedIn manually for each competitor.
🔬 Research and academic use
Academic and social-media researchers use this actor to build datasets of public company posting behavior and engagement — posting frequency, reaction/comment volume, and optionally AI-tagged sentiment — across a set of company pages, for studies on corporate or B2B communication. The actor returns only what LinkedIn's public company page renders; it does not authenticate and does not access private profiles, groups, or non-public engagement data such as individual reactor or commenter identities.
🎥 Product and SaaS development
Teams building lead-scoring tools, sales-intelligence dashboards, or LinkedIn monitoring products can run this actor on a schedule against a customer's account list and merge postEngagementRate, postingCadenceDaysAvg, and employeeCount into their own scoring model, or build a simple "is this account active on LinkedIn" enrichment step on top of the dataset. Because output fields are stable JSON keys rather than parsed HTML, they map directly into a product's own schema.
🍚 Input Parameters
None of the parameters are required — the schema defaults to scraping nothing if companyUrls is left empty, so it must be supplied for a run to do anything.
| Parameter | Required | Type | Description | Example Value |
|---|---|---|---|---|
companyUrls | No | array of strings | Public LinkedIn company page URLs to scrape, one per line. The base urls key still works too. | ["https://www.linkedin.com/company/netflix/"] |
maxPostsToAnalyze | No | integer (min 1, max 10, default 10) | How many of the page's recent posts (max 10 are ever embedded on the page) to enrich with reactions/comments/media and include in the analytics. | 10 |
oldestPostDate | No | string (datepicker, absolute or relative) | Drop posts older than this date from posts[] and the analytics. Accepts an absolute date (YYYY-MM-DD) or a relative value like "30 days". Leave blank to include all embedded posts (default). | "30 days" |
includePostMedia | No | boolean (default true) | Extract each post's images[] (full CDN URLs) and videos[] (multi-bitrate CDN mp4 URLs). Turn off for a smaller/faster payload. | true |
enableSentimentTagging | No | boolean (default false) | Best-effort AI classification of each post's text into sentiment (positive/neutral/negative) plus up to 4 topic keywords. Requires aiApiKey. | false |
aiModel | No | string enum (default "claude-haiku-4-5") | AI model/provider for sentiment tagging. Provider is auto-detected from the name prefix: claude-*=Anthropic, gpt-*/o1/o3=OpenAI, gemini-*=Google, grok-*=xAI, deepseek-*=DeepSeek, sonar*=Perplexity, mistral-*=Mistral. | "claude-haiku-4-5" |
aiApiKey | No | string (secret, nullable) | API key for the selected AI provider (falls back to that provider's env var if left blank, e.g. ANTHROPIC_API_KEY). Only used when AI tagging is enabled. | "sk-ant-xxxxx" |
maxRetryAttempts | No | integer (min 1, prefill 3) | How many times to retry a company URL on error/block before giving up and saving an error row. The base maxRetries key still works too. | 3 |
requestTimeoutSeconds | No | integer (min 5, prefill 30) | Per-request HTTP timeout in seconds. The base requestTimeoutSec key still works too. | 30 |
maxConcurrency | No | integer (min 1, max 20, prefill 3) | How many company URLs to fetch in parallel (capped at 20). The base concurrency key still works too. | 3 |
proxyConfiguration | No | object (proxy editor, nullable) | Optional proxy. Starts DIRECT (or your selection) and auto-escalates to Apify Residential on a 403/407/429/999/authwall block. The base proxy key still works too. | {"useApifyProxy": false} |
aiModel accepts 26 values total: claude-haiku-4-5, claude-sonnet-5, claude-opus-4-8, claude-fable-5, gpt-4o-mini, gpt-4o, gpt-4.1-mini, gpt-4.1, o3-mini, o1, gemini-2.0-flash-lite, gemini-2.0-flash, gemini-1.5-pro, gemini-2.5-flash, gemini-2.5-pro, grok-2-latest, grok-3-mini, grok-3, grok-beta, deepseek-chat, deepseek-reasoner, sonar, sonar-pro, sonar-reasoning, mistral-small-latest, mistral-large-latest.
JSON input example:
{"companyUrls": ["https://www.linkedin.com/company/netflix/","https://www.linkedin.com/company/spotify/"],"maxPostsToAnalyze": 10,"oldestPostDate": "90 days","includePostMedia": true,"enableSentimentTagging": true,"aiModel": "claude-haiku-4-5","aiApiKey": "sk-ant-xxxxxxxxxxxxxxxxxxxxxxxx","maxRetryAttempts": 3,"requestTimeoutSeconds": 30,"maxConcurrency": 5,"proxyConfiguration": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }}
Supported URL types and input formats
companyUrlsmust be public LinkedIn company page URLs matching the/company/<slug>/pattern, e.g.https://www.linkedin.com/company/netflix/— the actor fetches this URL directly and parses the returned HTML's JSON-LDOrganizationblock, so it does not accept personal profile URLs (/in/...) or individual post URLs (/posts/...).oldestPostDateaccepts either an absolute date ("2026-01-01") or a relative expression matching^(\d+)\s*(day|week|month|year)s?$(case-insensitive) — e.g."30 days","6 months","1 year". Anything else is ignored and all embedded posts are kept.- Example inputs:
- Single company, default settings:
{"companyUrls": ["https://www.linkedin.com/company/netflix/"]} - Multiple competitors, posts from the last quarter only:
{"companyUrls": ["...", "..."], "oldestPostDate": "90 days"} - Lightweight run without media, with AI tagging on:
{"companyUrls": ["..."], "includePostMedia": false, "enableSentimentTagging": true, "aiApiKey": "..."}
- Single company, default settings:
📦 Output Format
Every run pushes one typed, normalized JSON row per input URL to the dataset — the schema is consistent across runs and across companies, whether a page has 10 posts or none. Results can be exported as JSON, CSV, Excel/XLSX, or XML directly from the Apify Console or API, and browsed live in either of the actor's two dataset views (overview and full).
Output for posts, reactions and comments
{"inputUrl": "https://www.linkedin.com/company/netflix/","success": true,"name": "Netflix","description": "Netflix is one of the world's leading entertainment services...","location": { "city": "Los Gatos", "state": "California", "country": "US" },"headquartersStreetAddress": "100 Winchester Circle","employeeCount": 15000,"website": "https://www.netflix.com","logo": "https://media.licdn.com/dms/image/company-logo/netflix.png","slogan": "See what's next.","industry": "Entertainment Providers","size": "10,001+ employees","founded": 1997,"headquarters": "Los Gatos, California","type": "Public Company","specialties": ["Internet", "Entertainment", "Video Streaming"],"similarPages": [{ "link": "https://www.linkedin.com/company/hbo/", "name": "HBO", "image": "https://media.licdn.com/hbo.png" }],"employees": [{ "link": "https://www.linkedin.com/in/example-employee", "name": "Jordan Lee", "title": "Content Partnerships Manager at Netflix", "image": "https://media.licdn.com/employee.jpg" }],"posts": [{"url": "https://www.linkedin.com/posts/netflix_our-ads-members-activity-7482854185525387264-KecG","datePublished": "2026-07-14T17:51:02.508Z","text": "Our ads members spend a lot of time watching...","postUrn": "urn:li:activity:7482854185525387264","reactionsCount": 118,"commentsCount": 6,"topReactionTypes": ["LIKE", "EMPATHY", "PRAISE"],"images": [],"videos": [{ "url": "https://dms.licdn.com/playlist/vid/mp4-720p-30fp-crf28/example.mp4", "type": "video/mp4", "bitrate": 943565 }],"sentiment": null,"topics": []}],"error": ""}
Output for engagement analytics
{"postingCadenceDaysAvg": 2.1,"avgReactionsPerPost": 588.9,"avgCommentsPerPost": 29.3,"totalReactionsAllPosts": 5889,"totalCommentsAllPosts": 293,"postEngagementRate": 0.04123,"postEngagementRateDenominator": "employeeCount","aiSentimentTaggingEnabled": false,"scrapedAt": "2026-07-25T09:12:44Z"}
postEngagementRate and postingCadenceDaysAvg return null rather than 0 whenever they can't be honestly computed — for example when a company has fewer than two dated posts, or employeeCount is missing.
Schema stability and export options
Field names stay stable when LinkedIn updates its front end because extraction targets structural anchors — the JSON-LD Organization/DiscussionForumPosting blocks, data-test-id attributes, and the data-semaphore-content-urn activity ID — rather than fragile CSS class names. If LinkedIn removes a data point the actor relies on, the corresponding field returns an empty string, empty array, or null instead of breaking the row or fabricating a value. Every field documented above is pushed on every row, including failed ones (success: false, populated error), so downstream consumers can rely on a fixed key set. Delivery is via the standard Apify dataset: browse it live in the overview or full view, or export to JSON, CSV, Excel, or XML from the Console or the Apify API.
💡 LinkedIn Scraper: Posts, Reactions, Comments & Engagement Strategy Guide
🎯 Strategy 1: Real-time enrichment pipeline
Trigger this actor from a CRM webhook or workflow tool whenever a new target-account record is created: pass that account's LinkedIn company URL as companyUrls, run with maxPostsToAnalyze capped low (e.g. 3) for a fast enrichment pass, and read back avgReactionsPerPost, postEngagementRate, and postingCadenceDaysAvg alongside the base employeeCount/industry fields. Write those fields into the CRM record as enrichment columns so a rep sees, at a glance, whether the account is actively posting and getting traction before making contact — no manual LinkedIn lookup required.
🎯 Strategy 2: Scheduled monitoring and alerting
Use an Apify Schedule to run the same companyUrls list daily or weekly, storing each run's dataset. Diff consecutive runs on avgReactionsPerPost, postEngagementRate, and the reactionsCount/commentsCount of the newest postUrn to catch a real jump in engagement or a new post going out. Because scrapedAt is stamped on every row and postUrn is a stable per-post key, matching the same post across runs is a simple join rather than a fuzzy match. Alert a Slack channel or spreadsheet only when the delta on postEngagementRate crosses a threshold you define.
🎯 Strategy 3: Bulk dataset build
To build a research or training dataset, feed a full list of companyUrls into one run with maxConcurrency set up to its documented cap of 20, and let each URL resolve to one dataset row containing its profile, up to 10 posts, and derived analytics. Export the finished dataset directly to CSV or Excel from the Apify Console, or pull it via the API into a database. Enabling enableSentimentTagging at build time adds sentiment/topics[] to every post in the same pass, so the exported dataset is training-ready without a separate labeling step.
Strategy comparison at a glance
| Strategy | Best for | Run pattern | Output format |
|---|---|---|---|
| Real-time enrichment | Scoring a single new account on contact | On-demand, triggered per record, low maxPostsToAnalyze | Fields merged back into CRM/enrichment record |
| Scheduled monitoring | Tracking engagement changes over time | Recurring Apify Schedule run over the same companyUrls | Dataset diffed run-over-run on postUrn/analytics fields |
| Bulk dataset build | Research or training datasets | One run, many companyUrls, up to maxConcurrency 20 in parallel | CSV/Excel/API export of the full dataset |
🌴 Related LinkedIn Scrapers & Tools
| Scraper Name | What it extracts |
|---|---|
linkedin-company-about-scraper-with-similar-companies-affiliates | Company firmographics and similar/affiliated company pages |
linkedin-company-employees-scraper-public-contact-info | Public employee listings and contact info for a company page |
linkedin-post-scraper-by-keyword | LinkedIn posts matched by keyword search, across companies and profiles |
linkedin-profile-scraper-by-similar-profile-finder | Individual LinkedIn profile data plus similar-profile discovery |
linkedin-b2b-emails-scraper-by-phone-email-finder | B2B contact emails/phone numbers linked to LinkedIn profiles |
facebook-groups-posts-scraper-with-author-engagement-analytics | Facebook group posts with author-level engagement analytics |
instagram-comments-scraper-with-engagement-analytics | Instagram comments with engagement analytics |
youtube-scraper-with-comment-engagement-analytics | YouTube videos with comment engagement analytics |
twitter-profile-scraper-sentiment-analyzer | Twitter/X profile data with sentiment analysis |
reddit-comment-scraper-sentiment-lead-scoring | Reddit comments with sentiment-based lead scoring |
How to integrate LinkedIn Scraper: Posts, Reactions, Comments & Engagement with your stack
LinkedIn Scraper: Posts, Reactions, Comments & Engagement works with any language or tool that can make an HTTP request to the Apify API.
Python
import csvfrom apify_client import ApifyClientclient = ApifyClient("<APIFY_API_TOKEN>")company_urls = ["https://www.linkedin.com/company/netflix/","https://www.linkedin.com/company/spotify/",]run_input = {"companyUrls": company_urls,"maxPostsToAnalyze": 10,"includePostMedia": False,"enableSentimentTagging": False,}run = client.actor("YOUR_USERNAME/linkedin-company-scraper-post-engagement-analytics").call(run_input=run_input)rows = list(client.dataset(run["defaultDatasetId"]).iterate_items())with open("linkedin_engagement.csv", "w", newline="", encoding="utf-8") as f:writer = csv.writer(f)writer.writerow(["name", "employeeCount", "avgReactionsPerPost", "avgCommentsPerPost", "postEngagementRate"])for row in rows:writer.writerow([row.get("name"),row.get("employeeCount"),row.get("avgReactionsPerPost"),row.get("avgCommentsPerPost"),row.get("postEngagementRate"),])print(f"Wrote {len(rows)} companies to linkedin_engagement.csv")
Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: 'YOUR_APIFY_API_TOKEN' });const run = await client.actor('YOUR_USERNAME/linkedin-company-scraper-post-engagement-analytics').call({companyUrls: ['https://www.linkedin.com/company/netflix/'],maxPostsToAnalyze: 10,enableSentimentTagging: false,});const { items } = await client.dataset(run.defaultDatasetId).listItems();for (const row of items) {console.log(row.name, row.avgReactionsPerPost, row.postEngagementRate, row.postingCadenceDaysAvg);}
Async and scheduled pipelines
For fire-and-forget large jobs, call .start() instead of .call() to kick off a run without blocking, then poll client.run(runId).get() for its status or list the dataset once it reaches SUCCEEDED. For recurring jobs, set up an Apify Schedule (cron expression) in the Apify Console or via the Schedules API so the same input runs automatically on a timer — no server of your own required.
🎯 Who Needs LinkedIn Scraper: Posts, Reactions, Comments & Engagement? (Use Cases & Industries)
🏢 Sales and social-selling teams
Sales development reps and social sellers run this actor against a target-account list before outreach, reading avgReactionsPerPost, postEngagementRate, and postingCadenceDaysAvg to see which companies are actively posting and getting real traction on LinkedIn. A prospect account posting every few days with rising avgReactionsPerPost is a warmer signal for a personalized outreach message than one with no recent activity — turning a cold list into a prioritized one without opening LinkedIn manually for each account.
📊 Marketing and competitive-intelligence teams
Marketing and competitive-intelligence teams run a watchlist of competitor companyUrls on a schedule and compare avgReactionsPerPost, avgCommentsPerPost, and postingCadenceDaysAvg across the list to benchmark who is posting more often and getting more engagement. specialties[] and industry diffed run over run also surface a stated strategic pivot before it shows up anywhere else.
📱 PR and brand communications teams
PR and brand teams run this actor against their own company page on a recurring schedule to track how their LinkedIn posts are actually performing — posts[].reactionsCount, commentsCount, and topReactionTypes[] per post, rolled up into avgReactionsPerPost/avgCommentsPerPost — without manually screenshotting each post for a monthly report. postEngagementRate gives a single per-employee number to report to stakeholders alongside the raw totals.
🔬 Researchers
Academic and social-media researchers use this actor to build datasets on public company posting behavior — cadence, reaction/comment volume, and optional AI-tagged sentiment — across a set of company pages, for studies on corporate or B2B communication. It returns only what LinkedIn's public company page renders, so it is scoped to public-data research.
🎥 Product and SaaS builders
Teams building lead-scoring tools, monitoring dashboards, or sales-intelligence products run this actor as a backend enrichment step, merging postEngagementRate, postingCadenceDaysAvg, and employeeCount into their own scoring logic. Because every field is a stable typed JSON key, it maps directly into a product's schema without an HTML-parsing layer to maintain.
Is it legal to scrape LinkedIn?
Scraping publicly accessible data from LinkedIn is generally lawful. In hiQ Labs, Inc. v. LinkedIn Corp. (9th Circuit, 2019, reaffirmed on remand in 2022), the U.S. Court of Appeals for the Ninth Circuit held that scraping data LinkedIn makes publicly available, without logging in, does not violate the Computer Fraud and Abuse Act. This actor only fetches LinkedIn's public, logged-out company page — it does not authenticate, bypass a login wall, or access private data.
That said, scraping can still violate LinkedIn's own Terms of Service, which is a civil contract matter between the scraper and LinkedIn, separate from CFAA exposure — running this actor against LinkedIn may still put you in breach of those terms.
This actor's employees[] field surfaces names, titles, and profile links of individuals shown in the page's public "Employees at" preview, which is personal data under GDPR/CCPA-style frameworks. Storing or using that data beyond simply reading it is your responsibility as the data controller.
LinkedIn Scraper: Posts, Reactions, Comments & Engagement returns only publicly accessible data. What you do with that data is your responsibility — consult legal counsel for commercial applications involving personal data.
❓ Frequently asked questions
Does LinkedIn Scraper: Posts, Reactions, Comments & Engagement work without a LinkedIn account?
No. It fetches the public, logged-out /company/<slug>/ page and its embedded JSON-LD/HTML directly — no login, cookie, or session is required or used.
How does it handle LinkedIn's anti-scraping measures?
It retries each URL up to maxRetryAttempts times with exponential backoff (capped at 10 seconds between attempts), and automatically escalates from a direct/user-selected proxy to Apify's Residential proxy group the moment it sees an HTTP 403, 407, 429, 999 response or an authwall redirect.
Can I run it at scale without getting blocked?
You can run up to maxConcurrency company URLs in parallel, capped at 20 in the input schema; the proxy-escalation and retry logic above runs independently per URL. No uptime or block-rate figure is published for this actor — scale up gradually and watch the error field on returned rows.
How fresh is the data it returns?
Live. Every run fetches the company page fresh over HTTP at request time; nothing is cached or pre-scraped, and scrapedAt reflects the actual moment of that run's fetch.
Which LinkedIn fields work best for AI training and RAG indexing?
posts[].text is the highest-information text field for both RAG (paired with postUrn and datePublished as a citable source and date) and training data (paired with the optional sentiment/topics[] fields). Every field returns as a typed primitive — string, number, boolean, or array — requiring no normalization before use.
Does the output include personal data, and who is responsible for it?
employees[] includes names, titles, and profile links for individuals shown in the company page's public "Employees at" preview — that is personal data. posts[] engagement fields return only aggregate counts (reactionsCount, commentsCount, topReactionTypes), never individual reactor or commenter identities. The actor returns only publicly available data; the lawful basis for storing and using any personal data sits with you.
Does it work with Claude, ChatGPT, and other AI agent tools?
Yes, as an HTTP endpoint callable by any agent framework through the Apify API — it is not currently exposed through an MCP server. Every response is typed JSON, so an agent can consume it directly without parsing HTML.
What happens if AI sentiment tagging is enabled without an API key?
The run logs a warning, disables AI tagging for that run, and proceeds with the full base output — sentiment and topics[] simply come back null/empty on every post.
Why is postEngagementRate based on employeeCount rather than follower count?
This actor doesn't collect a company's follower count, so the engagement-rate denominator is always employeeCount; postEngagementRateDenominator on every row states which field was actually used, so the metric is self-documenting.
Is topReactionTypes a full reaction-type breakdown?
No. It's the ordered list of the top reaction icons LinkedIn renders on the post card (e.g. LIKE, EMPATHY, PRAISE), not a full per-type count breakdown — LinkedIn only exposes that behind an authenticated reactions dialog, which is outside this actor's logged-out scope.
ℹ️ Disclaimer
LinkedIn Scraper: Posts, Reactions, Comments & Engagement extracts only publicly available data from LinkedIn. This tool is intended for lawful use cases only. Users are responsible for complying with LinkedIn's terms of service and applicable data protection laws in their jurisdiction.