๐Ÿขโž• LinkedIn Company Scraper Plus avatar

๐Ÿขโž• LinkedIn Company Scraper Plus

Pricing

from $4.99 / 1,000 results

Go to Apify Store
๐Ÿขโž• LinkedIn Company Scraper Plus

๐Ÿขโž• LinkedIn Company Scraper Plus

LinkedIn Company Scraper Plus extracts company profiles, names, industries, locations, employee counts, descriptions, websites, specialties, and social links. Ideal for B2B lead generation, prospect research, competitor analysis, market intelligence, and sales prospecting.

Pricing

from $4.99 / 1,000 results

Rating

0.0

(0)

Developer

API Empire

API Empire

Maintained by Community

Actor stats

0

Bookmarked

22

Total users

1

Monthly active users

5 days ago

Last modified

Share

LinkedIn Company Scraper โ€” Extract Companies, Employees, Posts as JSON

LinkedIn company scraper that turns any public company page into a structured JSON record โ€” firmographics, an employee sample, recent posts, and similar-page suggestions, all from a single company URL or vanity slug. No LinkedIn login, no cookies, no session to maintain. Every response is typed, normalized JSON โ€” no HTML, no CSS selectors, no parsing step before the data reaches your CRM, spreadsheet, or LLM pipeline. After a run you'll have clean company rows ready to join into a sales list, a competitor tracker, or an agent's knowledge base.

What is LinkedIn Company Scraper Plus?

LinkedIn Company Scraper Plus is an Apify Actor that scrapes public, logged-out LinkedIn company pages and returns firmographics, an employee sample, a recent-posts sample, and similar-page suggestions as structured JSON. It does not require a LinkedIn account, cookies, or session โ€” every field is pulled from the public HTML LinkedIn serves to a logged-out visitor. Because the output is plain typed JSON with stable field names, it can be called directly from an agent tool, an HTTP client, or the Apify API without any parsing layer.

  • Scrape company firmographics โ€” followers, industry, size, employee count, HQ, website, specialties
  • Scrape a sample of employees listed at the company ("people at company")
  • Scrape recent public posts from the company page
  • Scrape similar-page suggestions LinkedIn shows for the company
  • Export as JSON, CSV, Excel, or the other formats Apify's dataset supports โ€” no proxy management, no parsing

What data does LinkedIn Company Scraper Plus collect?

The Actor returns one dataset row per input company, with four distinct data groups inside that row: the company profile itself, plus three child samples (employees, posts, similar pages).

Data TypeKey FieldsJSON Field Names
Company profilename, followers, industry, size, HQ, websitename, followerCount, companyId, universalName, industry, companySize, employeeCount, website, domain, hq
Employees samplename, title, profile link, photoemployees[].name, employees[].title, employees[].link, employees[].image
Recent postspost URL, publish date, textposts[].url, posts[].datePublished, posts[].text
Similar pagescompany name, page link, logosimilarPages[].name, similarPages[].link, similarPages[].image

Need more LinkedIn data?

If you need individual profiles with direct contact details rather than company-level data, API Empire's LinkedIn B2B Lead Discovery Scraper is built for that. For engagement metrics on a company's or creator's post history specifically, see LinkedIn Engagement & Content Analytics.

Why not build this yourself?

LinkedIn serves company pages behind an authwall/JA3 TLS fingerprint check that ordinary HTTP clients (requests, httpx, aiohttp) trip from both datacenter and residential IPs, redirecting the request to a login page instead of the page content. A DIY scraper has to solve TLS fingerprint impersonation, detect soft-blocks reliably, rotate proxies on failure, and keep re-parsing logic in sync every time LinkedIn changes its page markup โ€” all before extracting a single field.

LinkedIn Company Scraper Plus already solves this: it uses curl_cffi with Chrome-131 TLS impersonation to get past the fingerprint check, and a soft-block guard that checks for the JSON-LD Organization node on every response โ€” a genuine public company page always has one, an authwall shell never does. When a soft-block is detected, the Actor automatically escalates to Apify Residential proxy on a fresh IP and retries (maxRetries, default 3), rather than silently returning an empty or wrong row. Maintaining that detection-and-escalation logic, plus the HTML/JSON-LD parsing rules for every field, is the ongoing engineering LinkedIn Company Scraper Plus takes off your plate.

Why do developers and teams scrape LinkedIn company pages?

For sales and lead-gen teams

Feed a list of target-account URLs or vanity slugs in and get back employeeCount, companySize, industry, hqCity/hqState/hqCountry, and domain โ€” the exact fields a CRM enrichment job or account-scoring model needs. domain (the registrable host parsed from the company's website) is a ready join key for matching against contact records without extra string-cleaning.

For AI engineers and agent builders

Because output is normalized JSON with stable field names (followerCount, industry, specialties, employees[], posts[]), a company-lookup tool can call this Actor, drop the row straight into an agent's context window or a RAG index, and skip writing an HTML parser for LinkedIn's markup. similarPages[] gives an agent a ready-made "expand the search" step without a second scrape.

For market researchers and competitive intelligence teams

specialties, companySize, founded, companyAgeYears, and the posts[] sample give a fast public-data snapshot of how a company positions itself and what it publishes, useful for building a competitor set or tracking how a market segment describes itself over time โ€” all from data LinkedIn already makes publicly visible.

For developers building data products

Because the schema is stable and the Actor runs on the Apify platform, it drops into a scheduled pipeline (Apify's built-in Scheduler) that refreshes a company database on a recurring basis, or into a larger data product that blends LinkedIn firmographics with data pulled from other sources.

How to scrape LinkedIn company pages (step by step)

  1. Open LinkedIn Company Scraper Plus on the Apify Store and click Try for free (or find it in Apify Console under your Actors if you've used it before).
  2. Provide the required input, urls โ€” one or more LinkedIn company URLs (e.g. https://www.linkedin.com/company/stripe/) or bare vanity slugs (e.g. stripe), one per line.
  3. Toggle which child samples you want: includePosts, includeEmployees, includeSimilar (all default to true), and set maxPerChild to cap how many of each are returned per company.
  4. Click Start to launch the run. Leave proxy on its default (Apify Residential) unless you have a reason to change it โ€” LinkedIn's authwall makes residential proxy the reliable path.
  5. When the run finishes, open the Dataset tab and export results as JSON, CSV, Excel, or the other formats Apify supports, or pull them via the Apify API.

What to do when LinkedIn changes its page structure

LinkedIn Company Scraper Plus is maintained, and the output schema is designed to stay stable โ€” field names and types don't change on your end even when the underlying page markup does. Integrations built against this Actor's fields keep working without you needing to update your own parsing code.

โฌ‡๏ธ Input

ParameterRequiredTypeDescriptionExample Value
urlsYesarray of stringsCompany URL or bare vanity slug, one per line. Numeric company IDs are not accepted โ€” LinkedIn redirects them to the login authwall when logged out.["stripe", "https://www.linkedin.com/company/netflix/"]
maxItemsNointegerCap on how many top-level companies to scrape from the list. 0 = no cap. Default 0.5
includePostsNobooleanCollect the recent public posts sample (from JSON-LD). Default true.true
includeEmployeesNobooleanCollect the public "people at company" sample. Availability varies by company. Default true.true
includeSimilarNobooleanCollect the "similar pages" companies sample. Default true.true
maxPerChildNointegerUpper bound on each child list (posts / employees / similar pages) per company. Default 10.5
maxRetriesNointegerHow many times to try a company before giving up; each retry escalates to Apify Residential on a fresh IP if soft-blocked. Default 3.3
requestTimeoutSecNointegerPer-request HTTP timeout, in seconds. Default 30.30
concurrencyNointegerHow many companies to fetch in parallel. Default 3.3
proxyNoobjectProxy configuration. Residential is strongly recommended for LinkedIn. If left off, the Actor starts direct and auto-escalates to Apify Residential on the first soft-block. Default: Apify Residential.{"useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"]}

Example JSON input:

{
"urls": ["stripe", "https://www.linkedin.com/company/netflix/"],
"maxItems": 0,
"includePosts": true,
"includeEmployees": true,
"includeSimilar": true,
"maxPerChild": 10,
"maxRetries": 3,
"requestTimeoutSec": 30,
"concurrency": 3,
"proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}

The most common input mistake is passing a numeric LinkedIn company ID (e.g. 1441) instead of the vanity slug or full URL โ€” LinkedIn only serves the public logged-out page for the slug, so a numeric-id target is skipped rather than silently mis-scraped.

โฌ†๏ธ Output

Each run pushes one typed, normalized JSON row per input company to the Apify Dataset, exportable as JSON, CSV, Excel, XML, RSS, or HTML table directly from Apify Console or the API. A value LinkedIn doesn't expose for a given company is emitted as null (or [] for lists) rather than a guessed or faked value โ€” for example employeeCount is only ever an integer or null, never a fabricated 0, and companyId is only populated when LinkedIn's jobs facet link actually exposes it.

Scraped company record

{
"inputUrl": "stripe",
"resolvedUrl": "https://www.linkedin.com/company/stripe/",
"success": true,
"name": "Stripe",
"universalName": "stripe",
"companyId": 2135371,
"companyUrl": "https://www.linkedin.com/company/stripe",
"followerCount": 1527584,
"description": "Stripe is a financial infrastructure platform for businesses.",
"tagline": "Financial infrastructure for the internet",
"website": "https://stripe.com",
"domain": "stripe.com",
"industry": "Financial Services",
"companySize": "1,001-5,000 employees",
"employeeCount": 15924,
"employeeCountRange": { "start": 1001, "end": 5000 },
"type": "Privately Held",
"founded": 2010,
"companyAgeYears": 16,
"followersPerEmployee": 95.93,
"logo": "https://media.licdn.com/dms/image/stripe-logo.png",
"headquarters": "South San Francisco, California",
"hqLine1": "354 Oyster Point Blvd",
"hqCity": "South San Francisco",
"hqState": "California",
"hqCountry": "US",
"hqZip": "94080",
"hq": { "line1": "354 Oyster Point Blvd", "city": "South San Francisco", "state": "California", "country": "US", "zip": "94080" },
"specialties": ["online payment processing", "billing", "fraud prevention"],
"similarPages": [ { "name": "Adyen", "link": "https://www.linkedin.com/company/adyen/", "image": "https://media.licdn.com/dms/image/adyen-logo.png" } ],
"employees": [ { "name": "Jane Doe", "title": "Software Engineer at Stripe", "link": "https://www.linkedin.com/in/jane-doe/", "image": "https://media.licdn.com/dms/image/jane-doe.png" } ],
"posts": [ { "url": "https://www.linkedin.com/posts/stripe_activity-1234567890", "datePublished": "2026-07-01", "text": "We're excited to announce..." } ],
"scrapedAt": "2026-07-26T00:00:00Z",
"error": ""
}

Employee sample object

{
"name": "Jane Doe",
"title": "Software Engineer at Stripe",
"link": "https://www.linkedin.com/in/jane-doe/",
"image": "https://media.licdn.com/dms/image/jane-doe.png"
}

Post object

{
"url": "https://www.linkedin.com/posts/stripe_activity-1234567890",
"datePublished": "2026-07-01",
"text": "We're excited to announce our newest product release..."
}

Similar page object

{
"name": "Adyen",
"link": "https://www.linkedin.com/company/adyen/",
"image": "https://media.licdn.com/dms/image/adyen-logo.png"
}

How does LinkedIn Company Scraper Plus compare to other LinkedIn scrapers?

FeatureLinkedIn Company Scraper PlusGeneric alternative
Output formatTyped, normalized JSON with stable field namesVaries; some competitor Actors also normalize, others return raw scraped HTML fragments
Entity coverage per rowCompany profile + employees sample + posts sample + similar pages in one rowdev_fusion's Linkedin-Company-Scraper returns company profile fields only, no child samples (as observed on the Apify Store on 2026-07-26)
Anti-bot handlingChrome-131 TLS impersonation + JSON-LD-based soft-block detection with automatic Residential escalationharvestapi/linkedin-company advertises "no cookies or account required" with no stated anti-bot escalation mechanism (as observed on the Apify Store on 2026-07-26)
Input flexibilityAccepts either a full company URL or a bare vanity slugdev_fusion's Linkedin-Company-Scraper requires full company profile URLs (as observed on the Apify Store on 2026-07-26)
Missing-data honestyAbsent fields emitted as null/[], never guessed or defaulted to 0Not documented as a guarantee on the competitor listings reviewed

If you're building an AI agent or RAG pipeline, the output format row is the decision-maker โ€” parsing HTML inside an agent loop is a reliability failure mode, not a feature. A schema that stays typed and stable regardless of what LinkedIn's markup does underneath is what keeps that pipeline running unattended.

How many results can you scrape with LinkedIn Company Scraper Plus?

There is no hard cap on the number of companies in the Actor itself โ€” maxItems defaults to 0, meaning every URL or slug you provide in urls is processed unless you set a lower cap. Each company's employee, post, and similar-page samples are individually bounded by maxPerChild (default 10 per list, per company). Companies are fetched in parallel up to concurrency (default 3, max 10), and each company gets up to maxRetries attempts (default 3, max 8) before it's recorded as failed. LinkedIn itself limits what a logged-out page exposes โ€” for example the employees and posts samples reflect what LinkedIn renders on the public page, not a company's full roster or full post history.

Integrate LinkedIn Company Scraper Plus and automate your workflow

LinkedIn Company Scraper Plus works with any language or tool that can send an HTTP request, since it runs as a standard Apify Actor reachable through the Apify API.

REST API integration

from apify_client import ApifyClient
client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("API-Empire/linkedin-company-scraper-plus").call(
run_input={"urls": ["stripe", "netflix"], "includePosts": True}
)
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["name"], row["followerCount"], row["industry"])

Works in Python, Node.js, Go, Ruby, cURL.

MCP for AI agents

Any Apify Actor, including this one, is reachable from an MCP-compatible client through Apify's MCP Server at https://mcp.apify.com, or by running npx @apify/actors-mcp-server locally with ACTORS=API-Empire/linkedin-company-scraper-plus set. Compatible with Claude, Cursor, and other MCP clients โ€” the Actor appears as a callable tool, no custom integration code required.

Automation platforms (n8n, Make, LangChain)

In n8n, the community Apify node (or a generic HTTP Request node against the Apify API) can start a run and read back the dataset as part of a larger workflow. In Make, the Apify app module runs the Actor and passes dataset items into downstream modules like CRM updates or Slack notifications. In LangChain, the ApifyWrapper/apify-client integration can call this Actor as a tool and load its dataset directly into a document loader for RAG pipelines.

Yes โ€” scraping publicly accessible web pages is generally legal, and LinkedIn Company Scraper Plus only accesses public, logged-out LinkedIn company pages; it does not use cookies, log in, or access gated content. The employees[] and posts[] samples can include personal data (names, job titles, post authorship), so storage and use of that portion of the output should have a lawful basis under GDPR/CCPA if you operate in or target the EU/California. The company-level firmographic fields are business data governed primarily by LinkedIn's Terms of Service rather than personal-data law. Consult legal counsel for commercial use cases involving bulk personal data.

Frequently asked questions

Does LinkedIn Company Scraper Plus work without a LinkedIn account?

Yes. It only fetches public, logged-out company pages โ€” no LinkedIn login, password, or cookies are required or accepted as input.

How often is the scraped data updated?

Data is fetched live on every run โ€” the Actor makes a fresh HTTP request to the target company page each time you run it. There is no caching layer; each run reflects whatever LinkedIn is currently serving on the public page.

What happens if a company page can't be reached or is soft-blocked?

The Actor retries up to maxRetries times, escalating to Apify Residential proxy on a fresh IP after the first soft-block. If all attempts fail, it still pushes a row for that company with success: false and an error message (for example "Blocked (authwall / no Organization JSON-LD)") instead of silently dropping the target, so you always get one row per input.

Can I scrape private or restricted LinkedIn content?

No. Only what LinkedIn serves on the public, logged-out company page is returned โ€” no gated data such as funding details, the full employee roster, or private profile fields is accessed.

Do I need to sign up for anything beyond an Apify account to run this?

No. It runs like any Apify Actor โ€” provide input and start the run from Apify Console or the API; pricing and usage are handled through your Apify account.

Does LinkedIn Company Scraper Plus work for AI agent workflows and LLM pipelines?

Yes. It's callable as a standard HTTP endpoint through the Apify API from any agent framework, and it's reachable through Apify's MCP Server for MCP-compatible clients. Every response is typed JSON โ€” no HTML parsing step is needed before passing a row to an LLM.

How does LinkedIn Company Scraper Plus handle LinkedIn's anti-bot system?

It uses curl_cffi with Chrome-131 TLS impersonation to avoid the JA3 fingerprint check that plain HTTP clients trip, and it detects soft-blocks by checking for the JSON-LD Organization node that every genuine public company page carries. When a soft-block is detected it automatically escalates to Apify Residential proxy on a fresh IP session and retries.

How does LinkedIn Company Scraper Plus compare to other LinkedIn company scrapers?

As observed on the Apify Store on 2026-07-26, dev_fusion's Linkedin-Company-Scraper returns company profile fields but no employees, posts, or similar-pages samples, and requires full profile URLs rather than accepting bare slugs. harvestapi/linkedin-company advertises bulk company lookups with company-name search but likewise does not bundle employee, post, and similar-page samples into the same row. LinkedIn Company Scraper Plus bundles all four in one output row and accepts either a URL or a slug.

Does LinkedIn Company Scraper Plus return data in a format LLMs can use directly?

Yes. Output is typed, normalized JSON with stable field names โ€” no HTML, no selectors, no parsing. Pass a row directly into an LLM context window, index it into a vector store, or route it through an agent tool.

Can I use LinkedIn Company Scraper Plus without managing proxies?

Yes. Leaving proxy on its default uses Apify Residential proxy, and the Actor manages proxy sessions and escalation automatically โ€” you don't have to source, rotate, or configure proxies yourself.

What happens when LinkedIn changes its structure or blocks the scraper?

LinkedIn Company Scraper Plus is maintained, and the output schema stays stable โ€” field names and types don't change on your end. There is no fixed numeric turnaround time published for fixes.

Your feedback

Found a bug, or need a field this Actor doesn't currently return? We want to know โ€” open an issue on this Actor's Issues tab in Apify Console with a description and, if possible, the company URL that triggered it. Feedback like this directly shapes what gets added next.