# LinkedIn Leads Generator ✅ B2B Emails | Apollo Alternative (`b2bsearch/linkedin-leads-generator`) Actor

✅ LinkedIn leads generator and B2B leads finder: filter by job title, seniority, country, industry and company size; every lead has a live email and LinkedIn URL. ✅ Apollo and ZoomInfo alternative, mobile numbers on request. ✅ No cookies, no login, no email = no charge. From $1.50 per 1,000.

- **URL**: https://apify.com/b2bsearch/linkedin-leads-generator.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

## LinkedIn Leads Generator ✅ B2B Emails | Apollo Alternative

**Pick job titles, seniority, department, countries, industries and company
size; get a B2B lead list where every row carries a live email and the
LinkedIn profile URL.** A LinkedIn leads generator that needs no cookies, no
login and no browser extension: the list comes from our own database of
800M+ professional profiles, the kind of list an Apollo or ZoomInfo seat
sells by subscription, paid here per lead. From $1.50 per 1,000 leads;
people without an email are skipped and cost nothing.

- ✅ **Ready for your outreach tool.** The *Emails for outreach tools* view
  holds name, first name, last name, email and company domain, the columns
  Instantly, Lemlist, Smartlead and HubSpot import as they are.
- ✅ **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.
- ✅ **Filters a lead database sells, no seat required.** Title, seniority,
  department, country or region, city, industry, headcount, company domain,
  headline keywords, past employer: the way ZoomInfo, Apollo or Lusha slice
  a list.
- ✅ **No minimum order, no charge for misses.** Pay per lead delivered,
  from the first one.
- ✅ **Weekly reruns without duplicates.** Point *Skip people from earlier
  runs* at last week's dataset and get only the new people.
- ✅ **Mobile numbers on request**, charged only on leads that carry one.

### Why this LinkedIn leads generator

| | This Actor | A typical "leads" listing on this shelf |
|---|---|---|
| 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 |
| Account lists and exclusions | Company domains in and out, countries out, titles and keywords out, earlier datasets out | Rarely |

### 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`, and the number itself with **Add mobile phone numbers** on

### Quick start

1. Type the job titles (`vp sales`, `head of marketing`, `founder`) and pick
   the countries. Add seniority, department, 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 LinkedIn Leads Generator from Python, Node.js or the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("b2bsearch/linkedin-leads-generator").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/linkedin-leads-generator').call(input)`
from the `apify-client` package. Over plain REST, `POST
https://api.apify.com/v2/acts/b2bsearch~linkedin-leads-generator/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%. About a third of
US sales leads also have a verified mobile number on record.

### 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 — buckets read from the title, so every spelling of a level is caught. |
| `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`, and city text like `austin`. Several countries share the order evenly. |
| `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`, `excludeKeywords` | Words in the profile headline: `revops`, `fractional cfo`, `shopify`. |
| `maxResults` | Leads to deliver (default 100, up to 10,000). You pay only for these. |
| `emailType` | `any` (default), `work` (current employer only) or `personal`. |
| `includePhones` | Put each lead's verified mobile number on the row; charged on top, only for leads that have one. |
| `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`, `phone`, `phones` | whether a verified mobile number is on record; the number(s) with **Add mobile phone numbers** on |
| `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 1,000 mobile numbers (optional) |
|---|---|---|
| Free | $3 | $5 |
| Starter | $2.50 | $4 |
| Scale | $2 | $3.50 |
| Business and up | $1.50 | $3 |

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. The number event is charged only on leads that come back with a
verified mobile number. A small per-run start fee applies (Pricing tab).

### Ready-made examples

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

- [UK Marketing Leaders at Software Companies with Emails](https://apify.com/b2bsearch/linkedin-leads-generator/examples/saas-marketing-leaders-uk-emails): Heads, directors and VPs of marketing at UK software companies, each with a live email and LinkedIn URL. People without an email are free.
- [HR Leaders in Germany, Austria and Switzerland with Emails](https://apify.com/b2bsearch/linkedin-leads-generator/examples/hr-leaders-dach-emails): Heads of HR, people and talent at DACH companies with 50 to 1,000 employees, each with a live email and LinkedIn URL. People without an email are free.

### FAQ

#### Do I need a LinkedIn, ZoomInfo or Apollo 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 get work emails only?

Set `emailType` to `work`. Fewer leads, all with an address on the current
employer's domain.

#### 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/linkedin-leads-generator`) 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) |
| Company domain → its decision makers | [Decision Maker Finder by Domain](https://apify.com/b2bsearch/domain-to-decision-makers) |

### 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/I3oezsdISDVJUYjS8/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, ZoomInfo,
Apollo.io or Lusha; 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 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, CAN-SPAM and, for any number you
call or text, the TCPA and Do Not Call rules. 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). 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. 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.

## `includePhones` (type: `boolean`):

Each lead's verified mobile number on record in phone (US-centric, about 1 in 4 US decision makers). Free until its price starts in mid-November 2026, then $4 per 1,000 leads that come back with one ($5 on the Free plan, $3 on Business). Off: the row only says whether a number is on record (phoneOnRecord).

## `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",
  "includePhones": false
}
```

# 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/linkedin-leads-generator").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/linkedin-leads-generator").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/linkedin-leads-generator --silent --output-dataset

```

## MCP server setup

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

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/I3oezsdISDVJUYjS8/builds/YmpNQvYIYhPPjagKL/openapi.json
