# LinkedIn Company Scraper — Details, Posts & Similar Companies (`saliga/linkedin-company-scraper`) Actor

LinkedIn company pages by link, name or website: about, website, industry, size, employees, followers, headquarters, founded, specialties, locations, products, similar companies and recent posts. Bulk, no login, no cookies, no personal data.

- **URL**: https://apify.com/saliga/linkedin-company-scraper.md
- **Developed by:** [Salih Küçükkayış](https://apify.com/saliga) (community)
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 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.

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

Get **LinkedIn company data** in bulk: paste company links, page names or just **websites**, and get one clean row per company with the about text, website, industry, company size, **employees on LinkedIn**, **followers**, headquarters and full address, founded year, specialties, every office location, products, **similar companies** and the company's **recent posts** with reactions and comments. No login, no cookies, no LinkedIn account needed.

![LinkedIn Company Scraper demo: input, run and results table from a real run](https://raw.githubusercontent.com/msalihk/apify-actor-examples/620b5a0f9925474404cef5a8900ec9e53f19d641/media/linkedin-company-scraper.gif)

What you get that other LinkedIn company scrapers leave to you:

- **Start from websites.** Have a list of domains from a CRM or a spreadsheet? Put them in *websites*: the Actor finds the LinkedIn page each site links to, or the page whose name matches the domain and lists the same website, and reads it. `foundBy` tells you which.
- **Recent posts included.** Up to 10 latest posts per company (text, date, reactions, comments, images) in the same row, at no extra cost. Or switch *Output* to *Posts* for one row per post.
- **New posts monitor.** Schedule it with *Only new posts since the last run* to follow what competitors, customers or prospects post on LinkedIn.
- **Numbers as numbers.** `companySizeMin`/`companySizeMax`, `employeesOnLinkedIn`, `followers`, `foundedYear`, specialties as a list, the address split into street, city, region, postal code and country.
- **Similar companies.** LinkedIn's "Similar pages" and "Affiliated pages" for each company: a ready lookalike list for prospecting.
- **No personal data.** Employee lists and posts written by people are skipped on purpose.

### What you can use it for

- **Lead enrichment**: add size, industry, headquarters, website and LinkedIn followers to a list of accounts.
- **Prospecting**: start from your best customers and collect their similar companies.
- **Competitor tracking**: follow competitors' LinkedIn posts every day or week.
- **Market research**: compare company sizes, locations and growth signals across a sector.
- **Data cleaning**: match domains to LinkedIn pages and fill in missing company fields.

### Quick start

Press **Start** with the example input, or give your own:

```json
{
  "companies": ["https://www.linkedin.com/company/stripe/", "microsoft", "notion.so"],
  "includePosts": true
}
```

From websites only:

```json
{
  "websites": ["stripe.com", "linear.app", "https://www.monzo.com"]
}
```

### Output

One row per company (fields LinkedIn does not show for a company are left out):

```json
{
  "input": "https://www.linkedin.com/company/acme/",
  "slug": "acme",
  "url": "https://www.linkedin.com/company/acme/",
  "companyId": "103683",
  "name": "Acme Ltd",
  "tagline": "Technology Recruitment | London",
  "description": "Established in 2004 ...",
  "website": "http://www.acme.co.uk",
  "domain": "acme.co.uk",
  "industry": "Staffing and Recruiting",
  "companySize": "11-50 employees",
  "companySizeMin": 11,
  "companySizeMax": 50,
  "employeesOnLinkedIn": 48,
  "followers": 300445,
  "headquarters": "London, England",
  "address": {"street": "1 Main St", "city": "London", "region": "England", "postalCode": "EC1A 1AA", "country": "GB"},
  "organizationType": "Privately Held",
  "foundedYear": 2004,
  "specialties": ["Data", "AI", "Research and Development", "Leadership"],
  "locations": [{"address": "1 Main St, London, England EC1A 1AA, GB", "primary": true}],
  "logo": "https://media.licdn.com/...",
  "products": [{"name": "Acme Hire", "category": "Applicant Tracking Systems", "url": "https://www.linkedin.com/products/acme-hire/"}],
  "similarPages": [{"name": "Hays", "industry": "Staffing and Recruiting", "location": "London", "url": "https://www.linkedin.com/company/hays/"}],
  "affiliatedPages": [{"name": "Acme Labs", "industry": "Research", "url": "https://www.linkedin.com/showcase/acme-labs/"}],
  "recentPosts": [{
    "id": "7520878131965091840",
    "url": "https://www.linkedin.com/posts/acme_launch-activity-7520878131965091840-mCcZ",
    "postedAt": "2026-10-27T16:04:37.817Z",
    "author": "Acme Ltd",
    "isRepost": false,
    "text": "We are hiring data engineers!",
    "reactions": 1029,
    "comments": 71,
    "images": 1
  }],
  "lastPostAt": "2026-10-27T16:04:37.817Z",
  "jobsUrl": "https://www.linkedin.com/jobs/search/?f_C=103683"
}
```

With *Output: Posts*, one row per post with `company`, `companyUrl`, `companyId` and `companyFollowers` added.

### Input

| Field | What it does |
|---|---|
| LinkedIn companies | Links (linkedin.com/company/stripe), page names (stripe) or websites (stripe.com). Showcase and school pages work too. |
| Websites | The Actor finds the LinkedIn page each website links to, or a page with a matching name that lists the same website. |
| Include recent posts, Max posts per company | Up to 10 latest posts in each company row. |
| Only the company's own posts | Leave out reposts from the company's other pages. |
| Output | Companies, or Posts (one row per post). |
| Only new posts since the last run, Monitor name | Follow companies: only posts not returned before. |

### Pricing

You pay **per company** in the *Companies* output (recent posts included) or **per post** in the *Posts* output, plus a tiny fee per run. Companies that are not found, websites without a LinkedIn link, failures and posts seen in earlier runs are free. Apify's free plan credit covers a first test.

### Run it on a schedule

For competitor or prospect tracking, create a [task](https://docs.apify.com/platform/actors/running/tasks) with *Output: Posts* and *Only new posts since the last run* on, then [schedule](https://docs.apify.com/platform/schedules) it daily or weekly. Send results to Slack, Google Sheets, email, Zapier, Make or n8n with integrations, or call it from your own code through the Apify API.

### FAQ

**Do I need a LinkedIn account or cookies?** No. The Actor reads the public company page LinkedIn shows to visitors who are not signed in.

**Does it return employees or people?** No. Employee lists, profile photos and posts written by people are skipped on purpose. You get company data and the company's own posts.

**What is `employeesOnLinkedIn` vs `companySize`?** `companySize` is the range the company chose on its page (for example 51-200). `employeesOnLinkedIn` is how many LinkedIn members list the company as their employer, a good growth signal when you compare runs over time.

**Why only 10 posts?** LinkedIn shows visitors who are not signed in about the 10 latest posts. Schedule the Actor with the new posts monitor to build a full history.

**A company has fewer fields than another.** Fields the company did not fill in (founded, specialties, locations) are left out instead of being empty. LinkedIn also hides the follower count on some large pages for visitors who are not signed in; `followers` is then left out.

**I gave a name and got a different company.** A page name is the part after /company/ in the link, and short names often belong to someone else ("uber" is a small agency, Uber is "uber-com"). Use the full link or the website to be sure.

**Some companies fail with "sign-in wall".** LinkedIn limits how often one address can ask. The Actor retries from other proxy addresses; if many still fail, choose the RESIDENTIAL proxy group under *Advanced*. Failed companies are free.

**How do I get the company's jobs?** Use `jobsUrl` in [LinkedIn Jobs Scraper](https://apify.com/saliga/linkedin-jobs-scraper) (paste it in *LinkedIn job search links*).

### Related Actors

- [LinkedIn Jobs Scraper](https://apify.com/saliga/linkedin-jobs-scraper): jobs with full job pages, salary, agency flag and a hiring companies list.
- [Career Site Jobs](https://apify.com/saliga/career-site-jobs): jobs straight from company career sites.
- [Tech Stack Detector](https://apify.com/saliga/tech-stack-detector): which technologies a company's website uses.
- [Dataset Merge & Dedupe](https://apify.com/saliga/dataset-merge-dedupe): join company rows with your own lists and export to CSV or Excel.

# Actor input Schema

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

One per line: a LinkedIn company link (linkedin.com/company/stripe), the page name from that link (stripe), or the company's website (stripe.com). Showcase and school pages work too.

## `websites` (type: `array`):

Website addresses. The Actor opens each site, finds the LinkedIn company page it links to and reads it. Sites that do not link to LinkedIn are listed with an error, free.

## `includePosts` (type: `boolean`):

Adds up to 10 recent posts by the company (text, date, reactions, comments) to each company. Posts by people that the company reposted are left out.

## `maxPostsPerCompany` (type: `integer`):

LinkedIn shows visitors who are not signed in about the 10 latest posts.

## `skipReposts` (type: `boolean`):

Leave out posts the company reposted from its other pages.

## `outputMode` (type: `string`):

Companies: one row per company, posts inside. Posts: one row per post, with the company name, for content tracking.

## `onlyNewPosts` (type: `boolean`):

With Output: Posts. Remembers the posts already returned (per monitor name) and returns only new ones. Schedule the Actor to follow companies' LinkedIn activity.

## `monitorName` (type: `string`):

Keep separate memories, e.g. one per client. Letters, digits and dashes.

## `proxyConfiguration` (type: `object`):

Apify Proxy is used by default. If many companies fail with a sign-in wall, choose the RESIDENTIAL group.

## Actor input object example

```json
{
  "companies": [
    "https://www.linkedin.com/company/stripe/",
    "microsoft",
    "notion.so"
  ],
  "includePosts": true,
  "maxPostsPerCompany": 10,
  "skipReposts": false,
  "outputMode": "companies",
  "onlyNewPosts": false,
  "monitorName": "default",
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

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

One row per company.

## `posts` (type: `string`):

One row per post (Output: Posts).

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

Every field, including descriptions, locations, similar pages 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 = {
    "companies": [
        "https://www.linkedin.com/company/stripe/",
        "microsoft",
        "notion.so"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("saliga/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/stripe/",
        "microsoft",
        "notion.so",
    ],
    "proxyConfiguration": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("saliga/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/stripe/",
    "microsoft",
    "notion.so"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}' |
apify call saliga/linkedin-company-scraper --silent --output-dataset

```

## MCP server setup

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