# LinkedIn Open Profile Status (`maximedupre/linkedin-open-profile-status`) Actor

Check submitted LinkedIn person profiles without a LinkedIn login. Get separate Open Profile and #OpenToWork statuses, with unknown when public data is not enough, plus confidence, reasons, and available profile details.

- **URL**: https://apify.com/maximedupre/linkedin-open-profile-status.md
- **Developed by:** [Maxime Dupré](https://apify.com/maximedupre) (community)
- **Categories:** Social media, Lead generation, Business
- **Stats:** 1 total users, 1 monthly users, 66.7% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

$0.45 / 1,000 open 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

### 🔎 Check LinkedIn profile status

Check public LinkedIn person profiles from full URLs or vanity names. Sales teams, recruiters, and researchers get separate Open Profile and #OpenToWork statuses, confidence, reasons, and available profile details in one dataset. When public data is not enough, the Actor returns `unknown` instead of guessing.

**Use cases**

- Check two separate profile signals for one submitted person with [**LinkedIn Open Profile Status**](https://apify.com/maximedupre/linkedin-open-profile-status/examples/linkedin-open-profile-status).
- Check whether a submitted person can receive free InMail with [**LinkedIn Open Profile Checker**](https://apify.com/maximedupre/linkedin-open-profile-status/examples/linkedin-open-profile-checker).
- Review public fields returned for a known person with [**LinkedIn Profile Scraper**](https://apify.com/maximedupre/linkedin-open-profile-status/examples/linkedin-profile-scraper).
- Look up a public profile from a URL or vanity name with [**LinkedIn Profile Lookup**](https://apify.com/maximedupre/linkedin-open-profile-status/examples/linkedin-profile-lookup).
- Check the public job-search badge for a submitted profile with [**LinkedIn Open To Work**](https://apify.com/maximedupre/linkedin-open-profile-status/examples/linkedin-open-to-work).

#### 📊 Review statuses and public profile details

Each dataset row stays tied to one submitted person profile. Required fields include the resolved `profileUrl`, `openProfileStatus`, and `openToWorkStatus`. The two status objects each include a status, confidence, and reason. Other public fields appear when available, including a name, headline, location, summary, work history, education, languages, recommendations, volunteering, audience counts, and an influencer indicator.

#### ▶️ Check profiles from URLs or vanity names

1. Add one or more full LinkedIn person-profile URLs or vanity names.
2. Start the Actor and open the default dataset.
3. Read each status, confidence, reason, and available public profile detail.

#### ⚙️ Input

Add at least one full LinkedIn person-profile URL or vanity name. You can use both forms in the same run.

**Input fields**

| Field | Type | What it does |
| --- | --- | --- |
| `profileUrls` | array of strings | Full LinkedIn person-profile URLs or vanity names to check. |

**Example input**

This input is copied from the public input of a successful current-beta default-input run.

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

#### 🧾 Output

The Output tab links to the default dataset.

**Output link**

| Field | Type | What it does |
| --- | --- | --- |
| `dataset` | string | Link to the saved LinkedIn profile status results. |

Each dataset row uses the shape below. The required row fields are `profileUrl`, `openProfileStatus`, and `openToWorkStatus`. Other fields are returned when public data includes them. Optional arrays can be empty or absent.

**Dataset row**

| Field | Type | What it does |
| --- | --- | --- |
| `profileUrl` | string (URL) | Resolved public LinkedIn profile URL. |
| `vanityName` | string | Public profile vanity name, when available. |
| `fullName` | string | Public name shown on the profile, when available. |
| `headline` | string | Public profile headline, when available. |
| `summary` | string | Public profile summary, when available. |
| `location` | string | Public profile location, when available. |
| `openProfileStatus` | object | Open Profile or free InMail status for the person. |
| `openProfileStatus.status` | string | `open`, `not_open`, or `unknown`, based on available public evidence. |
| `openProfileStatus.confidence` | string | Evidence strength for the Open Profile status. An unknown status uses low confidence. |
| `openProfileStatus.reason` | string | Human-readable reason for the Open Profile status. |
| `openToWorkStatus` | object | Public #OpenToWork status for the person. It is separate from Open Profile. |
| `openToWorkStatus.status` | string | `open`, `not_open`, or `unknown`, based on available public evidence. |
| `openToWorkStatus.confidence` | string | Evidence strength for the #OpenToWork status. An unknown status uses low confidence. |
| `openToWorkStatus.reason` | string | Human-readable reason for the #OpenToWork status. |
| `experience` | array of objects | Public employment history entries, when available. |
| `experience[].title` | string | Public job title for an employment entry, when available. |
| `experience[].companyName` | string | Public company name for an employment entry, when available. |
| `experience[].companyUrl` | string (URL) | Public company page URL for an employment entry, when available. |
| `experience[].location` | string | Public location for an employment entry, when available. |
| `experience[].startDate` | string | Public start date shown for an employment entry, when available. |
| `experience[].endDate` | string | Public end date shown for an employment entry, when available. |
| `education` | array of objects | Public education entries, when available. |
| `education[].schoolName` | string | Public school name for an education entry, when available. |
| `education[].schoolUrl` | string (URL) | Public school page URL for an education entry, when available. |
| `education[].degree` | string | Public degree for an education entry, when available. |
| `education[].fieldOfStudy` | string | Public field of study for an education entry, when available. |
| `education[].description` | string | Public description for an education entry, when available. |
| `education[].startDate` | string | Public start date shown for an education entry, when available. |
| `education[].endDate` | string | Public end date shown for an education entry, when available. |
| `languages` | array of objects | Public language entries, when available. |
| `languages[].name` | string | Public language name. |
| `languages[].proficiency` | string | Public proficiency level, when available. |
| `recommendations` | array of objects | Public recommendations shown on the profile, when available. |
| `recommendations[].text` | string | Public recommendation text. |
| `recommendations[].authorName` | string | Public recommendation author name, when available. |
| `recommendations[].authorProfileUrl` | string (URL) | Public profile URL of the recommendation author, when available. |
| `volunteering` | array of objects | Public volunteering entries, when available. |
| `volunteering[].organizationName` | string | Public organization name for a volunteering entry, when available. |
| `volunteering[].role` | string | Public role for a volunteering entry, when available. |
| `volunteering[].cause` | string | Public cause for a volunteering entry, when available. |
| `volunteering[].description` | string | Public description for a volunteering entry, when available. |
| `volunteering[].startDate` | string | Public start date shown for a volunteering entry, when available. |
| `volunteering[].endDate` | string | Public end date shown for a volunteering entry, when available. |
| `audience` | object | Public audience counts for the person, when available. |
| `audience.followerCount` | integer | Public follower count, when LinkedIn provides a number. |
| `audience.connectionCount` | integer | Public connection count, when LinkedIn provides a number. |
| `account` | object | Public account indicators for the person, when available. |
| `account.isInfluencer` | boolean | Whether the public profile shows an influencer indicator. |

**Example dataset row**

This complete row is from the successful current-beta run with `devsecopsvince`.

```json
{
  "profileUrl": "https://uk.linkedin.com/in/devsecopsvince",
  "vanityName": "devsecopsvince",
  "fullName": "Vincent K.",
  "summary": "Senior cyber security leader with 20+ years of experience delivering large‑scale secure…",
  "location": "Little Hadham, England, United Kingdom",
  "openProfileStatus": {
    "status": "unknown",
    "confidence": "low",
    "reason": "The credential-free public profile response does not expose the member's Open Profile or free-InMail setting."
  },
  "openToWorkStatus": {
    "status": "open",
    "confidence": "high",
    "reason": "The public profile explicitly identifies the person as Open To Work."
  },
  "experience": [
    {
      "companyName": "Open to Work",
      "location": "Greater London, England, United Kingdom"
    }
  ],
  "education": [
    {
      "schoolName": "University of Exeter",
      "schoolUrl": "https://uk.linkedin.com/school/university-of-exeter",
      "startDate": "2023-09",
      "endDate": "2025-11"
    }
  ],
  "languages": [
    {
      "name": "English"
    }
  ],
  "volunteering": [
    {
      "organizationName": "ST Thomas Of Canterbury Primary School",
      "role": "Chair of Governors and DPO",
      "startDate": "Mar 2016",
      "endDate": "Present",
      "cause": "Education"
    }
  ],
  "audience": {
    "followerCount": 2000
  }
}
```

#### 💳 Pricing

This Actor uses pay-per-event pricing. The current price is `$0.00045` for one Open Profile status returned for a submitted LinkedIn profile. The optional profile details and separate Open to Work status are part of the saved row, not this charged event.

#### 🔌 Integrations

https://www.youtube.com/watch?v=bNACk1\_S\_6w\&list=PLObrtcm1Kw6MUrlLNDbK9QRg8VDJg0gOW\&index=4

Open the default dataset in Apify or use its API to read the saved JSON rows. Export the dataset in formats offered by Apify for review or downstream workflows.

#### ❓ FAQ

##### What does `unknown` mean?

It means the public profile did not provide enough evidence to decide. The Actor returns `unknown` instead of guessing.

##### Are Open Profile and Open to Work the same?

No. Open Profile describes the public Open Profile or free InMail signal. Open to Work describes the public #OpenToWork badge. The Actor returns them in separate status objects.

##### Can I use a vanity name instead of a full URL?

Yes. Add a LinkedIn person-profile URL or a vanity name such as `satyanadella` to `profileUrls`.

##### Does the Actor need a LinkedIn login or cookies?

No. It uses credential-free public access, so you can submit public profile targets without a LinkedIn login or cookies.

##### Can I submit several profiles in one run?

Yes. Add one or more targets to `profileUrls`. Each returned row stays associated with its resolved profile URL.

##### Does it find profiles for me?

No. Submit each URL or vanity name yourself. The Actor does not search LinkedIn or discover profiles.

##### What public profile details can I get?

When available, rows can include the person's name, headline, summary, location, work history, education, languages, recommendations, volunteering, audience counts, and account indicators.

##### Does it send messages or change profile settings?

No. It reads public profile data and status signals. It does not send messages or change LinkedIn settings.

### 📝 Changelog

**v0.0** (22-09-2026)

- Initial release.

### 🆘 Support

For issues, questions, or feature requests, [file a ticket](https://console.apify.com/actors/maximedupre~linkedin-open-profile-status/issues) and I'll fix or implement it in less than 24h 🫡

### 🔗 Related Actors

- [LinkedIn Company Scraper](https://apify.com/maximedupre/linkedin-company-scraper): Add public company context for the people you check.
- [LinkedIn B2B Phone Number Scraper](https://apify.com/maximedupre/linkedin-b2b-phone-number-scraper): Find public business phone and email details for related lead research.
- [Fresh LinkedIn Profile Data](https://apify.com/bestscrapers/fresh-linkedin-profile-data): Add broader public profile data from a known LinkedIn URL.
- [LinkedIn Open Profile Status Scraper](https://apify.com/khadinakbar/linkedin-open-profile-status-scraper): Compare Open Profile and #OpenToWork signals for a submitted profile.
- [Linkedin Open Profile Status](https://apify.com/freshdata/linkedin-open-profile-status): Run another focused Open Profile status check for a known profile.

**Made with ❤️ by Maxime Dupré**

# Actor input Schema

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

Add one or more LinkedIn person-profile URLs or vanity names. Use a full URL such as `https://www.linkedin.com/in/jane-doe` or a vanity name such as `jane-doe`.

## Actor input object example

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

# Actor output Schema

## `dataset` (type: `string`):

Open the saved LinkedIn profile status results.

# 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("maximedupre/linkedin-open-profile-status").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("maximedupre/linkedin-open-profile-status").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 maximedupre/linkedin-open-profile-status --silent --output-dataset

```

## MCP server setup

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

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/0fKpTYueirIXRiyVb/builds/DChuQjqsIIJibdQCH/openapi.json
