Website Contact Scraper: Emails, Phones & Socials avatar

Website Contact Scraper: Emails, Phones & Socials

Pricing

from $0.60 / 1,000 domains

Go to Apify Store
Website Contact Scraper: Emails, Phones & Socials

Website Contact Scraper: Emails, Phones & Socials

Crawl any list of domains and extract business emails, phone numbers and social profile links (LinkedIn, X, Facebook, Instagram, YouTube) from homepages, contact & about pages. No API key. Use as an MCP server in Claude, ChatGPT & AI agents.

Pricing

from $0.60 / 1,000 domains

Rating

0.0

(0)

Developer

The Mine Works

The Mine Works

Maintained by Community

Actor stats

0

Bookmarked

5

Total users

3

Monthly active users

2 days ago

Last modified

Share

๐Ÿ“‡ Website Contact Scraper: Email, Phone & Socials

Overview

Website Contact Scraper takes any list of domains and extracts business emails, phone numbers, and social profile links (LinkedIn, X, Facebook, Instagram, YouTube) from the pages that actually publish them: homepage, contact page, about page, team page, and the footer. Feed it stripe.com and notion.so and get back clean JSON with every publicly listed contact detail deduplicated and normalised.

No API key, no signup, no per-seat licence. It's the fastest way to build a contactable list from a set of target domains without paying for a data subscription.

Reliability posture: a domain that fails to crawl or returns no contact info is never charged. You only pay for a domain that actually returned at least one email, phone, or social profile.

โœ… No login required | โœ… No API key | โœ… Pay per domain crawled | โœ… MCP-ready for AI agents

Features

Domain to contacts. Homepage plus standard contact pages tried automatically. Multi-channel extraction. Emails, phones, and socials pulled in a single pass. Deduplication. Each domain returns one record with unique emails, phones, and socials. Configurable depth. Cap pages per site to control cost and speed. Residential proxy. Handles sites with light bot protection out of the box.

How it works

For each domain you supply, the actor first tries the homepage and the standard contact surfaces (/contact, /about, /contact-us, /team) up to the page budget you set. It then follows relevant footer links to catch contact info that lives on nested pages. Every fetched page is parsed for email patterns (mailto: links plus regex-matched addresses), phone numbers (formatted and international), and social profile URLs on LinkedIn, X, Facebook, Instagram, and YouTube.

Results are merged and deduplicated per domain so you get one clean record per site: an array of emails, an array of phones, and a socials object keyed by platform. Requests run through Apify's residential proxy so most sites with light bot protection just work.

๐Ÿงพ Input configuration

{
"domains": ["stripe.com", "notion.so", "https://linear.app/about"],
"maxPagesPerSite": 5,
"proxyConfiguration": {
"useApifyProxy": true,
"apifyProxyGroups": ["RESIDENTIAL"]
}
}

๐Ÿ“ค Output format

{
"domain": "basecamp.com",
"emails": ["jason@basecamp.com"],
"phones": [],
"socials": {},
"pagesScanned": 4,
"scrapedAt": "2026-07-15T04:22:21.685Z"
}

This is a real record from a live crawl of basecamp.com. phones and socials come back empty here because neither was found on the pages crawled within the page budget, which is common: not every site publishes a phone number, and social links often live on pages outside the default crawl depth. When present, phones and socials are populated the same way as shown in the input example above.

Every domain record contains these fields:

FieldDescription
๐ŸŒ domainThe website domain that was crawled (e.g. stripe.com)
๐Ÿ“ง emailsDeduplicated list of email addresses found across the crawled pages
๐Ÿ“ž phonesDeduplicated list of phone numbers found across the crawled pages
๐Ÿ”— socialsSocial profile URLs keyed by platform (linkedin, twitter, facebook, instagram, youtube)
๐Ÿ“„ pagesScannedNumber of pages successfully fetched for this domain
๐Ÿ•’ scrapedAtISO timestamp when this domain was processed

๐Ÿ’ผ Common use cases

Cold outbound & prospecting Turn a target-account list into a contactable email and phone list in minutes. Enrich domains pulled from Google Maps, Trustpilot, or Zillow with real contact details.

Partnership & BD outreach Find the right press, partnerships, or BD email on hundreds of sites at once. Build a channel-partner shortlist from a directory scrape.

Recruiter sourcing Get the careers or people ops email off company sites for direct outreach. Enrich a company list with public social handles for research.

CRM enrichment Backfill missing contact info on domains you already own without a data subscription. Refresh contact records on a schedule without paying per lookup.

๐Ÿš€ Getting started

  1. Open the actor and paste the domains you want to enrich. Bare domains (stripe.com) or full URLs both work.
  2. Set max pages per site (default 5) to control depth and cost.
  3. Leave the residential proxy on unless you have a reason to change it.
  4. Click Start. Records stream to the dataset as each domain finishes.
  5. Download as JSON, CSV, or Excel, or pull the dataset via API or MCP.

FAQ

How does it find the right pages? It hits the homepage first, then the standard contact surfaces (/contact, /about, /contact-us, /team), then follows footer links up to your page budget. This catches the pages where contact info actually lives without burning budget crawling the whole site.

Does it verify the emails? No. This actor extracts every email publicly listed on the site. Pair it with the Email Verifier & Validator actor to MX and SMTP verify before you send.

How much does it cost? Pay per domain crawled, priced pay as you go. No subscription, no seat licence, no monthly minimum.

Can I use it in an AI agent? Yes. It's exposed as an MCP tool. See below.

Use in Claude, ChatGPT & any MCP agent

https://mcp.apify.com/?tools=themineworks/website-contact-finder

Or call it programmatically with the Apify client:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('themineworks/website-contact-finder').call({
domains: ['stripe.com', 'notion.so'],
maxPagesPerSite: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);

๐Ÿ› ๏ธ Complete your outbound pipeline

Extracted the contacts. Now find the people behind them and verify:

Typical flow: maps-leads finds the businesses, website-contact-finder pulls the site contacts, email-verifier-validator confirms deliverability.

Questions or need a custom field set? Reach out through the Apify profile.