LinkedIn Company Posts Scraper
Pricing
from $5.00 / 1,000 post scrapeds
LinkedIn Company Posts Scraper
Scrape public LinkedIn company posts without user cookies. Uses ScrapeCreators as the primary provider and SociaVault as fallback/enrichment for company profile and post details. MCP/API-ready.
Pricing
from $5.00 / 1,000 post scrapeds
Rating
0.0
(0)
Developer
Khadin Akbar
Maintained by CommunityActor stats
6
Bookmarked
52
Total users
36
Monthly active users
2 days ago
Last modified
Categories
Share
LinkedIn Company Posts Scraper is an Apify Actor for public LinkedIn company pages. It accepts one or more company URLs and saves one dataset record per public post. Each record can include the company URL, company name, company handle, post URL, post text, published date, engagement fields when available, source provider, and scrape timestamp. The Actor is usable through Apify MCP and is designed for workflows that need structured company-post data from public LinkedIn pages without user cookies.
Best fit and connected workflows
This Actor fits workflows that start with a public LinkedIn company page URL and end with normalized post records in an Apify dataset. It is a strong route for:
- company social monitoring and content tracking
- lead generation research based on public company activity
- automation pipelines that enrich a company list with recent public posts
- downstream analytics that compare post text, timing, and engagement fields
When includeCompanyProfile is enabled, the output can also include public company metadata such as followers, industry, website, logo, and specialties when the provider returns them. When enrichPosts is enabled, each saved post can also include engagement counts, author fields, and a comments preview from the detail provider when available.
focused workflow
This Actor is designed as a focused workflow.
Practical scenario
Maya, a marketing analyst, starts with a spreadsheet of public LinkedIn company URLs for several software companies. She runs the Actor with those URLs and a maxPosts value that matches the number of recent posts she wants to review. The returned records include the post URL, text, published date, source, and optional engagement fields. Maya uses reactionCount, commentCount, and engagementCount to pick which posts deserve a deeper manual review, then opens the original post URLs to prepare a weekly content brief.
Input
| Field | Type | Description |
|---|---|---|
companyUrls | array | One or more public LinkedIn company page URLs. Required. |
maxPosts | integer | Maximum number of post records to save across all company URLs. Default: 100. Range: 1 to 1000. |
startPage | integer | Starting page for ScrapeCreators company-post pages. Default: 1. Range: 1 to 7. |
maxPagesPerCompany | integer | Maximum pages to read per company. Default: 1. Range: 1 to 7. |
providerOrder | string | Provider selection order. Values: scrapecreators-first, sociavault-first, scrapecreators-only, sociavault-only. |
includeCompanyProfile | boolean | Adds public company metadata when SociaVault is available. Default: true. |
enrichPosts | boolean | Fetches post detail with SociaVault when available. This uses one provider request per post. Default: false. |
includeRawData | boolean | Adds compact raw provider payloads for debugging and custom parsing. Default: false. |
Focused JSON input example
{"companyUrls": ["https://www.linkedin.com/company/shopify"],"maxPosts": 20,"startPage": 1,"maxPagesPerCompany": 2,"providerOrder": "scrapecreators-first","includeCompanyProfile": true,"enrichPosts": false,"includeRawData": false}
Output
Each dataset item represents one public LinkedIn company post.
| Field | Type | Description |
|---|---|---|
companyUrl | string | Input LinkedIn company page URL. |
companyId | string | null | Provider-specific company identifier when available. |
companyName | string | null | Public company name when available. |
companyHandle | string | null | LinkedIn company handle when available. |
companyLinkedInUrl | string | null | Canonical public LinkedIn company URL when available. |
companyDescription | string | null | Public company description or about text when returned. |
companyFollowers | integer | null | Public follower count when available. |
companyEmployeeCount | integer | null | Public employee count when available. |
companyWebsite | string | null | Public company website when available. |
companyIndustry | string | null | Public LinkedIn company industry when available. |
companyType | string | null | Public company type when available. |
companyFounded | integer | null | Founding year when available. |
companyLogo | string | null | Company logo URL when available. |
companyLocation | string | null | Company location string when available. |
companySpecialties | array | Public company specialties when available. |
postId | string | null | LinkedIn activity or post identifier when available. |
postUrl | string | Public LinkedIn post URL. |
text | string | null | Post text, description, headline, or title depending on provider payload. |
datePublished | string | null | Published timestamp or date string from the provider. |
likeCount | integer | null | Post like count when available. |
reactionCount | integer | null | Post reaction count when available. |
commentCount | integer | null | Post comment count when available. |
engagementCount | integer | null | Sum of available reactions, likes, and comments. |
authorName | string | null | Post author name when detail enrichment returns it. |
authorUrl | string | null | Post author profile URL when detail enrichment returns it. |
media | array | null | Images, media, or attachment objects returned by the provider. |
commentsPreview | array | Up to five normalized comments returned by optional post-detail enrichment. |
source | string | Provider that produced the record. |
sourcePage | integer | null | Provider page number used to collect the post. |
rawPost | object | null | Raw provider post payload when includeRawData is enabled. |
rawDetail | object | null | Raw provider post-detail payload when includeRawData and enrichPosts are enabled. |
scrapedAt | string | ISO timestamp when the Actor normalized the record. |
Illustrative output record
{"companyUrl": "https://www.linkedin.com/company/shopify","companyName": "Shopify","companyHandle": "shopify","companyLinkedInUrl": "https://www.linkedin.com/company/shopify/","companyFollowers": 1000000,"postId": "7429579034096726016","postUrl": "https://www.linkedin.com/posts/shopify_example-activity-7429579034096726016-uX1e","text": "Merchants can now use Sidekick voice mode.","datePublished": "2026-02-17T17:34:36.617Z","source": "scrapecreators","sourcePage": 1,"scrapedAt": "2026-06-08T12:00:00.000Z"}
How it works
This Actor uses managed social-data APIs as its data source.
- ScrapeCreators is the primary provider for company posts.
- SociaVault is used as a fallback and for optional company-profile and post-detail enrichment.
- The Actor accepts public LinkedIn company URLs and normalizes each saved post into one dataset record.
- The dataset schema includes company metadata, post identifiers, text, dates, engagement counts, author fields, media, and raw payload fields when requested.
- The output also includes
RUN_SUMMARYandOUTPUTrecords in the default key-value store for execution telemetry and compact agent-friendly summaries. - Provider keys are read from Apify secrets:
SCRAPECREATORS_API_KEY,SOCIAVAULT_API_KEY, andSOCIALVAULT_API_KEYfor compatibility.
Pricing
This Actor uses Pay per event pricing plus Apify platform usage. The primary charged event is Post scraped, which is billed for each public LinkedIn company post saved to the dataset. The Actor Start event is also charged according to the Actor's memory settings. For current pricing details, check the live Pricing tab on the Actor page.
As a simple example, if a run saves ten posts, the post-scraped event is charged ten times, alongside the Actor Start event pattern defined by the platform.
Use with AI agents (MCP)
This Actor is available as an Apify Actor usable through Apify MCP. It is suited for agent workflows that need a tool to collect public LinkedIn company posts and return structured records with stable fields.
Actor identity: khadinakbar/linkedin-company-posts-scraper
Tool behavior in an MCP workflow:
- accepts public LinkedIn company URLs
- returns one normalized dataset record per saved post
- can add company metadata and post-detail enrichment when the input flags request it
- exposes dataset output and key-value store summaries for downstream reasoning
Scrape public posts from these LinkedIn company URLs and return the latest records with post text, dates, source, and engagement fields when available:
{"companyUrls": ["https://www.linkedin.com/company/shopify"],"maxPosts": 10,"providerOrder": "scrapecreators-first","includeCompanyProfile": true,"enrichPosts": true}
Output interpretation for agents:
postUrlis the primary record link for follow-up actions.textanddatePublishedsupport content review and sequencing.reactionCount,commentCount, andengagementCounthelp prioritize posts when enrichment is enabled.companyName,companyHandle, andcompanyIndustrysupport grouping and filtering.sourceandsourcePageprovide provenance for each record.scrapedAtmarks when the Actor normalized the item.
Scope and pagination guidance:
- Use
companyUrlsfor public company pages only. startPagebegins at page 1.maxPagesPerCompanyis capped at 7 in the schema.enrichPostsadds one provider request per post, so it is useful when an agent needs post-level details rather than just the post listing.
API example
import { ApifyClient } from 'apify-client';const client = new ApifyClient({token: process.env.APIFY_TOKEN,});const input = {companyUrls: ['https://www.linkedin.com/company/shopify'],maxPosts: 10,providerOrder: 'scrapecreators-first',includeCompanyProfile: true,enrichPosts: false,};const run = await client.actor('khadinakbar/linkedin-company-posts-scraper').call(input);const datasetItems = await client.dataset(run.defaultDatasetId).listItems({ clean: true });console.log('Run ID:', run.id);console.log('Dataset items:', datasetItems.items);
Best results and outcome guidance
Use one public company URL per company you want to track, then tune maxPosts and maxPagesPerCompany to match the amount of recent content you want to collect. Keep providerOrder on scrapecreators-first when you want the provider designed for company-post pages to run first. Turn on includeCompanyProfile when company metadata is useful for grouping records, and enable enrichPosts when you need post detail fields such as engagement counts or comments preview. If you need provider payloads for debugging or custom parsing, enable includeRawData.
Continue the workflow
- Then use LinkedIn Company Profile Scraper to extend LinkedIn Company Posts Scraper research with a complementary enrichment contract.
- Then use LinkedIn Company Search Scraper to extend LinkedIn Company Posts Scraper research with a complementary discovery contract.
Design note
I found that the output contract always requires companyUrl, postUrl, source, and scrapedAt, which makes each record easy to trace back to its company input and provider provenance.
FAQ
Can this Actor accept private LinkedIn data?
This Actor is built for public LinkedIn company pages and provider-backed public post data.
Which provider runs first?
The default order is scrapecreators-first. You can change the order with providerOrder.
When is company metadata included?
Set includeCompanyProfile to true. When SociaVault is available, the record can include fields such as company name, followers, industry, logo, and website.
When should I enable post enrichment?
Enable enrichPosts when the workflow needs engagement counts, author fields, or a comments preview for each post. Each enriched post uses one provider request.
How many pages can I collect per company?
The input schema caps maxPagesPerCompany at 7.
Responsible use
Use this Actor for public LinkedIn company pages and for workflows that respect the source provider's terms and the Apify platform's rules. Configure provider keys securely in Apify secrets. Review the live Pricing tab before running larger jobs, especially when enabling post enrichment, since that increases provider requests per saved post.