# LinkedIn Profile Scraper: Public Profiles & Posts (`luzivanlt/linkedin-profiles-scraper`) Actor

Public LinkedIn profiles from links: name, location, exact followers, current company, recent posts. $2.50 per 1,000 profiles. School, about; work history where LinkedIn shows it.

- **URL**: https://apify.com/luzivanlt/linkedin-profiles-scraper.md
- **Developed by:** [Luzi](https://apify.com/luzivanlt) (community)
- **Categories:** Lead generation, Social media
- **Stats:** 2 total users, 1 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: Public Profiles & Posts

Get public LinkedIn profiles from a list of links: name, location, the exact
follower count, current company and school, the About text, and the person's
recent posts and articles with their reactions and comments. Where LinkedIn
shows them, every role (including the ones it groups under one company),
education and skills too. One row per profile. No LinkedIn account, login or
cookies needed.

Tested daily. Latest check: 4 of 4 public figures' profiles read, each with
its work history (24 roles on one, grouped roles included) and its recent
activity.

### What does this Actor do?

You give it LinkedIn profile links (or just the names after `/in/`). For each
profile it reads the page LinkedIn shows to anyone who is not signed in, and
saves one row with everything on it. On most profiles of people who are not
public figures, LinkedIn hides the work history, education, headline and
skills from that page (see *Good to know*); the rest is there:

- name, first and last name, headline, location (with its city, region and
  country) and country code
- the About text
- the exact follower count and the connections line ("500+")
- badges such as "Top Voice" or "Creator", and whether LinkedIn marks the
  person as an influencer
- photo and cover image
- current company and school, with their LinkedIn pages, the current job
  title, and the websites the profile lists
- **experience**: each role's title, company, company page and logo, dates
  (as shown and as year and month numbers), duration, location and
  description, including every role LinkedIn groups under one company
- **education**: school, its logo, degree, field of study, years and notes
- skills, licenses and certifications (issuer, dates, credential id), honors
  and awards, publications, patents (with the other inventors), volunteering
  and recommendations received
- languages, projects, courses and organizations, when the profile shows them
- any other section the profile shows (test scores…), by its heading
- courses the person teaches on LinkedIn Learning
- **articles**: title, link, date, summary, reactions and comments
- **recent activity**: the posts the person shared, reposted, liked or
  commented on, with the text, date, author, image, reactions and comments
- the "Other similar profiles" LinkedIn shows beside the profile
- LinkedIn's member id for the profile

### Why use it?

- **Everything the public profile shows, in one row.** Location, followers,
  current company and school, About, and work history with grouped roles
  where LinkedIn shows it, ready for a CRM or a spreadsheet.
- **See what people talk about.** Recent posts and articles come with the
  profile, with their reactions and comments, at no extra cost.
- **Find more leads.** Each profile comes with LinkedIn's similar profiles
  (name, headline, followers, location, link), ready to feed back in.
- **Use the data anywhere.** Download as JSON, CSV or Excel, or send it to
  your own tools through Apify's API and integrations.

### How to use it

1. Paste one or more **Profiles**: links such as
   `https://www.linkedin.com/in/williamhgates`, or names such as
   `williamhgates`.
2. Click **Start**. When the run ends, open the **Output** tab to view the
   profiles or download them.

Run it with no input to see a sample: four profiles: Bill Gates, Satya Nadella,
Reid Hoffman and Jeff Weiner, charged as usual.

#### Links that work

Any public profile link, `linkedin.com/in/<name>`, on any LinkedIn country
subdomain (`uk.linkedin.com`, `vn.linkedin.com`…), with or without tracking
parts or a trailing page such as `/details/experience/`. Company and school
pages, old `/pub/` links, other LinkedIn pages and other sites stop the run
before anything is read, naming the link.

### Input

| Field                        | What it does                                                              | Default |
| ---------------------------- | ------------------------------------------------------------------------- | ------- |
| **Profiles** (`profileUrls`) | Profile links or names, one row each. A profile listed twice is read once | —       |

Example input:

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

### Output

One row per profile. An example, with made-up values and shortened lists:

```json
{
  "public_identifier": "lan-nguyen",
  "url": "https://www.linkedin.com/in/lan-nguyen",
  "input_url": "https://vn.linkedin.com/in/lan-nguyen/",
  "member_id": "123456789",
  "full_name": "Lan Nguyen",
  "first_name": "Lan",
  "last_name": "Nguyen",
  "headline": "Lead Engineer at Example Co",
  "location": "Hai Chau, Da Nang, Vietnam",
  "city": "Hai Chau",
  "region": "Da Nang",
  "country": "Vietnam",
  "country_code": "VN",
  "about": "I build payment systems…",
  "followers_count": 2412,
  "connections_count": 500,
  "connections_text": "500+",
  "badges": ["Creator"],
  "is_influencer": false,
  "photo_url": "https://media.licdn.com/dms/image/…",
  "cover_image_url": "https://media.licdn.com/dms/image/…",
  "current_company_name": "Example Co",
  "current_company_url": "https://www.linkedin.com/company/example-co",
  "current_title": "Lead Engineer",
  "current_company": "Example Co",
  "top_school_name": "Example University",
  "top_school_url": "https://vn.linkedin.com/school/example-university/",
  "websites": [{ "label": "Personal Website", "url": "https://example.com/" }],
  "current_positions": [
    {
      "title": "Lead Engineer",
      "company_name": "Example Co",
      "company_url": "https://www.linkedin.com/company/example-co",
      "company_slug": "example-co",
      "company_logo_url": "https://media.licdn.com/dms/image/…",
      "start": "Jan 2024",
      "end": null,
      "start_year": 2024,
      "start_month": 1,
      "end_year": null,
      "end_month": null,
      "is_current": true,
      "duration": "2 years 10 months",
      "location": "Da Nang, Vietnam",
      "description": "Leads the payments team."
    }
  ],
  "experience": [
    {
      "title": "Lead Engineer",
      "company_name": "Example Co",
      "company_url": "https://www.linkedin.com/company/example-co",
      "company_slug": "example-co",
      "company_logo_url": "https://media.licdn.com/dms/image/…",
      "start": "Jan 2024",
      "end": null,
      "start_year": 2024,
      "start_month": 1,
      "end_year": null,
      "end_month": null,
      "is_current": true,
      "duration": "2 years 10 months",
      "location": "Da Nang, Vietnam",
      "description": "Leads the payments team."
    }
  ],
  "education": [
    {
      "school_name": "Example University",
      "school_url": "https://vn.linkedin.com/school/example-university/",
      "school_logo_url": "https://media.licdn.com/dms/image/…",
      "degree": "Bachelor's degree",
      "field_of_study": "Computer Science",
      "start": "2016",
      "end": "2020",
      "start_year": 2016,
      "start_month": 9,
      "end_year": 2020,
      "end_month": 6,
      "description": null
    }
  ],
  "skills": ["Go", "Payments"],
  "certifications": [
    {
      "name": "Cloud Architect",
      "url": "https://example.com/credential/1",
      "issuer": "Example Cloud",
      "issuer_url": "https://www.linkedin.com/company/example-cloud",
      "issued": "Jan 2026",
      "expires": "Jan 2029",
      "credential_id": "ABC-123"
    }
  ],
  "honors_awards": [],
  "publications": [],
  "patents": [],
  "volunteering": [],
  "languages": [{ "name": "Vietnamese", "proficiency": "Native or bilingual proficiency" }],
  "projects": [],
  "courses": [],
  "organizations": [],
  "recommendations": [
    { "name": "An Tran", "url": "https://www.linkedin.com/in/an-tran", "text": "Lan is…" }
  ],
  "courses_taught": [],
  "articles": [
    {
      "title": "What we learned shipping payments",
      "url": "https://www.linkedin.com/pulse/…",
      "published_at": "2026-09-01T10:00:00.000+00:00",
      "date": "Sep 1, 2026",
      "summary": "Its first lines…",
      "image_url": "https://media.licdn.com/dms/image/…",
      "reactions": 41,
      "comments": 3
    }
  ],
  "activity": [
    {
      "activity_id": "7516000000000000000",
      "url": "https://www.linkedin.com/posts/lan-nguyen_…",
      "kind": "post",
      "action": "Lan Nguyen shared this",
      "text": "We are hiring…",
      "published_at": "2026-10-01T08:30:00.000Z",
      "posted_ago": "2w",
      "author_name": "Lan Nguyen",
      "author_url": "https://www.linkedin.com/in/lan-nguyen",
      "image_url": "https://media.licdn.com/dms/image/…",
      "reactions": 7,
      "comments": 2
    }
  ],
  "other_sections": [
    {
      "section": "scores",
      "title": "Test Scores",
      "items": [
        {
          "title": "Example Test",
          "subtitle": "Score: 99",
          "url": null,
          "start": "May 2015",
          "end": null,
          "description": null
        }
      ]
    }
  ],
  "similar_profiles": [
    {
      "name": "Minh Le",
      "url": "https://vn.linkedin.com/in/minh-le",
      "headline": "Example Bank",
      "followers": "5K followers",
      "location": "Hanoi"
    }
  ]
}
```

| Field                                         | What it holds                                                                                                                                                                                         |
| --------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `public_identifier`                           | The profile's name in its link (`/in/<name>`), in lower case                                                                                                                                          |
| `url`                                         | The profile's page                                                                                                                                                                                    |
| `input_url`                                   | The link or name you gave                                                                                                                                                                             |
| `member_id`                                   | LinkedIn's numeric id for the member                                                                                                                                                                  |
| `full_name`, `first_name`, `last_name`        | The person's name                                                                                                                                                                                     |
| `headline`                                    | The line under the name. Empty when the profile has none                                                                                                                                              |
| `location`, `country_code`                    | Where the person is, and the country's two-letter code                                                                                                                                                |
| `city`, `region`, `country`                   | The parts of `location`, filled only when it ends in the country: a metro area ("Greater Boston") or a two-part place gives no city or region                                                         |
| `about`                                       | The About text, with its line breaks                                                                                                                                                                  |
| `followers_count`                             | The exact number of followers                                                                                                                                                                         |
| `connections_count`, `connections_text`       | The connections LinkedIn shows: "500+" gives 500                                                                                                                                                      |
| `badges`                                      | LinkedIn's badges ("Creator", "Top Voice")                                                                                                                                                            |
| `is_influencer`                               | Whether LinkedIn marks the person as an influencer                                                                                                                                                    |
| `photo_url`, `cover_image_url`                | The profile photo and the cover image                                                                                                                                                                 |
| `current_company_name`, `current_company_url` | The company at the top of the profile                                                                                                                                                                 |
| `current_title`, `current_company`            | The current role at the company at the top of the profile (else the first current role): its title and company                                                                                        |
| `current_positions`                           | Every current role, as in `experience`                                                                                                                                                                |
| `top_school_name`, `top_school_url`           | The school at the top of the profile                                                                                                                                                                  |
| `websites`                                    | The websites the profile lists, each with its label                                                                                                                                                   |
| `experience`                                  | Every role: title, company, its page, page name (`company_slug`) and logo, start, end (empty when current), the same dates as year and month numbers, current or not, duration, location, description |
| `education`                                   | Every school: name, page and logo, degree, field of study, start, end, the same dates as year and month numbers, notes                                                                                |
| `skills`                                      | The skills shown                                                                                                                                                                                      |
| `certifications`                              | Name, link, issuer and its page, issued, expires, credential id                                                                                                                                       |
| `honors_awards`                               | Title, issuer, date, description                                                                                                                                                                      |
| `publications`                                | Title, link, publisher, date, description                                                                                                                                                             |
| `patents`                                     | Title, link, number, issued date, status, description, other inventors                                                                                                                                |
| `volunteering`                                | Role, organization and its page, start, end, duration, cause, description                                                                                                                             |
| `languages`                                   | Each language and its proficiency                                                                                                                                                                     |
| `projects`                                    | Title, link, start, end, description, the other creators                                                                                                                                              |
| `courses`                                     | Courses taken: name and course number                                                                                                                                                                 |
| `organizations`                               | Name, position held, start, end, description                                                                                                                                                          |
| `recommendations`                             | Recommendations received: who wrote it, their profile, the text                                                                                                                                       |
| `courses_taught`                              | LinkedIn Learning courses by the person: title, link, instructors, length, viewers                                                                                                                    |
| `articles`                                    | Articles by the person: title, link, date, summary, image, reactions, comments                                                                                                                        |
| `activity`                                    | Recent activity: what was done (`post`, `repost`, `reaction`, `comment`), the post's link, text, date, author, image, reactions, comments                                                             |
| `other_sections`                              | Any other section the profile shows, by its heading, with its entries                                                                                                                                 |
| `similar_profiles`                            | The similar profiles LinkedIn shows beside the profile: name, link, headline, followers, location                                                                                                     |

A section the profile does not show is an empty list. A month LinkedIn does
not show is empty (`start_month` is filled when the card says "Jan 2024", or
when LinkedIn's own page data gives the month of a card that shows only the
year). Not included: email
addresses and phone numbers (not on the public page), the full list of skills
and recommendations (LinkedIn shows signed-out visitors only part of them),
and the people the person knows in common with you.

### How much does it cost?

No surcharges and no paid options; an item that fails is not charged.

You pay for what you get:

- **$2.50 per 1,000 profiles** ($0.0025 a profile). A profile that could not be read is not charged.
- No start fee.

So 200 profiles cost $0.50. If you set a maximum cost for a run, the Actor stops when it reaches it and keeps every profile saved so far.

### How long does a run take?

Seconds for a few profiles: 4 profiles in about 5 seconds, 20 in under 30
seconds.

### Good to know

- **What LinkedIn shows signed-out visitors.** Each person chooses what their
  public profile shows, and LinkedIn shortens some sections for visitors who
  are not signed in, so some profiles have fewer sections than you see when
  signed in. On most profiles of people who are not public figures (every
  one we checked), and on some public figures' too, LinkedIn hides the whole
  work history, education, headline and skills from visitors who are not
  signed in. Those rows still carry the name, location, followers, current
  company and school, About and recent posts, with empty `experience`,
  `education`, `headline`, `skills` and current title.
- **A profile that cannot be read** (removed, private, or hidden from
  visitors who are not signed in) is reported in the run's status; the other
  profiles carry on. The run fails only when none could be read.
- **One profile, one row.** A profile listed twice, or under an old and a new
  link, is saved once.
- **Text is in English.** Dates and labels ("Present", "500+ connections")
  are read as LinkedIn shows them in English.

### More Actors from us

- [LinkedIn Company Scraper: Pages, Posts & Offices](https://apify.com/luzivanlt/linkedin-companies-scraper): LinkedIn company pages with their recent posts in the same row, exact followers and offices.
- [LinkedIn Jobs Scraper: Every Job, Counted](https://apify.com/luzivanlt/linkedin-jobs-scraper): Every job a LinkedIn search lists, checked against LinkedIn's own count, with its full description.
- [AliExpress Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/aliexpress-products-scraper): Every product of an AliExpress search to its last page, with exact sold counts and ratings.
- [Amazon Product Scraper: Search Results & Prices](https://apify.com/luzivanlt/amazon-products-scraper): Every product on Amazon's search pages to the last page, sponsored marked, with monthly sales.
- [App Store Reviews Scraper: All Reviews, Not 500](https://apify.com/luzivanlt/app-store-reviews-scraper): Every written App Store review of an app, not just the newest 500.
- [Woolworths Coles ALDI Scraper: AU Grocery Prices](https://apify.com/luzivanlt/au-supermarkets-scraper): Woolworths, Coles and ALDI products for any search in one run, every results page to the end.
- [Bilibili Video Scraper: Search & Channel Videos](https://apify.com/luzivanlt/bilibili-videos-scraper): Bilibili videos from searches or whole channels, each with its full detail page's data.
- [Career Site Jobs Scraper: Workday, Greenhouse, Lever](https://apify.com/luzivanlt/career-site-jobs-scraper): Every job on Greenhouse, Lever, Ashby, SmartRecruiters and Workday boards, checked against each board's count.

### Use it from an AI agent or the API

One call starts a run and returns its items (Apify waits up to 300 seconds; for a
longer run, start it with `POST /v2/acts/…/runs` and read its dataset):

```text
POST https://api.apify.com/v2/acts/luzivanlt~linkedin-profiles-scraper/run-sync-get-dataset-items?token=<YOUR_APIFY_TOKEN>
```

With the sample input as its JSON body:

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

Its inputs, in the order of the input form:

| Input                    | What it takes                                                                                                                                                                  | Default |
| ------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------- |
| `profileUrls` (Profiles) | Public LinkedIn profile links (linkedin.com/in/…, any country subdomain, with or without a trailing page such as /details/experience/) or profile names (the part after /in/). | —       |

Apify's MCP server, `https://mcp.apify.com`, lists it as `luzivanlt/linkedin-profiles-scraper`. To give an
AI agent this Actor as a tool, add the server to the agent's MCP config:

```json
{
  "mcpServers": {
    "apify": {
      "url": "https://mcp.apify.com?tools=luzivanlt/linkedin-profiles-scraper"
    }
  }
}
```

The client signs in with OAuth, or add `"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }`.

Charged per profile delivered; the sample input above costs at most $0.01.

### FAQ

**Do I need a LinkedIn account or cookies?**
No. The Actor reads what anyone can see on LinkedIn without signing in.

**Can I search for people by name, title or company?**
Not yet. Give the profile links; the similar profiles in each row are a good
way to find more.

**Can I run it from my own code, on a schedule, or with other apps?**
Yes. Like any Apify Actor, you can start it through the Apify API, run it on a
schedule, and connect it to other apps with Apify's integrations and webhooks.

### Is it legal to scrape LinkedIn?

This Actor reads only public profile pages. A profile is personal data: check
LinkedIn's terms and the laws that apply to you (such as the GDPR) before you
use it, and use it only for a purpose those laws allow. If you are unsure, ask
a lawyer.

### Support

Found a problem or missing a feature? Open an issue on the **Issues** tab and
include the run's link.

***

This Actor is not affiliated with, endorsed by or sponsored by LinkedIn or
Microsoft.

# Changelog

This Actor's version history is a separate document: https://apify.com/luzivanlt/linkedin-profiles-scraper/changelog.md

# Actor input Schema

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

Public LinkedIn profile links (linkedin.com/in/…, any country subdomain, with or without a trailing page such as /details/experience/) or profile names (the part after /in/). One row per profile; a profile listed twice is read once. Up to 5,000 profiles a run, each charged once. Old /pub/ links and company pages are refused. Example: https://www.linkedin.com/in/williamhgates or satyanadella.

## Actor input object example

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

# Actor output Schema

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

Every profile the run saved, one row per profile.

## `allFields` (type: `string`):

The same rows with every field.

# 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",
        "https://www.linkedin.com/in/satyanadella",
        "https://www.linkedin.com/in/reidhoffman",
        "https://www.linkedin.com/in/jeffweiner08"
    ]
};

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

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,luzivanlt/linkedin-profiles-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/OuUrJNOAytjhNM8f1/builds/6s0FpcSaSdnKOLadC/openapi.json
