# B2B Leads Finder: Mobile Numbers & Emails ✅ Apollo Alternative (`b2bsearch/b2b-leads-with-phones`) Actor

Leads Finder where every row has a verified mobile number and a live email (work at the current company or personal). Filter by job title, seniority, country, city, industry, company size and domain, like Apollo or Lusha. People without a number are free. From $1.50/1k leads + $12/1k numbers.

- **URL**: https://apify.com/b2bsearch/b2b-leads-with-phones.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Automation, AI
- **Stats:** 3 total users, 2 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $1.50 / 1,000 lead delivered with an emails

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

### What does B2B Leads Finder with Mobile Numbers do?

**B2B Leads Finder with Mobile Numbers & Emails** builds a lead list from
filters — job title, seniority, country, city, industry, company size,
company domain — and delivers one row per person with **a verified mobile
number and a live email** on every row. It is the lead finder for calling
campaigns: the kind of list people build in Apollo, Lusha or ZoomInfo, with
the phone column already filled.

- **Every row has a number.** The numbers on record are mobile numbers that
  were verified when they were collected: direct dials, never a company
  switchboard. People without one are skipped free (switch
  **Only leads with a mobile number** off to get the leads finder with
  numbers added where they exist).
- **Every row has a live email**: a work address at the person's current
  company, or a personal one. Addresses at earlier employers never count.
- **Pay per lead, plus per number.** From $1.50 per 1,000 leads and $12 per
  1,000 mobile numbers; the exact tier for your Apify plan is on the
  Pricing tab. Skipped people, repeats and note rows are free.
- **US-centric numbers.** About 1 in 4 US decision makers has a verified
  mobile on record; outside the US very few do. Set `countries` to `us` (or
  US cities) for the best yield.
- **A database search**, 800M+ professional profiles and 115M companies.
  Nothing is crawled while your run is in progress; no login, cookies or
  API key.

### Measured

Runs on 2026-10-14, defaults unless stated:

| Run | Leads delivered | Emails | Numbers | Matching people read | Time |
|---|---|---|---|---|---|
| US VP / head of sales at companies of 50–1,000, 25 leads | 25 | 15 work at the current company, 10 personal | 25, of which 12 rows carry two or more numbers | 129 (104 skipped free: no number or no live email) | 17 s |

About 1 in 5 matching US sales leaders carries both a verified mobile number
and a live email, so a list reads roughly five people per delivered lead;
everyone skipped is free. Numbers come as recorded (E.164) with a
`_freshness` label from the date the record was last refreshed.

### Input

| Field | What it does |
|---|---|
| `jobTitles` | Words in the current job title: `vp sales`, `founder`, `head of marketing`. Any of them matches. |
| `titleMatch` | `substring` (default) or `word`. Use `word` for short titles — `cto` as a substring also hits *director*. |
| `seniority` | `cxo`, `vp`, `director`, `manager`, `founder`, `other` — catches every spelling of a level. |
| `countries`, `countryGroups`, `cities` | Where the people live: `us`, `gb`, groups like `dach` or `nordics`, and city text like `austin`. |
| `industries` | Industry of the current company: `Software Development`, `Financial Services`… |
| `companySizeMin`, `companySizeMax` | Employees at the current company. |
| `companyDomains`, `excludeCompanyDomains` | Account lists by website domain; brand domains resolve to the real company. |
| `keywords` | Words in the profile headline: `revops`, `fractional cfo`, `shopify`. |
| `maxResults` | Leads to deliver (default 100, up to 10,000). |
| `emailType` | `any` (default), `work` (current employer only) or `personal`. |
| `phoneRequired` | **Only leads with a mobile number**, on by default. Off: a live email is enough, the number is added where one is on record. |
| `maxPerCompany` | Cap on people per company, for account-based lists. |
| `excludeDatasets` | Dataset ids of earlier runs: people already delivered are skipped free. |

```json
{
  "jobTitles": ["vp sales", "head of sales"],
  "countries": ["us"],
  "companySizeMin": 50,
  "companySizeMax": 1000,
  "maxResults": 100
}
```

### Output

One row per lead:

| Field | Example |
|---|---|
| `fullName`, `firstName`, `lastName` | `Jane Doe` |
| `jobTitle`, `headline` | `VP Sales`, `Revenue leader, B2B SaaS` |
| `phone` | `+15125550142` — the verified mobile number, E.164 |
| `phones` | `["+15125550142"]` — every number on record |
| `email`, `emailType` | `jane.doe@acme-example.com`, `work` or `personal` |
| `workEmail`, `personalEmail` | both when both are on record |
| `companyName`, `companyDomain`, `companySize`, `companyIndustry` | `Acme Example`, `acme-example.com`, `420`, `Software Development` |
| `location`, `countryCode` | `Austin, Texas, United States`, `US` |
| `linkedinUrl` | the public profile link |
| `_freshness` | `fresh_90d`, `updated_1y`, `older` |

A `skipped_no_contact` note row says how many matching people had no
verified mobile number or no live email and were skipped — not delivered,
not charged. The values above are fictional.

### How much does a lead with a mobile number cost?

Two events per delivered lead, each with a price per Apify plan:

| Event | Free plan | Starter | Scale | Business and up |
|---|---|---|---|---|
| Lead delivered with an email | $3 per 1,000 | $2.50 | $2 | $1.50 |
| Verified mobile number on the lead | $12 per 1,000 | $11 | $10 | $9 |

So 1,000 leads with numbers cost $15 on the Free plan and $10.50 on
Business. A small per-run start fee applies (Pricing tab). With
`phoneRequired` off, the number event is charged only for leads that have
one.

### How many leads before you buy

[People Database Search](https://apify.com/b2bsearch/people-database-search)
counts the same filters for free (`mode: "count"`), and its `market` mode
shows how many of them carry a phone or an email, so you can size a list
before spending on it.

### Use B2B Leads with Mobile Numbers 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/b2b-leads-with-phones
```

- **Rows explain themselves.** Each row has a `_status`; a row that is not a
  lead says why in `_note`, so the agent can decide what to do next.
- **The agent pays only for results.** Cap what one call may spend with
  `maxTotalChargeUsd`; the run stops at the cap and only delivered leads are
  charged.

The same Actor is available as a step in n8n, Make and Zapier through the
Apify integrations.

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

| Need | Actor |
|---|---|
| Leads with a live email, numbers optional | [B2B Leads Finder with Emails](https://apify.com/b2bsearch/b2b-leads-finder) |
| LinkedIn URL, email or name → verified mobile number | [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) |
| Name + company domain → mobile number | [Name to Phone](https://apify.com/b2bsearch/name-to-phone) |
| Email → mobile number | [Email to Phone](https://apify.com/b2bsearch/email-to-phone) |
| Filters → people, free counts and market breakdowns | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| Company domain → decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |

### Disclaimer and permitted use

**Independent product.** This Actor is an independent tool. It is not
affiliated with, endorsed by, or sponsored by LinkedIn Corporation, Apollo,
Lusha or ZoomInfo; their names appear only to describe the kind of list this
Actor builds.

**No platform access.** This Actor does not log in to any network and does
not collect anything from one. Every answer comes from our own database of
business-contact records.

**Permitted use.** Business-to-business purposes only: sales prospecting,
recruiting outreach and CRM enrichment. You may not use this Actor or its
output to stalk, harass or dox anyone; to decide on anyone's eligibility for
credit, employment, housing or insurance (this is not a consumer report under
the U.S. Fair Credit Reporting Act); to send unsolicited bulk messages or
place autodialed or prerecorded calls or texts without the consent the law
requires; or to build or resell a contact database.

**Your responsibilities.** You are responsible for having a lawful basis for
your use and for complying with the laws that apply to you, including GDPR
and UK GDPR, ePrivacy and PECR, CCPA/CPRA and CAN-SPAM. Before you call or
text a number from this Actor you are responsible for 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; 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

## `jobTitles` (type: `array`):

Match any of these words in the current job title (vp sales, founder, "head of marketing"...). Each 3-64 characters, at most 10. Add seniority to catch every spelling of a level.

## `countries` (type: `array`):

Where the leads live: two-letter codes (us, gb, de...), up to 60. Combine with country groups. Leave empty to search every country.

## `maxResults` (type: `integer`):

Stop after this many leads (default 100, maximum 10,000). A lead costs from $1.50 per 1,000 ($3 on the Free plan) plus $12 per 1,000 for the mobile number ($9 on Business and up). People without a number or a live email are skipped free.

## `emailType` (type: `string`):

Which mailbox every lead must have. any: a work address at the current employer, else a personal one. work: current-employer address only (fewer leads). Addresses at earlier employers never count.

## `phoneRequired` (type: `boolean`):

On (default): every lead has a verified mobile number on record and a live email; people without a number are skipped free. Off: leads with a live email, the number added where one is on record. Phones are US-centric: about 1 in 4 US decision makers has one.

## `seniority` (type: `array`):

Keep only people whose current role falls in these seniority buckets. Buckets are assigned from the job title, so they work across title spellings ('CTO', 'Chief Technology Officer', 'Head of Technology' all land in cxo). At most 6.

## `companySizeMin` (type: `integer`):

Keep only leads at companies with at least this many employees.

## `companySizeMax` (type: `integer`):

Keep only leads at companies with at most this many employees.

## `industries` (type: `array`):

Industry of the current company: names in either wording, any case (Software Development also finds Computer Software). Up to 20. Examples: Financial Services, Hospitals and Health Care.

## `keywords` (type: `array`):

Match any of these words in the profile headline — what people say they do ("revops", "fractional cfo", "shopify"). Each 3-64 characters, at most 10.

## `companyDomains` (type: `array`):

Account-based lists: only people currently at these companies, by website domain (stripe.com). Brand domains resolve to the real company. At most 1,000.

## `cities` (type: `array`):

Narrow inside the chosen countries by city or region text (san francisco, greater london). 3-64 characters each, at most 10.

## `countryGroups` (type: `array`):

Whole regions at once, added to the countries above: eu, eea, dach, nordics, baltics, benelux, cee, cis, post_soviet, mena, gcc, latam.

## `titleMatch` (type: `string`):

How job title keywords match. Leave empty: a list with a short title (4 letters or fewer: cto, cro, vp, ceo) matches whole words, otherwise the letters match anywhere. substring: "cto" also hits "director"; word: whole words only.

## `maxPerCompany` (type: `integer`):

Deliver at most this many leads per company across the whole run. The rest are skipped free and counted in one note row.

## `excludeDatasets` (type: `array`):

Pick datasets of earlier runs of this Actor: everyone in them is left out and never charged again. Rerun the same search weekly and get only new leads.

## `excludeJobTitles` (type: `array`):

Drop people whose current title contains any of these words (example: junior, assistant, intern). 3-64 characters each, at most 10.

## `excludeCompanyDomains` (type: `array`):

Drop people currently at these companies, by website domain — your customers, competitors, your own company. At most 1,000.

## `excludeCountries` (type: `array`):

Two-letter codes to drop, for example a group minus one country (eu without de).

## `companyHqCountries` (type: `array`):

Keep leads whose company is headquartered in these countries, wherever the lead lives — for example people in Poland working for US companies.

## `pastCompanyDomains` (type: `array`):

People who USED to work at these companies, by website domain — alumni of a competitor or of a former customer. At most 100.

## Actor input object example

```json
{
  "jobTitles": [
    "vp sales",
    "head of sales"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 25,
  "emailType": "any",
  "phoneRequired": true
}
```

# 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 = {
    "jobTitles": [
        "vp sales",
        "head of sales"
    ],
    "countries": [
        "us"
    ],
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/b2b-leads-with-phones").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 = {
    "jobTitles": [
        "vp sales",
        "head of sales",
    ],
    "countries": ["us"],
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/b2b-leads-with-phones").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 '{
  "jobTitles": [
    "vp sales",
    "head of sales"
  ],
  "countries": [
    "us"
  ],
  "maxResults": 25
}' |
apify call b2bsearch/b2b-leads-with-phones --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,b2bsearch/b2b-leads-with-phones"
        }
    }
}
```

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/8kRHg25XOAEjtzrpb/builds/qCsPfHCRbiFVSHyGh/openapi.json
