# LinkedIn Profile Scraper + Email | No Cookies (`martdev/linkedin-profile-scraper`) Actor

Extract detailed information from LinkedIn profiles in bulk, including work experience, education history, skills and more. No cookies or account required.

- **URL**: https://apify.com/martdev/linkedin-profile-scraper.md
- **Developed by:** [Mart.dev](https://apify.com/martdev) (community)
- **Categories:** Social media, Lead generation
- **Stats:** 2 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $4.00 / 1,000 profile details

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

### Turn LinkedIn URLs into contact data you can use

Get public profile details, work history, company data and optional **work emails**. Export CSV or use the full JSON in your product, workflow or AI agent. No LinkedIn login or cookies required.

[Get started](#how-to-get-started) · [Example output](#example-output)

### Who it's for

- Sales teams and lead-generation agencies enriching contact lists.
- Recruiters adding professional background to candidate records.
- Developers building LinkedIn enrichment into products, workflows or AI agents.

### What it helps you get

- Available names, roles, employers, locations, experience and education.
- Work-email search with status and confidence.
- A CSV that keeps your contact IDs and original columns, plus complete JSON for your application.

### Example output

Input: `https://www.linkedin.com/in/dharmesh`

```json
{
  "linkedinUrl": "https://www.linkedin.com/in/dharmesh",
  "name": "Dharmesh Shah",
  "headline": "Founder and CTO at HubSpot. Helping millions grow better.",
  "currentTitle": "Founder and CTO",
  "titleSource": "headline",
  "currentCompany": "HubSpot",
  "location": "Boston, Massachusetts, United States",
  "workEmail": null,
  "emailStatus": null,
  "emailMatch": null,
  "emailConfidence": null,
  "companyDomain": null,
  "profileState": "accessible",
  "profile": {
    "id": "dharmesh",
    "name": "Dharmesh Shah",
    "firstName": "Dharmesh",
    "lastName": "Shah",
    "headline": "Founder and CTO at HubSpot. Helping millions grow better.",
    "currentTitle": "Founder and CTO",
    "titleSource": "headline",
    "currentCompany": "HubSpot",
    "memorialized": null,
    "memorializedSource": null,
    "companyState": "public",
    "about": "Career startup guy.\nAuthor of the book \"Inbound Marketing\"…",
    "followerCount": 1196331,
    "connectionsCount": 4294,
    "location": {
      "linkedinText": "Boston, Massachusetts, United States",
      "countryCode": "US",
      "parsed": {
        "text": "Boston, Massachusetts, United States",
        "countryCode": "US",
        "regionCode": null,
        "country": "United States",
        "countryFull": "United States",
        "state": "Massachusetts",
        "city": "Boston"
      }
    },
    "experience": [
      {
        "position": null,
        "location": "Cambridge, Massachusetts, United States",
        "companyName": "HubSpot",
        "companyLinkedinUrl": "https://www.linkedin.com/company/hubspot/",
        "companyUniversalName": "hubspot",
        "duration": null,
        "description": null,
        "experienceGroupId": null,
        "startDate": null,
        "endDate": null,
        "companyLogo": {
          "url": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=2147483647&v=beta&t=zOUMsb7QoojA0ShTvsA-3sskbL8v_dZwDLfddJuEMDU",
          "sizes": [
            {
              "url": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=2147483647&v=beta&t=zOUMsb7QoojA0ShTvsA-3sskbL8v_dZwDLfddJuEMDU",
              "width": 100,
              "height": 100
            }
          ]
        },
        "domain": null,
        "companyIndustry": "Software Development",
        "companySize": "5,001-10,000 employees",
        "companyHeadquarters": "Cambridge, Massachusetts",
        "isCurrent": null,
        "companyLinkedInId": "68529"
      }
    ],
    "experienceAvailability": {
      "returnedPositions": 1,
      "positionsWithTitle": 0,
      "positionsWithDerivedTitle": 0,
      "positionsWithStartDate": 0,
      "positionsWithEndDate": 0,
      "positionsWithDescription": 0
    },
    "experienceState": "restricted",
    "education": [
      {
        "schoolName": "Massachusetts Institute of Technology",
        "schoolLinkedinUrl": "https://www.linkedin.com/school/mit/",
        "schoolSlug": "mit",
        "schoolId": "1503",
        "degree": null,
        "fieldOfStudy": null,
        "startDate": {
          "year": 2004,
          "text": "2004"
        },
        "endDate": {
          "year": 2006,
          "text": "2006"
        },
        "period": "2004 - 2006",
        "description": null,
        "insights": null,
        "schoolLogo": {
          "url": "https://media.licdn.com/dms/image/v2/D560BAQH-UXRfIDIKug/company-logo_100_100/company-logo_100_100/0/1689799729035/mit_logo?e=2147483647&v=beta&t=2BcyEkKb9m86JDvxtNLfDVfyept76unhOFNf5Wt_Vp4",
          "sizes": [
            {
              "url": "https://media.licdn.com/dms/image/v2/D560BAQH-UXRfIDIKug/company-logo_100_100/company-logo_100_100/0/1689799729035/mit_logo?e=2147483647&v=beta&t=2BcyEkKb9m86JDvxtNLfDVfyept76unhOFNf5Wt_Vp4",
              "width": 100,
              "height": 100
            }
          ]
        },
        "schoolLinkedInId": "1503"
      }
    ],
    "skills": [],
    "languages": [
      {
        "name": "English",
        "proficiency": "Native or bilingual proficiency"
      },
      {
        "name": "Gujarati",
        "proficiency": "Native or bilingual proficiency"
      }
    ],
    "honorsAndAwards": [],
    "certifications": [
      {
        "title": "Inbound Certification",
        "issuedAt": "Issued Dec 2014 · Expires Jan 2016",
        "link": "http://academy.hubspot.com/certification",
        "issuedBy": "HubSpot",
        "issuedByLink": "https://www.linkedin.com/company/hubspot",
        "issuedByLogo": {
          "url": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=2147483647&v=beta&t=zOUMsb7QoojA0ShTvsA-3sskbL8v_dZwDLfddJuEMDU",
          "sizes": [
            {
              "url": "https://media.licdn.com/dms/image/v2/C4D0BAQF8H-SLmMDZlA/company-logo_100_100/company-logo_100_100/0/1646683330132/hubspot_logo?e=2147483647&v=beta&t=zOUMsb7QoojA0ShTvsA-3sskbL8v_dZwDLfddJuEMDU",
              "width": 100,
              "height": 100
            }
          ]
        },
        "issuedOn": "Dec 2014",
        "expiresOn": "Jan 2016"
      }
    ],
    "courses": [],
    "volunteering": [],
    "organizations": [],
    "publications": [
      {
        "title": "Inbound Marketing",
        "publishedAt": "United States · Oct 19, 2009",
        "description": "How To Get Found Using Google, Social Media and Blogs.",
        "link": "http://www.amazon.com/Inbound-Marketing-Found-Google-Social/dp/0470499311/ref=sr_1_1?s=books&ie=UTF8&qid=1399245534&sr=1-1&keywords=inbound+marketing",
        "publisher": "United States",
        "publishedOn": "Oct 19, 2009",
        "contributors": [
          {
            "linkedinUrl": "https://www.linkedin.com/in/brianhalligan",
            "name": "Brian Halligan"
          }
        ]
      }
    ],
    "projects": [
      {
        "title": "simple.ai",
        "duration": "Nov 2024",
        "startDate": {
          "month": "Nov",
          "year": 2024,
          "text": "Nov 2024"
        },
        "endDate": null,
        "description": "The AI newsletter that makes the complicated world of AI more simple."
      },
      {
        "title": "agent.ai",
        "duration": "Apr 2024",
        "startDate": {
          "month": "Apr",
          "year": 2024,
          "text": "Apr 2024"
        },
        "endDate": null,
        "description": "Agent.ai is the professional network for AI agents.\n\nDiscover, build and engage AI agents. Almost 2 million (human) users and 1,500+ agents."
      }
    ],
    "recommendations": [
      {
        "givenBy": "Mark Evans",
        "givenByLink": "https://www.linkedin.com/in/markev",
        "description": "Dharmesh did a workshop at the recent meshmarketing conference in Toronto. His presentation was engaging, insightful, informative and entertaining - a perfect combination that really resonated with the audience. If you're looking for a public speaker, I would enthusiastically recommend Dharmesh.",
        "givenByPicture": {
          "url": null,
          "sizes": []
        }
      },
      {
        "givenBy": "Rand Fishkin",
        "givenByLink": "https://www.linkedin.com/in/randfishkin",
        "description": "Dharmesh's eloquence and charisma on stage is matched only by his command of the topics and audience empathy. When surveyed, our 220+ attendees overwhelmingly gave Dharmesh's presentation the highest score available. Many said it was their favorite session of the event. I'll be working very hard to make sure he's at any future seminars we hold.",
        "givenByPicture": {
          "url": null,
          "sizes": []
        }
      }
    ],
    "recommendersCount": 7,
    "influencer": true,
    "topVoice": true,
    "creator": true,
    "websites": [
      {
        "url": "http://onstartups.com",
        "label": "Other"
      },
      {
        "url": "http://www.HubSpot.com",
        "label": "Other"
      },
      {
        "url": "http://www.dharmesh.com",
        "label": "Other"
      }
    ],
    "website": "http://onstartups.com",
    "photo": "https://media.licdn.com/dms/image/v2/C4E03AQGL2VlL9W53ww/profile-displayphoto-shrink_200_200/profile-displayphoto-shrink_200_200/0/1516232433623?e=2147483647&v=beta&t=CvnQXe1gWiyuoQ4t1NOCM7abfbcQZIEKpxV54CYNX84",
    "photoState": "public",
    "bannerImage": "https://media.licdn.com/dms/image/v2/C4E16AQHTt9ikcff1ug/profile-displaybackgroundimage-shrink_200_800/profile-displaybackgroundimage-shrink_200_800/0/1610553040149?e=2147483647&v=beta&t=_UWY0ydMXVZgHbRuuKEmAMkw7PfqzFN7FZjPXSnnihs",
    "memberId": "658789",
    "memberIdentifier": "658789",
    "linkedInIdentifier": "urn:li:member:658789",
    "linkedinUrl": "https://www.linkedin.com/in/dharmesh",
    "publicIdentifier": "dharmesh",
    "peopleAlsoViewed": [
      {
        "name": "Paul Ryan",
        "publicIdentifier": "ptryan123",
        "url": "https://www.linkedin.com/in/ptryan123"
      },
      {
        "name": "Mitchell Hashimoto",
        "publicIdentifier": "mitchellh",
        "url": "https://www.linkedin.com/in/mitchellh"
      },
      {
        "name": "Matthew LeRay",
        "publicIdentifier": "matthewleray",
        "url": "https://www.linkedin.com/in/matthewleray"
      },
      {
        "name": "Elias Torres",
        "publicIdentifier": "eliast",
        "url": "https://www.linkedin.com/in/eliast"
      },
      {
        "name": "Anatoly Volkhover",
        "publicIdentifier": "anatolyvolkhover",
        "url": "https://www.linkedin.com/in/anatolyvolkhover"
      },
      {
        "name": "Joey Burzynski",
        "publicIdentifier": "miamibeachseo",
        "url": "https://www.linkedin.com/in/miamibeachseo"
      },
      {
        "name": "Bo Weaver",
        "publicIdentifier": "boweaver",
        "url": "https://www.linkedin.com/in/boweaver"
      },
      {
        "name": "Carlos Arteaga",
        "publicIdentifier": "carlosarteagabarrueto",
        "url": "https://www.linkedin.com/in/carlosarteagabarrueto"
      },
      {
        "name": "Rishi Singh",
        "publicIdentifier": "rishi-singh-harness",
        "url": "https://www.linkedin.com/in/rishi-singh-harness"
      },
      {
        "name": "Yony F.",
        "publicIdentifier": "yony-f-12730a8",
        "url": "https://www.linkedin.com/in/yony-f-12730a8"
      },
      {
        "name": "Nick Hughes",
        "publicIdentifier": "jnickhughes",
        "url": "https://www.linkedin.com/in/jnickhughes"
      },
      {
        "name": "Dong Ouyang",
        "publicIdentifier": "douyang",
        "url": "https://www.linkedin.com/in/douyang"
      },
      {
        "name": "Gregg Mojica",
        "publicIdentifier": "greggmojica",
        "url": "https://www.linkedin.com/in/greggmojica"
      },
      {
        "name": "Ilya Pozin",
        "publicIdentifier": "ipozin",
        "url": "https://www.linkedin.com/in/ipozin"
      },
      {
        "name": "Brennan Hatton",
        "publicIdentifier": "brennanhatton",
        "url": "https://www.linkedin.com/in/brennanhatton"
      },
      {
        "name": "Anand Chandrasekaran",
        "publicIdentifier": "anandchandrasekaran",
        "url": "https://www.linkedin.com/in/anandchandrasekaran"
      },
      {
        "name": "Vikram Kapoor",
        "publicIdentifier": "vikram-kapoor-752543",
        "url": "https://www.linkedin.com/in/vikram-kapoor-752543"
      },
      {
        "name": "Erik Rannala",
        "publicIdentifier": "erikr",
        "url": "https://www.linkedin.com/in/erikr"
      },
      {
        "name": "Marc Fleischmann",
        "publicIdentifier": "marcf",
        "url": "https://www.linkedin.com/in/marcf"
      },
      {
        "name": "Stephen Blum",
        "publicIdentifier": "stephenlb",
        "url": "https://www.linkedin.com/in/stephenlb"
      }
    ],
    "currentCompanyDomain": null,
    "currentCompanyIndustry": "Software Development",
    "currentCompanySize": "5,001-10,000 employees",
    "currentCompanyHeadquarters": "Cambridge, Massachusetts",
    "city": "Boston",
    "state": "Massachusetts",
    "country": "United States",
    "countryCode": "US",
    "coverPhoto": "https://media.licdn.com/dms/image/v2/C4E16AQHTt9ikcff1ug/profile-displaybackgroundimage-shrink_200_800/profile-displaybackgroundimage-shrink_200_800/0/1610553040149?e=2147483647&v=beta&t=_UWY0ydMXVZgHbRuuKEmAMkw7PfqzFN7FZjPXSnnihs",
    "followers": 1196331,
    "connections": 4294,
    "headlineSource": "badge",
    "currentCompanyId": "68529",
    "currentSchoolId": "1503",
    "company": null
  },
  "response": {
    "type": "linkedin-profile",
    "url": "https://www.linkedin.com/in/dharmesh",
    "tookMs": 1064,
    "accessible": true,
    "profileState": "accessible",
    "creditsUsed": 1
  }
}
```

### How it works

Provide LinkedIn profile URLs or public identifiers, such as `dharmesh`. The Actor retrieves the available public data and searches for work emails when selected. Duplicate URLs are fetched once and matched back to every original CSV row.

Complete profile JSON appears as profiles finish. Contact exports keep your original row order and are ready when the run completes.

### How to get started

1. Choose **Profile details** or **Profile details + email search**.
2. Replace the example with your LinkedIn URLs or public identifiers. Use **Bulk edit** for a list, or clear the profiles and **Upload a CSV**.
3. Click **Start**, then open **Contacts CSV** or **Complete profile JSON** to get your results.

For CSVs, include a `LinkedIn URL` or `Public Identifier` column. Common variations are detected automatically. Use UTF-8 CSV, up to 1,000,000 contacts and 256 MB. **Maximum profiles** lets you try a smaller batch. For inputs over 100 rows, allow at least one unique profile lookup for every ten rows within your profile and spending limits. Use a smaller file for a small test.

Save your settings as a task for repeat runs. Open **API** for integration examples.

### Pricing

Prices include platform usage. The email option includes profile details.

| Option | Per 1,000 profiles |
| --- | --- |
| Profile details | $4 |
| Profile details + email search | $10 total |

Unavailable profiles are not charged. Skipped or unconfirmed email searches use the profile-only rate. Free Apify plans can process up to 10 input rows per run.

### Questions and help

#### Will every profile have an email?

No. Check `emailStatus`, `emailMatch` and `emailConfidence`. `deliverable` means the mailbox accepted mail under Mart's strict non-catch-all check. `emailMatch=inferred` means the address was generated from the person's name and current employer; it does not independently prove ownership. Confidence measures deliverability only.

#### What happens when data is missing?

Fields stay empty. Unavailable profiles remain in the contact export with a `mart_profileState`; the run summary accounts for them.

#### Where can I get help?

Email <support@mart.dev> and include your run ID.

***

Disclaimer: This tool has no affiliation with LinkedIn Corporation and receives no sponsorship or endorsement from it. LinkedIn Corporation owns the registered LinkedIn® trademark. Other trademarks belong to their respective owners.

# Actor input Schema

## `profileMode` (type: `string`):

Both options return the same available profile data. The second also searches for work emails at $10 total per 1,000 profiles with email search. An email is not guaranteed.

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

Paste LinkedIn profile URLs or public identifiers such as dharmesh. Localized URLs are accepted. Use Bulk edit for a list, or clear this list to upload a CSV. Up to 1,000,000 entries. Very repetitive lists are rejected before enrichment.

## `csvFile` (type: `string`):

Upload one UTF-8 CSV file, up to 1,000,000 contacts / 256 MB. LinkedIn URL or public identifier columns are detected automatically. Leave the profile list and Paste CSV empty. For inputs over 100 rows, allow at least one unique lookup for every ten rows within your profile and spending limits.

## `csvText` (type: `string`):

Paste CSV text including the header row. Use this or Upload CSV, leaving the profile list empty.

## `maxProfiles` (type: `integer`):

Up to 1,000,000 unique profiles per run. Your spending limit may stop it sooner. For a small test, use a small input: exports retain every original row, so inputs over 100 rows must fit within ten rows per unique lookup covered by these limits.

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

Also look for a work email. Results include status and confidence; an email is not guaranteed.

## `refreshContacts` (type: `boolean`):

Use a CSV with your current role and company columns. Flag possible changes and keep previous values when public data is missing. Common headers such as Job Title and Company are detected automatically.

## `linkedinColumn` (type: `string`):

Exact CSV header containing profile URLs. Leave empty for automatic detection.

## `previousTitleColumn` (type: `string`):

Exact CSV header containing existing job titles. Only needed for contact refresh if automatic detection cannot choose a column.

## `previousCompanyColumn` (type: `string`):

Exact CSV header containing existing company names. Only needed for contact refresh if automatic detection cannot choose a column.

## `inputSource` (type: `string`):

Optional compatibility field. Source is detected automatically when omitted.

## `workflow` (type: `string`):

Optional compatibility field. Use refreshContacts for new integrations.

## Actor input object example

```json
{
  "profileMode": "profiles",
  "profileUrls": [
    "https://www.linkedin.com/in/dharmesh",
    "https://www.linkedin.com/in/carmengerea"
  ],
  "maxProfiles": 1000000
}
```

# Actor output Schema

## `contacts` (type: `string`):

Original CSV rows and CRM IDs with enriched contact columns. Includes unavailable and unprocessed rows, and comparison columns for refresh runs.

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

Every delivered row with all nested profile fields and response metadata.

## `summary` (type: `string`):

Counts, duplicates, exclusions, unavailable totals and spending-limit stops. Individual statuses are in the contact exports.

## `contactJson` (type: `string`):

Lossless original contact values and enrichment or refresh comparison fields.

# 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 = {
    "profileMode": "profiles",
    "profileUrls": [
        "https://www.linkedin.com/in/dharmesh",
        "https://www.linkedin.com/in/carmengerea"
    ]
};

// Run the Actor and wait for it to finish
const run = await client.actor("martdev/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 = {
    "profileMode": "profiles",
    "profileUrls": [
        "https://www.linkedin.com/in/dharmesh",
        "https://www.linkedin.com/in/carmengerea",
    ],
}

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

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,martdev/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/SrGffkmX6MzpfC5q0/builds/a6BQMdhg8ldaeXmCx/openapi.json
