LinkedIn Company Posts Scraper & API — No Cookies avatar

LinkedIn Company Posts Scraper & API — No Cookies

Pricing

$2.00 / 1,000 company post results

Go to Apify Store
LinkedIn Company Posts Scraper & API — No Cookies

LinkedIn Company Posts Scraper & API — No Cookies

Scrape LinkedIn company posts, text, reactions, comments counts and media links. Bulk URLs, automatic pagination and JSON/CSV export. No cookies needed. $2 per 1,000 posts; no startup fee.

Pricing

$2.00 / 1,000 company post results

Rating

0.0

(0)

Developer

Gaurav Kumar Choudhary

Gaurav Kumar Choudhary

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

9 hours ago

Last modified

Share

LinkedIn Company Posts Scraper & API

At a glance

  • Collect: Paginated company-feed posts with available text, engagement and media links.
  • Input: use the runnable example below or the prefilled Input form.
  • Output: the default dataset supports JSON/CSV/Excel export; see output modes below.
  • Billing: $2 per 1,000 unique delivered posts. Monitoring history suppresses previously delivered IDs when enabled. No startup fee. Platform usage may be additional.
  • Limits: No full company profiles, individual commenters/reactors or guaranteed complete feed history.

Extract LinkedIn company posts for competitor research, hiring intelligence and content analysis. Paste company page URLs to collect post text, available reaction and comment counts, posting dates and image/video links. Export JSON, CSV or Excel, or call the API from your own application. No LinkedIn account or cookies are required in the input. This independent tool is not affiliated with LinkedIn.

Quick start

  1. Open Input and paste your company page URLs.
  2. Set the maximum posts per company and global page-request budget.
  3. Start the Actor. Open the completed run's dataset to export JSON, CSV or Excel.
{
"companyUrls": ["https://www.linkedin.com/company/amazon/"],
"maxPostsPerCompany": 100,
"maxRequests": 2,
"sortBy": "recent"
}

Each page can contain up to 50 posts. The Actor follows the next-page token and increments the offset by 50 automatically. Two requests can retrieve up to 100 posts from a sufficiently populated feed. Limits are not delivery guarantees. Pinned posts and reposts can affect ordering.

For five companies and up to 100 posts each, start with a ten-request budget. The budget applies to the entire run, not each company. Failed requests consume this operational budget. Companies are processed in input order; increase the budget if later companies are not reached.

  • Competitor research: collect updates from several companies and compare topics, posting activity and engagement.
  • Content planning: identify company posts that receive reactions, comments and reposts.
  • Hiring and market intelligence: search the exported text for hiring updates, product launches and partnerships.
  • Reporting workflows: export structured records to a spreadsheet or feed them into your existing analysis tools.

Need to discover posts by keyword instead of company URL? Use our LinkedIn Post Search API.

Pricing: $2 per 1,000 delivered posts

One unique delivered post costs $0.002 on every Apify plan. There is no startup fee or charge for an empty search. Fifty posts cost $0.10; 100 cost $0.20 in Actor result charges. Apify platform usage may be additional, depending on your plan. Check the pricing panel before starting.

Duplicate post IDs within a run and posts in excludePostIds are not delivered or charged again in that run. Repeating a run can deliver and charge for previously collected posts unless you maintain exclusions or enable monitoring history. Requests that fail produce no new post-result charges; previously delivered posts remain charged and available.

What you receive

Every row contains postId, postUrl, text, sourceCompanyUrl, recordType and fetchedAt. Available optional fields include authorName, authorUrl, postedAt, postedAgo, isRepost, totalReactions, comments, reposts, reactionBreakdown, images, video and document.

totalReactions preserves the source's aggregate reaction count; it is not presented as the number of LIKE-only reactions. A reaction breakdown is included only for categories actually supplied. Missing counts are omitted, not replaced with zero. Posting dates preserve source text without assuming a timezone. Collection timestamps are UTC.

Media fields contain available links and metadata, not downloaded files. Signed media links may expire. Documents and reaction categories are not guaranteed for every post. Reposts can be attributed to a different author than the requested company. Empty-text posts may still contain useful media and are retained.

Example result

Abbreviated illustration based on a supplied Amazon post. Text is shortened here for readability; fetchedAt is generated when your run collects the post.

{
"postId": "7204492333600440320",
"postUrl": "https://www.linkedin.com/posts/amazon_meet-amazons-very-own-strongman-activity-7204492333600440320-wHUk",
"text": "Meet Amazon's very own strongman! ...",
"sourceCompanyUrl": "https://www.linkedin.com/company/amazon/",
"recordType": "post",
"authorName": "Amazon",
"authorUrl": "https://www.linkedin.com/company/amazon/",
"postedAt": "2024-06-06 14:40:25",
"totalReactions": 4084,
"comments": 173,
"reposts": 68,
"isRepost": false
}

Input reference

FieldDefaultPurpose
companyUrlsRequired1–20 company page URLs.
maxPostsPerCompany50Save up to 1–500 posts per company.
maxRequests2Total page-request budget, 1–100 across the run.
sortByrecentChoose recent or top.
excludePostIdsEmptySkip up to 5,000 activity IDs you already collected.
requestTimeoutSecs60Timeout per page request, 10–120 seconds.

Why choose this Actor?

  • Clear per-result pricing with no startup fee.
  • Multiple company URLs in one run with automatic pagination.
  • Global request and per-company result limits for predictable collection scope.
  • Deduplicated post IDs and optional exclusions for repeat research.
  • Available media links and engagement data in an export-friendly structure.

This is a company-feed extractor, not full profile enrichment. It does not retrieve individual commenters, people who reacted, complete company profiles, newsletters or guaranteed complete history. It does not claim to be the cheapest, most accurate or fastest competing Actor.

Use from Python

Install requests and store your own Apify token in APIFY_TOKEN:

import os
import requests
response = requests.post(
"https://api.apify.com/v2/acts/gauravlabs~linkedin-company-posts-api/run-sync-get-dataset-items",
headers={"Authorization": f"Bearer {os.environ['APIFY_TOKEN']}"},
json={
"companyUrls": ["https://www.linkedin.com/company/amazon/"],
"maxPostsPerCompany": 50,
"maxRequests": 1,
"sortBy": "recent",
},
timeout=200,
)
response.raise_for_status()
print(response.json())

For larger runs, use Apify's asynchronous Actor start API and retrieve the default dataset after completion. Scheduled runs, n8n and Make integrations are Apify platform features. Private builds require access; the API example works only when your account has access.

Frequently asked questions

Can I get more than 50 posts? Yes. Raise maxPostsPerCompany and maxRequests to allow additional pages. A pre-publication test on Amazon returned 100 unique posts across two pages; other companies can return fewer.

Does this include actual comments or a list of people who reacted? It includes available counts. Individual comment records and reactor profiles are not included.

Why did my run return fewer posts? The company may have fewer available posts, an exclusion may remove posts, or a result/request/charge limit may have been reached. Check the per-company stop reason in SUMMARY.

Can I retrieve all company history? No complete-history guarantee is offered. Available pages and the configured limits determine how much can be collected.

Limits, monitoring and support

Maximum 20 company URLs, 500 saved posts per company and 100 page requests per run. Collection stops at the first applicable limit, empty page, missing cursor or repeated cursor. There are no automatic retries. Persistent cross-run history is opt-in through monitoringKey. Exclusions can require additional pages to reach the saved-post limit, still bounded by maxRequests.

To monitor repeatedly, enable monitoringKey and schedule sequential runs using the same key, or supply caller-maintained excludePostIds. A run with service errors is marked failed even if earlier company results were delivered; inspect SUMMARY for sanitized error codes and per-company stop reasons before re-running.

Use appropriate access and redistribution permissions. Source availability, engagement and media URLs can change. For support, provide a run ID and non-sensitive input through the Actor's Issues tab. Never send credentials or tokens. Validate the output before production use; there is no complete-history or accuracy guarantee.

Minimal API example

Store your own Apify token in APIFY_TOKEN; never paste it into public input or code. This example uses the same small input as the prefilled form.

import os
import requests
response = requests.post(
"https://api.apify.com/v2/acts/gauravlabs~linkedin-company-posts-api/run-sync-get-dataset-items",
headers={"Authorization": "Bearer " + os.environ["APIFY_TOKEN"]},
json={"companyUrls":["https://www.linkedin.com/company/amazon/"]},
timeout=300,
)
response.raise_for_status()
print(response.json())

For large batches, start an asynchronous run with /runs, wait for its final status, and retrieve its default dataset. HTTP success when starting a run does not prove the extraction succeeded.

Minimal output shape (illustrative)

The following shows one documented field, not a fresh result or a promised yield. Inspect the output reference above for the complete schema.

{
"recordType": "post"
}

Practical workflow and accuracy notes

Optional persistent monitoring: add "monitoringKey":"amazon-weekly" and use sortBy: "recent". The first run establishes history while delivering results; later runs with the same key skip previously delivered IDs. Storage is scoped to this Actor and your authenticated Apify account. A different key starts separate history. Keep the same company inputs for a monitoring key and do not overlap runs using that key: history updates are not a transactional exactly-once guarantee. History retains the most recent 50,000 delivered IDs; older IDs can be collected again after eviction. History is saved after each completed page, so interrupted writes can allow repeats. Excluded or historical posts are not charged again when skipped. This is new-post monitoring, not engagement-refresh mode or an exhaustive backfill.