🚀 Leads Scraper
Pricing
from $3.99 / 1,000 results
🚀 Leads Scraper
Pricing
from $3.99 / 1,000 results
Rating
0.0
(0)
Developer
ScraperForge
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Leads Scraper — B2B Contacts with Verified Emails, Phones & Company Data
Filter a large B2B contact database by job title, seniority, department, location, company size, industry, revenue and funding — and get back verified emails, direct and mobile phone numbers, LinkedIn URLs and full company profiles.
Up to 30,000 leads per run, streamed into your dataset as they are found, with 40 fields per contact.
What is Leads Scraper?
Most lead tools make you choose: a fast list with no contact details, or a slow enrichment pass that costs more than the list. This Actor is neither — it queries a prepared B2B database directly and returns the person and the company and the contact details in a single row.
Two things distinguish it in practice:
- Email quality is described, not just asserted. Every row carries
email_status,email_overall_score, and four boolean flags:email_is_deliverable,email_is_catch_all,email_is_role_account,email_is_free. That is the difference between "here is an address" and "here is an address, and here is how much to trust it". Filtering out catch-all domains andinfo@role accounts before you send is what keeps a domain's sending reputation intact. - Funding filters are first-class.
fundingTypewith a date range finds companies that raised recently — the single strongest B2B buying signal there is, because a company that just closed a round is a company with a budget and a mandate to spend it.
Three phone fields (first_phone, mobile_phone, corporate_phone) mean multichannel sequences do not need a separate data source, and results stream in live: a 30,000-row run is usable long before it finishes.
What data can you extract?
👤 Person
| Field | Description |
|---|---|
full_name, first_name, last_name | Contact name |
title | Job title |
seniority | Seniority level |
departments | Department / function |
person_linkedin_url | LinkedIn profile |
person_city, person_state, person_country | Location |
📧 Email and quality signals
| Field | Description |
|---|---|
email | Email address |
email_status | Verification status |
email_overall_score | Quality score |
email_is_deliverable | Whether it should deliver |
email_is_catch_all | Domain accepts everything — verification is unreliable |
email_is_role_account | Shared address (info@, sales@) rather than a person |
email_is_free | Free provider (Gmail, Outlook) rather than a company domain |
📞 Phone
| Field | Description |
|---|---|
first_phone | Primary number |
mobile_phone | Mobile |
corporate_phone | Company switchboard |
🏢 Company
| Field | Description |
|---|---|
company_name, company_id | Company identity |
company_domain, company_website | Web presence |
company_linkedin_url, company_linkedin_followers | LinkedIn page and size |
company_phone | Company number |
company_city, company_state, company_country | Headquarters |
company_employees | Headcount |
company_industry, company_keywords | Categorisation |
company_annual_revenue | Revenue |
company_founded_year | Founded |
💵 Funding
| Field | Description |
|---|---|
company_total_funding | Total raised |
company_latest_funding | Most recent round type |
company_latest_funding_amount | Amount of that round |
company_last_raised_at | When they last raised |
Why teams use a filtered lead database
For outbound sales
Title, seniority and department filters produce a list of the right people; email quality flags decide who is safe to send to.
For funding-triggered prospecting
fundingType plus a date window returns companies that just raised. New budget, new hires, new tools — the highest-intent segment in B2B.
For territory and ICP building
Combine companyEmployeeSize, industry, revenue and companyCountry to describe your ICP precisely, then measure how many companies actually fit it.
For recruiting
Filter by title and seniority in a location to map available talent, with LinkedIn URLs attached.
For multichannel sequences
Email, mobile and corporate phone on the same row means email → call → LinkedIn without stitching three sources together.
For CRM enrichment
companyDomain accepts up to ten domains, so you can pull everyone at a specific set of accounts.
How to build a lead list step by step
- Set Total Results — up to 30,000 per run.
- Add Person Filters: title keywords, seniority, department, country, state.
- Add Company Filters: employee size, industry, revenue, country, or up to ten specific domains.
- (Optional) Add Funding Filters to target recently funded companies.
- (Optional) Set Email Status to
verifiedfor the cleanest subset — expect fewer leads. - Click Start, then export the Output tab as CSV, Excel or JSON.
⬇️ Input
Example input
{"totalResults": 5000,"personTitle": ["marketing manager", "head of growth"],"seniority": ["manager", "director"],"functional": ["marketing"],"personCountry": ["United States"],"companyEmployeeSize": ["51 - 200", "201 - 500"],"industry": ["software"],"contactEmailStatus": "verified"}
Input reference
| Field | Type | Default | Description |
|---|---|---|---|
totalResults | integer | 100 | Leads to fetch. Clamped between 100 and 30,000 — asking for fewer than 100 still returns up to 100. |
contactEmailStatus | string | — | Set to verified to keep only verified emails. Produces a cleaner but smaller list. |
includeEmails | boolean | on | Email enrichment is always on; this flag is informational. |
firstName / lastName | string | — | Exact name match, case-insensitive. |
personTitle | array | — | Title keywords, matched as contains — marketing manager also matches Senior Marketing Manager. Multiple values are OR-ed. |
seniority | array | — | Seniority level. Common labels are normalised, so executive maps to C-suite and junior / entry level to entry. |
functional | array | — | Department or function, matched as contains. |
personCountry / personState | array | — | Where the person is based. |
companyEmployeeSize | array | — | Headcount ranges, e.g. 51 - 200. |
companyDomain | array | — | Up to 10 domains — github.com, without www or https. |
industry | array | — | Company industries. |
industryKeywords | array | — | Keyword match against company keywords. |
revenue | array | — | Company revenue ranges. |
companyCountry / companyState | array | — | Company headquarters location. |
fundingType | array | — | Funding round type. |
fundingFromDate / fundingToDate | string | — | Window on the company's most recent raise. |
businessModel | array | — | ⚠️ Accepted but not applied — this attribute is not held in the underlying data, so the filter is ignored. |
proxyConfiguration | object | none | Optional. No proxy by default. If the connection is rejected, the Actor retries automatically with exponential backoff. |
Two honest notes.
businessModelis ignored rather than applied — set it and your result set is unchanged. And any company-level filter (size, industry, revenue, funding, domain, location) restricts results to leads that have a matched company record, which naturally reduces the count.
⬆️ Output
Example output
{"full_name": "Jane Example","first_name": "Jane","last_name": "Example","title": "Head of Growth","seniority": "director","departments": "marketing","email": "jane@examplesoftware.com","email_status": "Verified","email_overall_score": 95,"email_is_deliverable": true,"email_is_catch_all": false,"email_is_role_account": false,"email_is_free": false,"first_phone": "+1 415 555 0142","mobile_phone": "+1 415 555 0199","corporate_phone": "+1 415 555 0100","person_linkedin_url": "https://www.linkedin.com/in/janeexample/","person_city": "San Francisco","person_state": "California","person_country": "United States","company_id": "5f1e2d3c4b5a6978","company_name": "Example Software","company_domain": "examplesoftware.com","company_website": "https://www.examplesoftware.com","company_linkedin_url": "https://www.linkedin.com/company/example-software/","company_linkedin_followers": 18400,"company_phone": "+1 415 555 0100","company_city": "San Francisco","company_state": "California","company_country": "United States","company_employees": 180,"company_industry": "Computer Software","company_keywords": "saas, analytics, b2b","company_annual_revenue": 24000000,"company_total_funding": 42000000,"company_latest_funding": "Series B","company_latest_funding_amount": 28000000,"company_last_raised_at": "2026-03-18","company_founded_year": 2017}
Illustrative values — a live run returns real database records.
Usage recipes
Freshly funded companies
{"totalResults": 3000,"fundingType": ["Series A", "Series B"],"fundingFromDate": "2026-01-01","seniority": ["c_suite", "vp"],"contactEmailStatus": "verified"}
New round, senior decision-maker, verified email. This is the highest-intent list the Actor can build.
Safe-to-send list
Run without contactEmailStatus, then filter your export to email_is_deliverable: true, email_is_catch_all: false, email_is_role_account: false. You keep more volume than a verified-only run while still protecting your sender reputation.
Everyone at ten target accounts
{"totalResults": 2000,"companyDomain": ["github.com", "gitlab.com", "atlassian.com"],"seniority": ["manager", "director", "vp"]}
Ten domains is the cap.
Mid-market ICP
{"totalResults": 10000,"companyEmployeeSize": ["51 - 200", "201 - 500"],"industry": ["software"],"companyCountry": ["United States"],"personTitle": ["operations"]}
Mobile-first calling list
Filter the export for rows where mobile_phone is present. Mobile connect rates beat switchboards by a wide margin.
Territory sizing
Run a broad ICP query and count company_id values. That is your addressable account count, measured rather than estimated.
How does this compare to a lead-database subscription?
Commercial B2B databases sell annual seats with credit allocations, export caps and per-seat pricing — and the credits usually run out before the quarter does.
This Actor gives you the same style of filtered query with no subscription, no seat, and no credit pool: you run it when you need a list, and pay for the rows you take. It is not a CRM and it does not manage sequences; it is the list-building step, in a form you can call from a script.
Integrate and automate
Python
from apify_client import ApifyClientclient = ApifyClient("<YOUR_APIFY_API_TOKEN>")run = client.actor("scraperforge/leads-scraper").call(run_input={"totalResults": 5000,"personTitle": ["head of growth"],"companyEmployeeSize": ["51 - 200"],"contactEmailStatus": "verified",})for lead in client.dataset(run["defaultDatasetId"]).iterate_items():if lead["email_is_deliverable"] and not lead["email_is_role_account"]:print(lead["full_name"], "|", lead["title"], "|", lead["email"], "|", lead["company_name"])
JavaScript
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: '<YOUR_APIFY_API_TOKEN>' });const run = await client.actor('scraperforge/leads-scraper').call({totalResults: 1000,personTitle: ['head of growth'],});const { items } = await client.dataset(run.defaultDatasetId).listItems();console.log(items);
REST API
curl -X POST "https://api.apify.com/v2/acts/scraperforge~leads-scraper/runs?token=<YOUR_APIFY_API_TOKEN>" \-H "Content-Type: application/json" \-d '{"totalResults":1000,"personTitle":["head of growth"]}'
n8n, Make, Zapier and AI agents
Call the Actor from n8n, Make, Zapier or an MCP-capable agent to push qualified leads straight into a CRM or a sequencer.
Schedules and webhooks
Attach a Schedule to a funding-triggered query and deduplicate on email, then route results with webhooks or the Google Sheets / Airtable / HubSpot integrations.
Pricing and what you are charged for
Billing details for this Actor are shown on the Pricing tab of its page — check there for the current model and rates before a large run. Apify shows a cost estimate before and during every run.
Charging is per lead delivered. If a spend limit is reached mid-run the Actor stops gracefully and every lead already saved is preserved.
Limits, reliability and blocking
totalResultsis clamped to 100–30,000. Requesting 10 still returns up to 100, and 50,000 is capped at 30,000. Split larger jobs across runs with different filters.businessModelis ignored. It is accepted for compatibility but not applied, because the attribute is not held in the data.includeEmailsis always on — the label says so, and the flag has no effect.- Company filters imply a company match. Any company-level filter restricts results to leads with a linked company record, which reduces the count relative to person-only filters.
- Title and department filters are contains matches, so
manageralso matchesSenior Product Manager. Multiple values are OR-ed, not AND-ed. verifiednarrows results significantly. For volume with control, filter on the boolean quality flags instead.- Catch-all domains cannot be verified reliably.
email_is_catch_all: truemeans the mail server accepts everything — a bounce risk regardless of the status field. - Not every field is populated on every row. Phone numbers, revenue and funding are sparser than name, title and email.
- Results stream live, so a large run is usable while it is still running.
- The connection retries with exponential backoff if it is rejected, escalating its strategy across attempts.
- Data is a point-in-time snapshot. People change jobs constantly — re-run before a campaign rather than reusing a months-old export.
- Default run options are 4 GB memory and a 1-hour timeout; raise the timeout for 30,000-row runs.
Is it legal to use B2B lead data?
This Actor returns business contact information — work emails, work phone numbers and professional details used for B2B communication.
That data is still personal data under GDPR and comparable laws. Before you contact anyone: establish a lawful basis (legitimate interest for B2B outreach requires a genuine balancing assessment), identify yourself and your organisation in every message, include a working opt-out, honour deletion and objection requests promptly, and keep records of where the data came from. Follow GDPR, CAN-SPAM, CASL and the TCPA, and check Do Not Call registries before dialling — phone outreach carries meaningfully higher regulatory risk than email in the US.
Well-targeted, relevant outreach to the right people is both the compliant path and the effective one. Bulk-blasting an unfiltered export is neither.
❓ Frequently asked questions
How many leads can I get in one run?
Up to 30,000. The minimum is effectively 100 — smaller requests are raised to it.
What do the email flags actually mean?
email_is_deliverable — should deliver. email_is_catch_all — the domain accepts everything, so verification is unreliable. email_is_role_account — a shared address like info@. email_is_free — Gmail or similar rather than a company domain.
Should I set contactEmailStatus to verified?
It gives the cleanest list and a much smaller one. For more volume with similar safety, filter on the boolean flags after export.
Why does businessModel change nothing?
It is not held in the underlying data. The input accepts it for compatibility and ignores it — this README states that plainly rather than leaving you to discover it.
Do title filters need to be exact?
No. They are contains matches, so marketing manager also matches Senior Marketing Manager.
Why did adding a company filter cut my results so much?
Company filters require a matched company record, so leads without one drop out.
Do I get phone numbers?
Yes — up to three per lead: primary, mobile and corporate. Not every lead has all three.
Can I target companies that just raised?
Yes. Combine fundingType with fundingFromDate and fundingToDate.
How many company domains can I filter on?
Ten, entered without www or https.
Which export format should I use?
CSV or Excel — the output is flat and imports straight into a CRM.
🔗 Related scrapers
- LinkedIn Company Scraper with Firmographics & Funding Data — deepen the company side of a lead list.
- Linkedin Company Employees Scraper — map everyone at a target account.
- 🔎 LinkedIn Companies Suggestions Scraper — expand your ICP with lookalike companies.
- Linkedin Open Profile Status — see who you can message without InMail credits.
Browse the full collection on the ScraperForge profile.
💬 Feedback
Need extra filters, larger runs, or a custom enrichment pipeline? Open an issue on the Issues tab of this Actor.