# Leads Finder ✅ B2B Emails, Apollo Alternative (`atomus/leads-finder`) Actor

Find B2B leads across 500M+ people with Apollo-style filters: title, seniority, department, location, company industry, size, tech, revenue, funding. Each lead is a rich profile with firmographics. Optional business email + company enrichment. Pay per lead. Cheaper than Apollo, ZoomInfo & Lusha.

- **URL**: https://apify.com/atomus/leads-finder.md
- **Developed by:** [Atomus APIs](https://apify.com/atomus) (community)
- **Categories:** Lead generation, Automation, Agents
- **Stats:** 8 total users, 7 monthly users, 99.9% runs succeeded, 2 bookmarks
- **User rating**: 5.00 out of 5 stars

## Pricing

from $6.00 / 1,000 lead founds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
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.
Actors are written with capital "A".

## 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.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

## Leads Finder - Apollo, ZoomInfo & Lusha Alternative

**Leads Finder** is a B2B lead generation tool that searches a database of **500M+ people and 70M+ companies** and returns each match as a rich, structured contact. Describe who you want with granular, Apollo-style filters and get back leads you do not already have, no list of URLs required. A cheaper alternative to Apollo, ZoomInfo and Lusha for finding B2B leads, business emails and company data.

Filter by the person (job title, seniority, department, location, keywords, skills) **and** by their company (industry, size, technology, revenue, funding stage). You only pay per lead returned, and **Max results** is your hard spend cap. **No LinkedIn account, login, or cookies required.**

> 💡 **More B2B data tools by Atomus:** https://apify.com/atomus
>
> 📚 **Full docs, examples & guides:** https://atomusapi.dev

***

### What data can you get from Leads Finder?

Give it a set of filters and it returns one rich JSON record per matching lead, ready to load into a CRM, spreadsheet, or AI agent.

| Feature | Description |
|---------|-------------|
| 🔍 **Search 500M+ people** | Find leads you do not already have. Describe who you want and get them, no input list of URLs needed. |
| 🎯 **Apollo-style filters** | Person: job title (smart / whole-word / exact), seniority, department, location, keywords, skills. Company: industry, employee count, location, technology, revenue, funding stage. |
| 📋 **Rich, complete profiles** | Full name, headline, current title, work history, education, skills, certifications, industry, and profile links, not just a name and a title. |
| 🏢 **Company firmographics** | Each lead carries their company's industry, headcount, founding year, funding, tech stack, and HQ. |
| 📧 **Verified business email (add-on)** | Optional: a real-time, verified business email per lead. Billed only when an email is **found**. |
| 🏢 **Full company enrichment (add-on)** | Optional: the complete firmographic record for each lead's company (funding rounds, all offices, full tech stack, revenue band). |
| 💰 **Pay only for results** | You are charged **per lead returned**. No matches = free. **Max results** is your hard spend cap. |
| 🔐 **No cookies needed** | No LinkedIn account, cookies, or risk of bans. |

***

### How do I find B2B leads?

1. **Open the Actor** and add your filters, e.g. job title `Head of Marketing`, seniority `director`, company industry `software`, company size `50-1000`. Leave a filter empty to not constrain on it.
2. **Set Max results.** This caps how many leads you get back, and your spend.
3. **(Optional) Enable add-ons.** Turn on **Find business email** and/or **Enrich full company details** if you want them (each is a separate paid add-on).
4. **Click Start.** The Actor searches, pages through the matches, and pushes one record per lead.
5. **Read the results.** Each record has a `status` (`success` | `not_found` | `error`); successful records carry the full profile.

No login, no browser session, no cookies. Filters in, structured lead data out.

***

### Input

Every filter is optional. Combine person and company filters to narrow the audience; leave them all empty to search broadly (capped by Max results).

| Parameter | Type | Description |
|-----------|------|-------------|
| `title` | string\[] | Current job titles to match, e.g. `["Account Executive"]`. |
| `titleMatchMode` | string | `SMART` (fuzzy), `WORD`, or `STRICT`. |
| `seniority` | string\[] | e.g. `c_suite`, `vp`, `director`, `founder`. |
| `department` | string\[] | e.g. `sales`, `marketing`, `engineering`. |
| `location` | string\[] | Person location names, e.g. `["United States"]`. |
| `keyword` | string\[] | Free-text keywords in headline/summary. |
| `skill` | string\[] | Skills the lead lists, e.g. `["Salesforce"]`. |
| `companyDomain` | string\[] | Company website domains, e.g. `["stripe.com"]`. |
| `companyLinkedin` | string\[] | Company LinkedIn URLs (exact company match). |
| `companyIndustry` | string\[] | Company industries, e.g. `["software"]`. |
| `companyLocation` | string\[] | Company location names. |
| `companyTechnology` | string\[] | Technologies the company uses. |
| `minEmployees` / `maxEmployees` | integer | Company size range. |
| `minRevenue` / `maxRevenue` | integer | Company annual revenue range (USD). |
| `companyFundingType` | string\[] | Funding stage, e.g. `["series_a"]`. |
| `maxResults` | integer | Hard cap and spend cap (default 100). |
| `findEmail` | boolean | Add-on: verified business email per lead ($). |
| `includeCompanyDetails` | boolean | Add-on: full company firmographics per lead ($). |

#### Example

```json
{
  "title": ["Head of Marketing"],
  "seniority": ["director", "vp"],
  "companyIndustry": ["software"],
  "minEmployees": 50,
  "maxEmployees": 1000,
  "location": ["United States"],
  "maxResults": 100
}
```

***

### Output

One JSON record per lead. `success` rows carry the full profile; `email` / `email_status` appear only with the email add-on; `company_details` only with the company-enrichment add-on.

```json
{
  "status": "success",
  "full_name": "Jane Doe",
  "headline": "Head of Marketing at Acme",
  "title": "Head of Marketing",
  "location": "Austin, Texas, United States",
  "linkedin_url": "https://www.linkedin.com/in/janedoe",
  "company_name": "Acme",
  "seniority": "director",
  "email": "jane@acme.com",
  "email_status": "VALID"
}
```

***

### How much does it cost to find leads?

You pay **per lead returned**. `not_found` and `error` rows are free, and **Max results** is a hard spend cap, so a run can never cost more than the number of leads you asked for.

- **Per lead** returned: the base charge.
- **Business email (add-on):** a separate paid event, charged **only when a deliverable email is found**. Leads with no verifiable email are free. Paid Apify plans only.
- **Company enrichment (add-on):** a separate paid event per lead that returns a company.

***

### Leads Finder vs Apollo, ZoomInfo & Lusha

| | Leads Finder | Apollo / ZoomInfo / Lusha |
|---|---|---|
| Pricing | Pay per lead returned, hard spend cap | Seat-based subscriptions, annual contracts |
| Access | No account, run from Apify or the API | Platform login, per-seat |
| Data | 500M+ people, 70M+ companies, firmographics | Large databases, comparable coverage |
| Emails | Verified business email add-on, pay per found | Included in plan tiers |
| Best for | Pay-as-you-go prospecting, automation, AI agents | Teams wanting an all-in-one sales platform |

***

### Use it with AI agents and MCP

The dataset is plain JSON, so you can pipe results straight into an AI agent, an enrichment pipeline, or a CRM. Trigger runs and pull results via the Apify API, or wire the output into your own MCP tool for autonomous prospecting.

***

### Use cases

- Build a targeted outbound list by title, seniority, industry and company size.
- Find decision-makers at companies using a specific technology.
- Enrich an ICP segment with firmographics and verified business emails.
- Feed a sales AI agent a fresh stream of qualified leads.

***

### Other LinkedIn & B2B tools by Atomus

- [LinkedIn Profile Scraper](https://apify.com/atomus/linkedin-profile-scraper) - enrich any LinkedIn profile URL into a full structured record.
- [LinkedIn Company Scraper](https://apify.com/atomus/linkedin-company-scraper) - turn a company URL or domain into full firmographics.
- [LinkedIn Company Employees Scraper](https://apify.com/atomus/linkedin-company-employees) - get one company's employees as rich profiles.
- [LinkedIn Posts Scraper](https://apify.com/atomus/linkedin-posts-scraper), [Reactions Scraper](https://apify.com/atomus/linkedin-reactions-scraper), [Comments Scraper](https://apify.com/atomus/linkedin-comments-scraper).

***

### FAQ

**What is a leads finder?**
A leads finder is a tool that searches a large contact database and returns B2B leads matching your filters (job title, seniority, industry, company size, and more), so you can build prospecting lists without scraping site by site.

**Is Leads Finder a good Apollo alternative?**
Yes. It covers a comparable database (500M+ people, 70M+ companies) with granular person and company filters, but bills pay-per-lead with a hard spend cap instead of per-seat subscriptions.

**Do I get email addresses?**
Business emails are an optional paid add-on. When enabled, each lead includes a real-time verified business email, and you are charged only when an email is actually found.

**Do I need a LinkedIn account or cookies?**
No. There is no login, no cookies, and no risk of account bans.

**How do I control cost?**
Set **Max results**. You pay per lead returned and never more than your cap, so cost is predictable before you start.

**Is it legal to use?**
The Actor returns business/professional data from public and licensed sources. You are responsible for using the data in line with applicable laws (GDPR, CCPA) and the platform's terms.

***

### Disclaimer

Leads Finder returns professional B2B data for legitimate sales, recruiting and research use. You are responsible for complying with applicable data-protection laws and platform terms when using the output. Atomus is not affiliated with Apollo, ZoomInfo, Lusha or LinkedIn.

# Actor input Schema

## `title` (type: `array`):

Match leads whose CURRENT title contains any of these, e.g. "Software Engineer", "Account Executive". Leave empty for all titles.

## `titleMatchMode` (type: `string`):

SMART = fuzzy (recommended, catches "Sr. Software Engineer"). WORD = whole words. STRICT = exact title only. Also applies to the Exclude titles filter below.

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

Keep only these seniority levels. Leave empty for all.

## `department` (type: `array`):

Keep only these departments/functions. Leave empty for all.

## `location` (type: `array`):

Keep only leads in these locations, using standard location names (country, region, or continent), e.g. "United States", "Ireland", "California". Leave empty for all.

## `keyword` (type: `array`):

Free-text keywords matched in the lead's headline/summary, e.g. "kubernetes", "payments". Leave empty to skip.

## `skill` (type: `array`):

Free-text skills the lead lists, e.g. "Kubernetes", "Salesforce". Leave empty to skip.

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

Hard cap on how many leads to return. This is your spend cap (you pay per lead returned). The run stops once it hits this or runs out of matches. LinkedIn surfaces at most a few thousand per query.

## `profileBadge` (type: `array`):

Keep only leads carrying these LinkedIn badges. "hiring" and "openToWork" are strong intent signals. Leave empty for all.

## `excludeTitle` (type: `array`):

Drop leads whose CURRENT title matches any of these (uses the Title match mode above), e.g. exclude "intern", "assistant". Leave empty to skip.

## `excludeSeniority` (type: `array`):

Drop leads at these seniority levels. Leave empty to skip.

## `excludeDepartment` (type: `array`):

Drop leads in these departments/functions. Leave empty to skip.

## `excludeLocation` (type: `array`):

Drop leads in these locations (standard location names). Leave empty to skip.

## `fullName` (type: `array`):

Match leads by full name, e.g. "Satya Nadella". Leave empty to skip.

## `previousTitle` (type: `array`):

Match leads who PREVIOUSLY held any of these titles (past roles, not current), e.g. "Founder". Leave empty to skip.

## `certification` (type: `array`):

Match leads holding these certifications, e.g. "AWS", "PMP", "CSM". Leave empty to skip.

## `language` (type: `array`):

Match leads who speak these languages, e.g. "english", "spanish". Leave empty to skip.

## `degree` (type: `array`):

Match leads with these degrees, e.g. "MBA", "Bachelor", "PhD". Leave empty to skip.

## `fieldOfStudy` (type: `array`):

Match leads who studied these fields, e.g. "Computer Science", "Marketing". Leave empty to skip.

## `minCurrentJobYears` (type: `integer`):

Keep only leads who have been in their CURRENT job at least this many years. Leave empty for no minimum.

## `minTotalExperienceYears` (type: `integer`):

Keep only leads with at least this many total years of work experience. Leave empty for no minimum.

## `companyDomain` (type: `array`):

Keep only leads at companies with these website domains, e.g. "stripe.com". Broad match (also drags in subsidiaries). Leave empty for all.

## `companyLinkedin` (type: `array`):

Keep only leads at these exact companies by LinkedIn company URL (https://www.linkedin.com/company/<slug>). More precise than domain. Leave empty for all.

## `companyIndustry` (type: `array`):

Keep only leads whose company is in these industries. Values MUST match the supported industry catalog (e.g. "software", "financial services"). Leave empty for all.

## `excludeCompanyIndustry` (type: `array`):

Drop leads whose company is in these industries (supported industry catalog values). Leave empty to skip.

## `companyLocation` (type: `array`):

Keep only leads whose COMPANY is located in these standard location names (country, region, or continent). Leave empty for all.

## `excludeCompanyLocation` (type: `array`):

Drop leads whose company is located in these standard location names. Leave empty to skip.

## `companyTechnology` (type: `array`):

Keep only leads whose company uses these technologies. Values MUST match the supported technology catalog (e.g. "react", "salesforce"). Leave empty for all.

## `excludeCompanyTechnology` (type: `array`):

Drop leads whose company uses these technologies (supported technology catalog values). Leave empty to skip.

## `companyType` (type: `array`):

Keep only leads whose company is one of these types. Leave empty for all.

## `excludeCompanyType` (type: `array`):

Drop leads whose company is one of these types. Leave empty to skip.

## `companyNaics` (type: `array`):

Keep only leads whose company matches these NAICS industry codes, e.g. "454110". Leave empty for all.

## `companySic` (type: `array`):

Keep only leads whose company matches these SIC industry codes, e.g. "5961". Leave empty for all.

## `minEmployees` (type: `integer`):

Keep only leads whose company has at least this many employees. Leave empty for no lower bound.

## `maxEmployees` (type: `integer`):

Keep only leads whose company has at most this many employees. Leave empty for no upper bound.

## `minRevenue` (type: `integer`):

Keep only leads whose company has at least this much annual revenue in USD. Leave empty for no lower bound.

## `maxRevenue` (type: `integer`):

Keep only leads whose company has at most this much annual revenue in USD. Leave empty for no upper bound.

## `companyFundingType` (type: `array`):

Keep only leads whose company raised these funding types. Leave empty for all.

## `findEmail` (type: `boolean`):

⚠️ THIS ADDS COST. When enabled, each returned lead also includes a real-time, real-time verified business email, billed as a SEPARATE paid event for every email found (on top of the per-lead charge). You are charged ONLY when an email is actually found, leads without a verifiable email are free. Available on PAID Apify plans only (a free-tier run with this on is rejected without charge). Leave OFF unless you specifically want emails.

## `includeCompanyDetails` (type: `boolean`):

⚠️ THIS ADDS COST. When enabled, each returned lead that has a current company also includes the FULL firmographic record for that company (funding rounds, every office location, complete tech stack, industries, revenue band) in a top-level company\_details field, billed as a SEPARATE paid event per lead that returns a company. Leads with no company are free. Leave OFF unless you want firmographics.

## Actor input object example

```json
{
  "titleMatchMode": "SMART",
  "maxResults": 100,
  "findEmail": false,
  "includeCompanyDetails": false
}
```

# Actor output Schema

## `leads` (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 = {
    "maxResults": 100
};

// Run the Actor and wait for it to finish
const run = await client.actor("atomus/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 = { "maxResults": 100 }

# Run the Actor and wait for it to finish
run = client.actor("atomus/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 '{
  "maxResults": 100
}' |
apify call atomus/leads-finder --silent --output-dataset

```

## MCP server setup

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