# LinkedIn Company Scraper: Details, Employees & Posts (`precious_bathmat/linkedin-company-scraper`) Actor

Scrape LinkedIn company pages with no login or cookies: industry, size, employee count, followers, HQ address, website, founded, all office locations, similar companies and the latest posts with reactions and comments. Find a company by URL, website or name.

- **URL**: https://apify.com/precious_bathmat/linkedin-company-scraper.md
- **Developed by:** [Mariam Ahmed](https://apify.com/precious_bathmat) (community)
- **Categories:** Lead generation, Business
- **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

## LinkedIn Company Scraper: Details, Employees & Posts

Scrape **LinkedIn company pages** with **no login, no cookies and no LinkedIn account**. Give it company URLs, websites or names and get **one clean row per company** plus its **latest posts**:

- **Company details**: name, tagline, description, industry, company size, **employee count on LinkedIn**, **followers**, headquarters, full address, website, founded year, company type, specialties, logo
- **Every office location** listed on the page
- **Similar companies** LinkedIn shows next to it (name, industry, location, link): a ready list of competitors and lookalikes
- **Latest posts**: date, text, media type, **reactions**, **comments**, hashtags, links, and whether it is a repost
- **Posting activity** per company: posts per week, days since the last post, average reactions and comments, best post
- **Find companies three ways**: LinkedIn URL, **website** (stripe.com), or **name** (Stripe)

### What does this LinkedIn company scraper do?

```
Stripe · Technology, Information and Internet · 5,001-10,000 employees
 16,622 employees on LinkedIn · 1,755,009 followers · founded 2010
 HQ 354 Oyster Point Blvd, South San Francisco · 14 offices
 Latest post 1 day ago · 5.7 posts a week · 359 reactions on average
```

1. Paste **companies**: LinkedIn company URLs, websites or names, as many as you like.
2. The scraper opens each **public LinkedIn company page**, the same page anyone sees without logging in.
3. You get **one row per company** and, in a second table, **one row per recent post**.

```mermaid
flowchart LR
    A[LinkedIn URL] --> D[Public company page]
    B[Website<br/>stripe.com] -->|LinkedIn link on the site,<br/>or guessed and checked| D
    C[Name<br/>Stripe] -->|guessed and checked| D
    D --> E[Companies<br/>details, size, followers,<br/>HQ, offices, similar]
    D --> F[Posts<br/>text, date, reactions,<br/>comments]
```

### Who is it for?

- **Sales and lead generation teams**: enrich a list of accounts with industry, size, employee count, HQ and website before outreach
- **Recruiters and staffing agencies**: size up target employers and see who is growing
- **Marketers and social media managers**: benchmark competitors' LinkedIn followers, posting frequency and engagement
- **Investors and analysts**: track company size and activity across a portfolio or a market
- **CRM and data teams**: keep company records fresh with a scheduled run

### What data do you get?

**Companies** (default dataset, one row per company)

| Field | What it tells you |
|---|---|
| `companyName`, `tagline`, `description`, `logoUrl` | Who they are |
| `industry`, `companySize`, `employeesOnLinkedIn` | How big: LinkedIn's size band and the number of people who list the company |
| `followers` | LinkedIn followers |
| `headquarters`, `address`, `locations` | HQ city, full HQ address (street, city, region, postal code, country) and every office listed |
| `website`, `founded`, `organizationType`, `specialties` | Website, year founded, public or private, what they do |
| `similarCompanies` | Name, industry, location and link of each company LinkedIn lists as similar |
| `affiliatedPages` | Showcase and subsidiary pages |
| `postsOnPage`, `repostsOnPage`, `latestPostAt`, `daysSinceLastPost`, `postsPerWeek` | How active the page is |
| `avgReactions`, `avgComments`, `topPostUrl`, `topPostReactions` | How well their posts land |
| `input`, `matchedBy`, `matchConfidence`, `linkedinUrl`, `slug` | What you typed and how the page was found |

**Posts** (second dataset, one row per post)

| Field | What it tells you |
|---|---|
| `companyName`, `companyLinkedinUrl` | Whose post |
| `postedAt`, `url`, `postId` | When, and the link to the post |
| `text`, `mediaType`, `hashtags`, `links` | What it says: text, image, video, article or document |
| `reactions`, `comments` | Engagement |
| `isRepost`, `originalAuthor`, `originalAuthorUrl` | Reposts of other organizations and who wrote them |

### Example: 7 October 2026

**183 companies in 5 minutes 46 seconds: 181 found, 1,560 posts.**

| Company | Followers | Employees on LinkedIn | Industry |
|---|---|---|---|
| Netflix | 12,156,238 | 19,040 | Entertainment Providers |
| Goldman Sachs | 6,156,543 | 67,001 | Financial Services |
| Canva | 2,853,687 | 20,413 | Software Development |
| Toyota Motor Corporation | 2,389,106 | 40,743 | Motor Vehicle Manufacturing |
| Stripe | 1,755,165 | 16,622 | Technology, Information and Internet |
| Vercel | 265,633 | 1,027 | Software Development |

Across the 181 companies: **followers, industry and size on every row**, website on 179, HQ address on 176, a recent post on 172, founded year on 106.

### Pricing

**$0.003 per company** and **$0.001 per post**.

- 100 companies, details only: **$0.30**
- 100 companies with their latest posts (about 8 each): **about $1.15**
- The run above (181 companies, 1,560 posts): **$2.10**

Turn off **Latest posts** to pay for company rows only. Companies that are not found cost nothing.

### How companies are found

| You give | What happens |
|---|---|
| **LinkedIn URL** (`linkedin.com/company/stripe`, any country subdomain) | Read directly. The most reliable input |
| **Website** (`stripe.com`) | The LinkedIn link on the site is followed. Many sites add that link with JavaScript, so if none is found the LinkedIn page is guessed from the domain and **kept only if its own website field points back to your domain** |
| **Name** (`Stripe`) | Tried the way LinkedIn names pages (`stripe`, `stripe-inc`, `stripehq`...) and **kept only if the page name fits**: "Toyota" finds "Toyota Motor Corporation", but "Uber" does not take the page of "Uber Agency" |

`matchedBy` tells you which way each company was found. A name match on a small page whose website does not carry the name is marked `matchConfidence: low`: look-alike pages exist on obvious names. Anything not found is listed in `RUN_SUMMARY` with the reason.

### Good to know

- **Latest posts only**: LinkedIn shows logged-out visitors the most recent posts of a company, usually **5 to 10**. This is a tool for **monitoring recent activity**, not a full post archive. Schedule it weekly to build your own history.
- **No people**: employee names and profiles are never collected, and **posts written by individual people are never saved**, even when the company reposted them.
- **Page language**: some pages are shown in their owner's language (for example "seguidores" instead of "followers"). Numbers are read correctly either way; text fields such as company type stay as LinkedIn shows them.
- **Speed**: about 2 seconds per company with posts. If LinkedIn asks the run to slow down, it waits a few seconds and tries again (14 retries in the 183-company run above).
- **Duplicates** in your list are read once.
- Data comes from **LinkedIn's public company pages**. **Not affiliated with LinkedIn.**

### Input

| Field | Meaning |
|---|---|
| **Companies** | LinkedIn URLs, websites or names, one per line |
| **Latest posts** | On by default; saves recent posts to the Posts dataset |
| **Include reposts** | On by default; posts the company reposted from other organizations |
| **Posts from the last** | Any time, 24 hours, 7, 14, 30 or 90 days |

### Integrations

Export to JSON, CSV, Excel or Google Sheets, or connect through the Apify API, webhooks, Make, Zapier and n8n. **Schedule it weekly** over your account list to keep CRM records fresh, or daily over competitors with "Posts from the last 24 hours" for a feed of their new posts.

# Actor input Schema

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

One per line: a LinkedIn company URL (https://www.linkedin.com/company/stripe), a website (stripe.com), or a company name (Stripe). URLs are the most reliable; for a website, the LinkedIn link on the site is followed; a name is tried as LinkedIn names pages and kept only if the page name matches.

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

Save the company's latest posts (text, date, reactions, comments, media type, hashtags, links) to the Posts dataset. LinkedIn shows logged-out visitors only the most recent posts, usually 5 to 10 per company.

## `includeReposts` (type: `boolean`):

Also save posts the company reposted from other organizations. Posts by individual people are never saved.

## `postedWithinDays` (type: `string`):

Only save posts newer than this. Company rows and their activity numbers are always complete.

## Actor input object example

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

# Actor output Schema

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

One row per company: industry, size, employees, followers, HQ, address, website, founded, type, specialties, locations, similar companies, posting activity.

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

The latest posts of each company: date, text, media type, reactions, comments, hashtags, links, reposts.

## `summary` (type: `string`):

Companies saved, posts, companies not found and why.

# 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",
        "notion.so",
        "Figma"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("precious_bathmat/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",
        "notion.so",
        "Figma",
    ] }

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

```

## MCP server setup

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