Website Contact Scraper — Emails, Phones & Social Media avatar

Website Contact Scraper — Emails, Phones & Social Media

Pricing

from $4.00 / 1,000 email founds

Go to Apify Store
Website Contact Scraper — Emails, Phones & Social Media

Website Contact Scraper — Emails, Phones & Social Media

Email extractor and B2B lead scraper. Crawls any website and extracts emails, phone numbers, and 14 social media profiles (LinkedIn, Twitter/X, Instagram, Facebook, WhatsApp, Telegram, Discord, TikTok, YouTube, Pinterest, Snapchat, Reddit, Threads, GitHub). Pay per email found — no wasted spend.

Pricing

from $4.00 / 1,000 email founds

Rating

0.0

(0)

Developer

extractmaster01

extractmaster01

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

16 hours ago

Last modified

Share

Website Contact Scraper — Extract Emails, Phone Numbers & Social Media Profiles

Website Contact Scraper crawls any website and extracts emails, phone numbers, and social media profiles. Give it a list of URLs and get back a dataset with every email found, phones, and 14 social platforms per domain. No subscriptions.

TRY IT FOR FREE


What data can Website Contact Scraper extract?

Data typeDetails
📧 Email addressesDeduplicated per domain, quality-filtered, Cloudflare obfuscation decoded, optional MX validation
📞 Phone numbersUS formats (555) 555-5555, international +44 20 7946 0958, +55 11 99999-0000
💼 LinkedInCompany and personal profiles
🐦 Twitter / XBrand and personal handles
📸 InstagramBusiness and creator profiles
📘 FacebookPages and business profiles
▶️ YouTubeBrand channels
🎵 TikTokBrand and creator profiles
💻 GitHubOrganization profiles, user profiles, and repositories
💬 WhatsAppBusiness numbers, direct links, and WhatsApp Channels
✈️ TelegramChannels, groups, and user profiles
🎮 DiscordServer invite links
📌 PinterestBrand profiles
👻 SnapchatPublic profiles
🧵 ThreadsPublic profiles
👥 RedditSubreddits and user pages

Why use Website Contact Scraper?

Most contact scrapers only return emails or lock you into a monthly subscription. This one returns the full contact profile for every domain you scrape, and you only pay for what the Actor actually does.

FeatureThis ActorEmail-only scrapers$10–$20/mo scrapers
Email addresses
Phone numbers
14 social platforms
Email domain validationPaid add-on
Contact page auto-discovery
Pay per event (no subscription)Some
Per-domain grouped output
Cloudflare email decode

How to scrape contact information from any website

  1. Create a free Apify account using your email.
  2. Open Website Contact Scraper and go to the Input tab.
  3. Add your URLs — one domain per entry. Duplicates are handled automatically.
  4. Pick an output modeper-email for CRM import or per-domain to get everything grouped by site.
  5. Click Start — the Actor automatically discovers contact pages and crawls up to the configured depth.
  6. Download your data as JSON, CSV, Excel, XML, or HTML, or connect via API.
{
"urls": [
{ "url": "https://company1.com" },
{ "url": "https://company2.com" },
{ "url": "https://company3.com" }
],
"contactPagesOnly": true,
"outputMode": "per-domain"
}

How much does it cost to scrape emails from websites?

Website Contact Scraper uses the pay-per-event (PPE) pricing model — no subscription, no monthly fee. You pay only for what the Actor actually does. Check the Pricing tab for the full event list.

There are two billable events:

EventPriceWhen it fires
domain-processed$0.01Once per domain, when the first page loads successfully. Domains where every page is blocked (status: "blocked") are not charged.
email-found$0.004Once per unique email found. Domains with no emails found are not charged this event.

Estimated cost by batch size (assuming ~2 emails per domain on average):

DomainsEmails foundEstimated cost
10~20~$0.18
50~100~$0.90
100~200~$1.80
500~1,000~$9.00
1,000~2,000~$18.00

Note: domain-processed does not fire for domains where every page is blocked (status: "blocked") or where the site is a JavaScript-only SPA (status: "js-only") — you are not charged for sites that cannot be scraped. Domains that require residential proxies may incur additional platform proxy usage costs.

To control costs, use maxEmailsPerDomain to cap emails per site and maxPagesPerDomain to limit the number of pages crawled per domain.


⚙️ Input parameters

ParameterTypeDefaultDescription
urlsarrayrequiredWebsite URLs to crawl
urls[*].userData.maxNbEmailsToScrapeinteger0Per-URL email cap (0 = unlimited)
outputModestringper-emailper-email: one row per email · per-domain: all contacts grouped
maxEmailsPerDomaininteger0Global email cap per domain (cost control)
maxPagesPerDomaininteger0Max pages to crawl per domain (cost control)
crawlDepthinteger2How deep to follow links (1–5)
contactPagesOnlybooleantrueOnly visit contact-related pages (faster, cheaper)
extractPhonesbooleantrueExtract phone numbers
extractSocialsbooleantrueExtract 14 social profiles
validateEmailsbooleanfalseDNS MX check — filters dead domains
proxyConfigurationobjectApify ProxyPass null for direct mode (no proxy)

For the full input reference, see the Input tab.


📊 Output examples

outputMode: "per-email" — one row per email (CRM-ready)

Best for importing directly into HubSpot, Salesforce, Apollo, or any sequencer. Phones and socials are included in every row.

{
"seedUrl": "https://acme.com",
"domain": "acme.com",
"pageUrl": "https://acme.com/contact",
"email": "sales@acme.com",
"phones": ["+1-555-0123"],
"phonesUncertain": [],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"twitter": "https://x.com/acmecorp",
"instagram": null,
"facebook": "https://facebook.com/acmecorp",
"youtube": null,
"tiktok": null,
"github": null,
"whatsapp": "https://wa.me/15550123",
"telegram": null,
"discord": null,
"pinterest": null,
"snapchat": null,
"reddit": null,
"threads": null
},
"scrapedAt": "2026-06-04T10:00:00.000Z"
}

outputMode: "per-domain" — all contacts grouped

One row per domain with all emails, phones, and socials found across every page visited.

{
"seedUrl": "https://acme.com",
"domain": "acme.com",
"emails": ["sales@acme.com", "info@acme.com", "support@acme.com"],
"phones": ["+1-555-0123", "+1-555-9876"],
"phonesUncertain": ["(800) 555-9876"],
"socials": {
"linkedin": "https://linkedin.com/company/acme",
"twitter": "https://x.com/acmecorp",
"instagram": null,
"facebook": "https://facebook.com/acmecorp",
"youtube": null,
"tiktok": null,
"github": null,
"whatsapp": "https://wa.me/15550123",
"telegram": null,
"discord": null,
"pinterest": null,
"snapchat": null,
"reddit": null,
"threads": null
},
"pagesScanned": 3,
"status": "success",
"scrapedAt": "2026-06-04T10:00:00.000Z"
}

The status field tells you what happened per domain:

ValueMeaning
successContacts found, no pages were blocked
partialContacts found, but some pages were blocked by bot protection
emptyCrawled OK but no contacts found (contact form only, or genuinely no public email)
blockedAll pages were blocked — no data collected
js-onlySite renders content via JavaScript (SPA/React/Vue) — no static HTML contact data found

You can download the dataset as JSON, CSV, Excel, XML, or HTML from the dataset view.


💡 Use cases for website contact scraping

B2B sales prospecting — Turn a list of target domains into a contact file ready to import, with email, phone, and LinkedIn in every row.

Agency lead generation — Find contacts at target companies by category and city, at scale.

CRM enrichment — Fill missing email and phone fields for existing accounts in bulk.

Recruiting — Collect contact info from company career and team pages.

Partnership outreach — Extract contacts from potential partners, resellers, or integration targets.

Competitor research — Map the social media presence and contact points of competitors.


🔗 Integrations

You can integrate Website Contact Scraper with almost any cloud service or web app. The Apify platform has built-in integrations, a full REST API, scheduling, and webhook support.

  • Make / Zapier — trigger workflows when new contacts are found
  • Google Sheets — direct dataset export
  • HubSpot / Salesforce / Apollo — import CSV or use the API
  • Webhooks — get notified when a run completes
  • Apify APIapify-client for Node.js and Python
  • MCP Server — use this Actor directly inside Claude or any MCP-compatible client

❓ Frequently asked questions

Does Website Contact Scraper work on all websites?

It works on most contact, about, and team pages since these are almost always static HTML. For sites that require JavaScript to render content, the Actor detects this and marks the domain as status: "js-only" in the output.

Why didn't it find emails on a specific site?

Check the status and debugInfo fields in per-domain mode. Common causes are emails only visible after a form submission, or the domain blocking datacenter IPs. The pagesScanned field shows which pages were visited.

How do I extract emails from multiple websites at once?

Add all your URLs to the urls array. Each domain is processed independently and results are deduplicated automatically.

Can I use Website Contact Scraper with the Apify API?

Yes. The Apify API lets you run the Actor, retrieve datasets, schedule runs, and set up webhooks. Use the apify-client package for Node.js or Python. See the API tab for the full reference.

Scraping publicly available contact information is generally legal, but you should check compliance with GDPR, CAN-SPAM, and the terms of service of each website before using the data for outreach.

What does email validation do?

When validateEmails: true, each email domain is checked for a valid mail server via DNS. Domains without one are discarded, which filters out dead domains and placeholder addresses.


Your feedback

If you found a bug or have a feature request, please create an issue in the Issues tab.


You might also like

Apify Store Scraper — scrapes all 26,000+ Actors on the Apify Store. Useful for market research and competitor tracking.