---
title: "LinkedIn company scraper"
description: "Scrape public LinkedIn company pages as JSON: name, industry, company size, employee and follower counts, website, specialties and office locations."
canonical: https://www.zenrows.com/scrape/linkedin-company
updated: 2026-10-22
---

# LinkedIn company scraper

The Zenrows LinkedIn company scraper turns a public company page URL into structured JSON: company name, industry, company size, employee count on LinkedIn, follower count, organization type, website, specialties, description and office locations with city, country and address. Fetch in Adaptive Stealth Mode opens the page, Extract returns the fields, through the API, CLI or an AI agent.

- Site: linkedin.com
- Returns: Company profiles, size, industry, offices and followers

## Run it: one LinkedIn company in, JSON out

```json Input
{
  "url": "https://www.linkedin.com/company/microsoft/",
  "mode": "auto",
  "extract": "auto"
}
```

```json Output
{
  "company": {
    "company_size": "10,001+ employees",
    "description": "Every company has a mission. What's ours? To empower every person and every organization to achieve more…",
    "employee_count_on_linkedin": 231136,
    "follower_count": 29346483,
    "founded_year": null,
    "industry": "Software Development",
    "linkedin_url": "https://www.linkedin.com/company/microsoft",
    "name": "Microsoft",
    "organization_type": "public_company",
    "specialties": "Business Software, Developer Tools, Home & Educational Software, Tablets, Search, Advertising, Servers…",
    "tagline": null,
    "website": "https://news.microsoft.com/"
  },
  "locations": [
    {
      "city": "Redmond",
      "country": "US",
      "is_primary": true,
      "postal_code": "98052",
      "region": "Washington",
      "street_address": "1 Microsoft Way"
    },
    {
      "city": "Reading",
      "country": "GB",
      "is_primary": null,
      "postal_code": null,
      "region": null,
      "street_address": "Thames Valley Park Drive"
    }
  ],
  "similar_companies": [
    {
      "industry": "Software Development",
      "linkedin_url": "https://www.linkedin.com/company/google?trk=similar-pages",
      "location": "Mountain View, CA",
      "name": "Google"
    }
  ]
}
```

Request and output of a live call to a LinkedIn company page on Oct 22, 2026, trimmed for length. A field is returned when the page shows it.

## What data can you scrape from LinkedIn companies?

A company page returns the profile, the office list and the companies LinkedIn shows as similar. These are the fields teams use most, with the path where each lives in the JSON.

| Field | What it holds | Example |
|---|---|---|
| `company.name` | Company name | `Microsoft` |
| `company.linkedin_url` | Canonical URL of the company page | `https://www.linkedin.com/company/microsoft` |
| `company.industry` | Industry as LinkedIn labels it | `Software Development` |
| `company.company_size` | Size band shown on the page | `10,001+ employees` |
| `company.employee_count_on_linkedin` | Members who list the company as their employer | `231136` |
| `company.follower_count` | Followers of the company page | `29346483` |
| `company.organization_type` | Public company, privately held, nonprofit and so on | `public_company` |
| `company.website` | The website the company lists | `https://news.microsoft.com/` |
| `company.description` | The "About" text | `Every company has a mission…` |
| `company.specialties` | The specialties list as one string | `Business Software, Developer Tools, …` |
| `company.founded_year` | Year founded, when the page shows it | `null` |
| `company.logo_url` | The logo image | `https://media.licdn.com/dms/image/…` |
| `locations[].city` | City of each listed office | `Redmond` |
| `locations[].country` | Country code of each office | `US` |
| `locations[].street_address` | Street address of each office | `1 Microsoft Way` |
| `locations[].is_primary` | Marks the headquarters | `true` |
| `similar_companies[]` | Name, industry, location and URL of related companies | `{ "name": "Google", … }` |

## How to scrape LinkedIn companies with Zenrows

1. **Create a free Zenrows account** and copy your API key from the dashboard.
2. **Copy the company page URL.** It has the form `https://www.linkedin.com/company/NAME/`, where the last part is the company's LinkedIn slug.
3. **Send it with the default configuration**: Adaptive Stealth Mode to open the page and Extract to return the fields.
4. **Read `parsed`** from the response. Read optional fields defensively, because a company shows only the details it filled in, such as `founded_year` or `tagline`.
5. **Run your company list in Batch** once one URL comes back the way you want. Use the LinkedIn slug as the `external_id`.

```python Python
# pip install requests
import json
import requests

params = {
    "apikey": "YOUR_ZENROWS_API_KEY",
    "url": "https://www.linkedin.com/company/microsoft/",
    "mode": "auto",          # Adaptive Stealth Mode
    "extract": "auto",       # structured JSON
}
response = requests.get("https://api.zenrows.com/v1/", params=params, timeout=180)
response.raise_for_status()

data = response.json()["parsed"]
company = data["company"]
print(company["name"], company.get("industry"), company.get("employee_count_on_linkedin"))
for office in data.get("locations", []):
    print(office["city"], office["country"])
print(json.dumps(company, indent=2))
```

```javascript Node.js
// Node 18+ (built-in fetch)
const params = new URLSearchParams({
  apikey: "YOUR_ZENROWS_API_KEY",
  url: "https://www.linkedin.com/company/microsoft/",
  mode: "auto",
  extract: "auto",
});

const response = await fetch(`https://api.zenrows.com/v1/?${params}`, {
  signal: AbortSignal.timeout(180_000),
});
if (!response.ok) throw new Error(`${response.status}: ${await response.text()}`);

const { parsed } = await response.json();
console.log(parsed.company.name, parsed.company.industry, parsed.company.follower_count);
```

```bash cURL
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Fmicrosoft%2F&mode=auto&extract=auto"

# Only the fields you need
curl "https://api.zenrows.com/v1/?apikey=YOUR_ZENROWS_API_KEY&url=https%3A%2F%2Fwww.linkedin.com%2Fcompany%2Fmicrosoft%2F&mode=auto&extract=auto&extract_fields=company.name%2Ccompany.industry%2Ccompany.company_size%2Ccompany.website"
```

```python Python SDK
# pip install zenrows
from zenrows import ZenRowsClient

client = ZenRowsClient("YOUR_ZENROWS_API_KEY")
response = client.get(
    "https://www.linkedin.com/company/microsoft/",
    params={"mode": "auto", "extract": "auto"},
)
company = response.json()["parsed"]["company"]
print(company["name"], company.get("website"), company.get("company_size"))
```

## Input

The scraper takes one LinkedIn company URL per request, plus the options below. The same parameters go into every task of a Batch job, so the input for a thousand companies is a list of URLs with these settings.

| Parameter | Type | Default | Description |
|---|---|---|---|
| `url` | string | required | A public LinkedIn company page (`/company/NAME/`) |
| `mode` | string | `auto` | Adaptive Stealth Mode: starts with the lightest setup and adds rendering and protected-site handling only when the page needs them |
| `extract` | string | `auto` | Returns the page's fields as JSON in `parsed`, next to the raw `html` |
| `extract_fields` | string | all fields | Comma-separated paths to keep, such as `company.name,company.website` |
| `proxy_country` | string | any | Two-letter country code. LinkedIn localizes labels to the visitor's location |
| `wait_for` | string | none | A CSS selector to wait for before the page is read |
| `session_id` | integer | none | Reuse the same session across several requests, up to 10 minutes |

```json Batch input
{
  "type": "regular",
  "status": "closed",
  "zenrows_params": {
    "mode": "auto",
    "extract": "auto"
  },
  "tasks": [
    { "url": "https://www.linkedin.com/company/microsoft/", "external_id": "microsoft" },
    { "url": "https://www.linkedin.com/company/google/", "external_id": "google" },
    { "url": "https://www.linkedin.com/company/salesforce/", "external_id": "salesforce" }
  ]
}
```

## Output

Every response is JSON with two keys: `html`, the page as LinkedIn served it, and `parsed`, the structured record. The sample below is a trimmed output of a live request, with the groups a company page returns.

```json Company page
{
  "company": {
    "company_size": "10,001+ employees",
    "cover_image_url": "https://media.licdn.com/dms/image/v2/D4E3DAQGWOa_gAs1qXg/image-scale_325_1920/…",
    "employee_count_on_linkedin": 231136,
    "follower_count": 29346483,
    "founded_year": null,
    "industry": "Software Development",
    "linkedin_url": "https://www.linkedin.com/company/microsoft",
    "logo_url": "https://media.licdn.com/dms/image/v2/D560BAQH32RJQCl3dDQ/company-logo_200_200/…",
    "name": "Microsoft",
    "organization_type": "public_company",
    "tagline": null,
    "website": "https://news.microsoft.com/"
  },
  "locations": [
    {
      "city": "Redmond",
      "country": "US",
      "is_primary": true,
      "postal_code": "98052",
      "region": "Washington",
      "street_address": "1 Microsoft Way"
    },
    {
      "city": "Mississauga",
      "country": "CA",
      "is_primary": null,
      "postal_code": null,
      "region": null,
      "street_address": "1950 Meadowvale Blvd"
    }
  ],
  "similar_companies": [
    {
      "industry": "Software Development",
      "linkedin_url": "https://www.linkedin.com/company/amazon?trk=similar-pages",
      "location": null,
      "name": "Amazon"
    },
    {
      "industry": "Computer Hardware Manufacturing",
      "linkedin_url": "https://www.linkedin.com/company/nvidia?trk=similar-pages",
      "location": "Santa Clara, CA",
      "name": "NVIDIA"
    }
  ]
}
```

Need a spreadsheet? Load `parsed["company"]` into pandas with `pd.json_normalize(...)` and write CSV or Excel. Need the page for an LLM? Ask for Markdown instead of JSON.

## Scrape LinkedIn companies from your coding agent

Claude Code, Cursor, Codex and any MCP client can scrape LinkedIn company pages from a prompt.

The agent calls the same Fetch and Extract request a developer would, so the JSON above is what it reads. Connect the Zenrows MCP server once, or install the CLI and let the agent run it in the terminal.

```bash Connect the MCP server (Claude Code)
claude mcp add zenrows -e ZENROWS_API_KEY=YOUR_ZENROWS_API_KEY -- npx -y @zenrows/mcp
```

```json MCP config (Cursor, Claude Desktop, Windsurf)
{
  "mcpServers": {
    "zenrows": {
      "command": "npx",
      "args": ["-y", "@zenrows/mcp"],
      "env": { "ZENROWS_API_KEY": "YOUR_ZENROWS_API_KEY" }
    }
  }
}
```

```bash Or run the CLI
npx -y @zenrows/cli init
zenrows extract "https://www.linkedin.com/company/microsoft/"
```

```text Then ask your agent
Use Zenrows to get the industry, company size, follower count and website
of these LinkedIn companies and return them as a table sorted by follower count:
https://www.linkedin.com/company/microsoft/
https://www.linkedin.com/company/salesforce/
```

## Scrape LinkedIn companies at scale with Batch and Crawl

**Batch** runs a list of company URLs as one job: thousands of companies in parallel, with the LinkedIn slug as your own ID on each result. Use it to refresh size, industry and follower counts across an account list every month.

**Crawl** finds more companies from the ones you have. Start it on a company page, keep the links that contain `/company/`, and it reaches the pages LinkedIn lists as similar. Send that list to Batch.

```bash Batch (cURL)
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "type": "regular",
    "status": "closed",
    "zenrows_params": { "mode": "auto", "extract": "auto" },
    "tasks": [
      { "url": "https://www.linkedin.com/company/microsoft/", "external_id": "microsoft" },
      { "url": "https://www.linkedin.com/company/salesforce/", "external_id": "salesforce" }
    ]
  }'

# Read the results when the job finishes
curl "https://async.api.zenrows.com/v1/jobs/JOB_ID/results?status=successful" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY"
```

```bash Batch (CLI)
# companies.jsonl: one {"url": "...", "external_id": "...", "extract": "auto"} per line
zenrows batch create companies.jsonl --wait
zenrows batch results <job-id> --out linkedin-companies.jsonl
```

```bash Crawl (cURL)
curl -X POST "https://api.zenrows.com/v1/crawls" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "url": "https://www.linkedin.com/company/microsoft/",
    "depth": 1,
    "max_pages": 50,
    "include_patterns": ["/company/"]
  }'
```

**Scheduled jobs** run the same Batch job on a timetable, on Zenrows' side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can tell your app when a run finishes, and you can pause or resume the schedule at any time, with no cron server to keep alive.

```bash Scheduled job (cURL)
# Runs every day on Zenrows' side; each run keeps its own results
curl -X POST "https://async.api.zenrows.com/v1/jobs" \
  -H "X-API-Key: YOUR_ZENROWS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
      "type": "scheduled",
      "status": "closed",
      "schedule": {
        "rate": {
          "every": 1,
          "unit": "day"
        }
      },
      "zenrows_params": {
        "mode": "auto",
        "extract": "auto"
      },
      "tasks": [
        {
          "url": "https://www.linkedin.com/company/microsoft/",
          "external_id": "linkedin-company"
        }
      ]
    }'

# Or at set times: "schedule": { "calendar": { "times_of_day": ["09:00"],
#   "cadence": { "weekly": { "days": ["mon", "thu"] } } }, "timezone": "Europe/Madrid" }
```

## What teams do with LinkedIn company data

| Use case | Data they pull | Who runs it |
|---|---|---|
| Account enrichment | Industry, company size, website and headquarters for each account in the CRM | Sales operations and RevOps teams |
| Market mapping | Companies per industry, size band and country | Strategy and market research teams |
| Competitor tracking | Follower count and employee count on LinkedIn over time | Marketing and competitive intelligence teams |
| Investment screening | Organization type, size, specialties and office footprint | Investors and analysts |
| Territory planning | Office locations by city and country | Sales and expansion teams |
| AI research agents and RAG | The company record, or the page as Markdown | AI and data teams |

## Tips for scraping LinkedIn companies

- **Use the company slug URL.** `https://www.linkedin.com/company/NAME/` is the page to request, and the slug in it is a good `external_id`.
- **Match company size with employee count.** `company_size` is a band such as `10,001+ employees`, while `employee_count_on_linkedin` is the exact number of members who list the company.
- **Read `locations[]` for the footprint.** Each office carries `city`, `country` and address, and `is_primary` marks the headquarters.
- **Grow your list from `similar_companies[]`.** Each entry carries a company URL you can send back to the scraper.
- **Strip the tracking suffix.** URLs such as `…/company/amazon?trk=similar-pages` point to the same page as `…/company/amazon`.
- **Expect nulls.** Fields such as `founded_year` and `tagline` come back as `null` when the company left them empty, so read optional fields defensively.

## Frequently asked questions

### Is it legal to scrape LinkedIn companies?

Collecting publicly available company data, such as industry, size and offices shown to every visitor, is common practice for sales research and market mapping. Personal data is protected by laws such as the GDPR and the CCPA, so collect company information and avoid profiles of individuals unless you have a legitimate reason and a legal basis. Check LinkedIn's terms for your use case and ask your lawyer if you are unsure.

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

LinkedIn offers APIs through its partner programs, including the Marketing and Community Management APIs for pages you administer. Access depends on approval and on the product, and they do not return the public profile of any company on demand. Teams that need data across many companies use a scraper for the public page.

### What LinkedIn company pages can I scrape?

Public company pages ( /company/NAME/ ), with their profile details, office list and similar companies. Send the URL as it appears in your browser.

### Can I scrape company size and employee count?

Yes. company.company_size returns the size band and company.employee_count_on_linkedin returns the number of members who list the company as their employer.

### Can I scrape company websites and industries?

Yes. company.website returns the website the company lists and company.industry its industry label. Run your list of company URLs in Batch to enrich a whole account list.

### How do I scrape LinkedIn companies with Python?

Send a GET request to https://api.zenrows.com/v1/ with your API key, the company URL, Adaptive Stealth Mode and Extract turned on, as in the Python example above. The response's parsed key holds the company as a Python dictionary. The zenrows package on PyPI wraps the same request.

### How many LinkedIn companies can I scrape?

Send one URL per request, or a whole list as a Batch job that runs the URLs in parallel and keeps your own ID on each result. One Batch job accepts more than 10,000 URLs, sent inline or as a CSV file.

### Do I need to write or maintain selectors?

No. Extract returns each field by name, so your code reads parsed instead of parsing LinkedIn's HTML. For a field of your own, send a separate request with CSS selectors instead of Extract.

### Can AI agents scrape LinkedIn companies with Zenrows?

Yes. Connect the Zenrows MCP server to Claude, Cursor, Codex or any MCP client, or give your agent the Zenrows CLI. Ask for the companies you want in plain language and the agent calls Fetch and Extract for you.

### Can I scrape LinkedIn on a schedule?

Yes. Create a scheduled Batch job with your LinkedIn URLs and the same settings as a single request, and Zenrows runs it on its side: every few hours, once a day, at set times on chosen days, or once at a future date. Each run keeps its own results, a webhook can notify your app when a run finishes, and the schedule can be paused or resumed at any time.

### Which integrations work with the LinkedIn company scraper?

Zenrows works with n8n, Make, Zapier, Clay, Dify, LangChain, LlamaIndex, CrewAI and Mastra, plus the Python, Node.js and Go SDKs and any HTTP client. Send results to Google Sheets, a database or a data warehouse from the workflow tool you already use. See the integrations page for the full list.

### What format does the data come in?

JSON by default, with the structured record in parsed and the original page in html . You can also ask for the page as Markdown or plain text, which is what most LLM and RAG pipelines want.

## More LinkedIn scrapers

- [LinkedIn scraper](https://www.zenrows.com/scrape/linkedin.md)
- [LinkedIn jobs scraper](https://www.zenrows.com/scrape/linkedin-jobs.md)
- [LinkedIn profile scraper](https://www.zenrows.com/scrape/linkedin-profile.md)
- [LinkedIn post scraper](https://www.zenrows.com/scrape/linkedin-posts.md)

All scrapers: https://www.zenrows.com/scrape. Start free: https://app.zenrows.com/register. Docs: https://docs.zenrows.com
