LinkedIn Company Posts Scraper avatar

LinkedIn Company Posts Scraper

Pricing

from $5.00 / 1,000 post scrapeds

Go to Apify Store
LinkedIn Company Posts Scraper

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

Khadin Akbar

Maintained by Community

Actor stats

6

Bookmarked

52

Total users

36

Monthly active users

2 days ago

Last modified

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

FieldTypeDescription
companyUrlsarrayOne or more public LinkedIn company page URLs. Required.
maxPostsintegerMaximum number of post records to save across all company URLs. Default: 100. Range: 1 to 1000.
startPageintegerStarting page for ScrapeCreators company-post pages. Default: 1. Range: 1 to 7.
maxPagesPerCompanyintegerMaximum pages to read per company. Default: 1. Range: 1 to 7.
providerOrderstringProvider selection order. Values: scrapecreators-first, sociavault-first, scrapecreators-only, sociavault-only.
includeCompanyProfilebooleanAdds public company metadata when SociaVault is available. Default: true.
enrichPostsbooleanFetches post detail with SociaVault when available. This uses one provider request per post. Default: false.
includeRawDatabooleanAdds 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.

FieldTypeDescription
companyUrlstringInput LinkedIn company page URL.
companyIdstring | nullProvider-specific company identifier when available.
companyNamestring | nullPublic company name when available.
companyHandlestring | nullLinkedIn company handle when available.
companyLinkedInUrlstring | nullCanonical public LinkedIn company URL when available.
companyDescriptionstring | nullPublic company description or about text when returned.
companyFollowersinteger | nullPublic follower count when available.
companyEmployeeCountinteger | nullPublic employee count when available.
companyWebsitestring | nullPublic company website when available.
companyIndustrystring | nullPublic LinkedIn company industry when available.
companyTypestring | nullPublic company type when available.
companyFoundedinteger | nullFounding year when available.
companyLogostring | nullCompany logo URL when available.
companyLocationstring | nullCompany location string when available.
companySpecialtiesarrayPublic company specialties when available.
postIdstring | nullLinkedIn activity or post identifier when available.
postUrlstringPublic LinkedIn post URL.
textstring | nullPost text, description, headline, or title depending on provider payload.
datePublishedstring | nullPublished timestamp or date string from the provider.
likeCountinteger | nullPost like count when available.
reactionCountinteger | nullPost reaction count when available.
commentCountinteger | nullPost comment count when available.
engagementCountinteger | nullSum of available reactions, likes, and comments.
authorNamestring | nullPost author name when detail enrichment returns it.
authorUrlstring | nullPost author profile URL when detail enrichment returns it.
mediaarray | nullImages, media, or attachment objects returned by the provider.
commentsPreviewarrayUp to five normalized comments returned by optional post-detail enrichment.
sourcestringProvider that produced the record.
sourcePageinteger | nullProvider page number used to collect the post.
rawPostobject | nullRaw provider post payload when includeRawData is enabled.
rawDetailobject | nullRaw provider post-detail payload when includeRawData and enrichPosts are enabled.
scrapedAtstringISO 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_SUMMARY and OUTPUT records 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, and SOCIALVAULT_API_KEY for 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:

  • postUrl is the primary record link for follow-up actions.
  • text and datePublished support content review and sequencing.
  • reactionCount, commentCount, and engagementCount help prioritize posts when enrichment is enabled.
  • companyName, companyHandle, and companyIndustry support grouping and filtering.
  • source and sourcePage provide provenance for each record.
  • scrapedAt marks when the Actor normalized the item.

Scope and pagination guidance:

  • Use companyUrls for public company pages only.
  • startPage begins at page 1.
  • maxPagesPerCompany is capped at 7 in the schema.
  • enrichPosts adds 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

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.