# LinkedIn Company Employee Scraper (`khadinakbar/linkedin-company-employee-scraper`) Actor

Scrape visible LinkedIn company employees from company URLs. Provider-first with ScrapeCreators and SociaVault, then optional cookie and public-search fallbacks. Returns profile URLs, names, titles, source, and confidence. $0.015 per row.

- **URL**: https://apify.com/khadinakbar/linkedin-company-employee-scraper.md
- **Developed by:** [Khadin Akbar](https://apify.com/khadinakbar) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 5 total users, 4 monthly users, 50.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $15.00 / 1,000 employee profile scrapeds

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are a software tools running on the Apify platform, for all kinds of web data extraction and automation use cases.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

In JavaScript/TypeScript projects, use official [JavaScript/TypeScript client](https://docs.apify.com/api/client/js.md):

```bash
npm install apify-client
```

In Python projects, use official [Python client library](https://docs.apify.com/api/client/python.md):

```bash
pip install apify-client
```

In shell scripts, use [Apify CLI](https://docs.apify.com/cli/docs.md):

````bash
# MacOS / Linux
curl -fsSL https://apify.com/install-cli.sh | bash
# Windows
irm https://apify.com/install-cli.ps1 | iex
```bash

In AI frameworks, you might use the [Apify MCP server](https://docs.apify.com/platform/integrations/mcp.md).

If your project is in a different language, use the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).


# README

## LinkedIn Company Employee Scraper

Scrape visible LinkedIn company employees from one or more LinkedIn company URLs. This Apify actor returns clean employee profile rows with profile URLs, visible names, headlines, titles, company metadata, source confidence, and filter matches.

The actor is built for account mapping, recruiting research, lead sourcing, enrichment pipelines, and AI-agent workflows that need structured LinkedIn profile URLs from company pages.

In `auto` mode, the data-source chain is:

1. ScrapeCreators LinkedIn company API
2. SociaVault LinkedIn company API
3. Authenticated LinkedIn `/people/` tab when `LINKEDIN_COOKIES` is configured
4. Public search discovery as a last-resort filler path

### What It Does

- Normalizes LinkedIn company URLs such as `https://www.linkedin.com/company/apify/posts/`
- Extracts visible employees from ScrapeCreators and SociaVault company-page APIs
- Uses SociaVault as a secondary provider when ScrapeCreators does not fill the requested cap
- Continues with the LinkedIn company `/people/` tab when cookies are configured and more rows are needed
- Falls back to public search discovery only after provider and cookie-backed paths cannot fill the cap
- Supports optional title, location, and search-query filters
- Deduplicates profile URLs across companies and providers
- Emits `source` and `confidence` fields so agents and downstream systems can decide how to handle each row

### When Agents Should Use This Actor

Use this actor when an automation or MCP client needs visible employee profile URLs for a known LinkedIn company page. It is a good fit for account research, CRM enrichment preparation, recruiting lists, competitor mapping, partner discovery, or creating seed datasets for profile enrichment.

Call this actor when the input is one or more LinkedIn company URLs and the desired output is a list of LinkedIn profile URLs with names, titles, snippets, company metadata, and source quality signals.

Do not call this actor when the task requires private LinkedIn data, guaranteed complete company rosters, email addresses, phone numbers, personal contact enrichment, or profile details that are not visible from the selected source path. For emails or deep profile enrichment, use this actor first to collect `profileUrl` values, then pass those URLs to a separate compliant enrichment workflow.

### Input

```json
{
  "companyUrls": ["https://www.linkedin.com/company/apify/"],
  "maxEmployees": 100,
  "maxEmployeesPerCompany": 100,
  "mode": "auto",
  "jobTitles": ["Engineer", "Product"],
  "locations": ["Prague"],
  "includeProfileDetails": false
}
````

### Input Fields

| Field | Type | Description |
| --- | --- | --- |
| `companyUrls` | string\[] | LinkedIn company page URLs to process. Required. |
| `maxEmployees` | integer | Global cap across the whole run. |
| `maxEmployeesPerCompany` | integer | Per-company cap for balanced multi-company runs. |
| `mode` | string | `auto`, `publicSearch`, or `linkedinPeopleTab`. |
| `searchQuery` | string | Optional extra words for public search discovery. |
| `jobTitles` | string\[] | Optional title keywords used to filter or boost visible matches. |
| `locations` | string\[] | Optional location keywords used to filter or boost visible matches. |
| `includeProfileDetails` | boolean | Authenticated mode only. Visits discovered profiles for more visible details. |
| `maxConcurrency` | integer | Number of companies to process in parallel. |
| `proxyConfiguration` | object | Apify proxy settings. Residential proxies are recommended for LinkedIn fallback paths. |

### Modes

`auto` is the recommended mode. It tries ScrapeCreators first, SociaVault second, authenticated LinkedIn people-tab scraping when `LINKEDIN_COOKIES` exists, and public search last.

`linkedinPeopleTab` only uses LinkedIn company `/people/` pages. This mode requires the `LINKEDIN_COOKIES` secret environment variable and is more sensitive to LinkedIn limits.

`publicSearch` never opens LinkedIn. It queries public search engines for LinkedIn profile URLs related to the company. Use it only when provider and cookie-backed paths are not available, because narrow filters or weak indexing can return zero rows.

### Provider API Keys

Set provider keys as Apify secret environment variables:

```text
SCRAPECREATORS_API_KEY=...
SOCIAVAULT_API_KEY=...
```

`SOCIALVAULT_API_KEY` is also accepted as a compatibility alias. Provider keys are intentionally not accepted in actor input because run input can be visible in Console history.

### LinkedIn Cookies

Set `LINKEDIN_COOKIES` in Apify Console as a secret environment variable only if you want the owned LinkedIn people-tab fallback path.

Accepted cookie string format:

```text
li_at=...; JSESSIONID=...; bcookie=...
```

Accepted browser-exported JSON format:

```json
[
  {
    "name": "li_at",
    "value": "...",
    "domain": ".linkedin.com",
    "path": "/",
    "secure": true
  }
]
```

Credentials are not accepted in actor input. Keep cookies in secret environment variables.

### Output Fields

| Field | Type | Description |
| --- | --- | --- |
| `companyName` | string | Company name returned by the provider or derived from the LinkedIn slug. |
| `companySlug` | string | LinkedIn company slug, useful for dedupe and joins. |
| `companyUrl` | string | Normalized LinkedIn company URL. |
| `employeeName` | string/null | Visible employee name when available. |
| `profileUrl` | string | Normalized LinkedIn profile URL. Use this as the main join key. |
| `headline` | string/null | Visible LinkedIn headline, role text, or provider title. |
| `title` | string/null | Best-effort job title when the source exposes it separately. |
| `location` | string/null | Best-effort location when the source exposes it separately. |
| `snippet` | string/null | Source text used to build the row. |
| `source` | string | Extraction path: `scrapecreators_company`, `sociavault_company`, `linkedin_people_tab`, `public_search`, or `profile_detail`. |
| `confidence` | string | `high`, `medium`, or `low`, based on source and filter match quality. |
| `matchedFilters` | string\[] | Input filters found in the visible employee text. |
| `scrapedAt` | string | ISO timestamp for the emitted row. |

### MCP Output Contract

Agents should treat the default dataset as the primary result. Each item is one unique LinkedIn employee profile row.

Use `profileUrl` as the stable identifier. Use `companySlug` for grouping, dedupe, and joins back to the original target account. Use `source` and `confidence` before taking automated action: provider and cookie-backed rows are usually stronger than public-search rows, especially when title and location filters are narrow.

The actor also writes `RUN_SUMMARY` to the key-value store. Agents should read it when they need provider health, fallback behavior, warning counts, duplicate counts, or row counts by source.

### Run Summary

`RUN_SUMMARY` includes:

- companies requested and processed
- rows from ScrapeCreators
- rows from SociaVault
- rows from LinkedIn people-tab fallback
- rows from public search fallback
- duplicate profile count
- profile-detail visits
- warnings from provider or fallback paths

This makes the actor easier to monitor in production workflows. A run can succeed with fewer rows than requested when available visible data is exhausted or filters are too narrow.

### Reliability Strategy

The actor is designed to avoid brittle single-source scraping. ScrapeCreators is used first because it gives the lowest-cost provider path for company-page employee data. SociaVault is used second as redundancy. If provider rows do not fill the requested cap, the actor can continue with owned fallback paths.

Every row includes `source` and `confidence`, so downstream workflows can choose whether to auto-enrich, review manually, or discard lower-confidence rows. Public search is intentionally treated as a fallback, not as proof of complete employee coverage.

### Margin And Pricing

Pay-per-event schema:

- `$0.00005` actor start
- `$0.015` per unique employee profile row

The row price is set for provider-safe economics. ScrapeCreators and SociaVault charge per provider request, not per final employee row, so larger company runs have stronger margins. The price also protects small runs: even if both providers are probed before one paid row is returned, the actor is priced to keep more than 60% gross margin after provider costs and Apify's marketplace commission.

Pay-per-usage can be enabled alongside PPE in Apify Console. Usage billing helps heavy users with larger runs, while PPE keeps agent and workflow costs predictable.

### Example: Account Mapping

```json
{
  "companyUrls": [
    "https://www.linkedin.com/company/shopify/",
    "https://www.linkedin.com/company/openai/"
  ],
  "mode": "auto",
  "maxEmployees": 25,
  "maxEmployeesPerCompany": 15,
  "jobTitles": ["Product", "Engineering", "Sales"],
  "locations": []
}
```

### Example: Public Search Only

```json
{
  "companyUrls": ["https://www.linkedin.com/company/apify/"],
  "mode": "publicSearch",
  "maxEmployees": 10,
  "searchQuery": "engineer data scraping",
  "jobTitles": ["Engineer"]
}
```

Public search is a last-resort mode. It depends on search-engine indexing and may return zero rows for narrow filters. For production workflows, use `auto` so provider APIs are tried first.

### FAQ

#### Does this return every employee at a company?

No. It returns visible employees from provider company-page data and optional fallback discovery. Complete LinkedIn employee directories depend on login state, account limits, geography, visibility settings, and LinkedIn product changes.

#### Do ScrapeCreators or SociaVault use my LinkedIn cookies?

No. Both providers are API-based public-data providers. They do not accept LinkedIn login cookies. Cookies are only used by the actor's owned LinkedIn `/people/` fallback path.

#### Why did a run return fewer rows than `maxEmployees`?

The cap is a maximum, not a guarantee. The actor stops when available visible rows are exhausted, filters remove candidates, providers return no employees for that company, or fallback discovery cannot find confident profile URLs.

#### How should I use the results downstream?

Use `profileUrl` as the stable join key. Use `source` and `confidence` to decide whether a row should be auto-enriched or reviewed first. If you need emails, feed the profile URLs into a separate compliant enrichment workflow.

### Legal And Responsible Use

Only scrape and process data you are allowed to use. Respect LinkedIn's terms, privacy laws, platform limits, and applicable outreach rules. This actor is intended for public business research, recruiting research, enrichment workflows, and account mapping. It should not be used for spam, harassment, discrimination, or privacy-invasive profiling.

# Actor input Schema

## `companyUrls` (type: `array`):

LinkedIn company page URLs to scrape. Pass canonical company pages or company subpages, for example https://www.linkedin.com/company/apify/ or https://www.linkedin.com/company/apify/posts/. The actor normalizes each target to /company/<slug>/ and deduplicates repeated companies. Use this field when an agent already knows the target accounts.

## `maxEmployees` (type: `integer`):

Global cap across all companies in the run. The actor stops after this many unique employee profile rows have been pushed to the dataset. This is a maximum, not a guarantee, because LinkedIn and provider sources may expose fewer visible employees. Use a lower value for fast agent calls and a higher value for bulk account mapping.

## `maxEmployeesPerCompany` (type: `integer`):

Per-company cap for each LinkedIn company URL. This keeps multi-company runs balanced and prevents one large company from consuming the whole global cap. Use it when an agent is comparing several accounts in one run. The actor can still return fewer rows when visible data is limited.

## `mode` (type: `string`):

Choose how the actor discovers employee profile URLs. Use auto for production workflows because it tries ScrapeCreators first, SociaVault second, authenticated LinkedIn people-tab scraping when LINKEDIN\_COOKIES is set, and public search last. Use publicSearch only when provider and cookie-backed paths are unavailable. Use linkedinPeopleTab only when LINKEDIN\_COOKIES is configured and you specifically want the company people-tab path.

## `searchQuery` (type: `string`):

Optional words to add to public-search fallback queries. Use this to guide discovery toward roles, teams, seniority, or functions such as founder, sales, security, recruiter, or engineering. This field mainly affects publicSearch mode and the final public-search fallback in auto mode. Leave it blank for broader provider-first company discovery.

## `jobTitles` (type: `array`):

Optional current-title keywords used to filter or boost visible matches. Examples include CTO, Account Executive, Recruiter, Engineer, Product Manager, or Founder. Rows that match these terms list them in matchedFilters. Use this when an agent needs a role-focused employee list instead of a broad company sample.

## `locations` (type: `array`):

Optional location keywords used to filter or boost visible matches. Examples include San Francisco, London, Germany, Remote, or Prague. Location availability depends on the source and may be missing on provider rows. Use this for geo-focused research, but keep filters broad when recall matters.

## `includeProfileDetails` (type: `boolean`):

Authenticated LinkedIn fallback only. When enabled, the actor visits discovered profile pages to improve visible name, headline, and location extraction. This is slower, uses more compute, and is more likely to hit LinkedIn rate limits. Keep this off for fast MCP calls unless profile-detail quality matters more than speed.

## `maxConcurrency` (type: `integer`):

How many companies to process in parallel. Keep this low when using LinkedIn cookies to reduce rate-limit risk and account pressure. Provider-first runs can usually tolerate the default. For AI-agent calls, the default balances speed and reliability.

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

Proxy settings for LinkedIn fallback and public search paths. The default uses Apify Residential proxy, which is recommended for reliability. Provider API calls do not need browser proxying, but fallback scraping does. Keep residential proxies enabled for production runs.

## Actor input object example

```json
{
  "companyUrls": [
    "https://www.linkedin.com/company/apify/"
  ],
  "maxEmployees": 100,
  "maxEmployeesPerCompany": 100,
  "mode": "auto",
  "jobTitles": [],
  "locations": [],
  "includeProfileDetails": false,
  "maxConcurrency": 2,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# Actor output Schema

## `dataset` (type: `string`):

No description

## `runSummary` (type: `string`):

No description

# 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 = {
    "companyUrls": [
        "https://www.linkedin.com/company/apify/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("khadinakbar/linkedin-company-employee-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 = {
    "companyUrls": ["https://www.linkedin.com/company/apify/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("khadinakbar/linkedin-company-employee-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print("💾 Check your data here: https://console.apify.com/storage/datasets/" + run["defaultDatasetId"])
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{
  "companyUrls": [
    "https://www.linkedin.com/company/apify/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call khadinakbar/linkedin-company-employee-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "command": "npx",
            "args": [
                "mcp-remote",
                "https://mcp.apify.com/?tools=khadinakbar/linkedin-company-employee-scraper",
                "--header",
                "Authorization: Bearer <YOUR_API_TOKEN>"
            ]
        }
    }
}

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Company Employee Scraper",
        "description": "Scrape visible LinkedIn company employees from company URLs. Provider-first with ScrapeCreators and SociaVault, then optional cookie and public-search fallbacks. Returns profile URLs, names, titles, source, and confidence. $0.015 per row.",
        "version": "0.2",
        "x-build-id": "uIkzfA2q1kgCVc34W"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/khadinakbar~linkedin-company-employee-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-khadinakbar-linkedin-company-employee-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for its completion, and returns Actor's dataset items in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        },
        "/acts/khadinakbar~linkedin-company-employee-scraper/runs": {
            "post": {
                "operationId": "runs-sync-khadinakbar-linkedin-company-employee-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor and returns information about the initiated run in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK",
                        "content": {
                            "application/json": {
                                "schema": {
                                    "$ref": "#/components/schemas/runsResponseSchema"
                                }
                            }
                        }
                    }
                }
            }
        },
        "/acts/khadinakbar~linkedin-company-employee-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-khadinakbar-linkedin-company-employee-scraper",
                "x-openai-isConsequential": false,
                "summary": "Executes an Actor, waits for completion, and returns the OUTPUT from Key-value store in response.",
                "tags": [
                    "Run Actor"
                ],
                "requestBody": {
                    "required": true,
                    "content": {
                        "application/json": {
                            "schema": {
                                "$ref": "#/components/schemas/inputSchema"
                            }
                        }
                    }
                },
                "parameters": [
                    {
                        "name": "token",
                        "in": "query",
                        "required": true,
                        "schema": {
                            "type": "string"
                        },
                        "description": "Enter your Apify token here"
                    }
                ],
                "responses": {
                    "200": {
                        "description": "OK"
                    }
                }
            }
        }
    },
    "components": {
        "schemas": {
            "inputSchema": {
                "type": "object",
                "required": [
                    "companyUrls"
                ],
                "properties": {
                    "companyUrls": {
                        "title": "LinkedIn company URLs",
                        "type": "array",
                        "description": "LinkedIn company page URLs to scrape. Pass canonical company pages or company subpages, for example https://www.linkedin.com/company/apify/ or https://www.linkedin.com/company/apify/posts/. The actor normalizes each target to /company/<slug>/ and deduplicates repeated companies. Use this field when an agent already knows the target accounts.",
                        "items": {
                            "type": "string",
                            "pattern": "^https?://(www\\.)?linkedin\\.com/company/[^\\s/]+.*$"
                        },
                        "default": []
                    },
                    "maxEmployees": {
                        "title": "Max employees",
                        "minimum": 1,
                        "maximum": 2500,
                        "type": "integer",
                        "description": "Global cap across all companies in the run. The actor stops after this many unique employee profile rows have been pushed to the dataset. This is a maximum, not a guarantee, because LinkedIn and provider sources may expose fewer visible employees. Use a lower value for fast agent calls and a higher value for bulk account mapping.",
                        "default": 100
                    },
                    "maxEmployeesPerCompany": {
                        "title": "Max employees per company",
                        "minimum": 1,
                        "maximum": 1000,
                        "type": "integer",
                        "description": "Per-company cap for each LinkedIn company URL. This keeps multi-company runs balanced and prevents one large company from consuming the whole global cap. Use it when an agent is comparing several accounts in one run. The actor can still return fewer rows when visible data is limited.",
                        "default": 100
                    },
                    "mode": {
                        "title": "Scrape mode",
                        "enum": [
                            "auto",
                            "publicSearch",
                            "linkedinPeopleTab"
                        ],
                        "type": "string",
                        "description": "Choose how the actor discovers employee profile URLs. Use auto for production workflows because it tries ScrapeCreators first, SociaVault second, authenticated LinkedIn people-tab scraping when LINKEDIN_COOKIES is set, and public search last. Use publicSearch only when provider and cookie-backed paths are unavailable. Use linkedinPeopleTab only when LINKEDIN_COOKIES is configured and you specifically want the company people-tab path.",
                        "default": "auto"
                    },
                    "searchQuery": {
                        "title": "Search query",
                        "type": "string",
                        "description": "Optional words to add to public-search fallback queries. Use this to guide discovery toward roles, teams, seniority, or functions such as founder, sales, security, recruiter, or engineering. This field mainly affects publicSearch mode and the final public-search fallback in auto mode. Leave it blank for broader provider-first company discovery."
                    },
                    "jobTitles": {
                        "title": "Job title filters",
                        "type": "array",
                        "description": "Optional current-title keywords used to filter or boost visible matches. Examples include CTO, Account Executive, Recruiter, Engineer, Product Manager, or Founder. Rows that match these terms list them in matchedFilters. Use this when an agent needs a role-focused employee list instead of a broad company sample.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "locations": {
                        "title": "Location filters",
                        "type": "array",
                        "description": "Optional location keywords used to filter or boost visible matches. Examples include San Francisco, London, Germany, Remote, or Prague. Location availability depends on the source and may be missing on provider rows. Use this for geo-focused research, but keep filters broad when recall matters.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "includeProfileDetails": {
                        "title": "Visit profile detail pages",
                        "type": "boolean",
                        "description": "Authenticated LinkedIn fallback only. When enabled, the actor visits discovered profile pages to improve visible name, headline, and location extraction. This is slower, uses more compute, and is more likely to hit LinkedIn rate limits. Keep this off for fast MCP calls unless profile-detail quality matters more than speed.",
                        "default": false
                    },
                    "maxConcurrency": {
                        "title": "Max concurrency",
                        "minimum": 1,
                        "maximum": 5,
                        "type": "integer",
                        "description": "How many companies to process in parallel. Keep this low when using LinkedIn cookies to reduce rate-limit risk and account pressure. Provider-first runs can usually tolerate the default. For AI-agent calls, the default balances speed and reliability.",
                        "default": 2
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings for LinkedIn fallback and public search paths. The default uses Apify Residential proxy, which is recommended for reliability. Provider API calls do not need browser proxying, but fallback scraping does. Keep residential proxies enabled for production runs.",
                        "default": {
                            "useApifyProxy": true,
                            "apifyProxyGroups": [
                                "RESIDENTIAL"
                            ]
                        }
                    }
                }
            },
            "runsResponseSchema": {
                "type": "object",
                "properties": {
                    "data": {
                        "type": "object",
                        "properties": {
                            "id": {
                                "type": "string"
                            },
                            "actId": {
                                "type": "string"
                            },
                            "userId": {
                                "type": "string"
                            },
                            "startedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "finishedAt": {
                                "type": "string",
                                "format": "date-time",
                                "example": "2025-01-08T00:00:00.000Z"
                            },
                            "status": {
                                "type": "string",
                                "example": "READY"
                            },
                            "meta": {
                                "type": "object",
                                "properties": {
                                    "origin": {
                                        "type": "string",
                                        "example": "API"
                                    },
                                    "userAgent": {
                                        "type": "string"
                                    }
                                }
                            },
                            "stats": {
                                "type": "object",
                                "properties": {
                                    "inputBodyLen": {
                                        "type": "integer",
                                        "example": 2000
                                    },
                                    "rebootCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "restartCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "resurrectCount": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "computeUnits": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "options": {
                                "type": "object",
                                "properties": {
                                    "build": {
                                        "type": "string",
                                        "example": "latest"
                                    },
                                    "timeoutSecs": {
                                        "type": "integer",
                                        "example": 300
                                    },
                                    "memoryMbytes": {
                                        "type": "integer",
                                        "example": 1024
                                    },
                                    "diskMbytes": {
                                        "type": "integer",
                                        "example": 2048
                                    }
                                }
                            },
                            "buildId": {
                                "type": "string"
                            },
                            "defaultKeyValueStoreId": {
                                "type": "string"
                            },
                            "defaultDatasetId": {
                                "type": "string"
                            },
                            "defaultRequestQueueId": {
                                "type": "string"
                            },
                            "buildNumber": {
                                "type": "string",
                                "example": "1.0.0"
                            },
                            "containerUrl": {
                                "type": "string"
                            },
                            "usage": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "integer",
                                        "example": 1
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            },
                            "usageTotalUsd": {
                                "type": "number",
                                "example": 0.00005
                            },
                            "usageUsd": {
                                "type": "object",
                                "properties": {
                                    "ACTOR_COMPUTE_UNITS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATASET_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "KEY_VALUE_STORE_WRITES": {
                                        "type": "number",
                                        "example": 0.00005
                                    },
                                    "KEY_VALUE_STORE_LISTS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_READS": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "REQUEST_QUEUE_WRITES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_INTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "DATA_TRANSFER_EXTERNAL_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_RESIDENTIAL_TRANSFER_GBYTES": {
                                        "type": "integer",
                                        "example": 0
                                    },
                                    "PROXY_SERPS": {
                                        "type": "integer",
                                        "example": 0
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
