Website Email & Contact Finder avatar

Website Email & Contact Finder

Pricing

from $1.00 / 1,000 results

Go to Apify Store
Website Email & Contact Finder

Website Email & Contact Finder

Find email addresses, phone numbers, and social media links from any website. Crawls pages and extracts contact information automatically.

Pricing

from $1.00 / 1,000 results

Rating

0.0

(0)

Developer

deusex machine

deusex machine

Maintained by Community

Actor stats

0

Bookmarked

32

Total users

16

Monthly active users

12 days ago

Last modified

Categories

Share

Email Finder Scraper — Extract Emails, Phones & Social Links from Any Website for Lead Generation

Useful? Leave a review — it takes 10 seconds and is the single biggest thing that helps other sales and growth teams find this email finder scraper.

A fast, lightweight email finder scraper that crawls websites and extracts email addresses, phone numbers and social-media profile links from every reachable internal page. Give it a list of URLs and it follows internal links up to your page cap, pulling contact info across each domain. No signup to third-party contact databases, no seat-based SaaS subscription, no Hunter / Apollo / RocketReach licenses required — just clean JSON or CSV output. Built for B2B sales teams, lead-generation agencies, outbound SDRs, recruiters, data-enrichment pipelines, directory builders, journalists and anyone doing cold outreach at scale.

What this email finder scraper does

Given a list of website URLs (company sites, portfolio pages, SaaS landing pages, ecommerce stores, agencies, directories — anything with a public front-end) this scraper crawls each domain with a breadth-first strategy, visits up to maxPages internal pages per site, and extracts three categories of contact data: email addresses, phone numbers and social-media profile URLs. It filters out common false positives (image filenames that look like emails, example addresses, partial phone fragments) so the output is immediately usable in a CRM or spreadsheet.

Every run pulls fresh data from the live site — contact pages change, staff come and go, and social profiles migrate between platforms, so the scraper hits each domain live. Export the dataset as JSON, CSV, Excel, or XML directly from the Apify console or via the Apify API.

Why choose this email finder scraper

Commercial email-finder databases (Hunter, Apollo, RocketReach, Lusha, Snov) charge per-lead and cap you with monthly quotas. They're excellent for discovering named individuals at large companies but expensive and redundant when all you need is the public contact page of a known set of websites. This scraper is the opposite tool: you already have the domains — you just need the contact info on them. No seats, no per-lead pricing, no quota, no stale "last verified 6 months ago" data.

Data fields the email finder scraper extracts

Domain record

One output record per crawled domain. Domains where neither emails nor phones are found are excluded from the output.

FieldTypeDescription
domainstringWebsite hostname (e.g. acme.com, stripe.com)
emailsarrayAll unique email addresses found, lowercased
phonesarrayAll unique phone numbers from tel: links and visible text
socialLinksarrayFull URLs to Facebook, X/Twitter, LinkedIn, Instagram, YouTube and TikTok profiles
scrapedAtstringISO 8601 timestamp of when the domain was crawled

Email extraction details

  • Regex-based matching against RFC-5322-style address patterns
  • Automatic de-duplication and lowercasing (so John@Example.com and john@example.com collapse into one entry)
  • Heuristic filters to drop image-asset filenames (banner@2x.png, logo@3x.jpg) and obvious placeholders (user@example.com)

Phone number extraction details

  • Captures tel: anchor hrefs — the most reliable signal
  • Supplements with strict visible-text pattern matching (North American (XXX) XXX-XXXX and international +CC XX XXXX XXXX formats)
  • Requires proper separators (hyphens, spaces, parentheses) to avoid false positives on zip codes, product SKUs and random number strings

Matches anchor hrefs against six major platforms:

Use cases for this email finder data API

  • B2B lead generation — feed a list of target-account domains (from ZoomInfo, Crunchbase, or an ICP filter) and get back direct contact emails for cold outreach.
  • Cold email outreach campaigns — power SDR and founder-led outbound with verified-public emails instead of paying per-lead to Hunter or Apollo.
  • Agency sales — scrape leads lists (directories like Clutch, UpCity, G2) and extract contact info for agency-to-agency outreach.
  • Data enrichment pipelines — append emails / phones / socials to your existing CRM records (Salesforce, HubSpot, Pipedrive, Copper).
  • Directory and marketplace building — aggregate contact info from hundreds of local business sites to power a searchable directory.
  • Recruiter sourcing — scrape portfolio sites, personal-brand domains and "about me" pages for candidate contact info.
  • Journalism and investigative research — find press contacts across many company or nonprofit sites quickly.
  • Competitive intelligence — monitor which social platforms your competitors are actively promoting (via socialLinks).

How to use this email finder scraper

Quick scan of a few websites

{
"urls": ["https://stripe.com", "https://linear.app"],
"maxPages": 15
}

Single-site deep crawl

{
"urls": ["https://basecamp.com"],
"maxPages": 50
}

Bulk domain enrichment for a prospect list

{
"urls": [
"https://acme.com", "https://globex.io", "https://soylent.co",
"https://initech.com", "https://hooli.xyz", "https://pied-piper.com"
],
"maxPages": 10
}

Quick contact-only scan (minimal pages)

{
"urls": ["https://example-agency.com"],
"maxPages": 5
}

Setting maxPages low keeps runs cheap and fast when you know the contact info will be on the homepage, /about, /contact or /team.

Input parameters

ParameterTypeDefaultDescription
urlsarrayWebsite URLs to crawl (required). Include the https:// prefix.
maxPagesinteger10Max internal pages to follow per domain (1–100).

Output example (JSON)

{
"domain": "stripe.com",
"emails": [
"support@stripe.com",
"press@stripe.com",
"complaints@stripe.com"
],
"phones": [
"+1 (888) 926-2289",
"+353 1 561 9700"
],
"socialLinks": [
"https://twitter.com/stripe",
"https://linkedin.com/company/stripe",
"https://facebook.com/StripeHQ",
"https://youtube.com/@stripe"
],
"scrapedAt": "2026-04-22T14:30:00.000Z"
}

Export the full dataset as CSV directly from the Apify console, or programmatically via the Apify API.

How to call this email finder scraper from your code

From the Apify API (curl)

curl -X POST 'https://api.apify.com/v2/acts/makework36~email-finder-scraper/run-sync-get-dataset-items?token=YOUR_TOKEN' \
-H 'Content-Type: application/json' \
-d '{
"urls": ["https://stripe.com", "https://linear.app"],
"maxPages": 15
}'

From Python (apify-client)

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("makework36/email-finder-scraper").call(run_input={
"urls": [
"https://acme.com",
"https://globex.io",
"https://initech.com",
],
"maxPages": 10,
})
for domain in client.dataset(run["defaultDatasetId"]).iterate_items():
print(domain["domain"], "→", len(domain["emails"]), "emails,",
len(domain["phones"]), "phones")
for email in domain["emails"]:
print(f" {email}")

From Node.js (apify-client)

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('makework36/email-finder-scraper').call({
urls: [
'https://acme.com',
'https://soylent.co',
'https://hooli.xyz',
],
maxPages: 15,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.table(items.map((d) => ({
domain: d.domain,
emails: d.emails.length,
phones: d.phones.length,
socials: d.socialLinks.length,
})));

Export to CSV

From the console run page → ExportCSV. Or via API:

https://api.apify.com/v2/datasets/DATASET_ID/items?format=csv&token=YOUR_TOKEN

Integrate with a Google Sheet (via Make.com or Zapier)

  1. Trigger — Google Sheets New Row (a new domain is added to your prospect sheet).
  2. Action — Apify Run an Actor synchronouslymakework36/email-finder-scraper → pass { "urls": [new_row_domain] }.
  3. Action 2 — Google Sheets Update Row → write back the extracted emails / phones / socials to the adjacent columns.

You now have a fully automated enrichment pipeline without writing a line of code.

Performance & cost

  • Crawls up to 5 pages concurrently per run for parallelism without overloading target sites
  • ~$0.25–0.50 per 1,000 pages crawled on the Apify platform
  • Uses Cheerio (HTML-only, no browser) — dramatically cheaper and faster than browser-based alternatives
  • Typical 10-page crawl of a site finishes in 5–15 seconds
  • 2 automatic retries per failed request
  • Same-domain link strategy prevents the crawler from wandering off-site

Email finder scraper comparison — how this compares to other options

The email-finder landscape has a dozen-plus tools across scraper marketplaces, commercial data providers, and browser extensions. Here's how this scraper stacks up on the metrics that matter for bulk enrichment.

FeatureThis email finder scraperCommercial contact database (pay-per-lead)Scraper with residential proxyBrowser-extension email finder
Pricing modelPay-per-page (~$0.25/1K)Per-lead / per-seat ($50–$500/mo)Per-page but 3–5× more expensivePer-seat ($40–$200/mo)
Crawls multi-page per siteYes (configurable maxPages)N/A (pre-indexed)YesTypically manual
Data freshnessReal-time (each run is live)Hours to months oldReal-timeReal-time
Phone number extractionYes (tel: + strict regex)YesPartialRare
Social media linksYes (6 platforms)PartialNoNo
Needs signup to third-party data providerNoYesNoYes
Cheerio vs headless browserCheerio (fast, cheap)N/AResidential + browser (slow, expensive)Browser-based
Supports bulk-domain inputYes (array input)YesYesTypically one-by-one
Deduplication across pagesYes (per domain)YesPartialNo
Works on any public websiteYesLimited to indexed companiesYesYes
GDPR-friendly ("public website" basis)Yes (B2B interest)Varies by providerSame as thisSame as this

The honest take: if you need to discover named individuals at Fortune 500 companies (e.g. find the VP of Marketing at Adobe), a commercial contact database like Hunter or Apollo is still the right tool. For anything that boils down to "here's a list of domains, get me their public contact info" — this scraper is 10–50× cheaper.

Step-by-step tutorial — your first email finder run in 3 minutes

  1. Sign up for Apify — go to apify.com and create a free account. You'll get a $5 trial credit.
  2. Open this actor — click Email Finder ScraperTry for free.
  3. Prepare your URL list — paste 3–5 company websites you want contact info for into the urls field.
  4. Set maxPages — start with 10. Most sites expose contact info on the homepage, /about, or /contact, so 10 pages is usually enough.
  5. Click "Start" — the actor runs. A 5-domain / 10-page run finishes in 30–90 seconds.
  6. View the dataset — click the Dataset tab → you'll see one record per domain with an array of emails, phones and social links.
  7. Export — click ExportCSV → paste into your CRM.
  8. Automate itSchedulesCreate new schedule → run weekly against your prospect list to catch new hires added to team pages.

That's it — no Hunter subscription, no Apollo seat, no per-lead billing.

Advanced usage patterns

Pattern 1 — directory-driven lead generation

Scrape a public directory (Clutch, G2, Crunchbase, Capterra, UpCity) to build a list of target company domains first. Then feed those domains into this scraper in batches of 50–200 and you'll have a full cold-outreach list with emails, phones and social profiles in under an hour.

Pattern 2 — CRM enrichment batch job

Pull your HubSpot / Salesforce / Pipedrive accounts list monthly. Run this scraper on the website field of each account. Update records where emails or phones is new or empty. You're auto-maintaining CRM contact freshness for the cost of a few dollars a month.

Pattern 3 — ABM (account-based marketing) pipeline

Once the sales team identifies target accounts, feed their domains through this scraper. Join the extracted emails against your email-delivery provider's (Resend, Postmark, SendGrid) reputation lists to skip emails likely to bounce before sending a single message.

Pattern 4 — social-presence audit for competitive intelligence

Aggregate socialLinks across 50+ competitors in your space. Tally the platforms they all use vs the platforms only the top-performers use. Use this as input for your own social-strategy decisions.

Pattern 5 — recruiter sourcing on portfolio sites

Feed a list of personal-brand domains (developers' portfolios, designers' showcases, consultant websites). The scraper returns each person's public contact email plus their LinkedIn and X profiles — perfect for cold-recruitment outreach without paying LinkedIn Recruiter seat fees.

Troubleshooting

No emails returned for a domain I know has a contact page

  • Contact email hidden behind JavaScript — some sites render emails via React/Vue after page load. This scraper uses Cheerio (HTML-only) and won't pick up JS-rendered contact details. In that case, a browser-based scraper is the right fallback.
  • Contact form instead of email — many modern sites have a contact form instead of a mailto link. There's no address for the scraper to find.
  • Robots.txt exclusion — though Cheerio doesn't strictly honor robots.txt, some domains return bot-unfriendly HTML to common user agents.

Too many junk emails

The scraper already filters .png, .jpg and example patterns, but aggressive content sites can still surface noise. Post-process the emails array to keep only addresses whose domain matches the crawled domain (e.g. drop contact@mailchimp.com when crawling stripe.com).

Missing phone numbers

Phone extraction is intentionally strict to avoid false positives on zip codes and SKUs. Numbers in unusual formats (no separators, or Asian formats like XXX XXXX XXXX without a country code) may be skipped. File an issue with the exact page URL if you want a specific format added.

Some domains missing from output

Domains where neither emails nor phone numbers were found are excluded from the output by design (no point in writing empty records). If a domain is missing, it either has no public contact info, renders contact info via JS, or blocked the crawler.

Crawler stuck on one domain

If a site has thousands of internal URLs (blog archives, product catalogs, pagination), the crawler will chew through maxPages without hitting contact pages. Lower maxPages to 5–10, or pre-filter to contact-relevant subpaths (e.g. /contact, /about, /team) by passing them as explicit URLs.

Hitting rate limits on target sites

With maxConcurrency: 5 the scraper is already gentle, but very aggressive bot-detection (Cloudflare "under attack mode") can still block requests. Reduce maxPages or split the run into smaller batches with a few-minute pause between them.

Pricing

Pay-per-result model:

  • ~$0.25–0.50 per 1,000 pages crawled
  • Apify gives every new user a $5 free trial → tens of thousands of pages to evaluate the scraper
  • No subscription, no minimum, no egress fees

FAQ

This scraper only reads publicly visible contact information on company websites — the same data any browser visitor can see. In most jurisdictions, B2B contact scraping for legitimate outreach falls under "legitimate interest" (GDPR Article 6(1)(f)) or equivalent legal basis. However, downstream use of the emails (e.g. cold email campaigns) is regulated separately — CAN-SPAM in the US, CASL in Canada, GDPR + ePrivacy in the EU. Consult legal counsel for your use case and jurisdiction.

Does it find emails hidden behind JavaScript?

No. This scraper uses Cheerio which only parses server-rendered HTML. Sites that render their contact details via React / Vue / Angular after initial page load won't expose those emails here. For JS-rendered sites, a headless-browser scraper is the right alternative.

Does it filter out junk emails?

Yes. The scraper drops image-asset filenames that happen to contain @ (logo@2x.png, hero@3x.jpg) and common placeholder addresses (user@example.com, name@example.org).

Why are some phone numbers skipped?

Phone extraction uses strict pattern matching — numbers must have real separators (parentheses, dashes, spaces) and be 10–15 digits. This is a deliberate trade-off: we'd rather miss a few unusually formatted numbers than flood your output with zip codes and random numeric strings.

Does it return emails verified as deliverable?

No. This is a scraping tool, not a verification service. The extracted emails are public strings as they appear on the site. If you need deliverability verification, pipe the output into NeverBounce, ZeroBounce or a similar service.

Can I crawl subdomains?

The crawler uses a same-domain strategy (enqueueLinks with strategy: "same-domain"). Subdomains (blog.acme.com vs acme.com) are treated as separate domains — add each explicitly if you want to crawl both.

What happens on sites behind Cloudflare or DataDome?

Cheerio-based scraping works on most sites but can be blocked by aggressive bot-protection setups (Cloudflare "I'm Under Attack" mode, DataDome with strict challenges). For those targets, a browser-based scraper with residential proxy is the right escalation.

Can I whitelist specific page types (e.g. /contact, /team)?

Not at input level yet — the scraper follows all same-domain links up to maxPages. You can simulate whitelisting by passing the specific page URLs directly (e.g. ["https://acme.com/contact", "https://acme.com/about"]) instead of the homepage.

How do I avoid duplicate crawls when running across many domains?

The output is already deduplicated per domain. If you run this scraper weekly, store the output and diff against the previous run — new emails and phone numbers surface as fresh hires are added to team pages.

Changelog

  • v1.1 (2026-04-22) — Full SEO rewrite, added Python / Node / curl examples, anonymized comparison table, advanced usage patterns, Google Sheets integration guide.
  • v1.0 (2026-03-15) — Initial release with Cheerio crawler, email + phone + social extraction, strict false-positive filters and same-domain crawling.

This email finder scraper accesses only publicly visible contact information on company websites. It does not bypass login, paywalls or rate-limits beyond standard HTTP retry-with-backoff. Emails, phone numbers and social profiles collected here constitute personal data under GDPR and similar regimes — you are the data controller once the dataset leaves Apify. Use collected contacts only for legitimate B2B outreach, honor unsubscribe requests promptly, comply with CAN-SPAM, CASL and ePrivacy regulations in your jurisdiction, and respect each site's robots.txt policy where applicable. Don't use this data for spam, scams, harassment or building surveillance-grade personal profiles on individuals.


🙏 Ran this email finder scraper successfully? Leaving a review helps the algorithm surface this to other sales and growth teams. Much appreciated.