# LinkedIn Profile Scraper (No Cookies, No Login) (`profilehunt/linkedin-profile-scraper-profilehunt`) Actor

Extract public LinkedIn profile data from profile URLs, with no account, cookies or login. Get name, headline, location, about, experience with titles and dates, education, languages, followers, connections, badges, recent posts and articles. $1 per 2,000 profiles found; not found is free.

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

## Pricing

$0.50 / 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.

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, No Login)

**LinkedIn Profile Scraper** turns public LinkedIn profile URLs into clean, structured **LinkedIn profile data**: name, headline, location, about, **work experience with job titles and dates**, education, languages, followers, connections, badges, and the person's **recent posts and articles**.

You don't need a LinkedIn account, cookies or a browser extension, so your own account is never at risk. You pay **$2 per 1,000 profiles found**, and profiles that are private, removed or invalid are **free**.

### Why use this LinkedIn scraper?

- **No login, no cookies.** It reads only the public profile, the view anyone sees without signing in.
- **Pay only for results.** Not-found and private profiles cost nothing, and there's no extra charge for compute.
- **Bulk and fast.** Paste thousands of URLs; they're scraped in parallel batches of 100.
- **Spreadsheet-ready.** Every row has flat `current_company`, `current_title` and `current_company_url` columns next to the full nested data.
- **Activity included.** Recent posts (text, date, likes) and articles come with every profile at no extra cost.
- **Spending limit respected.** Set a maximum cost per run and the scraper stops before it goes over.

### How to scrape LinkedIn profiles

1. Click **Try for free**.
2. Paste LinkedIn profile URLs into **Profile URLs**, one per line.
3. Click **Start**.
4. Download the results as **JSON, CSV, Excel or HTML**, or fetch them with the Apify API.

### Input

The only input is a list of profile URLs. All of these formats work:

- `https://www.linkedin.com/in/satyanadella`
- `linkedin.com/in/satyanadella` (no https)
- `https://uk.linkedin.com/in/...` (country subdomains)
- URLs with tracking parameters such as `?utm_source=...`

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

Duplicate URLs are removed, so you're never charged twice for the same profile in a run.

### What LinkedIn profile data can you extract?

| Field | Description |
|---|---|
| `input_url` | The URL you submitted, for matching rows back to your list |
| `status` | `ok`, `gone` (removed or invalid), `unavailable` (not public) or `failed` |
| `current_company`, `current_title`, `current_company_url` | Current role, as flat columns |
| `full_name`, `first_name`, `last_name` | Name |
| `headline` | Profile headline |
| `about` | The About section |
| `location`, `country` | City or region, and ISO country code |
| `photo_url` | Profile photo |
| `experience[]` | Company, company URL, job title (current roles), location, description, start and end dates |
| `education[]` | School, school URL, start and end dates |
| `languages[]` | Languages listed on the profile |
| `followers`, `connections` | Follower count, and connections (LinkedIn caps the public count at 500) |
| `creator`, `badges[]` | Creator mode and badges such as Top Voice |
| `recent_posts[]` | Post URL, date, text and likes |
| `recent_articles[]` | Article URL, headline, cover image, date and likes |
| `last_post_at` | Date of the latest post or article |
| `public_id`, `profile_url` | The profile's public ID and canonical URL |
| `scraped_at` | When the profile was fetched |

Every field is always present: `null` when the profile doesn't show it, `[]` for an empty list. Emails and phone numbers are **not** collected.

### Output example

Real output for one profile (long text and lists shortened):

```json
{
  "input_url": "https://www.linkedin.com/in/williamhgates",
  "status": "ok",
  "current_company": "Gates Foundation",
  "current_title": "Co-chair",
  "current_company_url": "https://www.linkedin.com/company/gates-foundation",
  "public_id": "williamhgates",
  "profile_url": "https://www.linkedin.com/in/williamhgates",
  "full_name": "Bill Gates",
  "first_name": "Bill",
  "last_name": "Gates",
  "photo_url": "https://media.licdn.com/dms/image/v2/D5603AQF-RYZP55jmXA/profile-displayphoto-shrink_200_200/B56ZRi8g.aGsAY-/0/1736826818802",
  "headline": "Chair, Gates Foundation and Founder, Breakthrough Energy",
  "about": "Chair of the Gates Foundation. Founder of Breakthrough Energy. Co-founder of Microsoft. Voracious reader. Avid...",
  "location": "Seattle, Washington, United States",
  "country": "US",
  "experience": [
    {
      "company": "Gates Foundation",
      "company_url": "https://www.linkedin.com/company/gates-foundation",
      "title": "Co-chair",
      "location": null,
      "description": null,
      "start_date": "2000",
      "end_date": null
    },
    {
      "company": "Breakthrough Energy",
      "company_url": "https://www.linkedin.com/company/breakthrough-energy",
      "title": "Founder",
      "location": null,
      "description": null,
      "start_date": "2015",
      "end_date": null
    },
    {
      "company": "Microsoft",
      "company_url": "https://www.linkedin.com/company/microsoft",
      "title": "Co-founder",
      "location": null,
      "description": null,
      "start_date": "1975",
      "end_date": null
    }
  ],
  "education": [
    {
      "school": "Harvard University",
      "school_url": "https://www.linkedin.com/school/harvard-university/",
      "start_date": "1973",
      "end_date": "1975"
    }
  ],
  "languages": [],
  "followers": 40744893,
  "connections": 8,
  "creator": true,
  "badges": [
    "Creator",
    "Top Voice"
  ],
  "last_post_at": "2026-10-21T18:16:54.169Z",
  "recent_posts": [
    {
      "url": "https://www.linkedin.com/posts/williamhgates_vaccines-deliver-over-us-30-billion-in-economic-activity-7518737092244414464-hfbz",
      "posted_at": "2026-10-21T18:16:54.169Z",
      "text": "Vaccines are among the best investments a country can make to save lives, protect communit...",
      "likes": 766
    }
  ],
  "recent_articles": [
    {
      "url": "https://www.linkedin.com/pulse/affordable-climate-win-look-sky-bill-gates-eoj7e",
      "headline": "For an affordable climate win, look to the sky",
      "image_url": null,
      "published_at": "2026-10-12T20:10:59.000Z",
      "likes": 3933
    }
  ],
  "scraped_at": "2026-10-22T10:56:42.961Z"
}
```

### How much does it cost to scrape LinkedIn profiles?

**$2.00 per 1,000 profiles found**, with lower prices on Apify's Silver and Gold plans.

- 1,000 profiles found: **$2.00**
- 10,000 profiles found: **$20.00**
- Profiles that are private, removed or invalid: **$0**

There's no separate compute charge. To cap a run's cost, set **Maximum cost per run** in the run options; the scraper stops before going over it.

### Use cases

- **Lead enrichment:** add titles, companies and locations to a CRM list of LinkedIn URLs.
- **Recruiting:** review candidates' experience and education in bulk.
- **Job-change alerts:** schedule a run and compare `current_company` week to week.
- **Sales timing:** use `last_post_at` and `recent_posts` to find active people and conversation starters.
- **Creator and influencer research:** compare `followers`, `badges` and posting activity.
- **Market research:** see where people at a company worked before and where they studied.

### Integrations and API

Run the scraper from your own code or tools through the Apify API:

- **No-code:** Make, Zapier, n8n, Google Sheets, Airtable, Slack and webhooks, through Apify integrations.
- **Code:** the Apify API, or the Python and JavaScript clients (`apify-client`).
- **Scheduling:** run it daily or weekly from Apify Schedules.
- **AI agents:** call it from MCP-compatible assistants through the Apify MCP server.

### Limits and responsible use

- Only data visible on the **public** profile is returned; this is not the full signed-in profile. Some fields are hidden by LinkedIn for some members, and they come back as `null`.
- A profile set to private, or removed, returns `status: "unavailable"` or `"gone"` and isn't charged.
- Public data can still be **personal data** under laws such as the GDPR and CCPA. Collect only what you need, have a lawful basis for processing it, keep it secure, and don't use it for spam. LinkedIn's terms also restrict some automated collection. You are responsible for how you use the results; if in doubt, ask a lawyer.

### FAQ

#### Do I need a LinkedIn account, login or cookies?

No. The scraper reads public profiles without signing in, so nothing touches your LinkedIn account.

#### How do I scrape a LinkedIn profile from its URL?

Paste the URL into **Profile URLs** and click **Start**. The profile comes back as one row in the dataset.

#### How many profiles can I scrape per run?

As many as you like. They're processed in batches of 100, and a run keeps going until the list is done or your spending limit is reached.

#### Am I charged for profiles that aren't found?

No. You pay only for rows with `status: "ok"`.

#### Why are some fields empty?

LinkedIn doesn't show every field publicly, and hides some details for some members. Job titles are shown for current roles only.

#### Does it return email addresses or phone numbers?

No. It only returns what's on the public profile.

#### How do I match results to my input list?

Every row includes `input_url`, exactly as you submitted it.

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

Collecting publicly available data is generally lawful, but data-protection laws still apply to personal data, and the rules depend on where you are and what you do with the data. See *Limits and responsible use* above.

#### Can I use it with Make, Zapier, n8n or Python?

Yes. Use the Apify integrations or the API; see *Integrations and API* above.

#### Can I schedule recurring runs?

Yes. Create a task with your URLs and attach an Apify Schedule.

### Support

Found a bug or need a field? Open an issue on the **Issues** tab and we'll reply quickly.

### Disclaimer

This is an independent tool. It 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.

# Actor input Schema

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

Add public LinkedIn profile URLs, one per line. Full links (https://www.linkedin.com/in/satyanadella), links without https (linkedin.com/in/satyanadella) and country subdomains (uk.linkedin.com/in/...) all work. Duplicates are removed, and you pay only for profiles that are found.

## Actor input object example

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

# Actor output Schema

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

Scraped LinkedIn profiles with every field: name, headline, about, experience, education, languages, followers, connections, badges, recent posts and articles.

# 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/williamhgates",
        "linkedin.com/in/satyanadella"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("profilehunt/linkedin-profile-scraper-profilehunt").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/williamhgates",
        "linkedin.com/in/satyanadella",
    ] }

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

```

## MCP server setup

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

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/dROG9z8GiyYmGJjnm/builds/iu6djEMFJzpE8ar2j/openapi.json
