# LinkedIn Profile Scraper — 9 Fields, No Login or Cookies (`themineworks/linkedin-profile-scraper`) Actor

Scrape public LinkedIn profiles in bulk with no login. Name, headline, experience, education, skills, connections, followers. $40 per 1,000. MCP-ready.

- **URL**: https://apify.com/themineworks/linkedin-profile-scraper.md
- **Developed by:** [The Mine Works](https://apify.com/themineworks) (community)
- **Categories:** Lead generation, Social media, MCP servers
- **Stats:** 21 total users, 10 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$4.00 / 1,000 linkedin profiles

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 web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — 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: Bulk Public Data, No Login

> **Part of the Recruiting & Jobs MCP.** This actor's data is also available to AI agents through our [Recruiting & Jobs MCP server](https://apify.com/themineworks/recruiting-jobs-mcp) — seven job-market and sourcing tools behind one endpoint. No result, no charge.

> ⚡ 410/411 runs succeeded in the last 30 days — the portfolio's highest-volume actor · no login, no cookies, no ban risk.

> 💸 You're only charged for delivered results. Empty searches, failed pages and duplicate listings are never billed.

### Overview

LinkedIn Profile Scraper turns a list of public `linkedin.com/in/` URLs into structured JSON records. For each profile you get name, headline, location, about section, full work experience, education history, skills, connection count and follower count. It never asks for cookies, an account or a login of any kind, so your LinkedIn identity is never exposed and can never be flagged.

Public LinkedIn profiles are visible to anyone on the web. The actor loads each one in a real Chromium browser routed through residential IPs, exactly like an ordinary human visitor. Because your credentials are never used, your account stays completely untouched and safe.

Reliability posture: blocked, private, or not-found profiles are never charged. You only pay for a profile record that was actually delivered.

✅ No login required | ✅ No cookies | ✅ Pay only for scraped profiles | ✅ MCP-ready for AI agents

### Features

Bulk profile enrichment. Feed up to 500 profile URLs per run and get structured records back.
Full field coverage. Name, headline, location, about, experience, education, skills, connections, followers.
No account risk. Never authenticates as you, so there is no LinkedIn identity to restrict.
Residential proxy per session. Fresh IP per profile with real Chrome fingerprints.
Free failure handling. Blocked, private or not-found profiles are never charged.

### How it works

LinkedIn runs one of the most aggressive anti-bot systems on the web, and scraping while logged in is the fastest way to lose an account. This actor never authenticates. It reads only the public profile pages LinkedIn serves to logged-out visitors, using Crawlee's `PlaywrightCrawler` with real Chrome fingerprints and a fresh residential proxy session per profile so the traffic looks human.

For each URL, the actor loads the page in a real browser, scrolls to trigger lazy-loaded sections, and extracts every visible field. Blocked, private, or not-found profiles are handled gracefully and never billed. A final `_type: "summary"` record is appended to each run with counts (scraped, blocked, not\_found, no\_name).

### 🧾 Input configuration

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/satyanadella",
    "https://www.linkedin.com/in/williamhgates"
  ],
  "maxResults": 10,
  "proxy": { "useApifyProxy": true, "apifyProxyGroups": ["RESIDENTIAL"] }
}
```

### 📤 Output format

Real record delivered by a live run against `linkedin.com/in/satyanadella` on 2026-07-15:

```json
{
  "profile_url": "https://www.linkedin.com/in/satyanadella",
  "name": "Satya Nadella",
  "headline": "Chairman and CEO at Microsoft",
  "location": "Redmond, Washington, United States",
  "experience": [],
  "education": [],
  "skills": [],
  "connections": "500+ connections",
  "followers": "12M followers",
  "scraped_at": "2026-07-15T01:09:48.048Z"
}
```

`about`, `experience`, `education`, and `skills` are included only when LinkedIn's public page actually exposes that section for the profile; empty or private sections are dropped rather than sent as null.

Every profile record contains these fields:

| Field | Description |
| --- | --- |
| 🔗 `profile_url` | Canonical LinkedIn profile URL |
| 🙍 `name` | Full name of the person |
| 💬 `headline` | LinkedIn headline (current role and company) |
| 📍 `location` | Location as shown on the profile |
| 📝 `about` | About / summary section text |
| 💼 `experience` | Array of experience entries (title, company, duration, description) |
| 🎓 `education` | Array of education entries (school, degree, field, dates) |
| 🛠️ `skills` | List of skills |
| 🤝 `connections` | Connection count string (e.g. `500+ connections`) |
| ⭐ `followers` | Follower count string |
| ⏱️ `scraped_at` | ISO 8601 timestamp of extraction |

### 💼 Common use cases

**Sales and lead enrichment**
Turn a list of profile URLs into full, structured contact intelligence.
Verify a prospect's current role and seniority before you reach out.

**Recruiting and sourcing**
Import candidate experience, education and skills into your ATS.
Find department heads and passive talent across a target company set.

**People-data products**
Build datasets of roles, tenures and skill graphs at scale.
Analyse career paths and skill distributions across a cohort.

**Due diligence and research**
Profile founders, executives or key hires from their public pages.
Map who holds which role across a set of competitors or portfolio companies.

### 🚀 Getting started

1. Paste one or more LinkedIn profile URLs into the `profileUrls` field using the `https://www.linkedin.com/in/username` format. Up to 500 per run.
2. Set `maxResults` to cap how many profiles to return (default 10, up to 500). Use 1 to 3 for a quick test.
3. Leave the proxy on the default `RESIDENTIAL` group. LinkedIn blocks datacenter IPs.
4. Click Start. The actor loads each page in a real browser, scrolls to trigger lazy sections, and extracts every visible field.
5. Export the dataset as JSON, CSV, Excel, or pull it via API or MCP into your CRM, ATS or AI agent.

### 💵 Pricing

| Event | Price | You pay when |
| --- | --- | --- |
| Profile scraped | $0.004 | A profile record lands in your dataset |

**$4.00 per 1,000 profiles.** Private profiles, deleted accounts, and dead URLs are never billed — you only pay for data actually delivered.

### ⏰ Run it on a schedule

Refreshing a candidate list or account-mapping database on a cadence is the natural recurring use.

1. On this actor's page, click **⋯ → Schedule actor** (or Console → **Schedules → Create new**).
2. Pick a frequency — `@weekly` fits most sourcing lists; `@daily` for fast-moving hiring pipelines.
3. Your saved input is reused on every run; each run appends to a named dataset.
4. Wire the dataset to Google Sheets, Slack, or a webhook via the actor's **Integrations** tab so new records reach you automatically.

### FAQ

**Can I scrape profiles without a LinkedIn account?**
Yes. Public profiles are accessible to anyone. The actor never uses your credentials or session cookies, so your account is never at risk.

**Will this get my LinkedIn account banned?**
No. Because the actor never logs in as you, there is no account identity to ban. It behaves like an anonymous public visitor.

**Why do some profiles return blocked?**
A small share of residential IPs are pre-flagged by LinkedIn. The actor automatically retries up to 2 times with fresh sessions. Success rates on residential proxy are typically 80 to 95 percent. Blocked profiles are not charged.

**Does this work for private profiles?**
No. Private profiles require authentication. The actor returns a `not_found` or `no_name` status for them and does not charge you.

**What is the maximum throughput?**
Roughly 10 to 15 profiles per minute with the default single-browser cadence. For 500 profiles, allow around 40 to 50 minutes.

**How much does it cost?**
Pay per event: $0.04 per profile successfully scraped, which is $40 per 1,000 profiles. Blocked, not-found and private profiles are never charged.

**Can I use it inside an AI agent?**
Yes. It is exposed as an MCP tool. See below.

**Do I need a LinkedIn account to use this?**
No — the actor reads public profile data only, no login or cookies required, so there's no account to get restricted.

**Can I bulk-enrich a list of LinkedIn URLs?**
Yes — pass a list of profile URLs and get back structured experience, education, and skills data for each, in one run.

### Use in Claude, ChatGPT & any MCP agent

```
https://mcp.apify.com/?tools=themineworks/linkedin-profile-scraper
```

Or call it programmatically with the Apify client:

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

const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });

const run = await client.actor('themineworks/linkedin-profile-scraper').call({
  profileUrls: ['https://www.linkedin.com/in/satyanadella'],
  maxResults: 10,
});

const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);
```

### 🛠️ Related LinkedIn actors

Found the profiles. Now enrich the rest of the graph with the full LinkedIn wedge:

- **[LinkedIn Company Scraper](https://apify.com/themineworks/linkedin-company-details)**: firmographics (industry, size, HQ, founded, website) from a company page URL.
- **[LinkedIn Employees Scraper](https://apify.com/themineworks/linkedin-employees)**: every public employee profile at a target company, by role.
- **[LinkedIn Jobs Scraper](https://apify.com/themineworks/linkedin-jobs-scraper)**: public job listings by keyword and location, useful for flagging accounts that are hiring.
- **[LinkedIn Post Scraper](https://apify.com/themineworks/linkedin-post-search)**: public LinkedIn posts and their authors by keyword, for social listening and lead discovery.
- **[LinkedIn Candidate Finder](https://apify.com/themineworks/linkedin-candidate-finder)**: a matched candidate shortlist from role, skills, and location.
- **[B2B Leads Finder](https://apify.com/themineworks/b2b-leads-finder)**: named decision-maker contacts with business emails and phone numbers from a company or domain list.

Typical flow: linkedin-employees or linkedin-candidate-finder discovers the profile URLs, linkedin-profile-scraper enriches each one with full detail, linkedin-company-details fills in firmographics on the account.

**Disclaimer:** This actor is an independent tool and is not affiliated with, endorsed by, or sponsored by LinkedIn Corporation. LinkedIn is a registered trademark of LinkedIn Corporation. All trademarks are the property of their respective owners. Use scraped public data in line with GDPR/CCPA and your local laws.

Found a bug or have a feature request? Open an issue on the actor's Apify Console page or reach out through the Apify profile.

# Actor input Schema

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

List of public LinkedIn profiles to scrape. Accepts full URLs (e.g. https://www.linkedin.com/in/satyanadella), locale subdomains (in.linkedin.com/in/...), or bare usernames (e.g. satyanadella). Up to 500 per run.

## `maxResults` (type: `integer`):

Maximum number of profiles to return. Set to a small number (e.g. 3) for quick tests.

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

Apify proxy. Defaults to datacenter — public profile pages are Google-indexed and served over plain HTTP, so residential is not required. Each profile is fetched on a fresh proxy session (first-view IP). Set a group explicitly to override.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "maxResults": 1,
  "proxy": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `results` (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/satyanadella"
    ],
    "maxResults": 1,
    "proxy": {
        "useApifyProxy": true
    }
};

// Run the Actor and wait for it to finish
const run = await client.actor("themineworks/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 = {
    "profileUrls": ["https://www.linkedin.com/in/satyanadella"],
    "maxResults": 1,
    "proxy": { "useApifyProxy": True },
}

# Run the Actor and wait for it to finish
run = client.actor("themineworks/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 '{
  "profileUrls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "maxResults": 1,
  "proxy": {
    "useApifyProxy": true
  }
}' |
apify call themineworks/linkedin-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/acts/lDghPuhZBgVdt0olp/builds/HxLdb5PZjsKfRWxJw/openapi.json
