# B2B Leads Finder ✅ Verified Emails, Invalid Emails Free $5/1k (`bounceverify/b2b-leads-finder`) Actor

Build B2B prospect lists by job title, seniority, country or region, industry and company size. Every email is verified in real time, and you only pay for leads with a deliverable email. Invalid emails and leads you already received are never charged. Free preview with result estimate.

- **URL**: https://apify.com/bounceverify/b2b-leads-finder.md
- **Developed by:** [Redify](https://apify.com/bounceverify) (community)
- **Features:** Limited permissions
- **Stats:** 19 total users, 4 monthly users, 99.1% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $3.00 / 1,000 verified leads

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 ✅ Verified Emails, Invalid Emails Free

**B2B Leads Finder** builds targeted prospect lists of decision-makers with **verified business emails**. Filter by **job title, seniority, country or region, industry and company size**, and export sales-ready leads with company domain, size, revenue and phone to CSV, Excel, Google Sheets or your CRM.

**Every email is checked in real time before delivery. Invalid emails are never delivered and never charged.** Leads you already received in an earlier run are skipped for free.

👉 **[Estimate your leads for free](https://leads.lookupedin.com)**: see how many prospects match and what it costs, then copy the settings straight into the actor.

**Ideal for:** sales prospecting, cold email campaigns, account-based marketing, recruiting, agencies building lead lists for clients, and CRM enrichment.

***

### How to use it in 4 steps

#### Step 1: Build your search in the free estimator

Open **[leads.lookupedin.com](https://leads.lookupedin.com)** (no account needed).

1. **Who:** type job titles (`CEO`, `Head of Sales`…) and/or pick seniority levels (C-level, VP, Director…).
2. **Where:** pick countries or whole regions (`Europe`, `Gulf`, `DACH`…).
3. **Which companies:** pick industries or groups (`Tech`, `Finance`…) and company sizes.
4. **Results:** choose how many leads you want, email quality and email type.

The right panel updates live with:

- **Leads with an email**: how many leads match your filters.
- **Estimated cost**: the maximum you will pay for the number of leads you asked for.
- **Tips** when your filters are too narrow.

#### Step 2: Copy the settings

Click **Copy run settings (JSON)**, then **Open B2B Leads Finder**.

#### Step 3: Paste them into the actor

On this page, click **Try for free** (or **Start**), open the **JSON** tab of the input, replace its content with what you copied, and click **Start**.

You can also fill in the form fields directly without using the estimator.

#### Step 4: Download your leads

Leads appear in the **Output** tab as soon as they are verified. Export them as **CSV, Excel or JSON**, or send them to Google Sheets, HubSpot, Make, Zapier or any webhook.

> **Not sure yet?** Turn on **Preview only**: the run shows how many leads match and 5 sample leads with masked emails. It is free.

***

### Pricing

**$5.00 per 1,000 delivered leads ($0.005 per lead).** No subscription.

Every email is verified before delivery. What you pay depends on the verification result:

| Email status | Meaning | Delivered? | Charged? |
|---|---|---|---|
| `valid` | Mailbox confirmed | ✅ Yes | $0.005 |
| `catch-all` | The company server accepts every address, so the mailbox cannot be confirmed 100% | ✅ Yes (unless you choose *Valid only*) | $0.005 |
| `risky` | Mailbox may exist but the server shows warning signs (full inbox, temporary block…) | Only if you choose *All except invalid* | $0.005 if delivered, otherwise free |
| `unknown` | The company mail server refused or did not answer the check | Only if you choose *All except invalid* | $0.005 if delivered, otherwise free |
| `invalid` | Mailbox does not exist | ❌ No (free `rejected-leads` dataset) | **Free** |
| Disposable or spam-trap address | Not a real business contact | ❌ No | **Free** |
| Check could not be completed on our side | Technical issue during verification | ❌ No | **Free** |
| Lead you already received in a previous run | Skipped | ❌ No | **Free** |
| Preview run | Estimate and samples | n/a | **Free** |

Every delivered lead shows its `email_status`, so you can filter your list before sending (for example, keep only `valid` for your first campaign).

**Email quality** decides what is delivered (and charged):

- **Valid + catch-all** (default, recommended): best balance between volume and deliverability.
- **All except invalid**: also delivers `risky` and `unknown` emails. You get more leads, but expect more bounces. Large companies often block checks, so on some segments most extra leads are `unknown`.
- **Valid only**: only confirmed mailboxes.

**Example:** you request 2,000 leads with the default setting. The actor checks the emails one by one, rejects the invalid and unconfirmed ones for free and stops at 2,000 delivered leads. You pay **$10**.

**Spending limit:** set **Max paid results** in the Apify run options. The actor stops cleanly at that number.

***

### Never pay twice for the same lead

With **Skip leads I already received** on (the default), every lead delivered to you is remembered in a private storage in **your own Apify account** (named `b2b-leads-finder-history`).

- On the next run, with the same or different filters, those leads are skipped before verification. They are not delivered and not charged.
- The log shows how many were skipped: `Skipping 1,250 leads you already received in previous runs.`
- The memory keeps your last **300,000** delivered leads.
- It is saved after each batch and also if the run is aborted or migrated, so a stopped run does not lose it.

To receive the same leads again (for example, for a new campaign), turn the option off. To reset the memory, delete the `b2b-leads-finder-history` key-value store in **Storage**.

Because the memory follows your account, **scheduling the actor weekly with the same filters** delivers only new prospects each time.

***

### Limits per run

| | Limit |
|---|---|
| Leads per run | **10,000** maximum (default 100) |
| Typical speed | about **1 to 2 verified leads per second**, depending on how many emails are invalid |
| Default run timeout | 3 hours, enough for 10,000 leads |
| Memory | 512 MB is enough. More memory does not make it faster |

**Need more than 10,000 leads?** Run the actor several times. Already-received leads are skipped, so each run continues where the last one stopped. You can also split the search by country or region.

**If the run reaches its timeout**, it stops cleanly about 90 seconds before. Everything delivered is kept, and the log tells you to raise the timeout for more leads.

***

### Quick start (JSON input)

Free preview:

```json
{
    "jobTitles": ["Marketing Director"],
    "countries": ["France", "Belgium", "Switzerland"],
    "industries": ["tech"],
    "previewOnly": true
}
```

Full search:

```json
{
    "seniority": ["c_level", "owner"],
    "countries": ["Europe"],
    "industries": ["finance"],
    "companySizes": ["51-200", "201-500"],
    "emailQuality": "valid_or_catch_all",
    "emailType": "work_only",
    "maxPerCompany": 2,
    "maxResults": 1000
}
```

***

### Filters

| Field | What it does | Example |
|---|---|---|
| `jobTitles` | Job titles to find. Matches titles that start with your keyword. | `["CEO", "Head of Sales"]` |
| `useTitleSynonyms` | Also searches equivalent titles. CEO also finds Chief Executive Officer, Managing Director, Directeur Général. | `true` |
| `seniority` | Levels to target, with no need to type titles. | `["c_level", "vp", "director"]` |
| `excludeJobTitles` | Removes titles that contain any of these words. | `["assistant", "intern"]` |
| `countries` | Countries or whole regions. | `["Germany", "Gulf"]` |
| `excludeCountries` | Countries or regions to remove. | `["United States"]` |
| `industries` | Industries or industry groups. | `["tech", "Banking"]` |
| `excludeIndustries` | Industries to remove. | `["Staffing And Recruiting"]` |
| `companies` | Company names or domains. | `["acme.com", "Globex"]` |
| `companySizes` | Number of employees. | `["11-50", "51-200"]` |
| `emailQuality` | `valid_or_catch_all` (default), `all_except_invalid` or `valid`. See Pricing. | `"valid"` |
| `emailType` | `any` (default) or `work_only` to exclude Gmail, Yahoo, Outlook, GMX, Web.de, Orange… | `"work_only"` |
| `maxPerCompany` | Maximum leads from the same company. `0` = no limit. | `3` |
| `maxResults` | Number of leads to deliver (1 to 10,000). | `500` |
| `skipPreviouslyDelivered` | Skips leads you already received. | `true` |
| `previewOnly` | Estimate and samples only. Free. | `false` |

**Regions:** Europe, MENA, Gulf / GCC, Africa, North Africa, Maghreb, West Africa, East Africa, Asia, Southeast Asia, Latin America, South America, North America, Scandinavia, DACH, Benelux, Francophone, Oceania.

**Industry groups:** tech, finance, healthcare, media, energy, manufacturing, education, legal, construction, retail, marketing.

**Seniority levels:** `owner` (founders, owners, partners), `c_level` (CEO, CFO, Chief..., President, Managing Director), `vp`, `director` (Director, Head of), `manager`, `senior`.

A typo in a field name does not silently change your run: unknown fields are listed as a warning in the log.

***

### How to get the most leads

1. **Start with the [free estimator](https://leads.lookupedin.com) or a preview run.**
2. **Use regions and industry groups** rather than a single country or industry.
3. **Combine `seniority` with `jobTitles`.** Titles match from the start ("Director" finds "Director of Sales"), and seniority also catches "Sales Director".
4. **Keep title synonyms on.**
5. **Need more volume?** Switch Email quality to "All except invalid", then filter on `email_status` before sending.
6. **Company size is optional.** It only keeps companies whose size is known.
7. **Use `maxPerCompany`** (for example 2 or 3) to spread your list across more companies.
8. **Schedule the actor weekly** with the same filters to get only new prospects.

***

### Output

Each lead contains:

| Field | Example |
|---|---|
| `full_name`, `first_name`, `last_name` | Jane Smith |
| `job_title`, `seniority` | VP Marketing, `vp` |
| `email` | jane.smith@acme.com |
| `email_status` | `valid`, `catch-all`, `risky` or `unknown` |
| `email_score` | 95 |
| `email_type` | `work` or `personal` |
| `email_free_provider` | `true` for Gmail, Yahoo, Outlook… |
| `other_email`, `other_email_status` | Second email if available |
| `mobile` | Phone, when available |
| `country`, `industry` | Germany, Computer Software |
| `company_name`, `company_domain`, `company_website` | Acme, acme.com |
| `company_size`, `company_revenue` | 180, $25M |
| `company_industry`, `company_city`, `company_country` | Software, Berlin, Germany |
| `company_founded`, `company_phone` | 2012 |
| `company_profile_url`, `profile_url` | Public profile pages |

**Run summary:** the `OUTPUT` record in the key-value store shows how many leads were delivered (with a breakdown by email status), rejected and skipped, why the run stopped, and tips for broader results.

***

### FAQ

**Am I charged for invalid emails?**
No. Invalid, disposable and spam-trap emails are never delivered or charged. They go to the free `rejected-leads` dataset.

**What are `risky` and `unknown` emails, and can I avoid paying for them?**
Addresses whose mail server refused or did not answer the check. With the default setting they are neither delivered nor charged. Choose *All except invalid* only if you want the extra volume and accept more bounces.

**If I run the same search twice, do I pay twice?**
No. Leads you already received are skipped automatically. Turn off `skipPreviouslyDelivered` if you want them again.

**Why did I get fewer leads than I asked for?**
Your filters matched fewer verified emails. The log explains why the run stopped and suggests how to broaden the search.

**How long does a run take?**
About 1 to 2 leads per second. 1,000 leads usually take 10 to 15 minutes. Leads appear in the dataset as soon as they are verified, and the run status shows live progress.

**Can I get only work emails?**
Yes. Set `emailType` to `work_only` and free providers (Gmail, Yahoo, Outlook, GMX, Web.de, Orange…) are excluded.

**Do I need an account or cookies on another platform?**
No. No login, no cookies, no proxy.

**Can I use it from my code or with Make / Zapier / n8n?**
Yes. Call it through the Apify API or any Apify integration, and receive the dataset as JSON, CSV or Excel.

# Actor input Schema

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

Titles to find. A title matches when it starts with your keyword: 'Director' finds 'Director of Sales'. To also catch 'Sales Director', add the Director seniority level below. Examples: CEO, Founder, Head of Marketing, Sales Manager, Software Engineer.

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

Target levels without typing titles. Combine with job titles to catch more people.

## `useTitleSynonyms` (type: `boolean`):

CEO also finds Chief Executive Officer, Managing Director, Directeur Général. CTO also finds Chief Technology Officer, VP Engineering. Recommended.

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

Removes anyone whose title contains one of these words. Example: assistant, intern, student.

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

Where the person is located. Pick whole regions (Europe, MENA, Gulf...) to get more leads.

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

Remove these locations.

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

Industry of the person. Groups (Tech, Finance...) search several related industries at once.

## `excludeIndustries` (type: `array`):

Remove these industries.

## `companies` (type: `array`):

Company names or website domains. Domains are more precise. Example: acme.com, Globex.

## `companySizes` (type: `array`):

Keeps only companies whose size is known and in these ranges. Leave empty to include all companies.

## `emailQuality` (type: `string`):

Valid + catch-all (recommended): confirmed mailboxes and company domains that accept every address. All except invalid: also unconfirmed emails (risky, unknown), which are charged and bounce more often. Valid only: confirmed mailboxes only. Invalid, disposable and spam-trap emails are never delivered or charged. Each lead shows its email_status.

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

Any: work or personal email. Work only: excludes free providers (Gmail, Yahoo, Outlook...), best for cold email to companies.

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

Limit how many people you get from the same company, to spread your list across more accounts. 0 = no limit.

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

How many verified leads to deliver. You pay only for these. Up to 10,000 per run.

## `skipPreviouslyDelivered` (type: `boolean`):

Never pay twice for the same lead. Leads delivered in your previous runs are skipped automatically.

## `previewOnly` (type: `boolean`):

Shows how many profiles match and 5 sample leads with masked emails. Nothing is charged. Use it to tune your filters.

## Actor input object example

```json
{
  "jobTitles": [
    "CEO",
    "Founder"
  ],
  "useTitleSynonyms": true,
  "countries": [
    "United States"
  ],
  "emailQuality": "valid_or_catch_all",
  "emailType": "any",
  "maxPerCompany": 0,
  "maxResults": 100,
  "skipPreviouslyDelivered": true,
  "previewOnly": false
}
```

# Actor output Schema

## `leads` (type: `string`):

Leads delivered with a checked email. Each lead shows its email_status.

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

Leads delivered (by email status), rejected and skipped, why the run stopped, and tips for more leads.

# 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": [
        "CEO",
        "Founder"
    ],
    "countries": [
        "United States"
    ],
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("bounceverify/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": [
        "CEO",
        "Founder",
    ],
    "countries": ["United States"],
    "maxResults": 100,
}

# Run the Actor and wait for it to finish
run = client.actor("bounceverify/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": [
    "CEO",
    "Founder"
  ],
  "countries": [
    "United States"
  ],
  "maxResults": 100
}' |
apify call bounceverify/b2b-leads-finder --silent --output-dataset

```

## MCP server setup

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