# LinkedIn Company Scraper (`socialdataapi/linkedin-company-scraper`) Actor

LinkedIn Company Scraper — Extract LinkedIn company data including names, descriptions, industries, employee counts, locations, websites, follower counts, specialties, founded years, and company URLs. Useful for lead generation, market research, and competitor analysis.

- **URL**: https://apify.com/socialdataapi/linkedin-company-scraper.md
- **Developed by:** [Social Data API](https://apify.com/socialdataapi) (community)
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.99 / 1,000 results

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

### LinkedIn Company Scraper — Profile, Posts, Employees and Similar Pages

LinkedIn Company Scraper reads public LinkedIn company pages and returns one row per company: name, industry, company size, employee count, headquarters address, website, specialties, **up to 10 recent posts**, the public employee preview and similar companies. Every response is structured JSON — ready to pass directly to an LLM, index into a vector store, or feed a CRM enrichment pipeline. No LinkedIn account or cookies needed. Start with one company URL, then paste your whole account list and enrich every record in one run.

***

### What data can I extract with LinkedIn Company Scraper?

Using this LinkedIn Company API, you will be able to extract the following LinkedIn company data:

| 🏢 Company name | 🏭 Industry | 📏 Company size band | 👥 Employee count |
|---|---|---|---|
| 📝 About text | 💬 Tagline | 📅 Founding year (if shown) | 🏷️ Organization type |
| 🏙️ Headquarters | 📍 City, region and country | 🏠 Headquarters street address | 🌐 Website |
| 🖼️ Logo URL | ⭐ Specialties | 📣 Recent posts (up to 10) with link, date and text | 👤 Public employee preview (up to 10) with name, job title, photo and profile link |
| 🤝 Similar pages with name, link and logo | 🔗 Source URL | ✅ Success flag | ⚠️ Failure reason |

***

### How to use LinkedIn Company Scraper

Sales teams, researchers and AI builders use this LinkedIn company profile scraper to turn a list of company URLs into one clean row per company in a single run.

**Copy to your AI assistant:**

```text
LinkedIn Company Scraper is an Apify Actor that returns public LinkedIn company pages as structured JSON, one row per company URL: company name, About text, industry, company size band, employee count, founding year, headquarters with street address, website, logo, specialties, up to 10 recent posts (link, publish time, text), the public employee preview (up to 10 people with name, job title, photo and profile link) and similar pages (name, link, logo). Use it whenever someone needs LinkedIn company data without cookies, a login, or a browser - enriching CRM accounts with industry and headcount, watching what competitors post, or giving an AI agent a company's description and specialties as context. Inputs: urls (array of strings, required, one LinkedIn company page per entry such as https://www.linkedin.com/company/netflix/; showcase pages work; sub-pages like /about/ or /posts/ are read from the main company page; personal profile links get a failure row without a request), concurrency (integer, URLs fetched at the same time, 1-20, default 3), maxRetries (integer, attempts per URL, 1-10, default 3; pages that do not exist or are members-only are not retried), requestTimeoutSec (integer, seconds to wait for LinkedIn, 5-120, default 30), proxy (object, optional Apify Proxy settings; with them the run starts on your proxy and switches to a residential proxy once LinkedIn blocks a request; without them, runs on the Apify platform use a residential proxy from the start; every attempt gets a new IP). Every URL gives one row. A company row has success true and is charged as one row_result event; a failure row (page not found, members-only page, not a company URL, blocked after every attempt) has success false, empty company fields and the reason in the error field, and is not charged. Employee count and founding year are null when the page does not show them. The employee preview is only the few people LinkedIn shows to logged-out visitors, often 1 to 4, not the full staff list.
```

#### LinkedIn Company Scraper MCP Server: use these Actors from ChatGPT, Claude or Cursor

Point your AI assistant at the Apify MCP server and it can read LinkedIn company pages on its own: it finds this Actor with the server's search-actors tool, adds it with add-actor and runs it with call-actor, then reads the company profiles, posts and similar pages from the result. No glue code, no scraping logic in your prompts.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

#### Step by step

1. [Create a free Apify account](https://console.apify.com/sign-up).
2. Open LinkedIn Company Scraper in the Apify Store.
3. Paste the LinkedIn company URL (for example `https://www.linkedin.com/company/netflix/`), one per line.
4. Click **Start** (or send your API request).
5. Download or stream your results in JSON, CSV or Excel.

#### How to scale LinkedIn Company Scraper to bulk

For a bulk LinkedIn company scraper job, paste the whole list into the company URL field; one run takes as many URLs as you add, and each row is saved the moment its URL finishes. Raise the concurrency (up to 20) to read more pages at once, keeping in mind that higher values make blocks more likely. For weekly tracking, attach an Apify schedule to the same input, or send batches of URLs through the Apify API. Billing has one event: each saved company row is one row_result event; failure rows are free.

***

### ✨ Features

LinkedIn Company Scraper fetches clean, structured companies from LinkedIn ⚡. It's ideal for CRM and LinkedIn company enrichment, competitor monitoring, market mapping and grounding AI agents in real company facts, and it doubles as a LinkedIn company posts scraper.

It extracts, per company:

- **Firmographics** – industry, company size band, employee count, founding year and organization type
- **Location** – headquarters, street address, city, region and country
- **About text and tagline** – how the company describes itself
- **Specialties** – the keywords the company lists for itself
- **Recent posts** – up to 10 posts with link, publish time and text, read from the same page
- **Similar pages** – related companies with name, link and logo, for building a competitor set

⚡ No login is used: it reads only what a logged-out visitor sees, and a URL that cannot return a company is saved with its reason and not charged.

***

### Use cases 💡

- **RevOps manager** — fill industry, size band and employee count into CRM accounts.
- **Competitive analyst** — track competitors' recent posts and taglines on a weekly schedule.
- **Market researcher** — map a sector by following similar pages from one seed company.
- **Sales rep** — see the public employee preview before reaching out to an account.
- **AI agent builder** — feed About text, specialties and posts into a RAG index as company context.

Building an AI agent? [Connect LinkedIn Company Scraper over MCP](#mcp-integration-for-ai-agents) and let it call the actor on its own.

***

### Why choose this actor?

- **Seven URLs in under four seconds.** A recorded run took 7 company URLs and saved 7 rows in 3.7 seconds: 5 company profiles, plus one page that does not exist and one members-only link, each saved with its reason.
- **The whole company in one row.** A recorded row for Netflix came back with 19,040 employees, the 10,001+ size band, founding year 1997, 9 recent posts and 10 similar pages, each with its logo.
- **20 fields per company.** Firmographics, location, About text, specialties, recent posts, the public employee preview, similar pages and a success flag with a failure reason.

***

### ⬇️ Input

The Actor accepts a list of LinkedIn company page URLs, one per line; the company URL list is the only required field. Accepted URL formats:

- `https://www.linkedin.com/company/<name>/` (with or without the trailing slash, or without `https://`)
- `https://www.linkedin.com/showcase/<name>/`
- company sub-pages such as `/company/<name>/about/` or `/posts/` (read from the main company page)

| Parameter | Required | Type | Description | Example value |
|---|---|---|---|---|
| `urls` | Yes | array of strings | Public LinkedIn company pages, one per entry. One row per URL. Personal profile links (`/in/`) get a failure row without a request; empty lines are ignored. Prefilled with the Netflix company page. | `["https://www.linkedin.com/company/netflix/"]` |
| `concurrency` | No | integer | Company URLs fetched at the same time, 1–20, default 3. | `3` |
| `maxRetries` | No | integer | Attempts per URL with a growing pause between them, 1–10, default 3. Pages that do not exist (HTTP 404) or are members-only are not retried. | `3` |
| `requestTimeoutSec` | No | integer | Seconds to wait for LinkedIn before an attempt counts as failed, 5–120, default 30. | `30` |
| `proxy` | No | object | Optional Apify Proxy settings. With them, the run starts on your proxy and switches to a residential proxy for the remaining URLs once LinkedIn blocks a request. Without them, runs on the Apify platform use a residential proxy from the start (local runs start on a direct connection). Every attempt gets a new IP. No default. | `{"useApifyProxy": false}` |

#### Example input

```json
{
  "urls": [
    "https://www.linkedin.com/company/netflix/",
    "https://www.linkedin.com/company/spotify/",
    "https://www.linkedin.com/company/this-slug-does-not-exist-zz9q/"
  ],
  "concurrency": 3,
  "maxRetries": 3,
  "requestTimeoutSec": 30,
  "proxy": {
    "useApifyProxy": false
  }
}
```

***

### ⬆️ Output

Every company URL is one typed, normalized JSON item with the same 20 keys on every run, and you can export the dataset as JSON (default), CSV or Excel, or keep the LinkedIn company data to JSON for your own pipeline. A URL that cannot return a company is saved as a failure row with success set to false, empty company fields and the reason in the error field; failure rows are not charged.

#### Example output

```json
[
  {
    "inputUrl": "https://www.linkedin.com/company/netflix/",
    "success": true,
    "name": "Netflix",
    "description": "Netflix is one of the world’s leading entertainment services offering TV series, films, games and live programming across a wide variety of genres and languages. Members can play, pause and resume watching as much as they want, anytime, anywhere, and can change their plans at any time. \n",
    "location": {
      "city": "Los Gatos",
      "state": "CA",
      "country": "US"
    },
    "headquartersStreetAddress": "100 Winchester Circle",
    "employeeCount": 19040,
    "website": "https://jobs.netflix.com?utm_campaign=LIHomePage&utm_source=linkedin",
    "logo": "https://media.licdn.com/dms/image/v2/D4E0BAQGMva5_E8pUjw/company-logo_200_200/company-logo_200_200/0/1736276678240/netflix_logo?e=2147483647&v=beta&t=-84GbYZIgL-lNtKMkXAk-OE1L6VJVMfBSLJRG8FLkVY",
    "slogan": "Play, pause, and resume watching anytime and anywhere. ",
    "industry": "Entertainment Providers",
    "size": "10,001+ employees",
    "founded": 1997,
    "headquarters": "Los Gatos, CA",
    "type": "Public Company",
    "specialties": [
      "Revolutionizing the way people watch TV shows and movies!"
    ],
    "similarPages": [
      {
        "link": "https://se.linkedin.com/company/spotify?trk=similar-pages",
        "name": "Spotify",
        "image": "https://media.licdn.com/dms/image/v2/C560BAQFkDzx_7dqq3A/company-logo_100_100/company-logo_100_100/0/1631377935713?e=2147483647&v=beta&t=AiRi3YW2R5kYKHbxsjkdQ_d1RuH6Yk98ePBwANPPDhc"
      },
      {
        "link": "https://www.linkedin.com/company/google?trk=similar-pages",
        "name": "Google",
        "image": "https://media.licdn.com/dms/image/v2/D4E0BAQGv3cqOuUMY7g/company-logo_100_100/B4EZmhegXHGcAU-/0/1759350753990/google_logo?e=2147483647&v=beta&t=zYekdwB_mnXarr4wa4kw8w3Jikm8YaakM5aiDyAyvP0"
      }
    ],
    "employees": [
      {
        "link": "https://www.linkedin.com/in/aaronhipple?trk=org-employees",
        "name": "Aaron Hipple",
        "image": "https://media.licdn.com/dms/image/v2/C4E03AQH_rhYlmsE33Q/profile-displayphoto-shrink_100_100/profile-displayphoto-shrink_100_100/0/1516155809223?e=2147483647&v=beta&t=AOI83o_TV-HDY0dY3mTP9cgUFihsic0NL5HdYEE3VOw"
      }
    ],
    "posts": [
      {
        "url": "https://www.linkedin.com/posts/netflix_at-our-first-uk-upfront-we-showcased-the-activity-7511123599173500928-_Yym",
        "datePublished": "2026-09-30T18:03:35.970Z",
        "text": "At our first UK Upfront, we showcased the art and science of Netflix: the blend of iconic titles, audience insights, data, and technology to show how getting closer to fandom delivers real business impact.\n\nFrom special guests, to an underground sports club and even an immersive Bridgerton garden, we proved Netflix transforms attention into action for brands."
      },
      {
        "url": "https://www.linkedin.com/posts/netflix_elizabeth-stone-our-chief-product-and-technology-activity-7508957203513483264-hsUj",
        "datePublished": "2026-09-24T18:35:06.994Z",
        "text": "Elizabeth Stone, our Chief Product and Technology Officer, just landed on TIME's inaugural Executives of the Year: Tech and Data list, joining 50 leaders shaping how businesses adopt technology. \n\nUnder her leadership, Netflix has redesigned TV and mobile, scaled live programming past 200 events a year, and pushed AI as a creator's tool, not a replacement for storytelling. \n\nCongratulations, Elizabeth."
      }
    ],
    "error": ""
  },
  {
    "inputUrl": "https://www.linkedin.com/company/this-slug-does-not-exist-zz9q/",
    "success": false,
    "name": "",
    "description": "",
    "location": {
      "city": "",
      "state": "",
      "country": ""
    },
    "headquartersStreetAddress": "",
    "employeeCount": null,
    "website": "",
    "logo": "",
    "slogan": "",
    "industry": "",
    "size": "",
    "founded": null,
    "headquarters": "",
    "type": "",
    "specialties": [],
    "similarPages": [],
    "employees": [],
    "posts": [],
    "error": "HTTP 404"
  }
]
```

***

### How does it work?

You don't need a LinkedIn account. For each URL, the Actor loads the public company page that any logged-out visitor sees, with plain HTTP requests and no browser, and reads the company profile, recent posts, employee preview and similar pages from that one page. Failed requests are retried with a growing pause; a page that does not exist or is members-only is reported right away.

On the Apify platform it uses a residential proxy from the start, unless you set your own proxy; with your own proxy, a block switches the run to a residential proxy for every remaining URL. Every attempt uses a new IP, and a proxy exit that does not connect within about 10 seconds is dropped. It returns only publicly visible data and does not solve CAPTCHAs. Every row follows one fixed schema of 20 keys.

***

### How do you integrate LinkedIn Company Scraper into your stack?

It works with what you already use: the Apify REST API from any language, the Apify MCP server for AI agents, and no-code tools.

#### MCP integration for AI agents

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

This connects your agent to the Apify MCP server, which registers this Actor as a tool your agent can call directly: the agent finds it with the server's search-actors tool, adds it with add-actor and runs it with call-actor. Sign in with your Apify account when asked. The command is for Claude Code; Cursor and Windsurf connect to the same URL in their MCP settings.

#### No-code tools (n8n, Make, LangChain)

**n8n:** add the Apify node, choose **Run an Actor** and pick this Actor with your list of company URLs. Its dataset items flow into the next node, such as HubSpot or Google Sheets.

**Make:** add the Apify app's **Run an Actor** module with this Actor and your input, then **Get Dataset Items** to pass the companies on. Map the company name, industry and employee count into any later module.

**LangChain:** install `langchain-apify` and load a finished run's dataset with `ApifyDatasetLoader`. Map the About text and specialties to the document content and the company name and website to metadata.

***

### Is it legal to scrape LinkedIn data?

Scraping publicly available LinkedIn data is generally legal. LinkedIn Company Scraper returns only publicly available data: the company page any visitor sees without logging in. Company facts are business data, but the employee preview holds names, job titles and photos of individual people, which are personal data under the GDPR; scraping public data is generally permissible, but storing and using it must comply with local data-protection law. This is not legal advice. Consult legal counsel if your use case involves bulk storage of personal data.

***

### Frequently asked questions

#### What fields does LinkedIn Company Scraper return?

The top five are the company name, industry, employee count, headquarters and recent posts. See [the data fields section](#what-data-can-i-extract-with-linkedin-company-scraper) for the full list of 20.

#### Does LinkedIn Company Scraper require a LinkedIn account or login?

No. Only public company data is extracted, and the input has no login, cookie or API-key field. No credentials needed.

#### How fast does LinkedIn Company Scraper run?

A recorded run took 7 company URLs and saved 7 rows in 3.7 seconds with 3 URLs at a time on a direct connection; each page took about 1 to 2 seconds. Data is fetched live on every run, not cached.

#### What happens if a company page is private or doesn't exist?

You still get a row: success is false, the company fields are empty and the error field says why, for example "HTTP 404" for a page that does not exist or a login-required message for a members-only link such as a numeric company ID. These rows are not charged. In your code, keep rows where success is true and log the rest by their source URL.

#### Can I scrape multiple LinkedIn companies at once?

Yes. Put as many company URLs as you need in one list; up to 20 are read at the same time, depending on the concurrency you set.

#### Does LinkedIn Company Scraper work with Claude, ChatGPT, and other AI agent tools?

Yes — this Actor is available as an MCP tool through the Apify MCP server. Register the server in Claude Code with the command below (Cursor and Windsurf use the same URL), and the agent can search for this Actor, add it and call it.

```bash
claude mcp add --transport http apify "https://mcp.apify.com"
```

Any agent that can call an HTTP endpoint can also use the Apify REST API directly.

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

Yes. Every row is typed, normalized JSON with consistent field names, and posts, employees and similar pages stay nested under their company. No HTML parsing, no selectors: pass it straight to an LLM, index it into a vector store, or feed it to an agent tool with no transformation step.

#### What happens when LinkedIn changes its layout or updates its anti-bot system?

The Actor is maintained, and when LinkedIn changes its pages it is updated so the same fields stay filled; for example, recent posts were adapted to LinkedIn's 2026 page change. Your calls keep returning the same JSON schema with no changes on your end. Blocked requests switch to a residential proxy on their own.

#### Can I use LinkedIn Company Scraper without managing proxies or browser infrastructure?

Yes. On the Apify platform the Actor uses a residential proxy with a new IP for every attempt, and retries run on the Actor's side; no browser is needed because it works over plain HTTP. You send one request and get structured JSON back; it does not solve CAPTCHAs.

#### Which LinkedIn company fields work best for AI training data and RAG indexing?

For RAG: the About text, tagline, specialties and recent post texts, with the company name and website as metadata. For training data: the employee count, founding year, company size band, industry and organization type. All fields are typed values (strings, integers, booleans and lists), with null only where LinkedIn shows nothing; no normalization needed. The same rows work as a LinkedIn firmographics scraper feed, and similar pages make it a LinkedIn similar companies scraper for market maps, while the public employee preview shows which LinkedIn company employees are visible logged out.

***

### Your feedback

Found a bug or missing a field? Let us know. Include the input you used and the run's log so the problem can be reproduced, and every report is read and fixed in the next update.

# Actor input Schema

## `urls` (type: `array`):

Public LinkedIn company pages, one per line, e.g. https://www.linkedin.com/company/netflix/ (showcase pages work too). Each URL gives one row, saved to the dataset as soon as it finishes. Sub-page links such as /about/ or /posts/ are read from the main company page. Personal profile links (/in/) are not company pages: they get a failure row without a request. Failure rows (page not found, members-only, blocked) are saved with the reason and are not charged. Free plan users can process up to 20 company URLs per run and 200 items per month; paid plans have no limit.

## `concurrency` (type: `integer`):

Number of company URLs fetched at the same time (1-20, default 3). Higher is faster but makes blocks more likely.

## `maxRetries` (type: `integer`):

How many times a URL is tried (with a growing pause between tries) before it is saved as a failure row (1-10, default 3). A page that does not exist (HTTP 404) or that LinkedIn shows only to signed-in members is not retried.

## `requestTimeoutSec` (type: `integer`):

How long to wait for LinkedIn to answer before the attempt counts as failed and is retried (5-120, default 30).

## `proxy` (type: `object`):

Optional. With your own proxy settings the run starts on them and switches to Apify's residential proxy if LinkedIn blocks a request. Without them, runs on the Apify platform use Apify's residential proxy from the start (a local run starts on a direct connection). Every attempt gets a new IP, and once the run is on the residential proxy it stays there for the remaining URLs.

## Actor input object example

```json
{
  "urls": [
    "https://www.linkedin.com/company/netflix/"
  ],
  "concurrency": 3,
  "maxRetries": 3,
  "requestTimeoutSec": 30
}
```

# Actor output Schema

## `results` (type: `string`):

All rows in the 'overview' view: source URL, success, company name, industry, employee count, company size, headquarters and error.

## `fullResults` (type: `string`):

All rows in the 'full' view with every field: profile details, location, specialties, similar pages, employees and posts.

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.linkedin.com/company/netflix/"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("socialdataapi/linkedin-company-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = { "urls": ["https://www.linkedin.com/company/netflix/"] }

# Run the Actor and wait for it to finish
run = client.actor("socialdataapi/linkedin-company-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "urls": [
    "https://www.linkedin.com/company/netflix/"
  ]
}' |
apify call socialdataapi/linkedin-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,socialdataapi/linkedin-company-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/3LnJDlZOySgzf6l0s/builds/br1jvrQ2mNSmaoARe/openapi.json
