# LinkedIn Profile Scraper (No Cookies) (`linkedin-enrich101/linkedin-profile-scraper`) Actor

Scrape the full public footprint of any LinkedIn profile from its URL — profile sections, posts, comments, reactions, and raw HTML — no login or cookie required.

- **URL**: https://apify.com/linkedin-enrich101/linkedin-profile-scraper.md
- **Developed by:** [Thomas](https://apify.com/linkedin-enrich101) (community)
- **Categories:** AI, Agents, Automation
- **Stats:** 592 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

Pay per usage

This Actor is paid per platform usage. The Actor is free to use, and you only pay for the Apify platform usage, which gets cheaper the higher subscription plan you have.

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

## 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 (No Cookies) — Full Extraction

**Get the maximum public footprint of any LinkedIn profile from just its URL — no login, no session cookie, no browser setup.** For each profile this Actor aggregates every no-cookie data surface LinkedIn exposes into **one comprehensive record**: full profile sections, the person's posts, their comments, their reactions, and a best-effort raw-HTML capture.

Runs on the [Apify platform](https://apify.com) — API access, scheduling, integrations, and monitoring included.

### What it collects

For every profile URL you pass in, the output record contains:

- **`profile`** — every populated profile section: name, headline, about, location, current company, follower/connection counts, verification flags, **experience, education, certifications, skills, languages, honors**, and (optionally) a **work email**.
- **`posts`** — the person's posts/activity: text, media, URLs, timestamps, and full reaction breakdowns (likes, celebrate, support, love, insightful, …).
- **`comments`** — comments the person left, each with the post it was left on.
- **`reactions`** — posts the person reacted to, with the reaction, the post, and its author.
- **`html`** — a best-effort fetch of the public profile HTML via an Apify residential proxy, with any JSON-LD and Open Graph tags parsed and the raw bytes saved to the key-value store. **Note:** logged-out LinkedIn almost always returns an auth wall (HTTP 999) with no profile data — the structured sections above are the true no-cookie maximum; this field exists for completeness and transparency.
- **`counts`** / **`sources`** — per-section counts and provenance for every datapoint.

Under the hood it delegates each surface to the corresponding no-cookie Actor by [apimaestro](https://apify.com/apimaestro) (profile full-sections, batch posts, comments, reactions) and merges the verbatim results by username. No LinkedIn credentials are ever used.

### Why use it?

Logged-out LinkedIn profile pages are auth-walled, so scraping them yourself returns nothing. This Actor gives you **URL in → everything out**: lead enrichment, recruiting/sourcing, CRM hydration, competitor and activity analysis, and people datasets — all cookie-free.

### How to use

1. Open the **Input** tab.
2. Paste one or more profile URLs into **LinkedIn profile URLs** (e.g. `https://www.linkedin.com/in/aymaneelhattab`). Bare usernames work too.
3. Toggle which sections you want (profile is always fetched; posts / comments / reactions / email / HTML are optional) and set the **activity limit**.
4. Click **Start**. Each profile becomes one rich record in the dataset.

### Input

| Field | Type | Default | Description |
|-------|------|---------|-------------|
| `profileUrls` | array | — | Profile URLs or usernames (required). |
| `includeEmail` | boolean | `true` | Resolve a work email per profile. |
| `includePosts` | boolean | `true` | Scrape posts / activity. |
| `includeComments` | boolean | `true` | Scrape comments the person left. |
| `includeReactions` | boolean | `true` | Scrape posts the person reacted to. |
| `activityLimit` | integer | `100` | Max posts / comments / reactions per profile. |
| `fetchHtml` | boolean | `true` | Best-effort raw HTML fetch (usually an auth wall). |

```json
{
    "profileUrls": ["https://www.linkedin.com/in/aymaneelhattab"],
    "includeEmail": true,
    "includePosts": true,
    "includeComments": true,
    "includeReactions": true,
    "activityLimit": 100,
    "fetchHtml": true
}
````

### Output

One dataset item per profile. Download as JSON, CSV, Excel, or HTML.

```json
{
    "username": "aymaneelhattab",
    "full_name": "Aymane Elhattab",
    "profile_url": "https://www.linkedin.com/in/aymaneelhattab",
    "scraped_at": "2026-07-02T13:20:00+00:00",
    "profile": {
        "basic_info": { "headline": "Engineering Manager @Appstronaute", "current_company": "Appstronaute", "location": { "full": "Marseille, France" }, "follower_count": 1375, "email": null },
        "experience": [ { "title": "Engineering Manager", "company": "Appstronaute", "is_current": true } ],
        "education": [],
        "languages": [ { "language": "English", "proficiency": "…" } ]
    },
    "posts": [ { "text": "Looking for talented React Native developers…", "posted_at": {"date": "2026-02-15 17:06:31"}, "stats": { "total_reactions": 38, "comments": 2, "reposts": 1 } } ],
    "comments": [ { "comment_text": "Nice 🚀", "post": { "…": "…" } } ],
    "reactions": [ { "action": "like", "post_url": "https://www.linkedin.com/…", "author": { "…": "…" } } ],
    "html": { "http_status": 999, "blocked": true, "raw_html_key": "html-aymaneelhattab", "json_ld": [], "meta": {}, "note": "LinkedIn served an auth wall to the logged-out request." },
    "counts": { "experience": 5, "posts": 3, "comments": 1, "reactions": 74 }
}
```

#### Main data fields

| Field | Description |
|-------|-------------|
| `profile.basic_info` | Name, headline, about, location, company, counts, flags, email. |
| `profile.experience` / `education` / `certifications` / `languages` / `skills` | All populated profile sections. |
| `posts` | Posts with text, media, timestamps, and reaction breakdowns. |
| `comments` | Comments left by the person + their parent posts. |
| `reactions` | Posts the person reacted to + reaction type. |
| `html` | Raw HTML capture summary + parsed JSON-LD / OG (key-value store holds raw bytes). |
| `counts` / `sources` | Per-section counts and data provenance. |

### Cost

Billed per result by the underlying no-cookie Actors (about **$0.005 per profile** for details, plus a small per-item cost for posts / comments / reactions). Raising `activityLimit` fetches more activity and costs more. Apify's free monthly credit is enough for hundreds of fully-enriched profiles.

### Tips

- Batch many URLs into `profileUrls` — sources run once for the whole batch.
- Turn off `includeReactions` or lower `activityLimit` to cut cost on high-activity profiles.
- Turn off `fetchHtml` to skip the (usually auth-walled) HTML fetch entirely.

### FAQ, disclaimers & support

- **Do I need a LinkedIn account or cookie?** No — fully cookieless.
- **Why is `html` an auth wall?** LinkedIn blocks logged-out profile page requests (HTTP 999). No public HTML is available without a session; the structured sections are the no-cookie maximum.
- **A profile returned little data.** The person may not expose those sections publicly, or the username is wrong/private.
- **Legality:** only public data is accessed. You are responsible for compliant use (LinkedIn Terms, GDPR/CCPA).

# Actor input Schema

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

One or more LinkedIn profile URLs (or bare usernames). Each is scraped for every no-cookie datapoint available.

## `cookie` (type: `string`):

Your LinkedIn session cookie. Required to run the Actor.

## `usernames` (type: `array`):

Alternative to profile URLs — bare LinkedIn usernames/slugs to scrape.

## `flat` (type: `boolean`):

Emit each profile as a flat record (basic\_info + sections at top level) instead of the nested aggregate. Used by downstream enrichment.

## `includeEmail` (type: `boolean`):

Attempt to resolve a work email for each profile.

## `includePosts` (type: `boolean`):

Scrape the person's posts (text, media, reaction breakdowns).

## `includeComments` (type: `boolean`):

Scrape comments the person left, with the posts they were left on.

## `includeReactions` (type: `boolean`):

Scrape posts the person reacted to (like / celebrate / support / …).

## `activityLimit` (type: `integer`):

Max posts / comments / reactions to fetch per profile. Higher = more complete but costs more.

## `fetchHtml` (type: `boolean`):

Best-effort fetch of the public profile HTML via a residential proxy (stored in the key-value store, JSON-LD/OG parsed). Logged-out LinkedIn usually returns an auth wall — kept for completeness.

## Actor input object example

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/aymaneelhattab"
  ],
  "flat": false,
  "includeEmail": true,
  "includePosts": true,
  "includeComments": true,
  "includeReactions": true,
  "activityLimit": 100,
  "fetchHtml": 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/aymaneelhattab"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("linkedin-enrich101/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/aymaneelhattab"] }

# Run the Actor and wait for it to finish
run = client.actor("linkedin-enrich101/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/aymaneelhattab"
  ]
}' |
apify call linkedin-enrich101/linkedin-profile-scraper --silent --output-dataset

```

## MCP server setup

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

```

## OpenAPI specification

```json
{
    "openapi": "3.0.1",
    "info": {
        "title": "LinkedIn Profile Scraper (No Cookies)",
        "description": "Scrape the full public footprint of any LinkedIn profile from its URL — profile sections, posts, comments, reactions, and raw HTML — no login or cookie required.",
        "version": "0.3",
        "x-build-id": "JJEQIfm6PsEuexAQN"
    },
    "servers": [
        {
            "url": "https://api.apify.com/v2"
        }
    ],
    "paths": {
        "/acts/linkedin-enrich101~linkedin-profile-scraper/run-sync-get-dataset-items": {
            "post": {
                "operationId": "run-sync-get-dataset-items-linkedin-enrich101-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/linkedin-enrich101~linkedin-profile-scraper/runs": {
            "post": {
                "operationId": "runs-sync-linkedin-enrich101-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/linkedin-enrich101~linkedin-profile-scraper/run-sync": {
            "post": {
                "operationId": "run-sync-linkedin-enrich101-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": {
                    "profileUrls": {
                        "title": "LinkedIn profile URLs",
                        "type": "array",
                        "description": "One or more LinkedIn profile URLs (or bare usernames). Each is scraped for every no-cookie datapoint available.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "cookie": {
                        "title": "Session cookie",
                        "type": "string",
                        "description": "Your LinkedIn session cookie. Required to run the Actor."
                    },
                    "usernames": {
                        "title": "Usernames",
                        "type": "array",
                        "description": "Alternative to profile URLs — bare LinkedIn usernames/slugs to scrape.",
                        "items": {
                            "type": "string"
                        }
                    },
                    "flat": {
                        "title": "Flat output",
                        "type": "boolean",
                        "description": "Emit each profile as a flat record (basic_info + sections at top level) instead of the nested aggregate. Used by downstream enrichment.",
                        "default": false
                    },
                    "includeEmail": {
                        "title": "Resolve work email",
                        "type": "boolean",
                        "description": "Attempt to resolve a work email for each profile.",
                        "default": true
                    },
                    "includePosts": {
                        "title": "Include posts / activity",
                        "type": "boolean",
                        "description": "Scrape the person's posts (text, media, reaction breakdowns).",
                        "default": true
                    },
                    "includeComments": {
                        "title": "Include comments",
                        "type": "boolean",
                        "description": "Scrape comments the person left, with the posts they were left on.",
                        "default": true
                    },
                    "includeReactions": {
                        "title": "Include reactions",
                        "type": "boolean",
                        "description": "Scrape posts the person reacted to (like / celebrate / support / …).",
                        "default": true
                    },
                    "activityLimit": {
                        "title": "Activity limit (per section)",
                        "minimum": 1,
                        "type": "integer",
                        "description": "Max posts / comments / reactions to fetch per profile. Higher = more complete but costs more.",
                        "default": 100
                    },
                    "fetchHtml": {
                        "title": "Also fetch raw profile HTML",
                        "type": "boolean",
                        "description": "Best-effort fetch of the public profile HTML via a residential proxy (stored in the key-value store, JSON-LD/OG parsed). Logged-out LinkedIn usually returns an auth wall — kept for completeness.",
                        "default": true
                    }
                }
            },
            "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
                                    }
                                }
                            }
                        }
                    }
                }
            }
        }
    }
}
```
