# LinkedIn to Phone Number Finder — US, Pay per Found (`b2bsearch/linkedin-to-phone`) Actor

Turn LinkedIn profile URLs into phone numbers on record: every number on record with full name, job title, company and location. A US-centric LinkedIn to phone lookup — about 1 in 4 US decision-maker profiles carries a number. $20 per 1,000 found; profiles without a number are free.

- **URL**: https://apify.com/b2bsearch/linkedin-to-phone.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Social media, Automation
- **Stats:** 4 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 phone number founds

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

### What does LinkedIn to Phone Number Finder do?

**LinkedIn to Phone Number Finder** takes a list of LinkedIn profile URLs and
returns the phone numbers on record for each person, with their name, job
title, company and location. It is a **US-centric lookup**: 93% of the numbers
we hold are US (+1) numbers, and very few profiles outside the US carry one.
Numbers are returned **as recorded** — they are not labelled mobile, direct or
office. A profile without a number **costs nothing**.

- **You pay only when a number is found.** $20 per 1,000 profiles that come
  back with at least one number.
- **Everything else is a free row that says why**: no number on record,
  unknown profile, removed profile, malformed entry.
- **All numbers on the record**, as recorded, not just
  the first one.
- **Up to 1,000 profile URLs per run**, from the form, the API or an MCP
  client.
- **A database lookup.** Nothing is collected from LinkedIn while your run is
  in progress, and no cookies or login are involved.

### What data do you get from a LinkedIn profile URL?

| Field | Example | Notes |
|---|---|---|
| `_status` | `found` | `found`, `no_phone`, `not_found`, `profile_removed`, `invalid`, `paused`, `error` |
| `_input.profile` | `jane-doe-example` | the handle we looked up |
| `linkedinUrl` | `https://www.linkedin.com/in/jane-doe-example` | on `found` and `no_phone` rows |
| `fullName` | `Jane Doe` | on `found` rows |
| `jobTitle` | `Founder and CEO` | when on record |
| `company` | `Acme Example` | current employer name, when on record |
| `location`, `country` | `Austin, Texas, United States`, `US` | when on record |
| `primaryPhone` | `+15125550142` | the first number on the record |
| `phones` | `["+15125550142", "+15125550187"]` | every number on the record, as recorded |
| `phoneCount` | `2` | how many numbers the row carries |
| `_freshness` | `updated_1y` | `fresh_90d`, `updated_1y` or `older` — when the record was last refreshed |
| `_error` | | a plain sentence on every row that is not `found` |

What you do **not** get: a label saying whether a number is a mobile, a direct
line or a company switchboard. We do not have that information today, so the
rows do not pretend to. In our test sample most found rows carried one number
and some carried two to four.

### How to convert LinkedIn URLs to phone numbers (3 steps)

1. Paste your LinkedIn profile URLs, one per line. Bare handles
   (`jane-doe-example`) work too.
2. Press **Start** and wait for the run to finish.
3. Export the dataset as CSV, Excel or JSON, or read it through the API.

### How much does it cost to find a phone number from LinkedIn?

| Event | Price | When |
|---|---|---|
| Phone number found | **$0.02** ($20 per 1,000) | the profile matched and the row carries at least one number |
| Profile without a number | **$0** | `no_phone` row |
| Unknown or removed profile, malformed entry, duplicate | **$0** | `not_found`, `profile_removed`, `invalid` rows; duplicates are looked up once |

One found row is one charge, however many numbers it carries. The platform's
free $5 monthly credit covers about 250 found numbers. A small per-run start
fee may apply; it is shown on the Pricing tab.

Because most profiles have no number on record, the bill for a list is much
lower than the list is long: 1,000 US decision-maker URLs return roughly 250
numbers, about $5.00.

### Pay only for what we find — and tell us how we did

You pay only for rows that carry a phone number. Every miss is free and says why, so a test run on your own list costs only what it finds.

If the Actor saved you time, please leave a short review on the **Reviews** tab — it helps other buyers find it, and we read every one. If something looks wrong, open an issue on this Actor and we will fix it.

### Input

```json
{
  "profileUrls": [
    "https://www.linkedin.com/in/jane-doe-example",
    "linkedin.com/in/sam-rivera-example/?trk=public_profile",
    "alex-kim-example",
    "https://www.linkedin.com/company/acme-example"
  ]
}
```

Full links, links without `https://`, mobile links, links with tracking
parameters and bare handles all work. Different spellings of the same profile
are folded together and looked up once. Company pages and links from other
sites are returned as free `invalid` rows.

### Output

A profile with numbers on record (charged):

```json
{
  "_status": "found",
  "_input": { "profile": "jane-doe-example" },
  "_freshness": "updated_1y",
  "linkedinUrl": "https://www.linkedin.com/in/jane-doe-example",
  "fullName": "Jane Doe",
  "jobTitle": "Founder and CEO",
  "company": "Acme Example",
  "location": "Austin, Texas, United States",
  "country": "US",
  "primaryPhone": "+15125550142",
  "phones": ["+15125550142", "+15125550187"],
  "phoneCount": 2
}
```

A profile we know, with no number on record (free):

```json
{
  "_status": "no_phone",
  "_input": { "profile": "sam-rivera-example" },
  "linkedinUrl": "https://www.linkedin.com/in/sam-rivera-example",
  "_error": "The profile is in the database, but no phone number is on record for it. Not charged."
}
```

The values above are fictional. A `no_phone` row tells you the URL was
recognised; it does not repeat the person's details. If the listing is ever
switched off for maintenance, every entry comes back as a free `paused` row
and nothing is looked up or charged.

### FAQ

#### What is the match rate for LinkedIn to phone?

Measured on our test sample of 829 live profiles on 2026-09-30:

| Profiles | Share with a number on record |
|---|---|
| US decision makers (founders and C-level) | about 25% |
| Other US profiles | about 8% |
| Profiles outside the US | 0–2% |

93% of the numbers on record are US (+1) numbers. If your list is mostly
outside the US, expect very few results — and a near-zero bill.

#### Am I charged when nothing is found?

No. Only a row with `_status: "found"` is charged. A profile without a
number, an unknown URL, a removed profile and a malformed entry are all free
rows with an explanation in `_error`.

#### Are these mobile numbers or direct dials?

We do not know, and the rows do not say. Each number is returned exactly as it
is recorded. Some are mobiles, some are office lines. Check a number before
you build a calling campaign on it.

#### Can I run LinkedIn to phone in bulk from a CSV?

Paste up to 1,000 URLs per run into the input list — a column copied from a
spreadsheet works as is. For more, split the list into several runs or start
runs through the API. Profiles with numbers take a few seconds each on first
lookup, so a long list can run for a while; if a run reaches its time limit,
the rows already delivered stay and nothing else is charged.

#### Does it need cookies, login or an API key?

No. You do not connect a LinkedIn account and you do not provide cookies.
Your Apify account is all you need.

#### How fresh is the data?

Every found row carries a `_freshness` label from the date the record was
last refreshed: `fresh_90d`, `updated_1y` or `older`. People change numbers;
treat an `older` row with more caution.

#### What happens to a company page or a wrong link?

It comes back as a free `invalid` row that says what was wrong, for example
"this is a company or school page, not a person's profile". The rest of the
list runs normally.

#### Is it legal to look up a phone number from a LinkedIn profile?

That depends on where you and the person are and on what you do with the
number. You are responsible for having a lawful basis for your use. In the
US, calls and texts are regulated by the Telephone Consumer Protection Act
(TCPA) and the federal and state Do Not Call rules: check numbers against the
National Do Not Call Registry and get the consent the law requires before you
use an autodialer, a prerecorded voice or text messages. See the disclaimer
below.

### Use LinkedIn to Phone Number Finder with AI agents and MCP

This Actor works as a tool for AI agents. Add it to Claude, ChatGPT, Cursor or any other MCP client through the Apify MCP server:

```
https://mcp.apify.com?tools=b2bsearch/linkedin-to-phone
```

- **Fast enough for a tool call.** A small request finishes in seconds, so the agent gets its answer inside one call.
- **The agent pays only for results.** Prices are per result (see the pricing section above) and every miss is a free row. Cap what one call may spend with `maxTotalChargeUsd`.
- **Rows explain themselves.** Each row has a `_status`; a row that is not a result says why in `_error`, so the agent can decide what to do next without guessing.

Input an agent can send as is:

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

The same Actor is available as a tool in LangChain, CrewAI and the OpenAI Agents SDK, and as a step in n8n, Make and Zapier through the Apify integrations.

### Related Actors: which one should you use?

| Need | Actor |
|---|---|
| Email → LinkedIn profile URL | [Email to LinkedIn](https://apify.com/b2bsearch/email-to-linkedin) |
| Email → current company and job title | [Email to Company](https://apify.com/b2bsearch/email-to-company) |
| Email → phone numbers on record | [Email to Phone](https://apify.com/b2bsearch/email-to-phone) |
| Email → X (Twitter) profile | [Email to Twitter](https://apify.com/b2bsearch/email-to-twitter) |
| Email → Facebook profile | [Email to Facebook](https://apify.com/b2bsearch/email-to-facebook) |
| Email → full professional profile | [Reverse Email Lookup](https://apify.com/b2bsearch/reverse-email-lookup) |
| LinkedIn URL → full profile | [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) |
| LinkedIn URL → email addresses on record | [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) |
| LinkedIn URL → phone numbers on record | **LinkedIn to Phone** (this Actor) |
| X (Twitter) handle → email | [Twitter to Email](https://apify.com/b2bsearch/twitter-to-email) |
| X (Twitter) handle → LinkedIn profile | [Twitter to LinkedIn](https://apify.com/b2bsearch/twitter-to-linkedin) |
| X (Twitter) handle → phone numbers on record | [Twitter to Phone](https://apify.com/b2bsearch/twitter-to-phone) |
| Facebook profile → email | [Facebook to Email](https://apify.com/b2bsearch/facebook-to-email) |
| Facebook profile → phone numbers on record | [Facebook to Phone](https://apify.com/b2bsearch/facebook-to-phone) |
| Facebook profile → LinkedIn profile | [Facebook to LinkedIn](https://apify.com/b2bsearch/facebook-to-linkedin) |
| GitHub username → email | [GitHub to Email](https://apify.com/b2bsearch/github-to-email) |
| GitHub username → LinkedIn profile | [GitHub to LinkedIn](https://apify.com/b2bsearch/github-to-linkedin) |
| Name + company domain → work email | [Work Email Finder](https://apify.com/b2bsearch/work-email-finder) |
| Name + company domain → LinkedIn profile | [Name to Profile](https://apify.com/b2bsearch/name-to-profile) |
| Name + company domain → phone numbers on record | [Name to Phone](https://apify.com/b2bsearch/name-to-phone) |
| Handle on any of three networks → full profile | [Social Handle Lookup](https://apify.com/b2bsearch/social-handle-lookup) |
| Company domain → company record | [Domain to Company](https://apify.com/b2bsearch/domain-to-company) |
| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |
| Company domain → current employees | [Company Employees](https://apify.com/b2bsearch/company-employees) |
| Company domain → former employees | [Former Employees Finder](https://apify.com/b2bsearch/former-employees-finder) |
| Filters → list of people | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| Filters → list of companies | [Company Database Search](https://apify.com/b2bsearch/company-database-search) |
| CSV of emails, URLs or names → profiles in bulk | [Bulk People Enrichment](https://apify.com/b2bsearch/bulk-people-enrichment) |

### Disclaimer and permitted use

**Independent product.** This Actor is an independent tool. It is not
affiliated with, endorsed by, or sponsored by LinkedIn Corporation.
LinkedIn® is a trademark of its owner. It is named here only to describe the
kind of public profile link this Actor accepts.

**No platform access.** This Actor does not log in to LinkedIn and does not
collect anything from it. Every answer comes from our own database of
business-contact records. It never returns passwords, messages, or content
from non-public accounts.

**Permitted use.** Business-to-business purposes only: sales prospecting,
recruiting outreach, CRM enrichment, and confirming that a business contact
is who they say they are. You may not use this Actor or its output to:

- stalk, harass, threaten, dox or publicly expose any person;
- identify the person behind a pseudonymous account;
- decide on anyone's eligibility for credit, employment, housing or
  insurance. This Actor is not a consumer reporting agency and its output is
  not a consumer report under the U.S. Fair Credit Reporting Act;
- send unsolicited bulk messages, or place autodialed or prerecorded calls or
  texts without the consent the law requires;
- profile people by health, religion, political opinion, sexual orientation,
  ethnicity or union membership;
- build or resell a contact database from the results.

**Your responsibilities.** You decide whom to look up and what to do with the
result. You are responsible for having a lawful basis for that use and for
complying with the laws that apply to you, including GDPR and UK GDPR,
ePrivacy and PECR, CCPA/CPRA and CAN-SPAM. Phone numbers carry their own
rules: before you call or text a number from this Actor, you are responsible
for complying with the U.S. Telephone Consumer Protection Act (TCPA), the
National Do Not Call Registry and state Do Not Call lists, and the equivalent
rules in the country you are calling. Honor every opt-out you receive.

**Removal requests.** To have a person's data removed, open an issue on
this Actor with only the profile link. Nothing else is needed, and the
record is removed from every listing.

**Accuracy.** Records can be incomplete or out of date, and a number may no
longer belong to the person. Output is provided as is. Check before you rely
on it.

# Actor input Schema

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

One LinkedIn profile URL or bare handle per line, up to 1,000 per run. US-centric: a number is on record for about 1 in 4 US decision-maker profiles and for few profiles elsewhere. $20 per 1,000 profiles returned with a number; a profile without one is a free "no\_phone" row, and unknown, removed or malformed entries are free too.

## Actor input object example

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

# Actor output Schema

## `results` (type: `string`):

No description

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

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

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/linkedin-to-phone").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/benzvaifler"
  ]
}' |
apify call b2bsearch/linkedin-to-phone --silent --output-dataset

```

## MCP server setup

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

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/zPfVY3DmEySnuqb33/builds/V86TlyohBMNCyJ3wk/openapi.json
