# B2B Leads Finder with Emails ✅ New · Apollo Alternative (`b2bsearch/b2b-leads-finder`) Actor

New: B2B leads where every row has a live email: a work address at the person's current company or a personal one, never a past employer's. Filter by job title, seniority, country, city, industry, company size and domain. People without one are free. From $1.50 per 1,000. No login.

- **URL**: https://apify.com/b2bsearch/b2b-leads-finder.md
- **Developed by:** [B2B Enrich Search](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Automation, AI
- **Stats:** 9 total users, 6 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: 5.00 out of 5 stars

## 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

## B2B Leads Finder with Emails — Apollo Alternative

**New on the Store.** Pick job titles, seniority, countries, industries and
company size; get a flat list of people where **every row carries a work
email at their current company or a personal mailbox**. From $1.50 per 1,000 leads.
People without one are skipped and cost nothing. No login, no cookies, no
browser.

- **Live emails only.** A lead ships with an address on record at their
  *current* employer's domain, or a personal mailbox. Addresses that match
  only a past employer are left out — those are the mailboxes that bounce.
  The current-employer match is made on the company name and the mail
  domain, so a company with an unusual domain can be missed (then the lead
  falls back to a personal address, or is skipped free).
- **You pay per lead, not per page or per search.** Skipped people, repeats
  and note rows are free.
- **Built for outreach tools.** The *Emails for outreach tools* view exports
  name, first name, last name, email and company domain — ready for
  Instantly, Lemlist, Smartlead, HubSpot or a CSV.
- **Weekly reruns without duplicates.** Point *Skip people from earlier runs*
  at last week's dataset and get only the new people.

### What a run looks like

Measured on the live database on 2026-10-04, US heads and VPs of sales at
companies with 50–500 employees:

| Run | Leads | Live email found for | Time |
|---|---|---|---|
| `emailType: any`, 100 leads | 100 (58 work, 42 personal) | 70% of matching people | 14 s |
| `emailType: any`, 500 leads | 500 (289 work, 211 personal) | — | 109 s |
| `emailType: work`, 100 leads | 100 (all work) | 36% of matching people | — |

Other segments the same day: UK marketing directors in software, 67% with a
live email; German CTOs at companies under 200 people, 60%. About a third of
US sales leads also have a direct phone on record (`phoneOnRecord`).

### 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 of the current company. |
| `companyDomains` | Account-based lists: only people at these companies (`stripe.com`). |
| `keywords` | Words in the profile headline: `revops`, `shopify`, `fractional cfo`. |
| `emailType` | `any` (default: current work email, else personal), `work` (current-employer address only), `personal`. |
| `maxResults` | How many leads to deliver. You pay only for these. |
| `maxPerCompany` | At most N leads per company across the run. |
| `excludeDatasets` | Datasets of earlier runs: those people are skipped for free. |
| `excludeCompanyDomains`, `excludeJobTitles`, `excludeCountries` | Leave out your customers, competitors, juniors or a country. |
| `companyHqCountries` | Companies headquartered here, wherever the person lives (people in Poland at US companies). |
| `pastCompanyDomains` | People who used to work at these companies. |

A country alone is refused — it matches millions. Add a title, keyword,
company, industry or city.

Example:

```json
{
  "countries": ["us"],
  "jobTitles": ["vp sales", "head of sales"],
  "companySizeMin": 50,
  "companySizeMax": 500,
  "emailType": "any",
  "maxPerCompany": 2,
  "maxResults": 1000
}
```

### What you get

One row per lead:

| Column | Example |
|---|---|
| `fullName`, `firstName`, `lastName` | Jane Doe |
| `jobTitle`, `headline` | VP Sales |
| `email` | jane.doe@example.com |
| `emailType` | `work` (current employer) or `personal` |
| `workEmail`, `personalEmail` | both, when both are on record |
| `companyName`, `companyDomain`, `companySize`, `companyIndustry` | Acme · example.com · 180 · Computer and Network Security |
| `location`, `countryCode` | Greater Boston · us |
| `linkedinUrl` | the public profile link |
| `phoneOnRecord` | `true` when a direct phone is on record — see below |
| `personId` | stable id, used by *Skip people from earlier runs* |
| `_freshness` | how recently the record was refreshed |

Rows with another `_status` are free notes: how many people were skipped for
having no live email, how many were over the per-company cap, and so on.

### Pricing

One event, `lead-found`, priced by your Apify plan, plus the platform's small
start fee per run:

| Apify plan | Per 1,000 leads | Per lead |
|---|---|---|
| Free | $3 | $0.003 |
| Starter | $2.50 | $0.0025 |
| Scale | $2 | $0.002 |
| Business and up | $1.50 | $0.0015 |
A lead is one distinct person delivered with a live email.
Not charged: people without one, repeats of a person already delivered,
people from your excluded datasets, and every note row.

Phones are not part of the row. `phoneOnRecord` tells you which leads have
one; [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone)
returns every number on record with name, title and company for $12 per
1,000 found, misses free.

### How many leads before you buy

[People Database Search](https://apify.com/b2bsearch/people-database-search)
takes the same filters and answers `mode: "count"` and `mode: "market"` with no
per-row charge: how many people match, where they work, which countries and
seniority levels. Size the segment there, then pull the leads here.

### Honest limits

- **Not every match has a live email.** Coverage depends on the segment; the
  run note says how many people were skipped. US and UK decision makers have
  the best coverage.
- **Emails are on record, not verified at run time.** We ship the addresses
  our database holds for the person and never invent pattern guesses. For a
  bounce check before a big send, run your usual verifier.
- **The data is a database snapshot,** refreshed on a rolling basis, not a
  live crawl. `_freshness` on every row says how old the record is.
- **Country is where the person lives,** from their profile. People with no
  location on file are not matched by a country filter.

### With AI agents and MCP

The Actor runs from Claude, Cursor and other MCP clients through Apify MCP:

```
https://mcp.apify.com?tools=b2bsearch/b2b-leads-finder
```

Ask for "50 heads of marketing at UK SaaS companies with 50–200 people" and
the agent fills the filters. Rows are flat, so a few hundred fit a context
window.

### FAQ

**Is this Apollo?** No. It is an alternative with the same kind of filters,
built on our own B2B database. It is not affiliated with Apollo.io.

**Do I need an account anywhere else?** No. No login, cookies or API key
besides Apify.

**Can I get a work email only?** Set `emailType` to `work`. You get fewer
leads, all with an address on the current employer's domain.

**I'm new here, is this a fresh listing?** Yes, it launched in October 2026.
Reviews and issue reports go straight to the people who build it, and they
are what we fix first. If a filter is missing, open an issue.

### Which actor in this family?

| Actor | Input → output |
|---|---|
| **B2B Leads Finder** (this one) | filters → leads with a live email, from $1.50/1k |
| [People Database Search](https://apify.com/b2bsearch/people-database-search) | filters → people, free counts and market breakdowns, full profiles |
| [Company Employees](https://apify.com/b2bsearch/company-employees) | company domain → current staff |
| [Domain to Decision Makers](https://apify.com/b2bsearch/domain-to-decision-makers) | company domain → CEO, founders, VPs |
| [LinkedIn Email Finder](https://apify.com/b2bsearch/linkedin-email-finder) | profile URL → email addresses |
| [LinkedIn to Phone](https://apify.com/b2bsearch/linkedin-to-phone) | profile URL → every phone number on record |
| [Company Database Search](https://apify.com/b2bsearch/company-database-search) | filters → companies |

### Disclaimer

This Actor is an independent product. It is not affiliated with, endorsed by
or sponsored by LinkedIn or Apollo.io. It does not access, crawl or scrape any
of them at run time: answers come from our own database of publicly available
professional data, and the names only describe the kind of data it covers. To
have a person's data removed, open an issue on this Actor with only the
profile link — nothing else is needed, and it is removed from every listing.

# 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). You pay from $1.50 per 1,000 leads delivered ($3 on the Free plan), each with an email — people without one 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.

## `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 titles match. substring finds the letters anywhere ("cto" also hits "director"); word matches whole words only. Use word for short titles: cto, cfo, vp, ceo.

## `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",
  "titleMatch": "substring"
}
```

# 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-finder").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-finder").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-finder --silent --output-dataset

```

## MCP server setup

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

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/gZivd9twvcH2kwNQ3/builds/Nrhvj02Fg1bFrp5Vk/openapi.json
