# LinkedIn Company Scraper 🏢 (firmographics, no cookies) (`tagadanar/linkedin-company-scraper`) Actor

Firmographics for any list of companies from LinkedIn: industry, company size, headquarters address, website, followers, specialties, founded year, offices and similar companies. Paste URLs, slugs, names or domains. No login, no cookies.

- **URL**: https://apify.com/tagadanar/linkedin-company-scraper.md
- **Developed by:** [Tagada Data](https://apify.com/tagadanar) (community)
- **Categories:** Lead generation, Social media, Integrations
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $0.56 / 1,000 companies

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?

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: firmographics for any list of companies

Give it a list of companies and get back what their LinkedIn company page says about them: industry, company size, headquarters address, website, follower count, how many employees list the company on LinkedIn, specialties, founded year, company type, every office address and the similar companies LinkedIn suggests.

The list can be LinkedIn company URLs, bare slugs, website domains (`stripe.com`) or plain company names (`Stripe`). Domains and names are matched to their LinkedIn page for you, and every row says how it was matched.

$0.80 per 1,000 companies, platform usage included, name and domain matching included. No login, no cookies, no LinkedIn account at risk.

### What you get

One row per company:

| Field | Description |
| --- | --- |
| `inputValue` | What you typed for this company |
| `companyUrl`, `slug`, `linkedinId` | The LinkedIn page, its slug and LinkedIn's numeric company ID |
| `name` | Company name as shown on LinkedIn |
| `tagline` | The one-line tagline under the name (null when the company has none) |
| `description` | The full "About us" text |
| `website` | The company's website, as the company entered it on LinkedIn |
| `industry` | LinkedIn industry, e.g. `Software Development` |
| `companySize` | Size band the company picked, e.g. `201-500 employees` |
| `employeesOnLinkedIn` | How many LinkedIn members list this company as their employer |
| `followerCount` | LinkedIn followers, as shown on the page |
| `headquarters` | Headquarters as shown in "About us", e.g. `Redmond, Washington` |
| `hqStreet`, `hqCity`, `hqRegion`, `hqPostalCode`, `hqCountryCode` | The headquarters address split into parts |
| `locations` | Every office address listed on the page |
| `companyType` | `Privately Held`, `Public Company`, `Nonprofit`, `Self-Employed`... |
| `founded` | Year founded, when the company filled it in |
| `specialties` | The specialties list, as an array |
| `logoUrl`, `coverUrl` | Logo and cover image |
| `similarPages` | Companies LinkedIn lists as similar: name, industry, location, LinkedIn URL |
| `affiliatedPages` | Subsidiaries and showcase pages the company links to |
| `openJobsCount`, `openJobsCountText` | Live job posts on LinkedIn, worldwide (only when you turn on the open-jobs option; LinkedIn shows `2,000+` for the largest employers) |
| `pageType` | `company` or `showcase` |
| `resolvedVia` | How your input was matched: `url`, `slug`, `website-link` (the company's own site links to this page), `name-exact`, `name-top-suggestion` or `id` |
| `matchedName` | For a name or domain lookup, the LinkedIn company name that was picked |
| `websiteMatchesInput` | For a domain input: true when the page's website is that domain |
| `capturedAt` | When the row was collected |

A field the company left empty on LinkedIn is `null` (or an empty list), never a guess.

#### Example row (real, from a run on 2026-10-16; long text and lists shortened here)

```json
{
  "inputValue": "HubSpot",
  "companyUrl": "https://www.linkedin.com/company/hubspot",
  "slug": "hubspot",
  "linkedinId": "68529",
  "name": "HubSpot",
  "tagline": "The agentic customer platform to scale your business.",
  "description": "HubSpot is a leading agentic customer platform that provides software and support to help businesses grow better. Our platform includes marketing, sales, service, and website management products that ...",
  "website": "https://hubspot.com",
  "industry": "Software Development",
  "companySize": "5,001-10,000 employees",
  "employeesOnLinkedIn": 12262,
  "followerCount": 1767191,
  "headquarters": "Cambridge, Massachusetts",
  "hqStreet": "2 Canal Park",
  "hqCity": "Cambridge",
  "hqRegion": "Massachusetts",
  "hqPostalCode": "02141",
  "hqCountryCode": "US",
  "locations": [
    "2 Canal Park, Cambridge, Massachusetts 02141, US",
    "1 Sir John Rogerson's Quay, Dublin, County Dublin D02 CR67, IE",
    "60 Anson Road, Mapletree Anson #10-03, Downtown Core, Central Singapore Community Development Council 079914, SG"
  ],
  "companyType": "Public Company",
  "founded": 2006,
  "specialties": [
    "inbound marketing",
    "marketing",
    "internet marketing",
    "online marketing",
    "web marketing",
    "software"
  ],
  "logoUrl": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_200_200/company-logo_200_200/0/1646683330132/hubspot_logo?e=2147483647&v=beta&t=pXw0UYR09FB2Ui4cZJFBH0fusw61I3sH1lgXU8YU5Rg",
  "coverUrl": "https://media.licdn.com/dms/image/v2/D4E3DAQETk0LZEUj4Ag/image-scale_191_1128/B4EaCqYYwuJoAY-/0/1789564915035/hubspot_cover?e=2147483647&v=beta&t=UGF5vUPdmZsXce1PqpqP_mwlteD1YTkrsSn_kMnsmRI",
  "similarPages": [
    {
      "name": "Salesforce",
      "industry": "Software Development",
      "location": "San Francisco, California",
      "url": "https://www.linkedin.com/company/salesforce"
    },
    {
      "name": "InfraCloud Technologies - An Improving Company",
      "industry": "IT Services and IT Consulting",
      "location": "Pune, Maharashtra",
      "url": "https://www.linkedin.com/company/improvingindia"
    },
    {
      "name": "Stripe",
      "industry": "Technology, Information and Internet",
      "location": "South San Francisco, California",
      "url": "https://www.linkedin.com/company/stripe"
    }
  ],
  "affiliatedPages": [
    {
      "name": "HubSpot For Startups",
      "industry": "Software Development",
      "location": "Cambridge, Massachusetts",
      "url": "https://www.linkedin.com/showcase/hubspot-for-startups"
    },
    {
      "name": "HubSpot for Developers",
      "industry": "Software Development",
      "location": null,
      "url": "https://www.linkedin.com/showcase/hubspot-for-developers"
    }
  ],
  "openJobsCount": 69,
  "openJobsCountText": "69",
  "pageType": "company",
  "resolvedVia": "name-exact",
  "matchedName": "HubSpot",
  "capturedAt": "2026-10-16T00:01:53.373Z"
}
```

### Who uses this

- **Sales and SDR teams.** Qualify an account list before outreach: size band, industry, HQ country and whether they are hiring (open-jobs count), in one pass.
- **Lead-generation agencies.** Turn a list of domains from a client's CRM into clean firmographics with the LinkedIn URL attached, ready to import.
- **CRM and RevOps.** Refresh company records on a schedule: follower counts, size bands and headquarters move.
- **Investors and analysts.** Screen a list of startups by size, founding year, location and specialties, and follow `similarPages` to find look-alikes.

### Input

| Field | What it does |
| --- | --- |
| `companies` | One company per line: a LinkedIn company or showcase URL, a slug, a website domain or a company name. Up to 5,000 per run |
| `resolveNamesAndDomains` | On by default. Finds the LinkedIn page for domains (from the company's own website first, then LinkedIn's company search) and for names (LinkedIn's company search, exact name preferred). Turn it off to accept URLs and slugs only |
| `includeRecentJobsCount` | Off by default. Adds the number of live job posts per company. Same price, but the run takes roughly twice as long (one more LinkedIn page per company) |

#### Two companies by URL

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

#### A mixed list from a CRM export

```json
{
  "companies": [
    "hubspot.com",
    "notion.so",
    "Société Générale",
    "decathlon-group",
    "https://www.linkedin.com/company/microsoft/"
  ]
}
```

#### Hiring signal for an account list

```json
{
  "companies": ["stripe.com", "datadoghq.com", "personio.com"],
  "includeRecentJobsCount": true
}
```

### Pricing

| Event | Price |
| --- | --- |
| Company | $0.0008 per company row, i.e. **$0.80 per 1,000 companies** |
| Run start | $0.001 per run |

Store discounts apply: Bronze $0.72, Silver $0.64, Gold $0.56 per 1,000 companies.

You only pay for companies delivered. A slug with no LinkedIn page, a name LinkedIn has no match for, or a duplicate of a company already in the results costs nothing beyond the run start. Platform usage is included.

### FAQ

**Do I need a LinkedIn account or cookies?**
No. The actor reads LinkedIn's public company pages, the version anyone sees without signing in. Your own LinkedIn account is never involved, so it cannot be restricted.

**Does it scrape employees or people profiles?**
No. This actor collects company data only. It does not collect employee lists, names or profiles of people: that is personal data and out of scope here.

**How are names and domains matched?**
For a domain, the actor first reads the company's own homepage and follows its LinkedIn link, which is the most reliable match (`resolvedVia: website-link`). Otherwise, and for plain names, it asks LinkedIn's company search and takes the exact name match when there is one (`name-exact`), else LinkedIn's first suggestion (`name-top-suggestion`). Check `matchedName` on `name-top-suggestion` rows, and `websiteMatchesInput` on domain rows, before you trust them blindly. Common names ("Delta", "Apex") are ambiguous on LinkedIn too.

**Why did an input return nothing?**
The run's status message names every input that returned no row and says why: no such page on LinkedIn, no matching company, a school page, or LinkedIn refusing the request (run those again later). You are not charged for them.

**Can I scrape school or university pages?**
No. LinkedIn shows `/school/` pages to signed-in members only. Showcase pages (`/showcase/...`) work.

**Can I pass the numeric LinkedIn company ID?**
Yes, but LinkedIn only opens company pages by ID for signed-in members, so the actor finds the page through the company's public job posts. An ID with no live job posts cannot be matched; paste the company URL instead.

**How fast is it?**
Roughly 20 companies a minute, about half that with the open-jobs count on. LinkedIn paces logged-out visitors, so a list of several thousand companies needs a longer run timeout or a split into a few runs. When the timeout comes first, the run keeps every company already collected and its status names what was left.

**How fresh is the data?**
Every row is read live from LinkedIn at run time (`capturedAt`). Nothing is served from a cache.

**Is `employeesOnLinkedIn` the real headcount?**
It is the number of LinkedIn members who list the company as their employer. It usually sits below the real headcount (not everyone is on LinkedIn) and can sit above it for companies with many contractors. `companySize` is the band the company chose itself.

### Related actors

- [LinkedIn Company Jobs Scraper](https://apify.com/tagadanar/linkedin-company-jobs): every open role at one company, for when the open-jobs count says they are hiring.
- [LinkedIn Jobs Scraper](https://apify.com/tagadanar/linkedin-jobs-scraper): job posts by keyword and location, a hiring-signal feed for prospecting.
- [Google Maps Email Scraper](https://apify.com/tagadanar/google-maps-contact-extractor): local businesses with emails and phones.
- [B2B Lead Verifier](https://apify.com/tagadanar/b2b-lead-verifier): check a company against business registries, insolvency and sanctions lists before you sign.

LinkedIn company scraper, LinkedIn company data, company firmographics, LinkedIn company page scraper without login, company enrichment, account research, B2B lead enrichment, company size and industry lookup.

# Changelog

This Actor's version history is a separate document: https://apify.com/tagadanar/linkedin-company-scraper/changelog.md

# Actor input Schema

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

One company per line. Paste LinkedIn company URLs (https://www.linkedin.com/company/stripe), bare slugs (stripe), website domains (stripe.com) or plain company names (Stripe). Showcase pages work too. Duplicates are removed and you are charged once per company delivered.

## `resolveNamesAndDomains` (type: `boolean`):

For a website domain, the company's own site is checked for its LinkedIn link first; otherwise (and for plain names) LinkedIn's own company search picks the best match, preferring an exact name match. Every row says how it was matched (resolvedVia). Turn this off to accept LinkedIn URLs and slugs only.

## `includeRecentJobsCount` (type: `boolean`):

Adds openJobsCount: how many job posts the company has live on LinkedIn right now, worldwide (LinkedIn shows 2,000+ for the largest employers). A useful hiring signal for sales outreach. Same price per company.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/apify",
    "https://www.linkedin.com/company/stripe"
  ],
  "resolveNamesAndDomains": true,
  "includeRecentJobsCount": false
}
```

# Actor output Schema

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

One item per company in the default dataset.

# 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": [
        "https://www.linkedin.com/company/apify",
        "https://www.linkedin.com/company/stripe"
    ]
};

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

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

```

## MCP server setup

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