# LinkedIn Profile Scraper ⚡ Full Data, No Cookies (`analytics_tupiniquim/linkedin-profile-scraper`) Actor

Scrape full public LinkedIn profile details by username or URL — no login or cookies. Get name, headline, about, experience with dates, education, location, photo and followers. Pay only for profiles delivered.

- **URL**: https://apify.com/analytics\_tupiniquim/linkedin-profile-scraper.md
- **Developed by:** [Guilherme Teixeira](https://apify.com/analytics_tupiniquim) (community)
- **Categories:** Lead generation, Automation, Social media
- **Stats:** 2 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $2.00 / 1,000 profile scrapeds

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 🔗 (No Cookies)

Scrape **full public LinkedIn profile details** from just a username or profile URL —
**no login, no cookies, no session**. Get name, headline, about, work experience with
dates, education, location, photo and follower count.

> 🇬🇧 English · [🇧🇷 Português](#-português-brasil) · [🇪🇸 Español](#-español)

***

### Why this scraper?

- 💸 **60% cheaper** than the alternatives — **$2.00 per 1,000 profiles**, one flat price, no add-ons.
- ✅ **You only pay for profiles we actually return.** Private, gated or not-found profiles come back as clear error items and are **never charged**.
- 🍪 **No cookies, no login** — reads public profile data over plain HTTP.
- ⚡ **Fast & low-cost** — one request per profile, no browser.
- 🌎 **Trilingual docs** — English, Portuguese, Spanish.

### Input

| Field | Type | Description |
|---|---|---|
| `profiles` | array | LinkedIn profile URLs (`https://www.linkedin.com/in/username`) or bare usernames. |
| `proxyConfiguration` | object | Proxy settings. Datacenter (default) works for most profiles; use residential for very large batches. |

#### Example input

```json
{
    "profiles": [
        "williamhgates",
        "https://www.linkedin.com/in/satyanadella"
    ],
    "proxyConfiguration": { "useApifyProxy": true }
}
```

### Output

Each public profile becomes one dataset item:

```json
{
    "username": "williamhgates",
    "profileUrl": "https://www.linkedin.com/in/williamhgates",
    "fullName": "Bill Gates",
    "headline": "Creator, Top Voice",
    "jobTitles": ["Co-chair", "Founder", "Co-founder"],
    "about": "Chair of the Gates Foundation. Founder of Breakthrough Energy...",
    "location": { "country": "US", "locality": "Seattle, Washington, United States" },
    "photoUrl": "https://media.licdn.com/dms/image/...",
    "followerCount": 40542597,
    "currentPositions": [
        { "name": "Gates Foundation", "url": "https://www.linkedin.com/company/gates-foundation", "startDate": 2000, "endDate": null }
    ],
    "experience": [],
    "education": [
        { "name": "Harvard University", "url": "https://www.linkedin.com/school/harvard-university/", "startDate": 1973, "endDate": 1975 }
    ],
    "languages": [],
    "awards": [],
    "scrapedAt": "2026-07-28T02:00:00.000Z"
}
```

#### Error items

Profiles that can't be returned (private, gated behind login, not found, or blocked)
are pushed as **error items** — never as silent gaps, and **never charged**:

```json
{ "input": "someuser", "username": "someuser", "error": "Profile is not publicly available...", "errorCode": "BLOCKED" }
```

| `errorCode` | Meaning |
|---|---|
| `INVALID_INPUT` | Could not parse a username/URL from the input |
| `NOT_FOUND` | Profile does not exist |
| `BLOCKED` | Gated behind login or LinkedIn rate-limited the request (try residential proxy) |
| `PROFILE_PRIVATE_OR_BLOCKED` | Page returned but exposes no public data |

### 💰 Cost example

Pay-per-event: a tiny actor-start fee plus a per-**successful**-profile fee.

| Event | Price |
|---|---|
| Actor start | $0.001 per run |
| Profile scraped | $0.002 per profile ($2.00 / 1,000) |

**Scraping 1,000 profiles** → `1 × $0.001` + `1,000 × $0.002` = **≈ $2.00 total** (only successful profiles count).

### FAQ

**Does it need my LinkedIn cookie or login?** No. It reads only public profile data.

**Why did some profiles return an error?** Some profiles are private or gated behind a login wall — those can't be read publicly by anyone without signing in. You are not charged for them.

**Is it GDPR-safe?** It only extracts data the person chose to make public. Personal data is protected by the GDPR and other laws — scrape only with a legitimate reason.

***

### 🇧🇷 Português (Brasil)

Extraia **dados completos de perfis públicos do LinkedIn** a partir de um username ou URL —
**sem login, sem cookies, sem sessão**. Obtenha nome, headline, resumo, experiência com datas,
educação, localização, foto e número de seguidores.

#### Por que este scraper?

- 💸 **60% mais barato** que as alternativas — **$2,00 por 1.000 perfis**, preço único, sem add-ons.
- ✅ **Você só paga pelos perfis que realmente entregamos.** Perfis privados, restritos ou não encontrados voltam como error items claros e **nunca são cobrados**.
- 🍪 **Sem cookies, sem login** — lê dados públicos via HTTP.
- ⚡ **Rápido e barato** — uma requisição por perfil, sem navegador.
- 🌎 **Documentação trilíngue** — inglês, português, espanhol.

#### Entrada

| Campo | Tipo | Descrição |
|---|---|---|
| `profiles` | array | URLs de perfis do LinkedIn (`https://www.linkedin.com/in/username`) ou usernames. |
| `proxyConfiguration` | object | Proxy. Datacenter (padrão) funciona para a maioria; residencial para lotes muito grandes. |

#### 💰 Exemplo de custo

| Evento | Preço |
|---|---|
| Início do actor | $0,001 por execução |
| Perfil extraído | $0,002 por perfil ($2,00 / 1.000) |

**Extrair 1.000 perfis** → `1 × $0,001` + `1.000 × $0,002` = **≈ $2,00 no total** (só perfis com sucesso contam).

#### Perguntas frequentes

**Preciso do meu cookie/login do LinkedIn?** Não. Lê apenas dados públicos.

**Por que alguns perfis deram erro?** Alguns perfis são privados ou exigem login — ninguém consegue lê-los publicamente sem entrar. Você não é cobrado por eles.

***

### 🇪🇸 Español

Extrae **datos completos de perfiles públicos de LinkedIn** a partir de un nombre de usuario o URL —
**sin inicio de sesión, sin cookies, sin sesión**. Obtén nombre, titular, acerca de, experiencia con
fechas, educación, ubicación, foto y número de seguidores.

#### ¿Por qué este scraper?

- 💸 **60% más barato** que las alternativas — **$2,00 por cada 1.000 perfiles**, precio único, sin cargos ocultos.
- ✅ **Solo pagas por los perfiles que realmente entregamos.** Los perfiles privados, restringidos o no encontrados se devuelven como error items claros y **nunca se cobran**.
- 🍪 **Sin cookies, sin inicio de sesión** — lee datos públicos por HTTP.
- ⚡ **Rápido y económico** — una petición por perfil, sin navegador.
- 🌎 **Documentación trilingüe** — inglés, portugués, español.

#### Entrada

| Campo | Tipo | Descripción |
|---|---|---|
| `profiles` | array | URLs de perfiles de LinkedIn (`https://www.linkedin.com/in/username`) o nombres de usuario. |
| `proxyConfiguration` | object | Proxy. Datacenter (predeterminado) funciona para la mayoría; residencial para lotes muy grandes. |

#### 💰 Ejemplo de costo

| Evento | Precio |
|---|---|
| Inicio del actor | $0,001 por ejecución |
| Perfil extraído | $0,002 por perfil ($2,00 / 1.000) |

**Extraer 1.000 perfiles** → `1 × $0,001` + `1.000 × $0,002` = **≈ $2,00 en total** (solo cuentan los perfiles exitosos).

#### Preguntas frecuentes

**¿Necesito mi cookie o inicio de sesión de LinkedIn?** No. Solo lee datos públicos.

**¿Por qué algunos perfiles dieron error?** Algunos perfiles son privados o requieren inicio de sesión — nadie puede leerlos públicamente sin iniciar sesión. No se te cobra por ellos.

# Actor input Schema

## `profiles` (type: `array`):

List of LinkedIn profile URLs (https://www.linkedin.com/in/username) or bare usernames.

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

Proxy settings. Datacenter (the default) keeps cost low; switch to residential if LinkedIn starts blocking large batches.

## Actor input object example

```json
{
  "profiles": [
    "neal-mohan"
  ],
  "proxyConfiguration": {
    "useApifyProxy": true
  }
}
```

# Actor output Schema

## `profiles` (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 = {
    "profiles": [
        "williamhgates",
        "https://www.linkedin.com/in/satyanadella"
    ],
    "proxyConfiguration": {
        "useApifyProxy": true
    }
};

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

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

```

## MCP server setup

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

```

## OpenAPI specification

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