Email & Contact Extractor — Emails, Phones, Socials avatar

Email & Contact Extractor — Emails, Phones, Socials

Pricing

from $1.20 / 1,000 results

Go to Apify Store
Email & Contact Extractor — Emails, Phones, Socials

Email & Contact Extractor — Emails, Phones, Socials

Email and contact extractor API: crawl any website or URL list and export emails, phone numbers and social profiles (LinkedIn, Instagram, Facebook, X, YouTube, TikTok). Lead generation, contact enrichment and sales outreach data — fast, no login.

Pricing

from $1.20 / 1,000 results

Rating

0.0

(0)

Developer

Haketa

Haketa

Maintained by Community

Actor stats

1

Bookmarked

63

Total users

2

Monthly active users

a day ago

Last modified

Features

Limited permissions

Share

Email Scraper & Contact Extractor — Emails, Phones & Socials from Any Website

Paste a list of company websites or domains and get back a clean, deduplicated dataset of every email address, phone number, and social-profile link each site publishes. This email scraper and website contact extractor crawls each domain's homepage plus its canonical contact pages — /contact, /about, /team, /impressum, /contatti, /contacto, /kontakt — decodes Cloudflare-obfuscated emails automatically, and returns one structured row per website. No login, no coding, no browser extensions.

Use it to scrape website emails and B2B contact intelligence at scale across 1,000+ domains in a single run. Export every result to JSON, CSV, Excel, XML, or API.

Built for B2B sales teams, outbound agencies, recruiters, PR & media outreach teams, VC and corp-dev researchers, local-SEO agencies, and AI automation pipelines that need high-volume contact enrichment and lead generation from company URLs.

Apify Actor


⚡ At a glance

FeatureDetails
Input FormatAny list of full website URLs (https://stripe.com/contact) or bare domains (stripe.com) — 1 input website = 1 aggregated output row
Multi-Page DiscoveryProbes homepage + 11 canonical English & European contact paths (/contact, /contact-us, /about, /about-us, /team, /company, /impressum, /imprint, /contatti, /contacto, /kontakt)
Email Extractionmailto: links, visible body/footer text, Cloudflare data-cfemail XOR hex decoding, [at] / (at) / [dot] text deobfuscation, and @ HTML entity decoding
Noise & Decoy FilteringAutomatically strips template domains (example.com, yourdomain.com), telemetry tokens (sentry.io, wixpress.com), image retina suffixes (@2x.png), and hash strings
Phone Extractiontel: links and verified international E.164 (+CC) patterns with anti-ID noise filtering
8 Social NetworksExtracts LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, TikTok, and Pinterest company/profile URLs in a single pass
Batch Scale & SpeedUnlimited domain batching (maxWebsites: 0, 1,000+ domains per run) with up to 50 parallel domain workers on Apify Datacenter Proxy
Output FormatsJSON, CSV, Excel (XLSX), HTML Table, XML, RSS, REST API & Webhooks

📋 Table of contents


🔎 Why scrape website contact data?

Nearly every business publishes contact information on its website — an info@, sales@, hello@, support@, partnerships@, or press@ mailbox on /contact, a legal address and email on /impressum, a phone number in the footer, and official social links in the header. That information is live, authoritative, and published specifically so customers, partners, and journalists can reach the company — yet gathering it manually across hundreds or thousands of domains takes days of repetitive clicking.

Even worse, many websites hide their published email addresses behind Cloudflare Email Address Obfuscation (data-cfemail hex ciphers) or text substitutions (sales [at] company [dot] com, @) that cause simple regex scrapers to return zero emails.

This website email scraper & contact extractor solves both problems at once:

  1. It visits each domain's homepage and probes canonical contact, about, team, and legal imprint paths automatically.
  2. It decodes Cloudflare hex ciphers and text obfuscations on the fly, filters out false-positive telemetry/asset strings, and consolidates every unique email, phone number, and social profile into one clean row per website.

Common reasons teams use this email & contact extractor:

  • 📬 Build B2B outbound lists from Google Maps, directory, trade-show, or TAM exports that only contain company URLs.
  • 🔄 Enrich CRM accounts (HubSpot, Salesforce, Pipedrive, Clay, Attio) with verified company emails, phone numbers, and 8 social links.
  • 📰 PR, podcast & media pitching — harvest press@, media@, and pr@ inboxes across hundreds of brand and publisher websites.
  • 🤝 Agency, partnership & affiliate outreach — collect direct contact channels and Instagram/TikTok/YouTube profiles for e-commerce brands and creators.
  • 🧑‍💼 Recruiting & talent sourcing — extract company LinkedIn pages, GitHub organizations, and careers@ / hr@ mailboxes.
  • 🇪🇺 European DACH / IT / ES B2B prospecting — automatically scrape /impressum, /kontakt, /contatti, and /contacto where EU law mandates direct company email disclosure.
  • 🤖 AI agent & n8n/Make enrichment pipelines — turn raw domain lists into structured contact records via webhook or REST API.

✨ What this email scraper does

  • ✅ Accepts bare domains or full URLs — paste stripe.com, https://stripe.com, or https://stripe.com/contact; every input URL is normalized, deduplicated, and mapped to one output row.
  • ✅ Multi-page contact path crawling — fetches your input URL first, then probes up to maxPagesPerDomain - 1 contact paths (/contact, /contact-us, /about, /about-us, /team, /company, /impressum, /imprint, /contatti, /contacto, /kontakt). Missing paths (404) are skipped cleanly without failing the domain.
  • ✅ Cloudflare & obfuscation decoding — decodes Cloudflare data-cfemail attributes, /cdn-cgi/l/email-protection# links, name [at] domain [dot] com / (at) / (dot) patterns, and @ / @ HTML entities.
  • ✅ Strict email quality & decoy filtering — automatically removes placeholder domains (example.com, domain.com, yourdomain.com, test.com), error-tracking DSN keys (*.sentry.io, wixpress.com), image/font file extensions (@2x.png, .svg, .woff2), and malformed anti-spam strings.
  • ✅ Clean phone number extraction — captures tel: links and international +CC phone numbers while rejecting analytics IDs, timestamps, and JSON numeric tokens.
  • ✅ Eight social networks in one pass — extracts canonical profile URLs for LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, TikTok, and Pinterest while ignoring /share, /intent, /login, and individual post links.
  • ✅ High-speed HTTP architecture — runs on standard Apify Datacenter proxies with per-request session rotation and configurable parallel concurrency (1–50 websites at once).

📊 How it compares to email-finder SaaS tools

CapabilityEmail & Contact Extractor (This Actor)Predictive Email SaaS (Hunter / Snov / Apollo)
Data SourceLive extraction from the target website's actual pagesStatic cached database + guessed {first}.{last} patterns
Cloudflare Email Decoding✅ Built-in XOR cipher + entity decoder❌ Often missed or outdated in static crawls
EU Impressum / Contatti / Contacto✅ Probed automatically on every domain⚠️ Rarely indexed for SMBs and local businesses
Phone Numbers Included✅ Yes (tel: + international E.164)⚠️ Usually costs extra mobile/phone credits
Social Profiles Included✅ 8 networks (LinkedIn, X, IG, FB, YT, GitHub, TikTok, Pinterest)⚠️ Usually LinkedIn only
Pricing ModelPay-per-run on Apify — no monthly seat lock-inExpensive monthly subscriptions + expiring credit tiers

🎯 Use cases

1. Local business & Google Maps lead enrichment

Local-SEO agencies, commercial service providers, and B2B reps export business websites from Google Maps, Yelp, or state contractor registries, then feed those URLs into this website contact scraper to harvest the info@ / office@ email addresses and Facebook/Instagram links that directory cards omit.

2. E-commerce & DTC brand prospecting

UGC agencies, 3PL logistics providers, packaging suppliers, and Shopify app founders paste lists of e-commerce store domains to extract brand contact emails alongside Instagram, TikTok, YouTube, and Pinterest profile links in a single batch.

3. European (DACH, Italy, Spain) B2B lead generation

Because German, Austrian, Swiss, Italian, and Spanish companies are legally required to publish a direct electronic contact address on their /impressum, /imprint, /kontakt, /contatti, or /contacto page, this actor achieves exceptionally high email fill rates on European SMB domains.

4. Technical & open-source due diligence

Venture capital analysts, DevRel teams, and developer-tool marketers enrich software company domains with both their corporate LinkedIn/X presence and their official GitHub organization URL (githubUrl).

SEO link-builders, podcast bookers, and PR agencies scan hundreds of publication, blog, and brand domains to collect editorial (press@, editor@, media@) and partnership inboxes.


📥 Input

Configure the actor in the Apify Console visual form or pass a JSON payload via the API. Every field has sensible defaults — simply paste your URLs or domains into startUrls and click Start.

FieldTypeDefault / PrefillDescription
startUrlsarray5 sample sitesWebsites to scan. Paste full URLs (https://eff.org) or bare domains (eff.org). Each unique URL produces one output row. Leave empty to run the built-in demo sample.
maxWebsitesinteger0 (unlimited)Safety cap on how many websites from your list to process (0 = process all 1,000+ websites in startUrls).
maxPagesPerDomaininteger6Maximum pages to crawl per website (1 = homepage only for maximum speed; 6 = homepage + top 5 contact paths; max 30).
contactPathsarray (string)11 pathsSub-paths probed on each domain when maxPagesPerDomain > 1: ["/contact", "/contact-us", "/about", "/about-us", "/team", "/company", "/impressum", "/imprint", "/contatti", "/contacto", "/kontakt"].
includeSocialsbooleantrueExtract LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, TikTok, and Pinterest URLs.
includePhonesbooleantrueExtract phone numbers from tel: links and international +CC patterns.
decodeObfuscatedEmailsbooleantrueDecode Cloudflare data-cfemail hex ciphers, [at]/[dot] text tricks, and @ HTML entities.
maxConcurrencyinteger5 (max 50)Number of websites crawled in parallel. Increase to 15–30 for large 1,000+ domain lists.
requestDelayinteger (ms)500Polite delay in milliseconds between page fetches within the same website (0–10000).
proxyConfigurationobjectDatacenter Proxy ONApify Proxy configuration. Default Datacenter proxy rotates IPs per request and works well for company websites.

Example input — B2B domain enrichment batch

{
"startUrls": [
{ "url": "https://eff.org" },
{ "url": "https://cncf.io" },
{ "url": "https://mozilla.org" },
{ "url": "https://plausible.io" },
{ "url": "https://n8n.io" }
],
"maxWebsites": 0,
"maxPagesPerDomain": 6,
"includeSocials": true,
"includePhones": true,
"decodeObfuscatedEmails": true,
"maxConcurrency": 10,
"requestDelay": 500,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": []
}
}

📤 Output

Each input website produces one aggregated, deduplicated JSON record containing every email, phone number, and social profile found across the pages crawled on that domain.

Sample output record

{
"inputUrl": "https://eff.org",
"rootDomain": "eff.org",
"title": "Electronic Frontier Foundation | Defending your rights in the digital world",
"emails": [
"activist@eff.org",
"extension-devs@eff.org",
"hr@eff.org",
"info@eff.org",
"membership@eff.org",
"press@eff.org"
],
"phones": [
"+14154369333"
],
"linkedinUrl": "https://www.linkedin.com/company/EFF",
"twitterUrl": "https://x.com/EFF",
"facebookUrl": "https://www.facebook.com/eff",
"instagramUrl": "https://www.instagram.com/efforg",
"youtubeUrl": "https://www.youtube.com/@efforg",
"githubUrl": "https://github.com/EFForg",
"tiktokUrl": "https://www.tiktok.com/@efforg",
"pinterestUrl": null,
"emailCount": 6,
"phoneCount": 1,
"socialCount": 6,
"pagesScraped": [
"https://eff.org",
"https://eff.org/contact",
"https://eff.org/about"
],
"fetchedPagesCount": 3,
"errors": [
"https://eff.org/contact-us → HTTP 404, 19526B",
"https://eff.org/about-us → HTTP 404, 19611B"
],
"scrapedAt": "2026-11-10T02:00:00.000Z"
}

Output field reference & coverage

🌐 Domain Identity & Crawl Metadata
FieldTypeCoverageDescription
inputUrlstring🟢 High (100%)Normalized URL from your input list (ideal for joining back to your source spreadsheet/CRM).
rootDomainstring🟢 High (100%)Clean registrable root domain without www. or protocol (e.g. eff.org).
titlestring|null🟢 High (~95%)HTML <title> of the homepage or first reachable page on the domain.
pagesScrapedarray (string)🟢 High (100%)List of URLs on the domain that returned HTTP 200 and were parsed.
fetchedPagesCountinteger🟢 High (100%)Total number of pages successfully fetched and scanned for this domain.
errorsarray|null🟡 ConditionalDiagnostic list of sub-paths that returned 404/timeout (or null when all probed paths succeeded).
scrapedAtstring🟢 High (100%)ISO 8601 timestamp of the extraction run.
📬 Extracted Emails, Phones & Counts
FieldTypeCoverageDescription
emailsarray (string)🟡 Conditional (Site-dependent)Sorted array of unique, lowercase, de-obfuscated email addresses found across the domain.
phonesarray (string)🟡 Conditional (Site-dependent)Array of unique phone numbers extracted from tel: links and +CC patterns.
emailCountinteger🟢 High (100%)Number of unique emails in emails (0 when the site publishes no email).
phoneCountinteger🟢 High (100%)Number of unique phone numbers in phones.
socialCountinteger🟢 High (100%)Number of distinct social networks found for this domain (0–8).
🔗 Social Media Profile Fields (8 Networks)
FieldTypeCoverageDescription
linkedinUrlstring|null🟡 Conditional (~56%)Official LinkedIn company/school/personal profile URL.
twitterUrlstring|null🟡 Conditional (~54%)Official Twitter / X profile URL.
facebookUrlstring|null🟡 Conditional (~49%)Official Facebook page URL.
instagramUrlstring|null🟡 Conditional (~48%)Official Instagram profile URL.
youtubeUrlstring|null🟡 Conditional (~50%)Official YouTube channel or handle URL.
githubUrlstring|null🟡 Conditional (~25%)Official GitHub organization or user URL.
tiktokUrlstring|null🟡 Conditional (~16%)Official TikTok profile URL (/@handle).
pinterestUrlstring|null🟡 Conditional (~8%)Official Pinterest profile URL.

Honest note on coverage: Identity and count fields (inputUrl, rootDomain, emailCount, phoneCount, socialCount, pagesScraped, fetchedPagesCount, scrapedAt) populate on 100% of rows. Contact fields reflect what each website actually publishes: across a 74-domain verification benchmark, 87.8% of websites yielded at least one contact signal, with 78.4% returning social profiles and 36.5%–65% returning direct email addresses (higher on SMB, agency, e-commerce, and EU Impressum sites; lower on Fortune 500 enterprise sites that use web-only contact forms).


🔁 Pagination & scale

Instead of paginating a single search directory, this actor scales horizontally across your website list (startUrls) and vertically across each domain's contact pages (maxPagesPerDomain):

  • 1,000+ websites per run (maxWebsites: 0): With maxWebsites: 0 (the default), there is no cap on how many websites you can process in a single run. Paste 100, 1,000, or 5,000 domains into startUrls and every unique URL is queued, crawled, and output as one deduplicated row.
  • Tunable depth vs. speed:
    • Set maxPagesPerDomain: 1 for an ultra-fast homepage-only scan (1 request per domain).
    • Keep maxPagesPerDomain: 6 (default) to scan the homepage plus the 5 highest-yield contact/about paths (/contact, /contact-us, /about, /about-us, /team).
    • Raise maxConcurrency to 15–30 when running 1,000+ domains so dozens of websites are crawled concurrently.

⚙️ How to use

Option 1: Apify Console (No Coding)

  1. Open Email & Contact Extractor in the Apify Console and click Try for free.
  2. Paste your list of company URLs or bare domains into Websites (startUrls), or upload a .txt/.csv list.
  3. Choose Max Pages Per Website (6 recommended for full contact-page coverage; 1 for homepage-only speed).
  4. Click Start and download your enriched dataset as JSON, CSV, or Excel (XLSX).

Option 2: Call via Python API

from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("haketa/email-extractor").call(run_input={
"startUrls": [
{"url": "https://eff.org"},
{"url": "https://cncf.io"},
{"url": "https://mozilla.org"},
],
"maxWebsites": 0,
"maxPagesPerDomain": 6,
"maxConcurrency": 10,
})
for row in client.dataset(run["defaultDatasetId"]).iterate_items():
print(row["rootDomain"], row["emails"], row["phones"], row["linkedinUrl"])

Option 3: Call via Node.js / JavaScript SDK

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('haketa/email-extractor').call({
startUrls: [
{ url: 'https://eff.org' },
{ url: 'https://cncf.io' },
{ url: 'https://mozilla.org' },
{ url: 'https://plausible.io' },
],
maxWebsites: 0,
maxPagesPerDomain: 6,
decodeObfuscatedEmails: true,
maxConcurrency: 10,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(`Processed ${items.length} domains.`);

Option 4: Call via cURL (REST API)

curl -X POST "https://api.apify.com/v2/acts/haketa~email-extractor/runs?token=YOUR_APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"startUrls": [
{ "url": "https://eff.org" },
{ "url": "https://cncf.io" }
],
"maxPagesPerDomain": 6,
"includeSocials": true,
"includePhones": true
}'

🔌 CRM & Automation Integrations

Connect your extracted website contact dataset directly to your sales and marketing stack:

DestinationWorkflow
Clay / HubSpot / Salesforce / PipedriveTrigger the actor via webhook or REST API whenever a new lead domain enters your CRM, and write emails[0], phones[0], and linkedinUrl back to the account record.
Make / n8n / ZapierChain Google Maps or directory scrapers → Email & Contact Extractor → Bulk Email Verifier → Instantly / Smartlead / Lemlist cold outreach sequences.
Google Sheets & ExcelExport one row per domain with comma-separated emails and phones columns + 8 dedicated social profile columns (linkedinUrl through pinterestUrl).
Snowflake / BigQuery / PostgresSchedule recurring monthly domain crawls to keep your B2B TAM contact graph fresh.

💡 Tips

  • Filter emails to match rootDomain for cold outbound: If a website mentions a third-party press or partner email, you can filter emails downstream so the domain after @ matches rootDomain.
  • Speed up 1,000+ domain runs: For lists of 1,000+ websites, set maxConcurrency: 20, requestDelay: 300, and maxPagesPerDomain: 4 (covering homepage + /contact + /contact-us + /about) to finish thousands of websites in minutes.
  • Target EU domains with /impressum: If you are scraping German, Austrian, or Swiss domains (.de, .at, .ch), consider putting "/impressum" and "/kontakt" at the top of contactPaths so they are probed even at maxPagesPerDomain: 3.
  • Switch to Residential Proxy only when needed: Standard Apify Datacenter proxies work for ~95% of company websites. If your list targets heavily protected domains that return 403 in errors, switch proxyConfiguration to RESIDENTIAL.

❓ FAQ

How many websites can I process in one run? You can process 1,000 to 10,000+ websites in a single run. maxWebsites defaults to 0 (unlimited), so your entire startUrls list is processed.

Can I paste bare domains like stripe.com without https://? Yes. The scraper normalizes stripe.com, www.stripe.com, and https://stripe.com automatically.

Does it decode Cloudflare-protected emails ([email protected])? Yes. When decodeObfuscatedEmails: true (default), the actor decodes both <span data-cfemail="..."> attributes and /cdn-cgi/l/email-protection#... links, plus [at]/[dot] text substitutions and HTML entities.

Why does errors show HTTP 404 on some contact paths? Not every website uses every URL convention (for example, eff.org has /contact and /about, while /contact-us and /about-us return 404). Those 404 entries are logged in errors for transparency and never prevent the domain's valid pages from being scraped.

Why do some enterprise websites return 0 emails? Many large corporations (e.g. Stripe, Apple) intentionally publish zero mailto: addresses and route all inquiries through web forms. Even on those domains, the actor still captures title and up to 8 official social profile URLs (linkedinUrl, twitterUrl, youtubeUrl, githubUrl, etc.).


Chain this Email & Contact Extractor with other B2B lead-generation actors by haketa for an end-to-end outreach workflow:


📋 Changelog

  • v1.2 (2026-11) — Unlocked unthrottled 1,000+ website batch processing (maxWebsites prefill/default set to 0 = unlimited, raised maxConcurrency ceiling to 50, lowered default requestDelay to 500 ms), added urls and domains input array aliases, enriched prefill sample with high-coverage domains (eff.org, cncf.io, mozilla.org), and expanded README with SaaS comparison and coverage tables.
  • v1.1 (2026-07) — Added suffix-level decoy/telemetry domain filtering (*.sentry.io, *.wixpress.com) and eliminated post-final-page delay per domain.
  • v1.0 (2026-05) — Initial release with multi-page contact path probing, Cloudflare data-cfemail XOR hex decoder, text/entity deobfuscation, E.164 phone extraction, and 8-network social profile discovery.
⌂ 换网址