Website Contact Details Extractor: Emails, Phones & Socials avatar

Website Contact Details Extractor: Emails, Phones & Socials

Pricing

$3.00 / 1,000 result scrapeds

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

Website Contact Details Extractor: Emails, Phones & Socials

Turn websites or domains into leads: emails, phones, LinkedIn, Facebook, Instagram, X, YouTube, TikTok, company name and address, one row per domain. Crawls contact/about/imprint pages, decodes hidden emails. Fast HTTP, no browser. Pay only for successful sites.

Pricing

$3.00 / 1,000 result scrapeds

Rating

0.0

(0)

Developer

Murch1k

Murch1k

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

5 hours ago

Last modified

Share

Website Contact Details Extractor — Emails, Phones & Social Profiles from Any Website

Paste a list of websites or domains and get back one clean lead row per company: emails, phone numbers, LinkedIn, Facebook, Instagram, X/Twitter, YouTube, TikTok, WhatsApp and more, plus company name, address and the contact page URL.

The actor visits the homepage, finds the pages where contacts actually live (Contact, About, Imprint/Impressum, Team, Support, Locations, in 10+ languages) and merges everything into a single deduplicated record. It runs on plain HTTP with no headless browser, so it is fast and cheap: hundreds of websites per minute.

Why this one

  • One row per domain. Every website is a single row with all of its emails, phones and socials, not one row per page.
  • Pay per website, not per page. Page-based contact scrapers usually crawl 5–10 pages per site, which works out to about $0.01–0.02 per website. Here you pay $0.003 per website, and websites that fail are free.
  • Finds hidden emails: decodes Cloudflare email protection ([email protected]) and obfuscated addresses like info [at] acme [dot] com, and reads schema.org / JSON-LD business data.
  • Clean data: filters junk such as logo@2x.png, noreply@sentry.io, placeholder emails, form-placeholder phone numbers, dates and registration numbers. Phones are normalised and deduplicated (+1 800… and 1-800… count as one). Share buttons are not reported as social profiles.
  • Ranks the results: primaryEmail prefers an on-domain role inbox (info@, hello@, sales@…), and emailSources tells you which page each email came from.

Use cases

  • Enrich Google Maps / Yelp / directory exports that have a website column but no email.
  • Build cold-outreach lists from a list of company domains (CRM, LinkedIn Sales Navigator, Crunchbase, trade-show exhibitor lists).
  • Find social profiles of competitors, suppliers or influencers' businesses.
  • Clean and verify contact data in your CRM on a schedule.

Input

{
"websites": ["apify.com", "https://www.joesstonecrab.com", "hubspot.com"],
"maxPagesPerSite": 6,
"sameDomainEmailsOnly": false,
"includeFailedSites": true,
"maxConcurrency": 40
}
OptionDefaultNotes
websites—Domains or URLs, one per line. Duplicate domains are processed once.
maxPagesPerSite6Homepage + up to 5 best contact-related pages. 1 = homepage only.
sameDomainEmailsOnlyfalseKeep only emails on the website's own domain.
includeFailedSitestrueAdd free status: "failed" rows with the reason (offline, 403, timeout…).
maxResults0Cost cap: stop after N successful websites.
maxConcurrency40Websites in parallel.
requestTimeoutSecs20Per page.
proxyConfigurationoffEnable Apify Proxy if many of your sites block cloud servers.

Output

{
"website": "https://www.joesstonecrab.com",
"domain": "joesstonecrab.com",
"url": "https://www.joesstonecrab.com/",
"status": "ok",
"companyName": "Joe's Stone Crab",
"title": "Joe's Stone Crab | Seafood Restaurant in Miami Beach, FL",
"description": "Joe's Stone Crab is a Miami Beach institution since 1913…",
"language": "en-US",
"address": null,
"primaryEmail": "info@joesstonecrab.com",
"primaryPhone": "3056734611",
"emails": ["info@joesstonecrab.com"],
"phones": ["3056734611", "3056730365", "3056739035"],
"emailSources": { "info@joesstonecrab.com": "https://www.joesstonecrab.com/location/joes-stone-crab/" },
"linkedin": null,
"facebook": "https://facebook.com/JoesStoneCrab",
"instagram": "https://instagram.com/joesstonecrab",
"twitter": null,
"youtube": null,
"tiktok": "https://tiktok.com/@joesstonecrab_",
"socials": {
"facebook": ["https://facebook.com/JoesStoneCrab", "https://facebook.com/people/Joes-Take-Away/61559644092931"],
"instagram": ["https://instagram.com/joesstonecrab", "https://instagram.com/joestakeaway__"],
"tiktok": ["https://tiktok.com/@joesstonecrab_"]
},
"contactPageUrl": "https://www.joesstonecrab.com/contact/",
"pagesScraped": 5,
"scrapedAt": "2026-10-13T16:27:20.297Z"
}

socials can also contain pinterest, github, telegram, whatsapp, threads, discord and yelp. The flat linkedin/facebook/… columns make CSV and Excel exports easy to use.

A website that could not be scraped:

{ "website": "old-shop.com", "domain": "old-shop.com", "status": "failed", "error": "HTTP 403 (blocked — try enabling a proxy)", "httpStatus": 403, "emails": [], "phones": [] }

Use with AI agents (MCP), LangChain, RAG & the API

This actor is a ready-made tool for AI agents: an LLM can call it, wait for the run and read clean JSON back.

MCP server (Claude Desktop, Claude Code, Cursor, VS Code, any MCP client) — add Apify's hosted MCP server with this actor enabled as a tool:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=murch1k/website-contact-details-extractor",
"headers": { "Authorization": "Bearer <APIFY_TOKEN>" }
}
}
}

LangChain / LangGraph (pip install langchain-apify, set APIFY_API_TOKEN):

import json
from langchain_apify import ApifyActorsTool, ApifyWrapper
from langchain_core.documents import Document
# 1) give the actor to an agent as a tool
tool = ApifyActorsTool("murch1k/website-contact-details-extractor")
# 2) or load results as Documents for a RAG index
loader = ApifyWrapper().call_actor(
actor_id="murch1k/website-contact-details-extractor",
run_input={"websites": ["apify.com", "https://www.joesstonecrab.com", "hubspot.com"], "maxPagesPerSite": 6, "sameDomainEmailsOnly": False, "includeFailedSites": True, "maxConcurrency": 40},
dataset_mapping_function=lambda item: Document(page_content=json.dumps(item, ensure_ascii=False), metadata={"url": item.get("url")}),
)
docs = loader.load()

REST API — one synchronous call, dataset items in the response:

curl -X POST "https://api.apify.com/v2/acts/murch1k~website-contact-details-extractor/run-sync-get-dataset-items?token=<APIFY_TOKEN>" \
-H "Content-Type: application/json" \
-d '{"websites": ["apify.com", "https://www.joesstonecrab.com", "hubspot.com"], "maxPagesPerSite": 6, "sameDomainEmailsOnly": false, "includeFailedSites": true, "maxConcurrency": 40}'

Also works with the Apify Python/JS clients, Make, Zapier, n8n, Google Sheets, webhooks and schedules. Export as JSON, CSV, Excel, XML or RSS.

RAG tip: An agent can enrich a lead list on the fly: send the domains, read primaryEmail, phones and socials from the rows and write them back to your CRM.

Pricing

$3.00 per 1,000 websites ($0.003 per website with status: "ok"). All pages crawled on a site are included. Failed websites are never charged.

ExampleCost
500 restaurant websites from a Google Maps export$1.50
10,000 company domains from a CRM$30.00

Set Max results to cap the cost of any run. The actor also stops by itself when your spending limit is reached.

Speed

Benchmark on the Apify platform: 300 real company websites (≈1,330 pages) in 77 seconds with the default 2 GB of memory, or about 230 websites per minute. Every website is a different server, so you can safely raise maxConcurrency (and memory) for big lists.

Tips

  • Phone numbers are returned in the format the site uses, cleaned to digits with an optional leading +. Numbers without a country code are local to the website's country.
  • Sites that need JavaScript for their menus are still covered: if no contact links are found in the HTML, the actor tries the usual /contact, /contact-us, /about and /impressum paths.
  • Blocked sites (403): a few websites block all cloud servers. Enable Apify Proxy and re-run only the failed rows. They don't cost anything.

FAQ

Do I pay per page or per website? Per website. All pages crawled on a site are included in one $0.003 result, and websites that fail cost nothing.

Can it find emails hidden behind Cloudflare email protection? Yes. [email protected] links and obfuscated addresses like info [at] acme [dot] com are decoded automatically.

Where do I get the list of websites? Any CSV export works: a CRM, a Google Maps scraper, a directory. Paste the domains or URLs into websites.

Is it an alternative to Hunter.io or Snov.io? For company contact pages, yes: it reads what the website itself publishes (contact, about, imprint pages) instead of guessing addresses.

The actor only collects information that the websites publish themselves. Personal data (e.g. named employee emails) is protected by laws such as GDPR and CAN-SPAM in many jurisdictions. Make sure you have a legitimate reason to process it and that your outreach complies with those laws.

Support

Missing a field, or a site that should work but doesn't? Open an issue on the Issues tab with the domain, and fixes usually ship within days.