You built the perfect search in Apollo. Then the export credits ran out, or the seat went to someone else, and the list is still in the browser tab. The usual next step is to go looking for an Apollo scraper.
There is a calmer way. Keep the search, run it somewhere else. I build the b2bsearch Actors on Apify, and this week I put our lead engine on the Store under five names, one for each place people start from: an Apollo URL, a job title, "only the people who decide", a flat price, a list of company domains. Same database, same rule for emails, different defaults.
Below, each of the five on a real input from today, what came back, and the one thing I would check before sending anything.
Which one to open
| You start with | Open | What you get |
|---|---|---|
| An Apollo people-search URL | Apollo Scraper Alternative | the same search, run on our database, leads with a live email |
| A job title and a country | LinkedIn Leads Generator | B2B leads by title, seniority, industry and company size |
| "Founders and CEOs only" | Decision Makers Finder | a decision maker email list by country, assistants removed |
| A budget per thousand rows | Leads Scraper with Emails | the same filters at one flat price on every Apify plan |
| Company domains | Employee Email Finder | the staff of those companies with a live email |
"Live email" means the same thing in all five: an address at the person's current employer, or a personal mailbox. An address that only matches an old employer never ships. People without one are skipped, counted in a note row and not charged.
1. From an Apollo URL to leads with emails
Copy the address bar of the Apollo people search and paste it into one field:
{
"apolloUrl": "https://app.apollo.io/#/people?page=1&personTitles[]=vp%20sales&personTitles[]=head%20of%20sales&personLocations[]=United%20States&organizationNumEmployeesRanges[]=51%2C200&organizationNumEmployeesRanges[]=201%2C500",
"emailType": "any",
"maxResults": 20
}
Nothing is fetched from Apollo and there is no Apollo login. The URL is read for its filters, and the first status line says how it was read, before anything is charged:
Apollo URL read as: job titles vp sales, head of sales; countries us; company size 51–500; email any; up to 20 leads. Page, sort and email status carry the view, not the search, and were left out.
If that line is wrong, stop the run. It was right here, and twenty leads came back in under ten seconds, each from a different company, most with a work address at the company on the row and the rest personal. Two note rows said who was skipped for free: people with no address that reaches them today, and a couple who had left the role the search matched.
The thing to check is the titles. "Sales" is a broad word. Next to VPs of sales the list had a VP of commercial lending at a bank and a VP of operations whose title mentions sales somewhere in the middle. Read the title column before the sequence does, and put the words you do not want into excludeJobTitles for the next run.
Then run it weekly with the first run's dataset in excludeDatasets. My second run brought twenty new people and nobody from the first one. The same search is saved as a ready task, Apollo search URL to US sales leaders with emails, and there is a second one for founders and CEOs of small companies, one per company.
2. From a job title to a lead list
No Apollo, just the sentence from your deck. Heads of marketing at UK software companies:
{
"jobTitles": ["marketing"],
"seniority": ["cxo", "vp", "director", "head"],
"countries": ["gb"],
"industries": ["Software Development"],
"maxResults": 20
}
Most rows were what you would hope for: heads of marketing, CMOs, VPs of growth marketing. A few were not, and they are worth knowing about. A senior product marketing manager got through the seniority filter. One row was titled just "Vice President". One person's work address was at an industry body, not at the games studio on the row. Compare the domain of email with companyDomain when it matters.
I also left company size out, and the companies ran from a handful of people to several thousand. If you sell to one band, set companySizeMin and companySizeMax. Two saved tasks to start from: UK marketing leaders at software companies and HR leaders in Germany, Austria and Switzerland.
3. A decision maker email list by country
Same engine, but seniority is already set to founders, owners, C-level and VPs, and assistants, interns and students are dropped before anything is counted. US software founders and CEOs, one per company:
{
"jobTitles": ["founder", "ceo"],
"countries": ["us"],
"industries": ["Software Development"],
"companySizeMin": 11,
"companySizeMax": 200,
"maxPerCompany": 1,
"maxResults": 20
}
This was the cleanest of the five. Every row was a founder, a CEO or a cofounder-CTO, twenty companies, nearly all under fifty people. One title read "acquired by" a bigger company, and the record already pointed at the buyer. Not wrong, but you would not open that email with "congrats on the round".
If you already have the companies and want the people who run them, the by-domain sibling is Decision Maker Email Finder by Domain. Saved tasks: US software founders and CEOs and CTOs and VPs of engineering at European startups.
4. A leads scraper with emails at one price
Same filters again, one flat price per lead on every Apify plan (the number is on the Actor page), no phone column. Made for big lists where you know the box and want the rows. Owners and founders of small US online stores:
{
"seniority": ["owner", "founder"],
"countries": ["us"],
"industries": ["Retail", "Online and Mail Order Retail"],
"companySizeMax": 50,
"maxResults": 20
}
Twenty owners, and half of their stores were one or two people. That is the market, not a bug, but if you sell something a solo founder will not buy, set companySizeMin. Personal addresses were more common here than in the other runs, which is normal: a small shop often runs on its owner's own mailbox. Saved tasks: US e-commerce store owners and US sales leaders.
5. An employee email finder by company domain
The account-based case. You have the target accounts, you want the people there:
{
"companies": ["stripe.com", "figma.com"],
"roles": ["cxo", "vp"],
"maxRows": 20
}
Three things went wrong on the first try, all mine to fix.
All twenty rows came from the first domain. maxRows is one budget across the whole list, spent in order, so Figma never got a turn. One domain per run, or a budget big enough for all of them.
The C-level bucket is generous. It held support staff from the office of the CEO and a chief of staff. The titleExcludes field exists for that: "assistant", "office of", "executive operations", "chief of staff".
And a big company's roster has edges. A few people had moved on and the record had not caught up. Worse, some leaders were the right people with the wrong address: their work email belonged to an earlier company whose position was never closed on the profile, an old advisor seat or a job from years ago. That address will most likely bounce. The quick filter is the email domain: keep the rows where it is the domain you asked for, and treat the rest as people to look up again.
Second try, one company per run, the exclusions on. Most Stripe rows came back at stripe.com, and the few that did not were easy to spot by the domain. Figma on its own gave the leadership I asked for, the C-suite and VPs of product, sales and engineering, and the same domain check caught the old addresses. Saved tasks: leadership of Stripe and Figma and the sales team of any company.
What is true for all five
They share one engine and one database, so do not run two of them on the same box and pay twice. Pick by where you start.
Addresses are on record, not checked at run time, and never guessed from a name pattern. Run your usual verifier before a big send.
Most records were refreshed in the first months of this year (updatedAt on every row). A move after that does not show. The note rows catch the people whose profile closes the position the search matched; a move the record has not seen still passes.
The free Apify plan caps the rows per run. Any paid plan lifts it, and people without an email are free everywhere.
FAQ
Is this scraping Apollo? No. The URL is parsed for its filters on our side, and the search runs on our own database. No Apollo account, no cookies, no browser.
Why five Actors and not one? Same engine, different starting points and defaults. The decision makers one has seniority preset, the leads scraper has the flat price, the employee finder starts from domains. If you know which fields to set, any of the lead ones does the job of the others.
Work or personal email? emailType: "work" when the message is about their job and the domain must match. any when you want the person more than the mailbox. A new leader's work address is often not on record yet, and a personal one still reaches them.
Do I pay for people without an email? No. They are skipped and counted in a note row, which is free.
Can I get phone numbers? On the first three, with includePhones, charged only on leads that carry a number. The flat-price one has no phones.
For AI agents reading this
Pin only the tools you need in the server URL:
claude mcp add --transport http apify "https://mcp.apify.com?tools=b2bsearch/apollo-url-leads-scraper,b2bsearch/decision-makers-leads-finder,b2bsearch/employee-email-finder" --header "Authorization: Bearer <APIFY_TOKEN>"
Tool names use a double hyphen: b2bsearch--apollo-url-leads-scraper, b2bsearch--linkedin-leads-generator, b2bsearch--decision-makers-leads-finder, b2bsearch--leads-scraper-with-emails, b2bsearch--employee-email-finder. The workflow:
- an Apollo URL goes into
apolloUrlas is; read theApollo URL read asstatus line before trusting the rows - a sentence goes into
jobTitles,seniority,countries,industries,companySizeMin,companySizeMax; addexcludeJobTitlesafter reading the first titles - domains go to the employee email finder, one domain per run, with
titleExcludesand amaxRowsthat fits; keep rows whoseemaildomain is the domain asked for - rows whose
_statusis notfoundare free notes that say why people were skipped - rerun with
excludeDatasetsfor new people only; setmaxTotalChargeUsdon the call
Platform docs: Apify MCP server. Per-plan pricing is on each Actor page.
Related posts in this series: Apollo alternative in Claude Code: 7 lead lists from one Apify Actor, Finding B2B leads in a database: the ICP sentence, the count, the list and 30 ready-made B2B data tasks on Apify.
Top comments (0)