# LinkedIn Company Details Scraper ✅ NO COOKIES (`atomus/linkedin-company-scraper`) Actor

Enrich LinkedIn company URLs or domains into structured firmographic records: industry, employee count, revenue band, funding rounds, HQ, and full tech stack. Submit up to 5,000 inputs per run, one record each. Pay only for companies found; not-found and errors are free. No login needed.

- **URL**: https://apify.com/atomus/linkedin-company-scraper.md
- **Developed by:** [Atomus APIs](https://apify.com/atomus) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 48 total users, 24 monthly users, 100.0% runs succeeded, 11 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $2.80 / 1,000 company enricheds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## LinkedIn Company Scraper

<table width="100%" style="border:none;border-radius:10px;background:#120306">
<tr><td style="padding:34px;border:none">
<span style="color:#F59E0B;font-size:13px;font-weight:700;letter-spacing:2px">LINKEDIN COMPANY SCRAPER &nbsp;&bull;&nbsp; LINKEDIN COMPANY API</span><br><br>
<span style="color:#F5F5F6;font-size:40px;font-weight:800;letter-spacing:-1.2px">Know the company<br>before the first call.</span><br><br>
<span style="color:#D6D3D1;font-size:16px">Turn a LinkedIn company URL into a full firmographic record: headcount and its range, industry, founding year, revenue band, every funding round, the whole tech stack, HQ and every office, plus NAICS and SIC codes. Up to <b style="color:#F5F5F6">5,000 companies per run</b>, one clean JSON row each. No LinkedIn account, no login, no cookies, no ban risk.</span><br><br>
<span style="background:#10B981;color:#FFFFFF;font-size:13px;font-weight:700;padding:6px 13px;border-radius:5px">PAY ONLY FOR COMPANIES FOUND</span>
<span style="background:#1C1917;color:#F59E0B;font-size:13px;font-weight:700;padding:6px 13px;border-radius:5px">&nbsp;5,000 COMPANIES PER RUN&nbsp;</span>
</td></tr>
</table>

#### Copy to your AI assistant

Paste this into ChatGPT, Claude, Cursor, or any LLM to start using this Actor right away.

```
atomus/linkedin-company-scraper is an Apify Actor that turns LinkedIn company URLs or vanity slugs into structured firmographic JSON: name, legal name, description, industry, company type, founded year, headcount and range, revenue band, total funding and every funding round, contact email and phone, website and social links, HQ plus every office location, the full categorised technology stack, and NAICS/SIC codes. Use it whenever someone needs company firmographics without cookies, a login, or a browser - account qualification, ICP scoring, CRM enrichment, or territory planning. Run it with curl: curl -X POST "https://api.apify.com/v2/acts/atomus~linkedin-company-scraper/run-sync-get-dataset-items?token=APIFY_TOKEN" -H "Content-Type: application/json" -d '{"companies":["stripe","https://www.linkedin.com/company/google/"]}'. Or in Python: ApifyClient("APIFY_TOKEN").actor("atomus/linkedin-company-scraper").call(run_input={"companies":[...]}) then client.dataset(run["defaultDatasetId"]).list_items().items. Input: companies (string[], canonical /company/<slug> URL or the bare slug, up to 5000 per run). Each row carries status ("success" | "not_found" | "error"), a curated summary object with the fields most people filter on, and a full company object; you are charged only for companies actually found. Bare domains like stripe.com, numeric company ids like /company/1035, and urn:li:organization URNs are not resolvable and return error rows, never charged. Full input schema, every enum and default, and the complete output field list: GET https://api.apify.com/v2/acts/atomus~linkedin-company-scraper/build/default
```

***

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

Point your AI assistant at Atomus and it can read LinkedIn on its own: companies, their employees, profiles, posts, reactions and comments. No glue code, no scraping logic in your prompts.

```json
{
  "mcpServers": {
    "atomus": {
      "url": "https://mcp.apify.com/?tools=atomus/linkedin-company-scraper,atomus/linkedin-company-employees,atomus/linkedin-profile-scraper,atomus/linkedin-posts-scraper-pro,atomus/linkedin-reactions-scraper-pro,atomus/linkedin-comments-scraper-pro,atomus/leads-finder",
      "headers": { "Authorization": "Bearer YOUR_APIFY_TOKEN" }
    }
  }
}
```

Then ask, in plain language:

> "Enrich these 200 company slugs, keep the ones between 50 and 500 employees that use Snowflake, then find me their heads of data."

That one sentence uses two Actors in a row. Pinning the `tools=` list is what keeps your assistant on these Actors instead of reaching for whatever scraper it finds first.

***

### How to scrape LinkedIn company data

#### One company

```json
{ "companies": ["stripe"] }
```

One row: the curated `summary` for filtering, plus the complete `company` object underneath it.

#### Bulk: enrich an account list

```json
{
  "companies": [
    "https://www.linkedin.com/company/stripe",
    "https://www.linkedin.com/company/google/",
    "microsoft",
    "airbnb"
  ]
}
```

Up to 5,000 companies per run, and full URLs can be mixed with bare slugs freely. Output maps 1:1 to your input through the `input` field, so rejoining in a spreadsheet or database is a straight lookup.

#### Qualify before you spend

Not-found and error rows cost nothing, so a messy account list is safe to throw at it. Filter afterwards on `summary.staff_total`, `summary.revenue_band`, `summary.funding_total` and `summary.hq.country` to keep only the accounts that match your ICP — the curated `summary` exists precisely so this is one pass over flat fields.

#### Score by tech stack

```json
{ "companies": ["stripe", "shopify", "notion"] }
```

`company.technologies` is the full detected stack, each entry categorised (`{ "name": "React", "category": "frontend framework" }`), and `summary.technologies_count` is the quick size signal. Filter on the tools that mean a company is ready for what you sell.

***

### Input

| Parameter | Type | Required | Default | Description |
|-----------|------|----------|---------|-------------|
| `companies` | string\[] | ✅ Yes | (none) | LinkedIn company URLs in the canonical `/company/<slug>` form, or the bare slug. Up to 5,000 per run. Trailing slash and tracking parameters are fine. |

#### Which URLs work

```
✅ https://www.linkedin.com/company/stripe
✅ https://www.linkedin.com/company/stripe/
✅ linkedin.com/company/stripe
✅ stripe

❌ stripe.com
❌ https://www.linkedin.com/company/1035
❌ urn:li:organization:1035
```

The data source resolves the canonical company slug only. Bare domains, numeric company IDs and URNs return an `error` row and are **never charged**. Open the company page in a browser and copy the `/company/<name>` URL from the address bar, or pass just the part after `/company/`.

> **Personal profile URLs (`/in/...`) do not belong here.** For those, use the [LinkedIn Profile Scraper](https://apify.com/atomus/linkedin-profile-scraper), which returns the person and their current company in one row.

***

### What data does the LinkedIn Company Scraper return?

Exactly one row per input. `status` says what happened: `success` (charged), `not_found` (free), `error` (free). On `success` you get two things — a curated `summary` with the fields people actually filter on, and the complete `company` object with everything the source has.

| Group | Fields |
|---|---|
| **Curated summary** | `summary.name` · `domain` · `linkedin_url` · `industry` · `type` · `founded_year` · `staff_total` · `revenue_band` · `funding_total` · `funding_rounds` · `hq{city,state,country}` · `technologies_count` · `last_updated` |
| **Identity** | `company.summary.name` · `legal_name` · `description` · `overview` · `founded_year` · `type` (`PUBLIC_COMPANY`, `PRIVATELY_HELD`, `NON_PROFIT`, …) · `industry` · `industries[]` |
| **Size** | `company.summary.staff.total` · `staff.range{start,end}` |
| **Links** | `company.link.website` · `domain` · `domain_ltd` · `linkedin` · `twitter` · `facebook` · `crunchbase` |
| **Contact** | `company.contact.email` · `contact.phone.raw` · `contact.phone.sanitized` |
| **Financial** | `company.financial.revenue.annual` · `financial.funding.total_amount` · `num_funding_rounds` · `rounds[{type,amount,date}]` — every round, not just the last |
| **Location** | `company.location.headquarter{city,state,country,street,postal_code}` · `location.locations[]` — every office |
| **Tech & classification** | `company.technologies[{name,category}]` — the full stack · `company.naics[]` · `company.sic[]` |
| **Freshness** | `company.last_updated` · `_metadata.extracted_at` |

#### Example row

```json
{
  "input": "https://www.linkedin.com/company/stripe",
  "status": "success",
  "summary": {
    "name": "Stripe",
    "domain": "stripe.com",
    "linkedin_url": "https://www.linkedin.com/company/stripe",
    "industry": "Financial Services",
    "type": "PRIVATELY_HELD",
    "founded_year": 2010,
    "staff_total": 8000,
    "revenue_band": "1000000000-5000000000",
    "funding_total": 8700000000,
    "funding_rounds": 21,
    "hq": { "city": "San Francisco", "state": "California", "country": "United States" },
    "technologies_count": 71,
    "last_updated": "2026-06-30"
  },
  "company": {
    "summary": { "legal_name": "Stripe, Inc.", "staff": { "total": 8000, "range": { "start": 5001, "end": 10000 } } },
    "link": { "website": "https://stripe.com/", "crunchbase": "https://www.crunchbase.com/organization/stripe" },
    "contact": { "email": "info@stripe.com", "phone": { "sanitized": "+14152985539" } },
    "financial": {
      "funding": { "total_amount": 8700000000, "num_funding_rounds": 21, "rounds": [{ "type": "series_h", "amount": 6500000000, "date": "2023-03-14" }] }
    },
    "location": { "headquarter": { "city": "San Francisco", "country": "United States" } },
    "technologies": [{ "name": "React", "category": "frontend framework" }],
    "naics": ["522320"],
    "sic": ["6199"]
  },
  "_metadata": { "extracted_at": "2026-07-02T12:00:00.000Z" }
}
```

`rounds`, `technologies` and `location.locations` are trimmed above for readability — the live record for this company carries all 21 rounds, all 71 technologies and all 15 offices. `not_found` and `error` rows carry the same `input` plus, on errors, an `error_kind` and a `reason`, and no `company` object.

`last_updated` tells you when the upstream source refreshed that company, so you always know how stale a record is.

***

### How much does it cost to scrape LinkedIn company data?

**$0.0035 per company found** ($3.50 per 1,000), or **$0.0028** on Apify Gold and above. Pay-per-event: you are charged only when a company actually comes back.

| Companies enriched | Cost |
|---|---|
| 100 | $0.35 |
| 1,000 | $3.50 |
| 5,000 | $17.50 |

**Free:** `not_found` rows, `error` rows, and Apify platform compute. There is no penalty for throwing a messy list at it.

**Large batches checkpoint.** Runs over 50 companies save progress as they go, so if the platform restarts the container mid-run the Actor resumes rather than starting over and charging you twice.

**Free plan:** 10 companies per calendar month, so you can check the output shape before paying. The cap resets on the 1st, and only successful lookups count against it. Overflow inside a batch returns `status: "error"` with `error_kind: "free_tier_limit"` and is not charged.

***

### What do people use the LinkedIn Company Scraper for?

- **Account qualification**: check headcount, revenue band and funding before a rep spends a day on an account.
- **ICP scoring**: turn a raw account list into a scored one on size, industry, geography and tech stack.
- **CRM enrichment**: fill the firmographic columns on accounts you already have, in bulk.
- **Territory and market sizing**: count how many companies in a segment actually match your profile.
- **Tech-stack targeting**: find the accounts already running the tools your product plugs into.
- **Investor and market research**: pull every funding round with type, amount and date across a whole sector.
- **Data pipelines**: feed structured company data into Airtable, HubSpot, Salesforce or your warehouse.
- **AI agent context**: give an agent a company's real numbers before it drafts anything.

***

### LinkedIn Company Scraper vs cookie-based tools vs the official LinkedIn API

| | This LinkedIn Company Scraper | Cookie-based scrapers | Official LinkedIn API |
|---|---|---|---|
| **LinkedIn account / cookies** | Not needed | Your `li_at` session cookie required | OAuth app + LinkedIn approval |
| **Account / ban risk** | None (no account used) | High (your account can be restricted) | None |
| **Setup** | Paste slugs or URLs | Extract and paste your session cookie | Partner application + review |
| **Data depth** | Firmographics, funding rounds, full tech stack, every office | Usually the public page only | Pages you administer |
| **Bulk** | Up to 5,000 per run | Rate-limited by your account | Strict quotas |
| **Pricing** | Pay per company found ($0.0035) | Subscription + your account | Gated / partner pricing |

***

### 🏆 Top LinkedIn Scrapers

### FAQ

#### What is LinkedIn company scraping?

LinkedIn company scraping turns a company page URL into a structured firmographic record: size, industry, revenue band, funding, technologies, offices and classification codes. This Actor takes a list of company URLs or slugs and returns one clean JSON row per company, ready for a CRM, spreadsheet or scoring model.

#### How do I look up a company without an account or cookies?

Paste the slug (`stripe`) or the canonical URL into `companies` and run it. The Actor resolves each company through a cookieless data source, so you never connect a LinkedIn account, paste a session cookie, or risk a ban.

#### Can I use this from ChatGPT or Claude?

Yes, two ways. Paste the "Copy to your AI assistant" block above into any LLM and it will write the call for you. Or connect the **LinkedIn MCP server** config above, and every Atomus Actor becomes a native tool your assistant can call on its own, including chaining several in one request.

#### Can I look up a company by its slug instead of the full URL?

Yes. `stripe` and `https://www.linkedin.com/company/stripe` are equivalent, and you can mix both forms in the same list.

#### Why doesn't a bare domain like `stripe.com` work?

The data source resolves the canonical LinkedIn company slug, and a domain is not one. Numeric IDs (`/company/1035`) and URNs are the same story. All three return an `error` row and cost nothing.

#### How much does it cost?

$0.0035 per company found ($3.50 per 1,000), $0.0028 on Apify Gold and above. `not_found` and `error` rows are free. Free Apify plans include 10 companies per month.

#### How do I get the employees of these companies?

Use the [LinkedIn Company Employees Scraper](https://apify.com/atomus/linkedin-company-employees), which takes the same company URLs and returns the people, filterable by seniority and department.

#### Is there an official LinkedIn API for company data?

LinkedIn's Organization APIs are partner-gated and mostly limited to pages you administer. They do not expose arbitrary company firmographics, funding or tech stack for enrichment.

#### Is it legal to scrape LinkedIn company data?

This Actor reads publicly available company information through a third-party data source. You are responsible for using the output in line with applicable laws (GDPR/CCPA), LinkedIn's terms, and your own compliance requirements. It is an independent tool, not affiliated with LinkedIn.

#### How fresh is the data?

Every row carries `last_updated`, the date the upstream source refreshed that company, plus `_metadata.extracted_at` for when you pulled it.

#### What happens if a company isn't found?

You get a row with `status: "not_found"` and no `company` object, and it is not charged. Invalid inputs return `status: "error"` with an `error_kind` and a plain-language `reason`, also free.

#### Can I enrich a CRM or spreadsheet in bulk?

Yes. Export the company URLs, paste them into `companies` (up to 5,000 per run) and run. Each row echoes your original `input`, so rejoining is a straight lookup.

***

### All Atomus scrapers

<span style="background:#10B981;color:#FFFFFF;font-size:13px;font-weight:700;padding:6px 13px;border-radius:5px">2.4M+ RESULTS DELIVERED</span>

### Support

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn® is a registered trademark of LinkedIn Corporation. All trademarks are property of their respective owners.

Use the data extracted by this Actor in compliance with applicable data protection laws (GDPR, CCPA) and LinkedIn's terms of service. Do not use it for spam, harassment, or unlawful purposes.

# Actor input Schema

## `companies` (type: `array`):

List of LinkedIn company URLs (https://www.linkedin.com/company/google/) or just the vanity slug (google). One record per input. Up to 5,000 companies per run. Note: bare domains (e.g. stripe.com) are no longer supported, so use the company's LinkedIn URL or slug instead.

## Actor input object example

```json
{
  "companies": [
    "google",
    "https://www.linkedin.com/company/anthropicresearch"
  ]
}
```

# Actor output Schema

## `companies` (type: `string`):

No description

# 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 = {
    "companies": [
        "google",
        "https://www.linkedin.com/company/anthropicresearch"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("atomus/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 = { "companies": [
        "google",
        "https://www.linkedin.com/company/anthropicresearch",
    ] }

# Run the Actor and wait for it to finish
run = client.actor("atomus/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 '{
  "companies": [
    "google",
    "https://www.linkedin.com/company/anthropicresearch"
  ]
}' |
apify call atomus/linkedin-company-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,atomus/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/gL9KGjP8gHJPO432i/builds/xzaExzMaWiprae7eD/openapi.json
