# LinkedIn Profile Scraper Ultra Pro (`qaseemiqbal/linkedin-profile-scraper-ultra-pro`) Actor

Clean, validate, deduplicate, and enrich public LinkedIn profile URLs into CRM-ready records. No LinkedIn cookies or login required.

- **URL**: https://apify.com/qaseemiqbal/linkedin-profile-scraper-ultra-pro.md
- **Developed by:** [Muhammad Qaseem Iqbal](https://apify.com/qaseemiqbal) (community)
- **Categories:** Lead generation
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 profile record createds

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/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 Profile Scraper Ultra Pro 🚀

Turn LinkedIn profile URLs into clean, organized profile records that are easy to export, filter, and send to your sales, recruiting, research, or CRM workflow.

This Actor is built for bulk LinkedIn profile URL processing without LinkedIn cookies or passwords. Paste a list of public LinkedIn profile URLs, choose how much detail you want, and get structured results back in Apify as JSON, CSV, Excel, or through the API.

By default, it runs in the cheapest mode available. That mode validates and normalizes profile URLs, removes duplicates, creates useful identifier-level records, and keeps output small without opening LinkedIn profile pages or using contact enrichment providers.

### 🎯 What This Actor Is Good For

- Cleaning and standardizing LinkedIn profile URL lists
- Preparing lead lists for CRMs such as HubSpot, Salesforce, Pipedrive, Clay, Airtable, or CSV imports
- Checking which URLs are valid LinkedIn profile URLs
- Removing duplicates before enrichment or outreach
- Creating lightweight profile records at very low compute cost
- Enriching profiles with public data when available
- Adding email or phone data through your own approved enrichment providers
- Scoring profiles against your target job titles, locations, or industries

### ✨ Key Benefits

- No LinkedIn login, cookies, or browser session required
- Lowest-cost mode is enabled by default
- Bulk processing for one profile or large URL lists
- Clean dataset rows with success, failed, and skipped statuses
- Optional public profile lookup for richer no-cookie data
- Optional external provider mode for production enrichment workflows
- Optional email and phone enrichment with consent controls
- CRM-friendly output formats and field presets
- Suppression lists for people, domains, or LinkedIn URLs you do not want included
- Run summaries saved automatically for quick review

### 🚀 Quick Start

1. Open the Actor in Apify Console.
2. Paste LinkedIn profile URLs into the **LinkedIn profile URLs** field.
3. Leave the default settings on for the cheapest run.
4. Click **Start**.
5. Download the results from the dataset as CSV, Excel, JSON, or connect them to your next workflow.

For the lowest-cost run, you only need this input:

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/example-profile"
  ]
}
````

### 🧭 Choose Your Data Level

| Mode | Best for | Cost level | What it does |
| --- | --- | --- | --- |
| `identifier_only` | Cleaning, deduping, validating, and CRM preparation | Lowest | Builds a profile record from the LinkedIn public identifier without making profile page requests |
| `public` | Getting richer public information when available | Higher | Tries to read public no-cookie profile metadata from LinkedIn pages |
| `external` | Production enrichment with your own provider | Depends on provider | Sends the normalized LinkedIn URL to your configured profile provider |
| `mock` | Testing workflows before spending budget | Very low | Creates predictable sample data from the profile URL |

The default is `identifier_only` because it is the most cost-efficient option.

### 📝 Input Examples

#### 💸 Cheapest Profile Cleanup

Use this when you want clean, normalized LinkedIn profile records at the lowest possible cost.

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates",
    "https://www.linkedin.com/in/example-profile"
  ],
  "costOptimizationMode": true
}
```

#### 🔎 Richer Public Profile Data

Use this when you want the Actor to try public no-cookie profile extraction. Public data may be incomplete or unavailable depending on LinkedIn access and profile visibility.

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates"
  ],
  "costOptimizationMode": false,
  "profileResolverMode": "public",
  "outputFormatMode": "nested_and_flat",
  "maxRetries": 2
}
```

#### 📧 Email Enrichment

Use this when you have an approved email provider endpoint and a lawful basis to process contact data.

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/example-profile"
  ],
  "includeEmails": true,
  "contactEnrichmentConsent": true,
  "emailProviderUrl": "https://your-provider.example/email",
  "providerApiKey": "YOUR_SECRET_KEY"
}
```

#### 📊 CRM-Friendly Export

Use this when your next step is importing the results into a CRM or spreadsheet.

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/example-profile"
  ],
  "outputFormatMode": "crm_flat",
  "crmPreset": "hubspot"
}
```

### ⚙️ Main Input Options

| Setting | What it means | Default |
| --- | --- | --- |
| `profileUrls` | The LinkedIn profile URLs you want to process. Use `/in/` profile URLs, not company pages or search pages. | Required |
| `costOptimizationMode` | Keeps the run cheap by using compact output, no retries, short timeouts, and no duplicate skipped rows unless changed. | `true` |
| `profileResolverMode` | Chooses how profile data is created: cheapest identifier-only, public page lookup, mock, or external provider. | `identifier_only` |
| `outputFormatMode` | Controls the shape of the dataset rows: compact, flat, nested, nested and flat, or CRM flat. | `compact` |
| `crmPreset` | Adds CRM-friendly naming for tools such as HubSpot, Salesforce, Pipedrive, Clay, Airtable, or CSV. | `generic` |
| `includeEmails` | Attempts email enrichment through your configured provider. Requires consent to be enabled. | `false` |
| `includePhones` | Attempts phone enrichment through your configured provider. Requires consent to be enabled. | `false` |
| `contactEnrichmentConsent` | Confirms that you have a lawful basis to process contact data. | `false` |
| `targetJobTitles`, `targetLocations`, `targetIndustries` | Used for profile matching and lead scoring. | Empty |
| `suppressionEmails`, `suppressionDomains`, `suppressionLinkedinUrls` | Excludes people, domains, or LinkedIn URLs you do not want in the results. | Empty |

### 📦 Output Example

Each input URL becomes a dataset row. A successful low-cost record can look like this:

```json
{
  "inputUrl": "https://www.linkedin.com/in/jane-doe",
  "normalizedLinkedinUrl": "https://www.linkedin.com/in/jane-doe",
  "succeeded": true,
  "status": "success",
  "firstName": "Jane",
  "lastName": "Doe",
  "fullName": "Jane Doe",
  "headline": "LinkedIn profile identifier",
  "currentTitle": null,
  "currentCompanyName": null,
  "email": null,
  "phone": null,
  "leadScore": 7,
  "scrapedAt": "2026-06-14T12:00:00.000Z"
}
```

If an input is not a LinkedIn profile URL, the Actor returns a clear failed record:

```json
{
  "inputUrl": "https://www.linkedin.com/company/apify",
  "normalizedLinkedinUrl": null,
  "succeeded": false,
  "status": "failed",
  "errorCode": "NOT_PROFILE_URL",
  "errorMessage": "URL is not a LinkedIn profile URL.",
  "retryable": false,
  "attempts": 0,
  "scrapedAt": "2026-06-14T12:00:00.000Z"
}
```

### 🧾 Common Output Fields

| Field | Meaning |
| --- | --- |
| `inputUrl` | The URL you provided |
| `normalizedLinkedinUrl` | The cleaned LinkedIn profile URL |
| `status` | `success`, `failed`, or `skipped` |
| `succeeded` | Whether the Actor created a usable result |
| `fullName` | The person's name when available or inferred from the profile identifier |
| `headline` | Public headline or identifier-level description when available |
| `location` | Public location when available |
| `currentTitle` | Current role when available |
| `currentCompanyName` | Current company when available |
| `email` and `phone` | Contact data only when enrichment is enabled and a provider returns it |
| `leadScore` | A score based on available profile data and your target criteria |
| `errorCode` and `errorMessage` | Clear reason for failed records |
| `scrapedAt` | When the row was created |

The Actor also saves a run summary to the key-value store so you can quickly see totals for successful, failed, and skipped URLs.

### 📤 Export Options

You can export results from Apify as:

- JSON
- CSV
- Excel
- XML
- RSS
- API response

For most sales and recruiting workflows, CSV or Excel is the easiest place to start. For automated workflows, use the dataset API or connect the Actor to another Apify integration.

### ✅ Tips For Best Results

- Use public LinkedIn profile URLs that contain `/in/`.
- Avoid company pages, search result pages, job pages, or Sales Navigator-only URLs.
- Keep the default mode on when you only need clean profile records and want the cheapest run.
- Switch to `public` mode only when richer public profile details are worth the extra requests.
- Use `external` mode when you already have a profile enrichment provider.
- Enable email or phone enrichment only when you have the right provider and permission to process contact data.
- Use suppression lists to exclude existing customers, opted-out contacts, competitors, or blocked domains.
- Use `crm_flat` output when your next step is a CRM import.

### 🔐 Responsible Use And Privacy

This Actor can process personal data. You are responsible for making sure your use follows applicable laws, platform rules, and your own data policies.

Important safeguards are built in:

- Contact enrichment is off by default.
- Email and phone enrichment require `contactEnrichmentConsent`.
- Data minimization mode can remove optional contact and personal data fields.
- Suppression lists help prevent unwanted records from being processed or exported.
- The Actor does not ask for LinkedIn credentials and does not bypass authentication.

### ⚠️ Limitations

- The Actor does not access private LinkedIn data.
- The Actor does not log in to LinkedIn.
- Public profile details may be incomplete, unavailable, or blocked.
- Email and phone discovery require your own configured provider.
- Contact enrichment results depend on your provider's coverage and quality.
- Invalid URLs, duplicate URLs, and suppressed records may be skipped or returned as failed/skipped rows depending on your settings.

### ❓ Frequently Asked Questions

#### Do I need LinkedIn cookies or a LinkedIn password?

No. This Actor is designed to run without LinkedIn cookies, passwords, or login sessions.

#### Why does the default output look lightweight?

The default settings are optimized for very low cost. They focus on cleaning, validating, deduplicating, and creating compact profile records from LinkedIn profile URLs.

#### Can it find emails and phone numbers?

Yes, if you enable contact enrichment, confirm consent, and provide your own approved enrichment provider endpoint. Email and phone enrichment are off by default.

#### Can I use this for CRM imports?

Yes. Use `outputFormatMode: "crm_flat"` and choose a `crmPreset` such as `hubspot`, `salesforce`, `pipedrive`, `clay`, `airtable`, or `csv`.

#### What happens if I submit a company page instead of a profile?

The Actor returns a structured failed record with an error such as `NOT_PROFILE_URL`, so you can clean the list and rerun it.

#### How do I keep runs as cheap as possible?

Use the default settings: `costOptimizationMode: true`, `profileResolverMode: "identifier_only"`, `outputFormatMode: "compact"`, no email or phone enrichment, and no retries.

# Actor input Schema

## `profileUrls` (type: `array`):

LinkedIn profile URLs to enrich. Use public LinkedIn profile URLs such as https://www.linkedin.com/in/example-profile.

## `costOptimizationMode` (type: `boolean`):

Use the cheapest defaults: identifier-only profile records, compact output, no skipped duplicate rows, no retries, and short request timeouts unless you explicitly opt into richer settings.

## `includeEmails` (type: `boolean`):

Attempt to discover and verify email addresses. Contact enrichment is automatically disabled unless contact enrichment consent is enabled.

## `includePhones` (type: `boolean`):

Attempt to discover mobile or phone numbers. This may use premium enrichment providers and requires contact enrichment consent.

## `includeCompanyDetails` (type: `boolean`):

Include company name, website, LinkedIn URL, industry, size, and related company fields when available.

## `includeSkills` (type: `boolean`):

Include public profile skills when available.

## `includeEducation` (type: `boolean`):

Include public education records when available.

## `includeCertifications` (type: `boolean`):

Include public certifications and licenses when available.

## `includeRecommendations` (type: `boolean`):

Include public recommendations when available.

## `outputFormatMode` (type: `string`):

Choose how records are shaped in the dataset.

## `crmPreset` (type: `string`):

Optional CRM-friendly field mapping preset.

## `profileResolverMode` (type: `string`):

Choose identifier-only enrichment for lowest cost, public page extraction for richer no-cookie data, deterministic mock data for testing, or an external provider endpoint.

## `externalProfileProviderUrl` (type: `string`):

Optional HTTPS endpoint for a BYO profile provider. The Actor sends the normalized LinkedIn URL and expects JSON profile data.

## `emailProviderUrl` (type: `string`):

Optional HTTPS endpoint for a BYO email enrichment provider.

## `phoneProviderUrl` (type: `string`):

Optional HTTPS endpoint for a BYO phone enrichment provider.

## `providerApiKey` (type: `string`):

Optional API key sent as Bearer token to configured external providers.

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

Maximum number of profiles processed in parallel.

## `maxRetries` (type: `integer`):

Maximum retry attempts per profile.

## `requestTimeoutSecs` (type: `integer`):

Maximum time to wait for each profile or provider request.

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

Proxy settings. Use Apify Proxy auto mode unless you need a specific proxy group.

## `dataMinimizationMode` (type: `boolean`):

Exclude optional contact enrichment and non-essential personal data fields.

## `allowPartialProfiles` (type: `boolean`):

Return a partial profile record when only identifier-level public data is available.

## `emitSkippedRecords` (type: `boolean`):

Write duplicate and suppressed inputs as skipped dataset rows.

## `saveRunLists` (type: `boolean`):

Write FAILED\_URLS and SKIPPED\_URLS key-value records. Disable for the cheapest runs because the summary already includes counts.

## `suppressionEmails` (type: `array`):

Emails that should be excluded from results.

## `suppressionDomains` (type: `array`):

Email or company domains that should be skipped or excluded.

## `suppressionLinkedinUrls` (type: `array`):

LinkedIn profile URLs to skip.

## `targetJobTitles` (type: `array`):

Optional job titles used for matching and lead scoring.

## `targetLocations` (type: `array`):

Optional locations used for matching and lead scoring.

## `targetIndustries` (type: `array`):

Optional industries used for matching and lead scoring.

## `contactEnrichmentConsent` (type: `boolean`):

Confirm that you have a lawful basis to process contact data when enabling email or phone enrichment.

## `forceRefresh` (type: `boolean`):

Reprocess profiles even if they were already processed in previous state.

## `debugMode` (type: `boolean`):

Save raw provider responses and verbose diagnostic information to the key-value store.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates"
  ],
  "costOptimizationMode": true,
  "includeEmails": false,
  "includePhones": false,
  "includeCompanyDetails": true,
  "includeSkills": true,
  "includeEducation": true,
  "includeCertifications": true,
  "includeRecommendations": false,
  "outputFormatMode": "compact",
  "crmPreset": "generic",
  "profileResolverMode": "identifier_only",
  "maxConcurrency": 5,
  "maxRetries": 0,
  "requestTimeoutSecs": 15,
  "proxyConfiguration": {
    "useApifyProxy": true
  },
  "dataMinimizationMode": false,
  "allowPartialProfiles": true,
  "emitSkippedRecords": false,
  "saveRunLists": false,
  "suppressionEmails": [],
  "suppressionDomains": [],
  "suppressionLinkedinUrls": [],
  "targetJobTitles": [],
  "targetLocations": [],
  "targetIndustries": [],
  "contactEnrichmentConsent": false,
  "forceRefresh": false,
  "debugMode": false
}
```

# Actor output Schema

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

No description

## `summary` (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 = {
    "profileUrls": [
        "https://www.linkedin.com/in/williamhgates"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("qaseemiqbal/linkedin-profile-scraper-ultra-pro").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 = { "profileUrls": ["https://www.linkedin.com/in/williamhgates"] }

# Run the Actor and wait for it to finish
run = client.actor("qaseemiqbal/linkedin-profile-scraper-ultra-pro").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 '{
  "profileUrls": [
    "https://www.linkedin.com/in/williamhgates"
  ]
}' |
apify call qaseemiqbal/linkedin-profile-scraper-ultra-pro --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Profile Scraper Ultra Pro",
        "description": "Clean, validate, deduplicate, and enrich public LinkedIn profile URLs into CRM-ready records. No LinkedIn cookies or login required.",
        "version": "1.0",
        "x-build-id": "ZAelv7HSwLhOljhwr"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/qaseemiqbal~linkedin-profile-scraper-ultra-pro/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-qaseemiqbal-linkedin-profile-scraper-ultra-pro",
                "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/qaseemiqbal~linkedin-profile-scraper-ultra-pro/runs": {
            "post": {
                "operationId": "runs-sync-qaseemiqbal-linkedin-profile-scraper-ultra-pro",
                "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/qaseemiqbal~linkedin-profile-scraper-ultra-pro/run-sync": {
            "post": {
                "operationId": "run-sync-qaseemiqbal-linkedin-profile-scraper-ultra-pro",
                "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": [
                    "profileUrls"
                ],
                "properties": {
                    "profileUrls": {
                        "title": "LinkedIn profile URLs",
                        "minItems": 1,
                        "type": "array",
                        "description": "LinkedIn profile URLs to enrich. Use public LinkedIn profile URLs such as https://www.linkedin.com/in/example-profile.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "costOptimizationMode": {
                        "title": "Cost optimization mode",
                        "type": "boolean",
                        "description": "Use the cheapest defaults: identifier-only profile records, compact output, no skipped duplicate rows, no retries, and short request timeouts unless you explicitly opt into richer settings.",
                        "default": true
                    },
                    "includeEmails": {
                        "title": "Find emails",
                        "type": "boolean",
                        "description": "Attempt to discover and verify email addresses. Contact enrichment is automatically disabled unless contact enrichment consent is enabled.",
                        "default": false
                    },
                    "includePhones": {
                        "title": "Find phone numbers",
                        "type": "boolean",
                        "description": "Attempt to discover mobile or phone numbers. This may use premium enrichment providers and requires contact enrichment consent.",
                        "default": false
                    },
                    "includeCompanyDetails": {
                        "title": "Include company details",
                        "type": "boolean",
                        "description": "Include company name, website, LinkedIn URL, industry, size, and related company fields when available.",
                        "default": true
                    },
                    "includeSkills": {
                        "title": "Include skills",
                        "type": "boolean",
                        "description": "Include public profile skills when available.",
                        "default": true
                    },
                    "includeEducation": {
                        "title": "Include education",
                        "type": "boolean",
                        "description": "Include public education records when available.",
                        "default": true
                    },
                    "includeCertifications": {
                        "title": "Include certifications",
                        "type": "boolean",
                        "description": "Include public certifications and licenses when available.",
                        "default": true
                    },
                    "includeRecommendations": {
                        "title": "Include recommendations",
                        "type": "boolean",
                        "description": "Include public recommendations when available.",
                        "default": false
                    },
                    "outputFormatMode": {
                        "title": "Output format mode",
                        "enum": [
                            "nested",
                            "flat",
                            "nested_and_flat",
                            "crm_flat",
                            "compact"
                        ],
                        "type": "string",
                        "description": "Choose how records are shaped in the dataset.",
                        "default": "compact"
                    },
                    "crmPreset": {
                        "title": "CRM preset",
                        "enum": [
                            "generic",
                            "salesforce",
                            "hubspot",
                            "pipedrive",
                            "clay",
                            "airtable",
                            "csv"
                        ],
                        "type": "string",
                        "description": "Optional CRM-friendly field mapping preset.",
                        "default": "generic"
                    },
                    "profileResolverMode": {
                        "title": "Profile resolver mode",
                        "enum": [
                            "identifier_only",
                            "public",
                            "mock",
                            "external"
                        ],
                        "type": "string",
                        "description": "Choose identifier-only enrichment for lowest cost, public page extraction for richer no-cookie data, deterministic mock data for testing, or an external provider endpoint.",
                        "default": "identifier_only"
                    },
                    "externalProfileProviderUrl": {
                        "title": "External profile provider URL",
                        "type": "string",
                        "description": "Optional HTTPS endpoint for a BYO profile provider. The Actor sends the normalized LinkedIn URL and expects JSON profile data."
                    },
                    "emailProviderUrl": {
                        "title": "Email provider URL",
                        "type": "string",
                        "description": "Optional HTTPS endpoint for a BYO email enrichment provider."
                    },
                    "phoneProviderUrl": {
                        "title": "Phone provider URL",
                        "type": "string",
                        "description": "Optional HTTPS endpoint for a BYO phone enrichment provider."
                    },
                    "providerApiKey": {
                        "title": "Provider API key",
                        "type": "string",
                        "description": "Optional API key sent as Bearer token to configured external providers."
                    },
                    "maxConcurrency": {
                        "title": "Maximum concurrency",
                        "minimum": 1,
                        "maximum": 50,
                        "type": "integer",
                        "description": "Maximum number of profiles processed in parallel.",
                        "default": 5
                    },
                    "maxRetries": {
                        "title": "Maximum retries",
                        "minimum": 0,
                        "maximum": 10,
                        "type": "integer",
                        "description": "Maximum retry attempts per profile.",
                        "default": 0
                    },
                    "requestTimeoutSecs": {
                        "title": "Request timeout seconds",
                        "minimum": 15,
                        "maximum": 300,
                        "type": "integer",
                        "description": "Maximum time to wait for each profile or provider request.",
                        "default": 15
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Proxy settings. Use Apify Proxy auto mode unless you need a specific proxy group.",
                        "default": {
                            "useApifyProxy": true
                        }
                    },
                    "dataMinimizationMode": {
                        "title": "Data minimization mode",
                        "type": "boolean",
                        "description": "Exclude optional contact enrichment and non-essential personal data fields.",
                        "default": false
                    },
                    "allowPartialProfiles": {
                        "title": "Allow partial profiles",
                        "type": "boolean",
                        "description": "Return a partial profile record when only identifier-level public data is available.",
                        "default": true
                    },
                    "emitSkippedRecords": {
                        "title": "Emit skipped records",
                        "type": "boolean",
                        "description": "Write duplicate and suppressed inputs as skipped dataset rows.",
                        "default": false
                    },
                    "saveRunLists": {
                        "title": "Save failed and skipped URL lists",
                        "type": "boolean",
                        "description": "Write FAILED_URLS and SKIPPED_URLS key-value records. Disable for the cheapest runs because the summary already includes counts.",
                        "default": false
                    },
                    "suppressionEmails": {
                        "title": "Suppression emails",
                        "type": "array",
                        "description": "Emails that should be excluded from results.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "suppressionDomains": {
                        "title": "Suppression domains",
                        "type": "array",
                        "description": "Email or company domains that should be skipped or excluded.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "suppressionLinkedinUrls": {
                        "title": "Suppression LinkedIn URLs",
                        "type": "array",
                        "description": "LinkedIn profile URLs to skip.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "targetJobTitles": {
                        "title": "Target job titles",
                        "type": "array",
                        "description": "Optional job titles used for matching and lead scoring.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "targetLocations": {
                        "title": "Target locations",
                        "type": "array",
                        "description": "Optional locations used for matching and lead scoring.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "targetIndustries": {
                        "title": "Target industries",
                        "type": "array",
                        "description": "Optional industries used for matching and lead scoring.",
                        "items": {
                            "type": "string"
                        },
                        "default": []
                    },
                    "contactEnrichmentConsent": {
                        "title": "Contact enrichment consent",
                        "type": "boolean",
                        "description": "Confirm that you have a lawful basis to process contact data when enabling email or phone enrichment.",
                        "default": false
                    },
                    "forceRefresh": {
                        "title": "Force refresh",
                        "type": "boolean",
                        "description": "Reprocess profiles even if they were already processed in previous state.",
                        "default": false
                    },
                    "debugMode": {
                        "title": "Debug mode",
                        "type": "boolean",
                        "description": "Save raw provider responses and verbose diagnostic information to the key-value store.",
                        "default": false
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
