# Linkedin Profile Scraper (`scrapapi/linkedin-profile-scraper`) Actor

LinkedIn Profile Scraper extracts public LinkedIn profile data, including name, headline, experience, education, and skills. Designed for recruiters, sales teams, and marketers who need fast, structured JSON output for lead generation, talent sourcing, and B2B data workflows.

- **URL**: https://apify.com/scrapapi/linkedin-profile-scraper.md
- **Developed by:** [ScrapAPI](https://apify.com/scrapapi) (community)
- **Categories:** Lead generation, Jobs, Automation
- **Stats:** 5 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$19.99/month + usage

To use this Actor, you pay a monthly rental fee to the developer. The rent is subtracted from your prepaid usage every month after the free trial period.You also pay for the Apify platform usage, which gets cheaper the higher Apify subscription plan you have.

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

## 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

The LinkedIn Profile Scraper makes it easy to extract structured data from public LinkedIn profiles — from names, headlines, and job descriptions to skills, education, and company details. It’s built for recruiters, sales teams, researchers, and developers who need reliable data without manual copy-pasting. Results are exportable in JSON or CSV, ready for analysis or CRM integration.

Run it instantly through Apify, connect with Python/Node/npm, or automate flows in n8n — and unlock insights faster with the LinkedIn Profile Scraper.

#### Project structure (why key files exist)

| File | Purpose |
|------|--------|
| **`.actor/actor.json`** | Apify actor spec and input schema (URLs, proxy, options) are defined inline in this single file. |
| **`.gitignore`** | Standard Git ignore list (e.g. `__pycache__/`, `.env`, build dirs) so these are not committed. Keeps the repo clean. |
| **No `package.json`** | This actor is Python-only (Dockerfile, `requirements.txt`, `python -m src`). Node/npm is not used, so there is no package.json. |

### What is a LinkedIn Profile Scraper? 🧑‍💻

A LinkedIn Profile Scraper is a tool that helps you automatically collect public information from LinkedIn profiles without the need to copy-paste manually. Instead of opening each profile, these scrapers extract data like names, headlines, job descriptions, skills, education, and company details in seconds.

You can use different formats of scrapers depending on your workflow:

*   🌐 Browser extensions for quick one-off exports.  
      
    
*   ⚙️ APIs or actors like Apify and Phantombuster for scalable runs.  
      
    
*   🔄 Workflow tools such as n8n for automating repeat tasks.  
      
    

⚠️ Keep in mind: only publicly visible data should be scraped. LinkedIn’s Terms of Service prohibit bypassing authentication walls or collecting personal information beyond what’s displayed. Safe, compliant use is key.

### 🔗 What are other LinkedIn scraping tools?

If you want to scrape specific LinkedIn data, you can use any of the dedicated scrapers below for faster and more targeted results.  
Just enter one or more LinkedIn URLs or company/profile names and start scraping instantly.

| [🪪 LinkedIn Ads Scraper](https://apify.com/scraper-engine/linkedin-ads-scraper) | [💼 LinkedIn Search Jobs Scraper](https://apify.com/scraper-engine/linkedin-search-jobs-scraper) |
|---|---|
| [👥 LinkedIn Company Employees Scraper](https://apify.com/scraper-engine/linkedin-company-employees-scraper) | [📝 LinkedIn Post Scraper](https://apify.com/scraper-engine/linkedin-post-scraper) |
| [🏢 LinkedIn Company About Scraper](https://apify.com/scraper-engine/linkedin-company-about-scraper) | [🏬 LinkedIn Company Profile Scraper](https://apify.com/scraper-engine/linkedin-company-profile-scraper) |
| [⚡ LinkedIn Profile Scraper [Cheapest + Fastest]](https://apify.com/scraper-engine/linkedin-profile-scraper-cheapst-fastest) |  |



### What data can the LinkedIn Profile Scraper extract? 📊

The LinkedIn Profile Scraper pulls structured data from public LinkedIn profiles, giving you clean, ready-to-use fields instead of scattered text. Whether you’re sourcing leads, analyzing competitors, or building a talent pipeline, the output is organized in a way that’s easy to filter, normalize, and export to your tools.

Here’s a breakdown of what you can extract:

| Data Type | Details Extracted |
| --- | --- |
| Full Name & Headline | Profile name, current title, and headline summary. |
| Summary/About | Bio or “About” section text. |
| Work Experience | Job titles, companies, job descriptions, dates, and locations. |
| Education | Schools, degrees, fields of study, and graduation dates. |
| Certifications & Skills | Professional certifications, listed skills, and endorsements. |
| Contact Info (Public) | Publicly available email, phone, or website links. |
| Company Info | Industry, size, website, and company LinkedIn URL (LinkedIn company profile scraper overlap). |
| Profile URL & Avatar | Canonical profile link, profile picture, and cover image. |
| Locale & Language | Display language/region (e.g., en_US). |
| Export Formats | Structured JSON, CSV, Excel, or JSONL for easy integration. |

#### Key Features of the LinkedIn Profile Scraper ⚡

The LinkedIn Profile Scraper is designed to make extracting public LinkedIn data efficient, flexible, and safe. Whether you’re running quick one-off exports or managing large-scale automation, these features help you get the most out of every run.

*   🔗 Multi-URL support & bulk scraping – queue dozens or even hundreds of profiles in one job.  
      
    
*   🔄 Proxy rotation + random delays – stay under the radar while avoiding detection and throttling.  
      
    
*   ⏸️ Resume runs / checkpointing – pause and continue later without losing progress.  
      
    
*   📂 Export-ready outputs – download results in CSV, JSON, or Excel formats for immediate analysis.  
      
    
*   ⚙️ Integration-ready – connect seamlessly with Apify, n8n, RapidAPI, Python, Node.js, or npm.  
      
    
*   💻 GitHub + open-source options – adapt existing code or contribute to community-driven scrapers.  
      
    
*   🌐 Extensions vs. headless API runs – choose between lightweight browser extensions or powerful API-based automation.  
      
    

Together, these features make the scraper versatile for recruiters, marketers, researchers, and developers who need structured LinkedIn data at scale.

### How to use the LinkedIn Profile Scraper 🛠️

Using the LinkedIn Profile Scraper is straightforward. You don’t need advanced technical skills — just follow a few simple steps and you’ll have clean profile data in minutes.

#### Step-by-Step Guide

Log in to Apify – Create a free account or sign in.

Select the Actor – Search for “LinkedIn Profile Scraper” in the Apify Store or use the extension.

Enter Input Data – Paste one or multiple LinkedIn profile URLs, or bulk add links from a LinkedIn search export.

Choose Options – Set the maximum number of profiles to scrape, configure proxy settings, and add delays if needed.

Run the Actor – Click Start in the Apify UI, or trigger it via Python, Node.js, npm, or n8n workflow.

Download Results – Export structured data in CSV, JSON, or Excel formats, ready for analysis or CRM import.

#### Input
```json
{
    "extractProjects": true,
    "extractRecommendations": true,
    "extractSimilarProfiles": true,
    "proxyConfiguration": {
        "useApifyProxy": false,
        "apifyProxyGroups": [
            "BUYPROXIES94952",
            "RESIDENTIAL"
        ]
    },
    "urls": [
        "https://www.linkedin.com/in/example/"
    ]
}
````

#### Output

```json
[
  {
    "success": false,
    "error": "Failed after 3 attempts",
    "name": "",
    "image": "",
    "location": "",
    "followers": 0,
    "connections": "",
    "about": "",
    "recentPosts": [],
    "experience": [],
    "articles": [],
    "activity": [],
    "education": [],
    "publications": [],
    "projects": [],
    "recommendations": [],
    "similarProfiles": []
  }
]
```

### 🎯Why scrape LinkedIn profiles?

Scraping LinkedIn profiles gives you access to structured professional data that can power smarter decisions across sales, hiring, and research. Instead of manually copying details, a scraper automates the process, helping you save time and scale your efforts.

- 🤝 Lead generation / outreach – Build targeted lead lists with names, roles, and companies for email or LinkedIn campaigns.

- 👩‍💼 Recruiting alternative – Source candidates beyond LinkedIn Recruiter, including job descriptions, skills, and career history.

- 📊 Market & competitor research – Track hiring trends, team composition, and competitor growth strategies.

- 🗂️ Database building (B2B enrichment) – Enrich CRM systems with up-to-date professional data and company info.

- 🧠 Sentiment & trend analysis with AI – Combine a LinkedIn scraper with AI to analyze skills in demand or track industry buzz.

- 🌐 Affiliate or networking personalization – Personalize outreach by understanding someone’s background before connecting or pitching.

By scraping LinkedIn profiles, you move beyond surface-level insights to create data-driven strategies for sales, HR, marketing, or academic research. When used responsibly, it’s a powerful way to unlock LinkedIn’s value without endless manual effort.

### How many results can you scrape with the LinkedIn Profile Scraper? 🔎

The LinkedIn Profile Scraper can extract thousands of profiles, but there are practical limits you need to consider. LinkedIn uses pagination to split profile data across multiple pages and enforces rate limits to prevent automated abuse. To stay safe and compliant with platform rules, it’s best to approach scraping in controlled batches. ⚠️

In practice, smaller runs are faster, more reliable, and less likely to trigger errors or blocks. For example:

- ✅ 100–500 profiles per run – the safest range for consistent results.

- 📦 1,000–2,000 profiles – possible with strong proxy rotation and random delays.

- 🚀 10,000+ profiles – best handled with incremental scrapes, breaking jobs into smaller runs.

#### Key considerations:

- ⏱️ Rate limits – throttle requests and add delays to mimic human browsing.

- 🔄 Proxy rotation – rotate residential proxies to reduce detection risk.

- 📜 ToS awareness – scrape only publicly visible data and avoid authentication-gated content.

By batching intelligently, you can build large, high-quality datasets while minimizing run failures and respecting platform boundaries. This ensures your LinkedIn scraping stays efficient, reliable, and future-proof.

### How much will scraping LinkedIn profiles cost you? 💰

The LinkedIn Profile Scraper is one of the most affordable ways to collect professional data at scale. You can get started for as little as $5 per month, which is enough for typical scraping needs on small to mid-size projects.

Here’s how pricing usually works:

- Base Plan – $5/month for light users scraping a manageable number of LinkedIn profiles.

- Scaling Up – If you need bulk processing (hundreds or thousands of profiles), you may require higher Apify credits depending on runtime and proxy usage.

- Pay-as-you-go Flexibility – Costs scale with the resources you actually consume, so you only pay for what you scrape.

This makes it a budget-friendly option for recruiters, marketers, researchers, and developers who want reliable LinkedIn data without investing in expensive software or tedious manual work.

### Is it legal to scrape LinkedIn profiles? ⚖️

The legality of scraping LinkedIn profiles depends on how it’s done. LinkedIn has strict Terms of Service, and scraping private or login-gated content can violate their policies. However, collecting publicly available profile data is often treated differently, especially when used for research, analytics, or enrichment.

Here’s a quick compliance checklist ✅:

- 🌍 Public data only – scrape only what’s visible without logging in.

- 🚫 Avoid authentication-gated endpoints – don’t bypass logins, CAPTCHAs, or security barriers.

- 📜 Respect LinkedIn’s ToS + robots.txt – be mindful of their rules to reduce legal risks.

- 🔐 No PII enrichment – never combine scraped data with external personal datasets.

A notable case, hiQ Labs vs. LinkedIn, showed that scraping public data may be protected under U.S. law. Still, rulings vary by region, and platforms continue to update their policies. ⚠️

In short: scraping public LinkedIn data is generally possible if done responsibly, but it’s not risk-free.

👉 Disclaimer: This content is for informational purposes only. Always consult a qualified legal professional before running LinkedIn scraping at scale.

### FAQ ❓

#### Can I scrape multiple profiles at once?

Yes ✅. You can paste several profile URLs or even bulk add them from a LinkedIn search export to process in one run.

#### Does LinkedIn allow scraping?

Not officially. LinkedIn’s ToS restrict scraping, but many tools collect publicly available data responsibly. Always use caution and stay compliant.

#### What about using a LinkedIn Profile Scraper extension free?

Free extensions exist, but they usually have limits on results or features. Paid options like Apify are more reliable for scale.

#### How do I use Python/Node/npm clients?

You can call the scraper programmatically using Apify’s Python or Node.js SDKs or install npm clients for automation.

#### Can I run it with n8n workflows?

Yes. The scraper integrates with n8n, letting you automate LinkedIn data collection into your custom workflows.

#### How safe is GitHub code for scrapers?

Open-source scrapers on GitHub can work, but security and maintenance aren’t guaranteed. Use trusted sources.

#### Does it work for LinkedIn Recruiter profiles?

You can scrape profile-like data, but Recruiter-only features often sit behind authentication walls. Stick to public data.

#### Can I scrape company pages too?

Yes. You can collect company details using a LinkedIn company profile scraper or combined workflows.

#### How often should I rotate proxies?

Rotate proxies frequently, especially on larger runs, to avoid detection or rate limits.

#### What if LinkedIn changes its layout?

Scrapers are updated when layouts shift. Tools like Apify release patches quickly to keep data flowing.

### Conclusion 🚀

The LinkedIn Profile Scraper is a powerful way to turn public LinkedIn data into structured, ready-to-use insights. Whether you’re building lead lists, sourcing candidates, or analyzing market trends, it saves countless hours of manual work. With support for extensions, APIs, Python/Node clients, and automation tools like n8n, it’s flexible enough for any workflow. Starting at just $5/month, it’s also cost-effective. Used responsibly—focusing only on public data—it unlocks LinkedIn’s potential while keeping you compliant and efficient.

# Actor input Schema

## `urls` (type: `array`):

Paste the full profile links you want to scrape (e.g. linkedin.com/in/username). One per line or add multiple — we'll process them in order.

## `extractSimilarProfiles` (type: `boolean`):

Include “People also viewed” / similar profiles in the result. Great for expanding your network or lead list.

## `extractProjects` (type: `boolean`):

Extract the Projects section (name, dates, description, contributors). Turn off if you only need experience and education.

## `extractRecommendations` (type: `boolean`):

Include written recommendations from other members. Useful for credibility and social proof.

## `customFetcherUrlTemplate` (type: `string`):

Examples:
• ScrapingBee:  https://app.scrapingbee.com/api/v1/?api\_key=YOUR\_KEY\&url={url}\&premium\_proxy=true\&country\_code=us
• ScraperAPI:   http://api.scraperapi.com/?api\_key=YOUR\_KEY\&url={url}\&premium=true
• Scrapingdog:  https://api.scrapingdog.com/linkedin/?api\_key=YOUR\_KEY\&url={url}
Leave empty to skip.

## `enableWaybackFallback` (type: `boolean`):

If LinkedIn blocks and no custom fetcher succeeds, look up an existing Wayback Machine snapshot of the URL (free, fast).

## `enableWaybackSaveFallback` (type: `boolean`):

If no existing snapshot is found, trigger Wayback Save Page Now to create a fresh one. Slow (30-60s per profile) and rate-limited (~15/min) but free and needs no authentication. Disable for large bulk runs.

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

Select Apify Proxy (RESIDENTIAL recommended) or custom proxy URLs.

## Actor input object example

```json
{
  "urls": [
    "https://www.linkedin.com/in/timbakke/"
  ],
  "extractSimilarProfiles": true,
  "extractProjects": true,
  "extractRecommendations": true,
  "enableWaybackFallback": true,
  "enableWaybackSaveFallback": true,
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {
    "urls": [
        "https://www.linkedin.com/in/timbakke/"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true,
        "apifyProxyGroups": [
            "RESIDENTIAL"
        ]
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("scrapapi/linkedin-profile-scraper").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {
    "urls": ["https://www.linkedin.com/in/timbakke/"],
    "proxyConfiguration": {
        "useApifyProxy": True,
        "apifyProxyGroups": ["RESIDENTIAL"],
    },
}

# Run the Actor and wait for it to finish
run = client.actor("scrapapi/linkedin-profile-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 '{
  "urls": [
    "https://www.linkedin.com/in/timbakke/"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true,
    "apifyProxyGroups": [
      "RESIDENTIAL"
    ]
  }
}' |
apify call scrapapi/linkedin-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "Linkedin Profile Scraper",
        "description": "LinkedIn Profile Scraper extracts public LinkedIn profile data, including name, headline, experience, education, and skills. Designed for recruiters, sales teams, and marketers who need fast, structured JSON output for lead generation, talent sourcing, and B2B data workflows.",
        "version": "1.0",
        "x-build-id": "edC0xPobnbqlSLa2u"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/scrapapi~linkedin-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-scrapapi-linkedin-profile-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/scrapapi~linkedin-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-scrapapi-linkedin-profile-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/scrapapi~linkedin-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-scrapapi-linkedin-profile-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",
                "properties": {
                    "urls": {
                        "title": "🔗 LinkedIn profile URLs",
                        "type": "array",
                        "description": "Paste the full profile links you want to scrape (e.g. linkedin.com/in/username). One per line or add multiple — we'll process them in order.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "extractSimilarProfiles": {
                        "title": "👥 People also viewed",
                        "type": "boolean",
                        "description": "Include “People also viewed” / similar profiles in the result. Great for expanding your network or lead list.",
                        "default": true
                    },
                    "extractProjects": {
                        "title": "📁 Projects",
                        "type": "boolean",
                        "description": "Extract the Projects section (name, dates, description, contributors). Turn off if you only need experience and education.",
                        "default": true
                    },
                    "extractRecommendations": {
                        "title": "⭐ Recommendations",
                        "type": "boolean",
                        "description": "Include written recommendations from other members. Useful for credibility and social proof.",
                        "default": true
                    },
                    "customFetcherUrlTemplate": {
                        "title": "Custom fetcher URL template",
                        "type": "string",
                        "description": "Examples:\n  • ScrapingBee:  https://app.scrapingbee.com/api/v1/?api_key=YOUR_KEY&url={url}&premium_proxy=true&country_code=us\n  • ScraperAPI:   http://api.scraperapi.com/?api_key=YOUR_KEY&url={url}&premium=true\n  • Scrapingdog:  https://api.scrapingdog.com/linkedin/?api_key=YOUR_KEY&url={url}\nLeave empty to skip."
                    },
                    "enableWaybackFallback": {
                        "title": "🗄️ Wayback Machine fallback",
                        "type": "boolean",
                        "description": "If LinkedIn blocks and no custom fetcher succeeds, look up an existing Wayback Machine snapshot of the URL (free, fast).",
                        "default": true
                    },
                    "enableWaybackSaveFallback": {
                        "title": "💾 Wayback Save-Page-Now fallback",
                        "type": "boolean",
                        "description": "If no existing snapshot is found, trigger Wayback Save Page Now to create a fresh one. Slow (30-60s per profile) and rate-limited (~15/min) but free and needs no authentication. Disable for large bulk runs.",
                        "default": true
                    },
                    "proxyConfiguration": {
                        "title": "Proxy configuration",
                        "type": "object",
                        "description": "Select Apify Proxy (RESIDENTIAL recommended) or custom proxy URLs.",
                        "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
