# LinkedIn Profile Scraper ✅ No Cookies · $2.50/1k (`up2data/linkedin-profile-scraper`) Actor

Enrich public LinkedIn profiles without cookies or login: names, headlines, experience, education, and more. $2.50 per 1,000 successful profiles; failures are free.

- **URL**: https://apify.com/up2data/linkedin-profile-scraper.md
- **Developed by:** [Up2Data](https://apify.com/up2data) (community)
- **Categories:** Lead generation, Social media, Automation
- **Features:** Limited permissions
- **Stats:** 80 total users, 43 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.75 / 1,000 profiles

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.
Since this Actor supports Apify Store discounts, the price gets lower the higher subscription plan you have.

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

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
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.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

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

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## LinkedIn Profile Scraper ✅ No Cookies · $2.50/1k

Enrich **public LinkedIn profiles** without cookies, browser sessions, or `li_at` tokens. Paste profile URLs (or public identifiers), get structured people data, and pay **only when a profile succeeds**.

**$2.50 per 1,000 successful profiles** · Failures free · Actor Start ~$0.00005

👉 Pair with firmographics: [LinkedIn Company Scraper](https://apify.com/up2data/linkedin-company-scraper)\
👤 Publisher: [up2data](https://apify.com/up2data) · Support: **nick@dbee.io**

***

### Why this Actor

Most LinkedIn scrapers ask you to paste a session cookie. That breaks often, risks account bans, and is a poor fit for agents and scheduled pipelines.

**Up2Data is cookieless.** You send public profile URLs. We return structured JSON. No LinkedIn login on your side.

Ideal for:

- Sales and RevOps enrichment from LinkedIn URL lists
- Clay / Apollo / HubSpot / CRM URL → people fields
- Agentic workflows that need stable, pay-per-result pricing
- Researchers building people datasets from public profiles

**Honest scope:** this Actor enriches profiles. It does **not** find emails or phone numbers.

***

### What you get (output fields)

| Field | Type | Description |
|-------|------|-------------|
| `full_name` | string | Display name |
| `headline` | string | Profile headline |
| `about` | string | About / summary |
| `public_identifier` | string | Public vanity id (e.g. `satyanadella`) |
| `url` | string | Canonical public profile URL |
| `location` | object | `city`, `country`, `region` |
| `current_company` | object | `name`, `title`, `url`, `started_at` |
| `positions` | array | `title`, `company`, `company_url`, `started_at`, `ended_at` |
| `education` | array | `school`, `degree`, `field` |
| `connections_count` | number | Connections (when available) |
| `followers_count` | number | Followers (when available) |
| `is_open_to_work` | boolean | Open to work flag |
| `is_premium` | boolean | Premium badge |
| `is_verified` | boolean | Verified badge |
| `_meta` | object | `creditsUsed`, `requestId`, `sourceUrl` |
| `error` | object | `code`, `message` (on failure; failures are free) |

Optional input `fields` lets you restrict top-level keys in the output. **Same price** whether you request all fields or a subset.

***

### Pricing

| Event | Price |
|-------|-------|
| Successful profile | **$0.0025** ($2.50 / 1,000) |
| Failed profile | **$0** |
| Actor start | ~$0.00005 |

#### Cost examples

| Successful profiles | Approx. cost |
|---------------------|--------------|
| 100 | ~$0.30 |
| 1,000 | ~$2.50 |
| 10,000 | ~$25.00 |
| 50,000 | ~$125.00 |

You pay for **successes only**. Bad URLs and hard failures do not burn PPE credits.

***

### Input

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `profileUrls` | array of strings | ✅ | Public LinkedIn profile URLs **or** public identifiers (e.g. `satyanadella`) |
| `fields` | array of strings | optional | Restrict top-level output fields (same price) |

#### Prefill

`https://www.linkedin.com/in/satyanadella`

#### Example input

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/satyanadella",
    "satyanadella"
  ]
}
```

#### Example input with field filter

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/satyanadella"
  ],
  "fields": [
    "full_name",
    "headline",
    "current_company",
    "location",
    "url"
  ]
}
```

***

### Example output

> **EXAMPLE** — illustrative public-style sample consistent with the schema. Not a live scrape guarantee.

```json
{
  "full_name": "Satya Nadella",
  "headline": "Chairman and CEO at Microsoft",
  "about": "As chairman and CEO of Microsoft, I define company strategy...",
  "public_identifier": "satyanadella",
  "url": "https://www.linkedin.com/in/satyanadella",
  "location": {
    "city": "Redmond",
    "country": "United States",
    "region": "Washington"
  },
  "current_company": {
    "name": "Microsoft",
    "title": "Chairman and CEO",
    "url": "https://www.linkedin.com/company/microsoft",
    "started_at": "2014-02"
  },
  "positions": [
    {
      "title": "Chairman and CEO",
      "company": "Microsoft",
      "company_url": "https://www.linkedin.com/company/microsoft",
      "started_at": "2014-02",
      "ended_at": null
    }
  ],
  "education": [
    {
      "school": "University of Chicago Booth School of Business",
      "degree": "MBA",
      "field": null
    }
  ],
  "connections_count": 500,
  "followers_count": 10000000,
  "is_open_to_work": false,
  "is_premium": true,
  "is_verified": true,
  "_meta": {
    "creditsUsed": 1,
    "requestId": "example-request-id",
    "sourceUrl": "https://www.linkedin.com/in/satyanadella"
  }
}
```

Full demo file: see the Up2Data growth pack `demo/sample-profile.json` or run the Actor with the prefill URL.

***

### Why no cookies?

| Approach | What you maintain | Typical failure mode |
|----------|-------------------|----------------------|
| Cookie / `li_at` tools | Fresh session from a real LinkedIn account | Cookie expires, account flagged, pipeline stops |
| Browser automation with login | Proxies, CAPTCHAs, account health | Fragile at scale |
| **Up2Data (this Actor)** | List of public URLs | Individual URL failures only; no session to babysit |

Cookieless = better for **schedulers, Clay tables, APIs, and agents**.

***

### Comparison (pricing & approach)

Approximate public Store pricing for LinkedIn **profile** enrichment. Always verify current competitor pages.

| | Up2Data | HarvestAPI (approx.) | ApiMaestro (approx.) | Cookie-based tools |
|--|---------|----------------------|----------------------|--------------------|
| Typical price | **$2.50 / 1k** successes | ~$4 / 1k | ~$5 / 1k | Varies + account risk |
| Cookies required | **No** | Usually no | Check listing | **Yes** (`li_at` / session) |
| Pay only on success | **Yes** | Check listing | Check listing | Often run-time / compute |
| Email finding | **No** (by design) | Varies | Varies | Sometimes bundled |
| Company Actor pair | **Yes** ([link](https://apify.com/up2data/linkedin-company-scraper)) | Varies | Varies | Varies |

We compete on **reliability + cookieless ops + fair PPE**, not a race to $2/1k.

***

### Use cases

1. **URL list → CRM fields** — Export LinkedIn URLs from Apollo/Clay/CSV, enrich name, headline, company, location, experience.
2. **People + company join** — Run this Actor, then enrich `current_company.url` with the [Company Scraper](https://apify.com/up2data/linkedin-company-scraper).
3. **Agent pipelines** — Call via Apify API; agentic payments are whitelisted for automated top-ups / usage patterns supported by Apify.
4. **Lead scoring inputs** — Title, company, open-to-work, premium/verified signals without maintaining LinkedIn sessions.

***

### API & agents

Run from the Apify API, Python/JS clients, or any HTTP agent stack.

- PPE: **$0.0025 per successful profile**
- Failures: free
- Optional `fields` filter for leaner payloads (same price)
- Agentic payments: **whitelisted** for automated / agent-driven usage on Apify

Support for integration questions: **nick@dbee.io**

***

### FAQ

**Do I need a LinkedIn cookie or account?**\
No. Public profile URLs or public identifiers only.

**Do you find emails?**\
No. This Actor returns public profile enrichment fields only. Pair with a dedicated email finder if you need contacts.

**What if a profile fails?**\
You are not charged PPE for that profile. Check `error.code` / `error.message` on the item.

**Can I limit output fields?**\
Yes. Pass optional `fields` (array of top-level keys). Price is unchanged.

**Can I use public identifiers instead of full URLs?**\
Yes. e.g. `satyanadella` works in `profileUrls`.

**Is there a company scraper?**\
Yes: [LinkedIn Company Scraper ✅ No Cookies · $2.50/1k](https://apify.com/up2data/linkedin-company-scraper)

**Who is behind up2data?**\
Nick Tomic · Support: nick@dbee.io · Profile: [apify.com/up2data](https://apify.com/up2data)

***

### Support

Email **nick@dbee.io** with run IDs for fastest help.\
Store profile: <https://apify.com/up2data>

If this Actor saved you cookie chaos, a Store review helps other builders find it. Thank you.

# Actor input Schema

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

Public LinkedIn profile URLs or public identifiers (e.g. satyanadella).

## `fields` (type: `array`):

Restrict the output to specific top-level fields. Same price — trims payload only.

## Actor input object example

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

# Actor output Schema

## `profiles` (type: `string`):

Dataset of scraped public LinkedIn profiles (and free failed items with error).

# 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"
    ]
};

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

# Run the Actor and wait for it to finish
run = client.actor("up2data/linkedin-profile-scraper").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).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"
  ]
}' |
apify call up2data/linkedin-profile-scraper --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,up2data/linkedin-profile-scraper"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/GY5mUKzLeBPbxvgZg/builds/Mv0oH64SXN8woqzQP/openapi.json
