# Apollo Scraper Alternative ✅ Leads & Emails from an Apollo URL (`b2bsearch/apollo-url-leads-scraper`) Actor

✅ Apollo scraper alternative: paste an Apollo people-search URL and run the same search on our own 800M+ database. B2B leads with a live email and LinkedIn URL; no Apollo seat, no export credits. ✅ Nothing scraped from Apollo. ✅ No email = no charge, no minimum order. From $1.50 per 1,000 leads.

- **URL**: https://apify.com/b2bsearch/apollo-url-leads-scraper.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

## Apollo Scraper Alternative ✅ Leads & Emails from an Apollo URL

**Built the search in Apollo? Paste the URL, run the same search here and
get every lead with a live email, no Apollo seat, no export credits.** An
Apollo scraper alternative that never touches Apollo: the same titles,
seniority, locations, company sizes, industries and keywords run on our own
database of 800M+ B2B profiles. From $1.50 per 1,000 leads; people without
an email are skipped and cost nothing.

- ✅ **Paste and run.** Copy the address bar of an Apollo people search
  (`https://app.apollo.io/#/people?...`) into one field. Nothing else to set.
  The status line opens with `Apollo URL read as: …`, the filters in this
  Actor's own words, before the first lead is charged.
- ✅ **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.** Pay per lead delivered,
  from the first one. Skipped people, repeats and note rows are free.
- ✅ **Mobile numbers on request**, charged only on leads that carry one.
- ✅ **No login, no cookies, no browser.** Nothing is scraped from Apollo or
  any network while your run is in progress.

### Why this Apollo scraper alternative

| | This Actor | A typical "Apollo" 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 |
| Pasting an Apollo URL | Yes, the whole search in one field | Retype the filters |
| Sizing a list before buying | Free counts 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`, and the number itself with **Add mobile phone numbers** on

### Quick start

1. In Apollo, build the people search and copy the URL from the browser bar.
2. Paste it into **Apollo search URL**, set **Maximum leads**, press **Start**.
3. Check the `Apollo URL read as: …` line in the status, then export the
   dataset as CSV, Excel or JSON, or read it through the API.

### Run Apollo Scraper Alternative from Python, Node.js or the API

```python
from apify_client import ApifyClient

client = ApifyClient("<YOUR_APIFY_TOKEN>")
run = client.actor("b2bsearch/apollo-url-leads-scraper").call(run_input={
    "apolloUrl": "https://app.apollo.io/#/people?personTitles[]=vp%20sales&personLocations[]=United%20States",
    "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/apollo-url-leads-scraper').call(input)`
from the `apify-client` package. Over plain REST, `POST
https://api.apify.com/v2/acts/b2bsearch~apollo-url-leads-scraper/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.

### What the URL carries

Read from the URL: job titles, excluded titles, seniority (owner/founder,
C-suite, VP, director, manager), person and company locations, company
size ranges, industries (every Apollo industry tag is mapped), keywords and
company domains. Page, sort and the email-status facet are the view, not the
search, and are left out.

A filter in the URL this Actor cannot read stops the run by name before
anything is charged: remove it in Apollo, copy the URL again and rerun. The
exclude fields on the form join the URL; any other filter field typed next
to a URL is refused, so a run never widens past what you asked for.

No URL? Clear the field and use the filter fields below instead. They are
the same ones [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) takes.

### Input

| Field | What it does |
|---|---|
| `apolloUrl` | The Apollo people-search URL. Everything above is read from it. |
| `maxResults` | Leads to deliver (default 100, up to 10,000). You pay only for these. |
| `emailType` | `any` (default: current work email, else personal), `work` (current employer only), `personal`. |
| `includePhones` | Put each lead's verified mobile number on the row; charged on top, only for leads that have one. |
| `excludeJobTitles`, `excludeKeywords`, `excludeCompanyDomains`, `excludeCountries` | Exclusions that join the URL's filters. |
| `maxPerCompany` | Cap on leads per company, for account-based lists. |
| `excludeDatasets` | Datasets of earlier runs: people already delivered are skipped free. Rerun the same URL weekly and get only the new people. |
| `updatedAfter` | Only records updated on or after this date (`2025-10` or `2025-10-19`). |
| `jobTitles`, `countries`, `seniority`, `industries`, … | Used only without a URL. |

```json
{
  "apolloUrl": "https://app.apollo.io/#/people?personTitles[]=vp%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200",
  "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 |
| `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: how many people were skipped for
having no live email, how many were over the per-company cap. 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.

- [Apollo Search URL to US Sales Leaders with Emails](https://apify.com/b2bsearch/apollo-url-leads-scraper/examples/apollo-url-us-vp-sales-leads): Paste an Apollo people-search URL and get US VPs and heads of sales with a live email and LinkedIn URL, without an Apollo seat or export credits.
- [Apollo Search URL to Founders and CEOs of Small Companies](https://apify.com/b2bsearch/apollo-url-leads-scraper/examples/apollo-url-founders-ceos-small-companies): Paste an Apollo search for founders and CEOs at small US companies and get them with a live email and LinkedIn URL, one per company, no Apollo credits.

### FAQ

#### Is this Actor part of Apollo, or does it scrape Apollo?

No, on both counts. It reads the filters out of the URL you paste and runs
them on our own database. It never logs in to Apollo and never spends its
credits. It is not affiliated with Apollo.io.

#### Is this allowed under Apollo's terms?

This Actor does not log in to Apollo, call its API or copy its data. The URL
is text from your own browser bar; the Actor reads the filters in it and runs
them on our own database. The only Apollo page involved is the search you
already have open.

#### Will I get the same people Apollo shows?

The same kind of people: the filters are the same, the database is ours.
Counts differ, and so does email coverage: see **Measured** above.

#### My URL was refused. What now?

The message names the filter that cannot be read. Remove it in Apollo, copy
the URL again and rerun. Nothing was charged.

#### 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/apollo-url-leads-scraper`) and a step
in n8n, Make and Zapier. Cap what one call may spend with `maxTotalChargeUsd`.

### Related Actors

| Need | Actor |
|---|---|
| The same leads from filters instead of a URL | [B2B Leads Finder](https://apify.com/b2bsearch/b2b-leads-finder) |
| Every lead with a verified mobile number | [Leads Scraper with Mobile Numbers](https://apify.com/b2bsearch/b2b-leads-with-phones) |
| Free counts and market breakdowns before buying | [People Database Search](https://apify.com/b2bsearch/people-database-search) |
| A pasted Sales Navigator URL | [Sales Navigator Search](https://apify.com/b2bsearch/sales-navigator-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/SyCoYed1PLw5Eq7iB/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 Apollo.io or LinkedIn
Corporation; their names appear only to describe the search URL it reads
and the kind of list it 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`):

Build the people search in Apollo and paste the URL from the browser bar (https://app.apollo.io/#/people?...). Titles, seniority, locations, company size, industries, keywords and company domains are read from it and run on our own database — no Apollo seat, login or export credits. Clear it to use the filter fields below instead.

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

Without an Apollo URL: match any of these words in the current job title (vp sales, founder, "head of marketing"...). Each 3-64 characters, at most 10. Next to a URL, leave empty — the URL carries the titles.

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

Without an Apollo URL: where the leads live, two-letter codes (us, gb, de...), up to 60. Next to a URL, leave empty — the URL carries the locations.

## `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
{
  "apolloUrl": "https://app.apollo.io/#/people?page=1&personTitles[]=vp%20sales&personTitles[]=head%20of%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200&organizationNumEmployeesRanges[]=201%2C500",
  "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 = {
    "apolloUrl": "https://app.apollo.io/#/people?page=1&personTitles[]=vp%20sales&personTitles[]=head%20of%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200&organizationNumEmployeesRanges[]=201%2C500",
    "maxResults": 25
};

// Run the Actor and wait for it to finish
const run = await client.actor("b2bsearch/apollo-url-leads-scraper").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 = {
    "apolloUrl": "https://app.apollo.io/#/people?page=1&personTitles[]=vp%20sales&personTitles[]=head%20of%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200&organizationNumEmployeesRanges[]=201%2C500",
    "maxResults": 25,
}

# Run the Actor and wait for it to finish
run = client.actor("b2bsearch/apollo-url-leads-scraper").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 '{
  "apolloUrl": "https://app.apollo.io/#/people?page=1&personTitles[]=vp%20sales&personTitles[]=head%20of%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200&organizationNumEmployeesRanges[]=201%2C500",
  "maxResults": 25
}' |
apify call b2bsearch/apollo-url-leads-scraper --silent --output-dataset

```

## MCP server setup

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

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/SyCoYed1PLw5Eq7iB/builds/ayASXPDEpK4JTp5Ct/openapi.json
