Website Email & Contact Finder
Pricing
from $5.00 / 1,000 results
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 $5.00 / 1,000 results
Rating
0.0
(0)
Developer
deusex machine
Maintained by CommunityActor stats
0
Bookmarked
57
Total users
19
Monthly active users
7 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.
✨ Why use this scraper
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.
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.
📤 Output fields
Domain record
One output record per crawled domain. Domains where neither emails nor phones are found are excluded from the output.
| Field | Type | Description |
|---|---|---|
domain | string | Website hostname (e.g. acme.com, stripe.com) |
emails | array | All unique email addresses found, lowercased |
phones | array | All unique phone numbers from tel: links and visible text |
socialLinks | array | Full URLs to Facebook, X/Twitter, LinkedIn, Instagram, YouTube and TikTok profiles |
scrapedAt | string | ISO 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.comandjohn@example.comcollapse 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-XXXXand international+CC XX XXXX XXXXformats) - Requires proper separators (hyphens, spaces, parentheses) to avoid false positives on zip codes, product SKUs and random number strings
Social link extraction
Matches anchor hrefs against six major platforms:
🎯 Use cases
- 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
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
| Parameter | Type | Default | Description |
|---|---|---|---|
urls | array | — | Website URLs to crawl (required). Include the https:// prefix. |
maxPages | integer | 10 | Max internal pages to follow per domain (1–100). |
📋 Output example
{"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.
💻 Code examples
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 ApifyClientclient = 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 → Export → CSV. 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)
- Trigger — Google Sheets New Row (a new domain is added to your prospect sheet).
- Action — Apify Run an Actor synchronously →
makework36/email-finder-scraper→ pass{ "urls": [new_row_domain] }. - 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
- 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
📊 Comparison
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.
| Feature | This email finder scraper | Commercial contact database (pay-per-lead) | Scraper with residential proxy | Browser-extension email finder |
|---|---|---|---|---|
| Pricing model | Pay-per-page (~$0.25/1K) | Per-lead / per-seat ($50–$500/mo) | Per-page but 3–5× more expensive | Per-seat ($40–$200/mo) |
| Crawls multi-page per site | Yes (configurable maxPages) | N/A (pre-indexed) | Yes | Typically manual |
| Data freshness | Real-time (each run is live) | Hours to months old | Real-time | Real-time |
| Phone number extraction | Yes (tel: + strict regex) | Yes | Partial | Rare |
| Social media links | Yes (6 platforms) | Partial | No | No |
| Needs signup to third-party data provider | No | Yes | No | Yes |
| Cheerio vs headless browser | Cheerio (fast, cheap) | N/A | Residential + browser (slow, expensive) | Browser-based |
| Supports bulk-domain input | Yes (array input) | Yes | Yes | Typically one-by-one |
| Deduplication across pages | Yes (per domain) | Yes | Partial | No |
| Works on any public website | Yes | Limited to indexed companies | Yes | Yes |
| GDPR-friendly ("public website" basis) | Yes (B2B interest) | Varies by provider | Same as this | Same 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.
💵 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
Is scraping emails legal?
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.
🔗 Related actors
- Facebook Comments Scraper — extract comments and reactions from public Facebook posts
- Threads Scraper — posts and profiles from Meta Threads
- Reddit Scraper — threads and comments from Reddit
- Fast Airbnb Price Scraper — Airbnb listings and prices
- VRBO Scraper — vacation-rental listings and pricing