# LinkedIn Company Profile Scraper (`memo23/linkedin-company-profile-scraper`) Actor

Scrapes LinkedIn company "About" pages for: company name, description, tagline, website URL, phone number, employee count, founding year, specialties, headquarters address, industries, and unique identifiers.

- **URL**: https://apify.com/memo23/linkedin-company-profile-scraper.md
- **Developed by:** [Muhamed Didovic](https://apify.com/memo23) (community)
- **Categories:** Lead generation, Automation, Integrations
- **Stats:** 25 total users, 14 monthly users, 42.9% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $5.00 / 1,000 results

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 Profile Scraper

### Related LinkedIn Scrapers

Explore our complete suite of LinkedIn scraping tools:

- **[LinkedIn Company Profile Scraper](https://apify.com/memo23/linkedin-company-profile-scraper)** - Extract company details from About pages
- **[LinkedIn Search Jobs Scraper (Without Cookies)](https://apify.com/memo23/apify-linkedin-search-results-scraper)** - Scrape job listings without authentication
- **[LinkedIn Search Groups Scraper](https://apify.com/memo23/linkedin-search-groups-scraper)** - Find and extract LinkedIn groups
- **[LinkedIn Company Employees/People Scraper](https://apify.com/memo23/linkedin-company-people-scraper)** - Scrape employee profiles from companies
- **[LinkedIn People/Users Profile Scraper](https://apify.com/memo23/linkedin-profile-scraper)** - Extract detailed user profile information

### How it works

This actor is designed to extract comprehensive information from LinkedIn company "About" pages, capturing details such as company overview, industry, company size, headquarters location, specialties, website, and other key company information.

### Features

This actor offers the following features:

- **Multiple Company Scraping**: Capable of scraping data from multiple LinkedIn company About pages. Input can either be formatted as `https://www.linkedin.com/company/{company-name}/about/` or you can directly copy and paste the company's LinkedIn URL.
- **Authentication Requirement**: To enable more extensive scraping capabilities, users are required to log in using cookie-based authentication.
- **Customizable Configuration**: Offers adjustable settings including max items to scrape, scroll delays, and proxy configuration to cater to a wide range of data extraction requirements.
- **Rate Limiting**: Built-in delay mechanisms (minDelay and maxDelay) to avoid getting blocked by LinkedIn.

### How to Use

1. Set Up: Ensure you have an Apify account and access to the Apify platform.
2. Install <a href="https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm">Cookie-Editor (there is option to Export cookies as JSON)</a> or <a href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">EditThisCookie</a> chrome extension.
3. Login to your Linkedin account
4. While you are on Linkedin tab, Click on the extension and export the cookies. Cookies are used to authorize actor with Linkedin.com site. Install any (or all) of the following chrome extensions to copy cookies:
   - <a href="https://chromewebstore.google.com/detail/copy-cookies/jcbpglbplpblnagieibnemmkiamekcdg" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">Copy Cookies</a>
   - <a href="https://chromewebstore.google.com/detail/cookie-editor/hlkenndednhfkekhgcdicdfddnkalmdm" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">Cookie-Editor</a>
   - <a href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" target="_blank" rel="noopener noreferrer nofollow ugc" previewlistener="true">EditThisCookie</a>
5. **Paste the cookies to this actor's Cookie input field. *Note: The minimal cookies required are `li_at` and `JSESSIONID`. The script will not work without both of these cookies present!* If you are only adding the necessary cookies, use the following format:**
   ```json
   [
       "li_at=AQEDAVlyxjIBq-akAAABlg7eWgUAAAGWzWwP51YAihE_vTW5ImH3kVVIsE2U1cZw7N4nscZzYDE-XZfYKCVgtPEI5hlH-c8f02mx-dmHLTq2kDrcwNBAdWw8ZaI3UdyvxFA9Xtq7iaKQaulazJV26FpC",
       "JSESSIONID='ajax:4947018518935300273'"
   ]
   ```
6. Specify the LinkedIn company URL you want to scrape. Input your search URLs in the format `https://www.linkedin.com/company/{company-name}/about/` or search results URLs. You can add multiple URLs for a broader search scope.
7. (Optional) Configure proxy settings for enhanced reliability.
8. Run the actor and obtain the extracted data in your preferred format.
9. Data Collection: The scraper will output data in your chosen format, which can include JSON, HTML, CSV, Excel, or others as supported by Apify.

### Input Data

Here's a simple example of how to set up a search for company About page details in LinkedIn:

```json
{
    "cookies": [
        "li_at=AQEDAVlyxjIBq-akAAABlg7eWgUAAAGWzWwP51YAihE_vTW5ImH3kVVIsE2U1cZw7N4nscZzYDE-XZfYKCVgtPEI5hlH-c8f02mx-dmHLTq2kDrcwNBAdWw8ZaI3UdyvxFA9Xtq7iaKQaulazJV26FpC",
        "JSESSIONID='ajax:4947018518935300273'"
    ],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    },
    "startUrls": [
        {
            "url": "https://www.linkedin.com/search/results/groups/?keywords=ai&origin=SWITCH_SEARCH_VERTICAL&sid=%3B6O"
        },
        {
            "url": "https://www.linkedin.com/company/aalbers-wico",
        },
        {
            "url": "https://www.linkedin.com/company/aanhuis/about/"
        }
    ],
    "maxItems": 100,
    "minDelay": 3,
    "maxDelay": 15
}
```

#### Input Parameters

- **startUrls** (required): Array of URLs to start scraping from. Can be company About pages or search results.
- **cookies** (required): Array of LinkedIn cookies for authentication. Minimum required: `li_at` and `JSESSIONID`.
- **maxItems** (optional): Maximum number of companies to scrape per crawl. Default: 100.
- **minDelay** (optional): Minimum delay in seconds before scrolling. Default: 3.
- **maxDelay** (optional): Maximum delay in seconds before scrolling. Default: 15.
- **proxy** (optional): Proxy configuration for enhanced reliability and to avoid blocking.

### Output Structure

The output data typically includes:

```json
[
    {
        "entityUrn": "urn:li:fsd_company:1678137",
        "url": "https://www.linkedin.com/company/1678137/about/",
        "name": "aalbers|wico",
        "universalName": "aalbers-wico",
        "description": "aalbers|wico is een gerenommeerd familiebedrijf, opgericht in 1966. Op onze locaties in Renswoude beschikken we over ruim 15.000 m2 aan vloeroppervlakte, een gevarieerd en geavanceerd machinepark, een eigen R&D-afdeling en een eigen testcentrum. Onze organisatie biedt werk aan meer dan 100 deskundige vakmensen binnen twee zelfstandig opererende divisies: defence & security en metaal & techniek.",
        "tagline": "Maatwerk in metaalbewerking. Samen voor onze klant",
        "phoneNumber": "0318 - 571 411",
        "phoneExtension": null,
        "websiteUrl": "http://www.aalberswico.nl",
        "callToAction": {
            "displayText": "Contact opnemen",
            "type": "VIEW_CONTACT_INFO",
            "url": "http://www.aalberswico.nl",
            "visible": true
        },
        "employeeCount": 50,
        "employeeCountRange": {
            "start": 51,
            "end": 200,
            "$recipeTypes": [
                "com.linkedin.2e66b46b846d3942f0cac8834cc6cb29"
            ],
            "$type": "com.linkedin.common.IntegerRange"
        },
        "foundedOn": {
            "month": null,
            "year": 1966,
            "day": null,
            "$recipeTypes": [
                "com.linkedin.789e123c8539cf8fcb54fb29c4287d16"
            ],
            "$type": "com.linkedin.common.Date"
        },
        "specialities": [
            "Bouwkundige beveiliging",
            "Structural security",
            "Metaalbewerking; Metaalproducten; Metalen constructies; Complete machines",
            "Metalwork; Metal products; Metal constructions; Complete machines"
        ],
        "headquarter": {
            "description": "Renswoude The Netherlands",
            "address": {
                "country": "NL",
                "geographicArea": null,
                "city": "Renswoude",
                "postalCode": null,
                "line2": null,
                "$recipeTypes": [
                    "com.linkedin.7a71636b23bb6b03997b4d045d0bf1d3"
                ],
                "line1": "Molenstraat 18",
                "$type": "com.linkedin.common.Address"
            },
            "headquarter": true
        },
        "industries": []
    }
    ...
]
```

#### Output Fields Explanation

- **entityUrn**: LinkedIn's unique identifier for the company entity
- **url**: Direct URL to the company's About page on LinkedIn
- **name**: Official company name as displayed on LinkedIn
- **universalName**: URL-friendly version of the company name used in LinkedIn URLs
- **description**: Full company description/overview text from the About section
- **tagline**: Company's tagline or slogan
- **phoneNumber**: Company's contact phone number
- **phoneExtension**: Phone extension if available (can be null)
- **websiteUrl**: Company's official website URL
- **callToAction**: Object containing call-to-action button information
  - **displayText**: Text displayed on the CTA button
  - **type**: Type of action (e.g., VIEW\_CONTACT\_INFO)
  - **url**: URL the CTA button links to
  - **visible**: Whether the CTA is visible to users
- **employeeCount**: Approximate number of employees
- **employeeCountRange**: Object with employee count range
  - **start**: Lower bound of employee count range
  - **end**: Upper bound of employee count range
- **foundedOn**: Object containing company founding date
  - **year**: Year the company was founded
  - **month**: Month founded (can be null if not specified)
  - **day**: Day founded (can be null if not specified)
- **specialities**: Array of company specialties and focus areas
- **headquarter**: Object containing headquarters information
  - **description**: Text description of headquarters location
  - **address**: Detailed address object
    - **country**: Country code (e.g., "NL" for Netherlands)
    - **city**: City name
    - **line1**: Primary address line (street and number)
    - **line2**: Secondary address line (can be null)
    - **postalCode**: Postal/ZIP code (can be null)
    - **geographicArea**: State/province/region (can be null)
  - **headquarter**: Boolean indicating if this is the headquarters location
- **industries**: Array of industries the company operates in

### Support

- For issues or feature requests, please use the [Issues](https://console.apify.com/actors/vOp9KqY3m59PdI4ES/issues) section of this actor.
- If you need customization or have questions, feel free to contact the author:
  - Author's website: <https://muhamed-didovic.github.io/>
  - Email: <muhamed.didovic@gmail.com>

### Additional Services

- Request customization or whole dataset: <muhamed.didovic@gmail.com>
- If you need anything else scraped, or this actor customized, email: <muhamed.didovic@gmail.com>
- For API services of this scraper (no Apify fee, just usage fee for the API), contact: <muhamed.didovic@gmail.com>

### 🤖 For AI Agents & LLM Apps

Compact reference for AI agents calling this actor via the [Apify MCP server](https://mcp.apify.com) or the Apify API (actor: `memo23/linkedin-company-profile-scraper`).

**Purpose:** Extract company profile data from LinkedIn company About pages (linkedin.com/company/{name}/about/) using your own LinkedIn session cookies — one dataset row per company.

**Minimal input:**

```json
{
    "startUrls": [{ "url": "https://www.linkedin.com/company/aalbers-wico/about/" }],
    "cookies": [
        "li_at=YOUR_LI_AT_COOKIE",
        "JSESSIONID=\"ajax:YOUR_JSESSIONID\""
    ],
    "maxItems": 20,
    "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

**Output:** one dataset row per company — entityUrn, url, name, universalName, description, tagline, phoneNumber, phoneExtension, websiteUrl, callToAction {displayText, type, url, visible}, employeeCount, employeeCountRange {start, end}, foundedOn {year, month, day}, specialities, headquarter {description, address {country, city, line1, line2, postalCode, geographicArea}, headquarter}, industries.

**Behaviors an agent should know:**

- Requires valid LinkedIn cookies — both li\_at and JSESSIONID must be present, or the run returns no data. Use fresh cookies each run.
- startUrls accept company URLs (…/company/{name}/ or …/company/{name}/about/) and LinkedIn search-results URLs.
- Set maxItems to cap; default is 100 companies per run.
- minDelay / maxDelay (seconds) throttle scrolling to reduce block risk.
- Residential proxy (useApifyProxy + RESIDENTIAL) is recommended for stable access.
- Billing: Pay-per-event billing — see the Pricing tab on the actor page.

### ⚠️ Disclaimer

This Actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation or its parent, Microsoft Corporation. All trademarks mentioned are the property of their respective owners.

The scraper reads company About pages using LinkedIn session cookies that you supply from your own account; it accesses only pages your logged-in account can already view and does not bypass authentication, defeat access controls, or reach private or restricted data. You are responsible for ensuring your use complies with LinkedIn's User Agreement and Terms of Service, applicable data-protection law (GDPR, CCPA, etc.), and any contractual obligations of your own organization.

### SEO Keywords

linkedin company scraper, scrape linkedin company, linkedin about page scraper, linkedin company API, Apify linkedin, company data scraper, b2b lead generation data, company enrichment data, firmographic data export, sales prospecting scraper, linkedin company details, employee count data, company profile extraction, market research data, lead-gen intelligence, business contact data

# Actor input Schema

## `startUrls` (type: `array`):

URLs to start with.

## `minDelay` (type: `integer`):

Minimum delay to wait before scrolling to the bottom of the page. This is useful to avoid getting blocked by LinkedIn. The delay is in seconds.

## `maxDelay` (type: `integer`):

Maximum delay to wait before scrolling to the bottom of the page. This is useful to avoid getting blocked by LinkedIn. The delay is in seconds.

## `cookies` (type: `array`):

<p>Cookie used to authorize actor with dite. Install <a rel="noopener noreferrer nofollow" target="_blank" href="https://chrome.google.com/webstore/detail/editthiscookie/fngmhnnpilhplaeedifhccceomclgfbg" previewlistener="true">EditThisCookie</a> chrome extension. Login to your account. Click on the extension and export the cookies from the site. Insert the contents here</p>
## `enrichEmails` (type: `boolean`):

When on, each company is enriched to attach contact\_email, contact\_website and an emailEnrichment object. Adds time per row and is charged per enriched record.

## `proxy` (type: `object`):

Specifies proxy servers that will be used by the scraper in order to hide its origin.<br><br>For details, see <a href='https://apify.com/apify/web-scraper#proxy-configuration' target='_blank' rel='noopener'>Proxy configuration</a> in README.

## Actor input object example

```json
{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/company/aalbers-wico"
    }
  ],
  "minDelay": 3,
  "maxDelay": 15,
  "cookies": [],
  "enrichEmails": false,
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# 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 = {
    "startUrls": [
        {
            "url": "https://www.linkedin.com/company/aalbers-wico"
        }
    ],
    "cookies": [],
    "proxy": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("memo23/linkedin-company-profile-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 = {
    "startUrls": [{ "url": "https://www.linkedin.com/company/aalbers-wico" }],
    "cookies": [],
    "proxy": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("memo23/linkedin-company-profile-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 '{
  "startUrls": [
    {
      "url": "https://www.linkedin.com/company/aalbers-wico"
    }
  ],
  "cookies": [],
  "proxy": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call memo23/linkedin-company-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,memo23/linkedin-company-profile-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/ZtdXyb9PAdYL5SbDq/builds/ZQKscj9BEYJokQl75/openapi.json
