Website Contact & Email Scraper avatar

Website Contact & Email Scraper

Pricing

$3.00 / 1,000 result items

Go to Apify Store
Website Contact & Email Scraper

Website Contact & Email Scraper

Extract emails, phone numbers and social links from any list of websites — with contact-page crawling and email validation. Bulk B2B lead enrichment, pay per result.

Pricing

$3.00 / 1,000 result items

Rating

0.0

(0)

Developer

ziv shay

ziv shay

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

2 days ago

Last modified

Share

Extract emails, phone numbers and social links from any list of websites — with contact-page crawling, a JS-render fallback for SPA sites, and email validation. Built for bulk B2B lead enrichment. Pay per result.

What it does

Give it a list of websites (plain URLs, bare domains, or objects with a url/website field). For each site it:

  1. Fetches the homepage.
  2. Optionally crawls common contact pages (/contact, /contact-us, /about, /about-us).
  3. Extracts every email, phone number and social profile — LinkedIn, Facebook, Twitter/X, Instagram, YouTube, TikTok, Telegram, WhatsApp, GitHub and Pinterest — from mailto:/tel: links, visible text, and inline JSON/JSON-LD (many sites only ship their socials inside a Next.js data blob, which an anchor-only scraper misses).
  4. Validates each email (syntax), tags role (info@, sales@) and no-reply addresses, and can drop them on request.
  5. JS-render fallback: when a homepage is an empty single-page-app shell, it re-fetches with a full browser profile to recover contacts the plain crawler would miss.

One row is pushed per website → pay-per-result ready, export to CSV/JSON/Excel.

Input

FieldTypeDefaultDescription
startUrlsarray (required)Websites to scrape. URLs, bare domains, or { url } objects.
crawlContactPagesbooleantrueAlso fetch contact/about pages.
contactPathsarray/contact, /contact-us, /about, /about-usExtra relative paths to probe.
dropRoleEmailsbooleanfalseExclude role + no-reply addresses, keep personal only.
renderJsbooleantrueBrowser-profile retry for JS-rendered/SPA homepages.
maxConcurrencyinteger10Sites crawled in parallel.
requestTimeoutSecsinteger20Per-page fetch timeout.
proxyConfigurationobjectApify ProxyOutbound proxy.

Output (one row per site)

{
"website": "https://acme.com",
"domain": "acme.com",
"emails": ["jane@acme.com", "info@acme.com"],
"emailDetails": [
{ "email": "jane@acme.com", "type": "personal", "valid": true },
{ "email": "info@acme.com", "type": "role", "valid": true }
],
"phones": ["+15125550123"],
"linkedin": "https://linkedin.com/company/acme",
"facebook": null, "twitter": "https://x.com/acme", "instagram": null,
"youtube": "https://www.youtube.com/acme", "tiktok": null,
"telegram": null, "whatsapp": null, "github": null, "pinterest": null,
"hasEmail": true, "hasPhone": true,
"emailCount": 2, "phoneCount": 1,
"pagesScanned": 3, "jsFallbackUsed": false,
"status": "scraped", "error": null,
"scrapedAt": "2026-06-20T00:00:00.000Z"
}

status is one of scraped, no_contacts_found, unreachable, error — so a single bad site never breaks the run.

Notes on accuracy

Social detection is host-anchored (parses each link's host) rather than naive substring matching, so a URL like measure-ux.com is never mis-tagged as Twitter/X — a class of false positive that simple .includes("x.com") scrapers produce. The biggest entrenched incumbent in this category is very strong (15+ platforms, optional paid email verification); this actor is the cheaper, no-add-on option with solid 10-platform coverage, the JSON-blob fallback above, and per-email role/no-reply typing for clean segmentation.