# Leads Scraper ✅ $1.50/1k with Emails | Apollo, Lusha, ZoomInfo (`b2bsearch/leads-scraper-with-emails`) Actor

✅ $1.50 per 1,000 B2B leads on every Apify plan, no minimum order. ✅ Filter by job title, seniority, country, industry and company size; every lead has a live email and LinkedIn URL. ✅ Apollo, Lusha and ZoomInfo alternative on our own 800M+ database, nothing scraped live. No email = no charge.

- **URL**: https://apify.com/b2bsearch/leads-scraper-with-emails.md
- **Developed by:** [B2B Search Enriched](https://apify.com/b2bsearch) (community)
- **Categories:** Lead generation, Automation, AI
- **Stats:** 2 total users, 1 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

## Leads Scraper ✅ $1.50/1k with Emails | Apollo, Lusha, ZoomInfo

**$1.50 per 1,000 leads on every Apify plan, no minimum order.** Pick job
titles, seniority, countries, industries and company size; get a B2B lead
list where every row carries a live email and the LinkedIn profile URL.
From our own database of 800M+ professional profiles. No login, no
cookies, no Apollo, Lusha or ZoomInfo seat. People without an email are
skipped and cost nothing.

- ✅ **One price, every plan.** $0.0015 per lead whether you are on the
  Free plan or on Business. No tiers to read, no "from", no 100-lead
  minimum, and the per-run start fee is $0.0002.
- ✅ **A live email on every lead.** A work address on the current employer's
  domain, or a personal mailbox. Addresses that only match an old employer
  never ship. Those are the ones that bounce.
- ✅ **No minimum order, no charge for misses.** Skipped people, repeats and
  note rows are free.
- ✅ **The filters a lead database sells.** Title, seniority, department,
  country or region, city, industry, headcount, company domain, headline
  keywords, past employer.
- ✅ **Weekly reruns without duplicates.** Point *Skip people from earlier
  runs* at last week's dataset and get only the new people.

### Why this leads scraper

| | This Actor | A typical "$1/1k" listing on this shelf |
|---|---|---|
| Price | $1.50 per 1,000 on every plan | $1 on the top plan, $1.60–$2 on the Free plan |
| Where the data comes from | Our own database, 800M+ profiles and 115M companies | Source not stated |
| What an email means | On record at the current employer, or personal; otherwise the person is skipped free | "Verified", no rule stated |
| Minimum order | None | Often 100 leads charged per run |
| Start fee per run | $0.0002 | $0.01–$0.10 |
| Sizing a list before buying | Free counts and market breakdowns in [People Database Search](https://apify.com/b2bsearch/people-database-search) | No |

### What you get per lead

- ✅ Full name, first name, last name, job title, headline
- ✅ `email` and `emailType` (`work` or `personal`), plus `workEmail` and `personalEmail` when both are on record
- ✅ Company name, website domain, headcount, industry
- ✅ Location and country code
- ✅ LinkedIn profile URL; X, GitHub and Facebook links when on record
- ✅ `phoneOnRecord`: whether a verified mobile number exists for the lead, so you know where [Leads Scraper with Mobile Numbers](https://apify.com/b2bsearch/b2b-leads-with-phones) will pay off

### Quick start

1. Type the job titles (`vp sales`, `head of marketing`, `founder`) and pick
   the countries. Add seniority, industry or a headcount range to narrow.
2. Set **Maximum leads** and press **Start**. People without a live email
   are skipped free; a note row at the end says how many.
3. Open the **Emails for outreach tools** view and export name, first name,
   last name, email and company domain, ready for Instantly, Lemlist,
   Smartlead, HubSpot or a CSV.

### Run Leads Scraper with Emails from Python, Node.js or the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("b2bsearch/leads-scraper-with-emails").call(run_input={
    "jobTitles": ["vp sales", "head of sales"],
    "countries": ["us"],
    "maxResults": 100,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(row["fullName"], row["email"])
```

The same call in Node.js is `new ApifyClient({ token }).actor('b2bsearch/leads-scraper-with-emails').call(input)`
from the `apify-client` package. Over plain REST, `POST
https://api.apify.com/v2/acts/b2bsearch~leads-scraper-with-emails/run-sync-get-dataset-items`
with the input as the JSON body returns the rows in one response. The price
is the same from code and from the form.

### Measured

Runs 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 |
|---|---|---|
| `emailType: any`, 100 leads | 100 (58 work, 42 personal) | 70% of matching people |
| `emailType: any`, 500 leads | 500 (289 work, 211 personal) | — |

Other segments the same day: UK marketing directors in software, 67% with a
live email; German CTOs at companies under 200 people, 60%.

### 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` | C-level, VP, Director, Manager, Founder, Owner, Head of, Partner, Senior, Entry, Intern, Other — read from the title. |
| `departments` | Sales, marketing, engineering, HR, finance… the function read from the title. |
| `countries`, `countryGroups`, `cities` | Where the people live: `us`, `gb`, groups like `dach` or `nordics`, 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. |
| `keywords`, `excludeKeywords` | Words in the profile headline. |
| `maxResults` | Leads to deliver (default 100, up to 10,000). You pay only for these. |
| `emailType` | `any` (default), `work` (current employer only) or `personal`. |
| `maxPerCompany` | Cap on leads per company, for account-based lists. |
| `excludeDatasets` | Datasets of earlier runs: people already delivered are skipped free. |
| `updatedAfter` | Only records updated on or after this date (`2025-10` or `2025-10-19`). |
| `apolloUrl` | Built the search in Apollo? Paste the URL and the same filters run here, no Apollo seat or credits. |

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

### Output

One row per lead:

| Column | Example |
|---|---|
| `fullName`, `firstName`, `lastName` | Jane Doe |
| `jobTitle`, `headline` | VP Sales |
| `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 · 180 · Software Development |
| `primaryTitle`, `primaryCompany` | the role the profile lists first, when it is another current job |
| `location`, `countryCode` | Austin, Texas, United States · US |
| `linkedinUrl` | the public profile link |
| `twitterUrl`, `githubUrl`, `facebookUrl` | when on record, no extra charge |
| `phoneOnRecord` | `true` when a verified mobile number is on record |
| `personId` | stable id, used by *Skip people from earlier runs* |

Rows with another `_status` are free notes. The values above are fictional.

### Pricing

| Apify plan | Per 1,000 leads | Per lead |
|---|---|---|
| Free, Starter, Scale, Business and up | $1.50 | $0.0015 |

A lead is one distinct person delivered with a live email. Not charged:
people without one, repeats, people from your excluded datasets, every note
row. A small per-run start fee applies (Pricing tab). Mobile numbers are
not sold on this listing; [Leads Scraper with Mobile Numbers](https://apify.com/b2bsearch/b2b-leads-with-phones)
delivers them on every row.

### Ready-made examples

Each one opens with the input filled in; press Try for free and change it to your own.

- [US Sales Leaders with Emails at $1.50 per 1,000](https://apify.com/b2bsearch/leads-scraper-with-emails/examples/us-sales-leaders-emails-flat-price): VPs and heads of sales at US companies with 50 to 500 employees, each with a live email and LinkedIn URL. One price on every Apify plan; misses are free.
- [US E-commerce Store Owners and Founders with Emails](https://apify.com/b2bsearch/leads-scraper-with-emails/examples/ecommerce-owners-us-emails): Owners and founders of US retail and e-commerce companies with up to 50 employees, each with a live email and LinkedIn URL. Misses are free.

### FAQ

#### Why is the price the same on every plan?

Because a lead is a lead. The other listings in this family price by Apify
plan; this one does not, so a Free-plan account pays the same $1.50 per
1,000 as a Business one.

#### Do I need a LinkedIn, Apollo, Lusha or ZoomInfo account?

No. No login, cookies or API key besides Apify. Nothing is collected from
any network while your run is in progress.

#### How many leads will my filters give?

Run the same filters in [People Database Search](https://apify.com/b2bsearch/people-database-search)
with `mode: "count"` first. It is free, and `market` mode shows how many of
those people carry an email.

#### Can I run it from n8n, Make or an AI agent?

Yes. The Actor is a tool on the Apify MCP server
(`https://mcp.apify.com?tools=b2bsearch/leads-scraper-with-emails`) and a step
in n8n, Make and Zapier. Cap what one call may spend with `maxTotalChargeUsd`.

### Related Actors

| Need | Actor |
|---|---|
| Every lead with a verified mobile number | [Leads Scraper with Mobile Numbers](https://apify.com/b2bsearch/b2b-leads-with-phones) |
| Decision makers only, by country and industry | [Decision Makers Finder](https://apify.com/b2bsearch/decision-makers-leads-finder) |
| A pasted Apollo search URL | [Apollo Scraper](https://apify.com/b2bsearch/apollo-url-leads-scraper) |
| Free counts and market breakdowns | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| The full career behind a lead | [Profile Lookup](https://apify.com/b2bsearch/profile-lookup) |

### Free Apify plan

Free accounts get the same rows as paid ones, with three limits. A run delivers
at most 100 results when started from Apify Console and 25 when started through
the API, a schedule or an integration; an account gets 500 dataset rows per calendar
month on this Actor, found rows and misses alike; and a row that finds nothing
carries only its status. Previews and counts, where this Actor offers them, stay
free and outside the monthly allowance. When a limit stops a run, the status
line and the last dataset row say which limit it was, what is left and when it
resets. Any paid Apify plan removes all of this: Starter is $19/month and
includes $19 of usage.

### Feedback and reviews

How did it go? A rating on this Actor's [Reviews page](https://console.apify.com/actors/bdqCfbsXkXz4XxnMh/info/reviews)
tells the next buyer what to expect; we read every word, good or bad. Got a wrong or stale
row? Open the **Issues** tab with the run ID. Issues are public, so leave out
emails, phones and names; the run ID is enough for us to find the row. We
check every report, fix what is ours to fix and answer in the thread.

### 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.io, 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
publicly available professional data.

**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
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. 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. Output is provided as
is. Check before you rely on it.

# Actor input Schema

## `apolloUrl` (type: `string`):

Built the search in Apollo? Paste the people-search URL from the browser bar (https://app.apollo.io/#/people?...). Titles, seniority, locations, company size, industries, keywords and domains are read from it. The exclude fields join it; leave the other filters at their example values. No Apollo account or credits needed.

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

Job titles, read as the title tags our dictionary gives them (vp sales, founder, "head of marketing"...): every spelling and language of the role. A title the dictionary does not know is not searched, and the run names it. Each 3-64 characters, at most 10.

## `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). $1.50 per 1,000 leads delivered on every Apify plan, each with a live email — people without one are skipped free. Free Apify plan: up to 100 from Console, 25 via the API, and 500 rows per month per account.

## `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 at these levels. C-level to Other are buckets read from the job title, so 'CTO' and 'Chief Technology Officer' both land in cxo. Owner, Head of, Partner, Senior, Entry level and Intern are title tags: with one chosen, every level is matched by its tags, and Other cannot be added.

## `departments` (type: `array`):

The function the person works in, read from their job titles: sales, marketing, engineering and so on. Combines with Seniority and the job title keywords (a VP in sales = Seniority VP + Department Sales). Any of the chosen departments matches.

## `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. Each covers its sub-industries (Software Development includes Computer Games); rows show the company's own industry.

## `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. Alone, job-title words (founder, recruiter) find that title with the word in the headline; topic words (fintech, rust) need job titles, seniority or companies too.

## `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 headline and past-title keywords match (job titles are read as tags). Leave empty: a list with a short keyword (4 letters or fewer) 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. People an earlier run of the same search skipped (no email, left the role) are not read again either.

## `updatedAfter` (type: `string`):

Only leads whose record was updated on or after this date, YYYY-MM or YYYY-MM-DD — the row's updatedAt. Narrows an Apollo URL too.

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

Drop people by the title tags these titles mean (intern, assistant, student); a word the dictionary does not know (fractional, interim) drops the titles that contain it. 3-64 characters each, at most 10.

## `excludeKeywords` (type: `array`):

Drop people whose profile headline contains any of these words (example: fractional, advisor, freelance, student). 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"
}
```

# 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/leads-scraper-with-emails").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/leads-scraper-with-emails").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/leads-scraper-with-emails --silent --output-dataset

```

## MCP server setup

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

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/bdqCfbsXkXz4XxnMh/builds/BTdRpQLhupH02klCh/openapi.json
