Monitoring corporate announcements and industry updates on LinkedIn often requires programmatic access to company feeds. For data engineers building pipelines to track competitor activity or aggregate industry news, writing a custom scraper from scratch presents significant obstacles. LinkedIn frequently updates its front-end structure, implements strict rate limiting, and employs bot-detection mechanisms that quickly block standard browser automation tools.
Using the LinkedIn Company Posts Scraper bypasses these issues by utilizing LinkedIn's internal Voyager API. Because this tool relies on direct HTTP requests rather than resource-heavy browser rendering, it offers a more stable and faster alternative for extracting company activity feeds. However, integrating this actor into an automated data pipeline requires understanding its specific input configurations, session management, and pricing structure.
Controlling Pipeline Scope and API Expenses
When configuring automated scrapers, managing run costs and avoiding unnecessary data extraction is a primary engineering concern. This actor operates on a PAY_PER_EVENT pricing model, which means you are billed strictly for the actions the actor performs rather than the execution time or hardware allocation.
Specifically, the charges are:
- result (apify-default-dataset-item): $0.005 per event. This represents a single scraped post saved to the default dataset. The volume-tier pricing for this event is structured as follows: FREE $0.005, BRONZE $0.00433, SILVER $0.00367, GOLD $0.003, PLATINUM $0.003, DIAMOND $0.003.
- Actor Start (apify-actor-start): $0.005 per GB of memory allocated to the run, charged once when the run begins.
Because you are charged per individual post returned, running a scraper with broad parameters can quickly consume your budget if you target companies that publish multiple updates daily. To prevent cost overruns, you must actively manage the scope of your extraction using specific input properties.
The primary control mechanism is the maxPostsPerCompany integer field. By default, this is set to 10 posts, but it can be configured anywhere from 1 to 200 posts per company in a single run. If your pipeline only needs the latest company announcement, setting maxPostsPerCompany to 1 ensures you only pay $0.005 for the single result event, plus the flat start charge. Conversely, leaving this parameter unconfigured or set too high on a large batch of companies will fetch historical posts you may not need, resulting in redundant charges.
Session Management with the Voyager API
Because the actor interacts with the LinkedIn Voyager API, it requires an active session to fetch data. This is handled through the cookie input parameter, which accepts a logged-in session token. You can provide this in two ways: pasting the single li_at cookie value directly from your browser's Developer Tools, or exporting the full cookies JSON array using an extension like EditThisCookie.
Using the full JSON cookie export is the more stable approach for production pipelines. A complete session payload includes additional telemetry and security tokens that reduce the likelihood of LinkedIn challenging the request.
To configure and run the scraper, follow these four steps:
-
Acquire the Session Cookie: Log into LinkedIn in your browser, open your developer tools, and navigate to the storage or cookie section for
linkedin.com. Locate theli_atcookie value, or use an extension to export the entire cookie jar as a JSON array. -
Define the Target Companies: Collect the target identifiers. The
companyUrlsarray accepts full URLs (such ashttps://www.linkedin.com/company/apple/), sub-paths, or simple company slugs (likeapple). -
Configure the Input Payload: Construct your JSON payload containing the required
companyUrlsandcookiefields, along with your limiters. - Execute the Actor: Run the actor on the Apify platform. Below is an example of a configured input payload:
{
"companyUrls": [
"apple",
"https://www.linkedin.com/company/google"
],
"cookie": "your_li_at_cookie_value_or_json_array_here",
"maxPostsPerCompany": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}
Handling Output Data and Schema Expectations
Once the run completes, the actor writes the extracted data to the default dataset. Each item in the dataset represents a single post. The output schema is structured to avoid empty values; any field that does not contain data for a specific post is completely omitted from the JSON object rather than returned as null.
The schema contains detailed metadata regarding the post's engagement and media:
{
"postId": "7234567890123456789",
"postUrl": "https://www.linkedin.com/feed/update/urn:li:activity:7234567890123456789/",
"companyName": "Apple",
"companySlug": "apple",
"companyUrl": "https://www.linkedin.com/company/apple/",
"content": "We're thrilled to announce the latest additions to the Apple ecosystem...",
"postedAt": "2025-05-23T08:14:32+00:00",
"mediaType": "image",
"mediaUrls": [
"https://media.licdn.com/dms/image/v2/D4E.../feedshare-shrunk.jpg"
],
"reactionsCount": 12430,
"commentsCount": 874,
"repostsCount": 310,
"inputUrl": "apple",
"scrapedAt": "2025-05-24T14:22:11.483201+00:00"
}
When building downstream applications, such as a dashboard or a database sync tool, your ingestion script must account for the optional nature of these fields. For instance, text-only updates will lack the mediaUrls and mediaType fields, while image posts might occasionally lack a content body if the poster uploaded an image without accompanying text.
Structural Limitations and Pipeline Failures
While this scraper is highly efficient due to its HTTP-only design, developers must understand its limitations. Because it relies on an active session cookie (li_at), your pipeline is dependent on the validity of that session. LinkedIn session cookies are read-only but will expire or become invalid if the associated account triggers security checks, changes its password, or logs out. When the cookie expires, the scraper will fail with an HTTP 401 or 403 error, halting your automated pipeline until a developer manually extracts and inputs a fresh cookie.
Furthermore, this tool is not designed to bypass permission restrictions. It can only access company updates that are visible to the logged-in account used for scraping. If a company posts updates restricted to specific groups, or if your account does not have permission to view certain feeds, those posts will be omitted from the results.
Source for the runs in this article: LinkedIn Company Posts Scraper. The input schema there is authoritative; treat anything in this post that contradicts it as out of date.
Prices quoted above are this Actor's published pay-per-event rates on the Apify Store, read from the Apify platform API on 2026-09-21. Check the Actor page for the current rates.
Top comments (0)