B2B Leads Finder — Emails, Phones & Company Data (Apollo Alte avatar

B2B Leads Finder — Emails, Phones & Company Data (Apollo Alte

Pricing

Pay per usage

Go to Apify Store
B2B Leads Finder — Emails, Phones & Company Data (Apollo Alte

B2B Leads Finder — Emails, Phones & Company Data (Apollo Alte

Find B2B leads with verified emails, phone numbers, and company data from public sources. An affordable Apollo/ZoomInfo alternative. Scrapes company websites, public directories, and verifies email addresses via MX records. Perfect for sales prospecting, recruitment, market research, and investor re

Pricing

Pay per usage

Rating

0.0

(0)

Developer

Ricardo Akiyoshi

Ricardo Akiyoshi

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

2 hours ago

Last modified

Categories

Share

B2B Leads Finder — Emails, Phones & Company Data

The Apollo/ZoomInfo alternative at 10x lower cost. Find B2B leads with verified emails, phone numbers, and company data from public sources. Pay only $0.01 per lead — no subscriptions, no minimums.

Why Use This Actor?

FeatureApollo.ioZoomInfoThis Actor
Monthly cost$79–$399/mo$14,995/yrPay per lead
Cost per lead~$0.10–$0.50~$0.15–$1.00$0.01
100 leads$79+$125+$1.00
1,000 leads$399+$1,250+$10.00
Lock-inAnnual contractAnnual contractNone
Data freshnessMonthly refreshMonthly refreshReal-time scrape

Use Cases

  • Sales Prospecting — Find decision-makers (CEOs, VPs, Directors) at target companies with verified emails for cold outreach.
  • Recruitment — Discover engineering leads, CTOs, and hiring managers at companies in your target industry.
  • Market Research — Map the leadership team of competitors, partners, or acquisition targets.
  • Investor Research — Find founders and C-suite executives at startups in a specific sector.
  • Account-Based Marketing — Build contact lists for specific company domains with title-level targeting.
  • Link Building / PR — Find marketing managers and editors at publications for outreach.

How It Works

The actor uses 6 complementary strategies to find and verify leads:

  1. Company Website Scraping — Scrapes /about, /team, /leadership pages. Parses JSON-LD structured data and common HTML patterns (team cards, heading groups, figure captions).

  2. Email Pattern Discovery — Searches for existing emails at a domain, detects the email pattern (firstname.lastname, flastname, etc.), and generates candidate emails for discovered people.

  3. Google Search Scraping — Searches Google for team pages, about pages, and public contact information matching your query, industry, and location.

  4. Domain Intelligence — RDAP/WHOIS lookups for registrant info, MX record analysis to detect email providers (Google Workspace, Microsoft 365, etc.).

  5. LinkedIn Discovery — Finds company LinkedIn pages and employee profiles via Google search (public data only, no LinkedIn login required).

  6. Email Verification — Verifies every email via DNS MX record checks. Detects catch-all domains, disposable email services, and assigns confidence scores (high/medium/low).

Input Examples

Find CEOs in the tech industry in San Francisco

{
"searchQuery": "CEO",
"industry": "Technology",
"location": "San Francisco",
"maxResults": 100,
"includeEmails": true,
"includePhones": false
}

Find decision-makers at specific companies

{
"searchQuery": "VP Sales",
"companyDomains": ["stripe.com", "notion.so", "figma.com", "linear.app"],
"maxResults": 50,
"includeEmails": true,
"includePhones": true
}

Find startup founders in healthcare

{
"searchQuery": "Founder",
"industry": "Healthcare",
"companySize": "1-10",
"maxResults": 200,
"includeEmails": true
}

Find marketing managers for outreach

{
"searchQuery": "Marketing Manager",
"industry": "SaaS",
"location": "United States",
"maxResults": 500,
"includeEmails": true
}

Output Format

Each lead in the dataset contains:

{
"firstName": "Jane",
"lastName": "Smith",
"fullName": "Jane Smith",
"title": "Chief Technology Officer",
"seniority": "C-Level",
"email": "jane.smith@example.com",
"emailVerified": true,
"emailConfidence": "high",
"emailCandidates": [
"jane@example.com",
"jane.smith@example.com",
"jsmith@example.com"
],
"emailProvider": "google-workspace",
"phone": "+1-555-123-4567",
"companyName": "Example Corp",
"companyDomain": "example.com",
"companyIndustry": "Technology",
"companySize": "51-200",
"companyLocation": "San Francisco",
"companyLinkedIn": "https://www.linkedin.com/company/example-corp",
"source": "company-website-jsonld",
"profileUrl": "https://www.linkedin.com/in/janesmith",
"scrapedAt": "2026-03-01T12:00:00.000Z"
}

Field Descriptions

FieldDescription
firstName / lastName / fullNamePerson's name, cleaned and normalized
titleJob title as found on the source page
seniorityClassified level: C-Level, VP, Director, Manager, Individual Contributor, Unknown
emailBest email address (found on page or pattern-generated)
emailVerifiedtrue if the domain has valid MX records
emailConfidencehigh (found on page + MX verified), medium (pattern + MX), low (pattern only)
emailCandidatesUp to 5 alternative email patterns to try
emailProviderDetected provider: google-workspace, microsoft-365, zoho, protonmail, other
phonePhone number if found (requires includePhones: true)
companyNameCompany name from the website or search results
companyDomainCompany website domain
companyIndustryIndustry (from input filter or detected)
companySizeEmployee count range (from input filter)
companyLocationLocation (from input filter or RDAP data)
companyLinkedInCompany LinkedIn page URL
sourceWhere the lead was found (company-website, google-search, linkedin, etc.)
profileUrlDirect link to the person's profile or source page
scrapedAtISO timestamp of when the lead was scraped

Email Confidence Levels

  • High — Email was found directly on a company page AND the domain has valid MX records. Deliverability rate: ~90%.
  • Medium — Email was pattern-generated based on the company's email format, with MX verification. Deliverability rate: ~70%.
  • Low — Email was pattern-generated without strong verification. Deliverability rate: ~40%. Use the emailCandidates array to try alternatives.

Proxy Recommendations

  • Residential proxies (recommended) — Required for Google search scraping. Use RESIDENTIAL proxy group.
  • Datacenter proxies — Work for direct company website scraping. Use SHADER proxy group.
  • No proxy — Works for small runs scraping company websites directly, but Google will block you quickly.

For best results, use Apify's residential proxies:

{
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

Rate Limiting & Politeness

This actor respects websites by:

  • Waiting 3 seconds between requests (max 20 requests/minute)
  • Rotating through 14 different User-Agent strings
  • Following robots.txt (via Crawlee defaults)
  • Not hammering any single domain
  • Stopping when maxResults is reached

Data Freshness & Accuracy

  • Freshness — Data is scraped in real-time. Every run produces fresh results.
  • Email accuracy — Emails found directly on pages are ~90% accurate. Pattern-generated emails are ~60-70% accurate. Always check the emailConfidence field.
  • Name/title accuracy — Extracted from official company pages. Accuracy depends on how well-structured the source HTML is.
  • Deduplication — Leads are deduplicated by email address (primary) or name+company (secondary).

GDPR & Compliance

This actor scrapes only publicly available data from:

  • Company websites (team/about pages)
  • Public Google search results
  • Public LinkedIn profiles (via Google, no login)
  • RDAP/WHOIS records (public registration data)
  • DNS records (public infrastructure data)

No private databases, APIs requiring authentication, or non-public sources are accessed. Users are responsible for complying with applicable data protection laws (GDPR, CCPA, etc.) when using the collected data.

Recommendations:

  • Include an unsubscribe link in cold emails
  • Honor opt-out requests within 10 business days
  • Do not scrape data from regions where you lack a legal basis
  • Store collected data securely and delete when no longer needed

Pricing

This actor uses Pay Per Event (PPE) pricing:

  • $0.01 per lead found (charged via lead-found event)
  • A "lead" = any person with at least a name + company or email
  • Set maxResults to control your budget
  • Example: 100 leads = $1.00, 1000 leads = $10.00

No monthly fees. No minimums. No annual contracts.

Tips for Best Results

  1. Be specific with your search query — "VP of Engineering" works better than just "Engineer".
  2. Provide company domains when you have a target list — direct scraping is more accurate than search.
  3. Use industry + location filters to narrow results and improve relevance.
  4. Start small — Run with 20-50 leads first to validate quality before scaling up.
  5. Check emailConfidence — Use "high" confidence emails for cold outreach, and verify "medium"/"low" with a dedicated email verification service before sending.
  6. Export to CSV — Use Apify's built-in export to get leads in CSV, JSON, or Excel format for your CRM.

Changelog

v1.0.0 (2026-03-01)

  • Initial release
  • 6-strategy lead finding pipeline
  • Email pattern discovery + MX verification
  • Google search + LinkedIn discovery
  • RDAP domain intelligence
  • PPE pricing at $0.01/lead
  • Deduplication by email and name+company
  • Seniority classification (C-Level, VP, Director, Manager, IC)
  • 14 User-Agent rotation strings
  • Rate limiting (20 req/min)
  • Comprehensive output with 18 fields per lead

Integration — Python

from apify_client import ApifyClient
client = ApifyClient("YOUR_API_TOKEN")
run = client.actor("sovereigntaylor/b2b-leads-finder").call(run_input={
"industry": "SaaS",
"location": "San Francisco, CA",
"maxResults": 50
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
email = item.get('email', 'N/A')
print(f"{item['companyName']}: {email}")

Integration — JavaScript

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_API_TOKEN' });
const run = await client.actor('sovereigntaylor/b2b-leads-finder').call({
industry: 'SaaS',
location: 'San Francisco, CA',
maxResults: 50
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach(item => console.log(item.companyName || item.name || 'N/A'));