Contact Details Scraper | Emails, Phones & Socials From Sites
Pricing
from $1.68 / 1,000 website results
Contact Details Scraper | Emails, Phones & Socials From Sites
Extract emails, phone numbers and 13 social networks from any website list at a flat $2.40/1,000 sites. MX-verified emails, Cloudflare-obfuscation decoding, JSON-LD company data, smart contact-page crawling. Failed sites are never charged.
Pricing
from $1.68 / 1,000 website results
Rating
0.0
(0)
Developer
Mr Zack
Maintained by CommunityActor stats
0
Bookmarked
3
Total users
0
Monthly active users
3 days ago
Last modified
Categories
Share
Contact Details Scraper — Email, Phone, Socials + MX Check
Turn any list of websites into a clean, verified contact database. Paste domains, get back emails (MX-checked so they don't bounce), phone numbers, 13 social networks, and structured company data — at a flat $2.40 per 1,000 websites, everything included.
Why this one?
Most contact scrapers charge per page, per contact, or per social profile — you can't predict your bill, and they hand you raw strings that bounce in your outreach tool. This Actor is different:
- Flat, predictable pricing — one price per website, no matter how many pages we crawl or contacts we find. $2.40/1,000 websites vs. $3–$10.50/1,000 effective at the popular alternatives.
- Failed websites are never charged. Site down, DNS dead, non-HTML? You pay $0 for it. It's listed in the run
SUMMARYso you know exactly what happened. - MX-verified emails, built in. Every found email's domain is checked for valid MX records (DNS-over-HTTPS). Dead domains are flagged before they wreck your sender reputation. Competitors charge extra for this or skip it entirely.
- Finds emails others miss:
mailto:links, plain text, Cloudflare-protected emails (data-cfemail— decoded, not the useless[email protected]placeholder), obfuscated patterns likename [at] company [dot] com, and JSON-LD structured data. - Smart crawling, not blind crawling. We fetch the homepage, then spend your page budget on the pages that actually contain contacts:
/contact,/impressum,/about,/team,/support— scored and prioritized, in 5 languages of URL patterns. - A
bestEmailyou can use immediately. Ranked by quality: MX-valid corporate personal inbox →info@→ free provider; disposable addresses are demoted. Plus a 0–100confidencescore per site.
Who uses this
- Sales & lead-gen teams enriching lead lists (from Google Maps scrapers, directories, CSV exports) with emails that actually deliver.
- Agencies building outreach lists for clients — flat pricing means you can quote your client a fixed cost.
- Recruiters finding company contact channels at scale.
- Data teams appending contact + social columns to any company dataset.
Input
| Field | Type | Default | Description |
|---|---|---|---|
websites | array | — | Domains (acme.com) or URLs (https://acme.com), one per line |
maxPagesPerWebsite | integer | 8 | Crawl budget per site (1–25). More pages never costs more. |
verifyMx | boolean | true | MX-check every email domain via DNS-over-HTTPS |
deobfuscateEmails | boolean | true | Decode Cloudflare-protected + [at]/[dot] emails |
includeSocials | boolean | true | Extract 13 social networks |
sameDomainOnly | boolean | true | Stay on the exact input domain (off = allow subdomains) |
maxConcurrency | integer | 10 | Websites processed in parallel |
navigationTimeoutSecs | integer | 20 | Per-request timeout |
Output (one row per website)
| Field | Description |
|---|---|
bestEmail | Highest-quality email — MX-valid corporate personal inbox ranks first |
emails[] | All emails with extraction method (mailto / text / cloudflare-decoded / deobfuscated / jsonld), mxStatus (valid / none / unknown), isRole, isFree, isDisposable, and source pages |
primaryPhone | Best phone — tel: links and JSON-LD outrank text matches |
phones[] | All phones with source + confidence |
socials | LinkedIn, Facebook, Instagram, X, YouTube, TikTok, GitHub, Pinterest, Threads, Telegram, WhatsApp, Discord, Medium — profile links only, share/intent links filtered out |
organization | Company name, type and address from JSON-LD structured data |
contactPageFound | Whether a dedicated contact/impressum page was located |
confidence | 0–100 contactability score |
pagesCrawled, crawledUrls | Exactly what was fetched — full transparency |
A SUMMARY record in the key-value store gives you run-level stats: email hit rate, MX-valid %, and the list of failed (uncharged) websites.
How to schedule this Actor
Contact data decays — people change jobs, domains die, companies rebrand. Re-verify your list on a schedule:
- Open the Actor → Schedules tab → Create new schedule.
- Pick a cadence — weekly or monthly works well for re-verifying an outreach list.
- Set your
websitesinput (or point your workflow at a dataset from a previous run). - Add a webhook or connect the run to Zapier/Make/n8n to push fresh contacts into your CRM automatically.
Because pricing is flat per website and dead sites are free, re-running a 1,000-domain list costs a predictable $2.41 — no surprises.
Pricing
| Event | Price |
|---|---|
| Actor start | $0.01 |
| Website result (all contacts + MX verification included) | $0.0024 |
Example: 1,000 websites = $2.41 total. If 50 of them are unreachable, you pay for 950.
FAQ
Does it work on any website? Any publicly accessible HTML website. It's HTTP-based (no browser), so heavily JavaScript-rendered SPAs may yield fewer contacts — but footers, contact pages and JSON-LD are almost always in the HTML.
Is MX verification the same as SMTP verification? MX checking confirms the domain can receive mail (kills hard-bounce domains). It does not probe individual mailboxes, which keeps it fast, cheap and included in the flat price.
Where do the emails come from? Only from the target website's own public pages. No third-party databases, no guessing patterns.
GDPR note: you're extracting publicly published business contact data; make sure your outreach complies with the laws of your jurisdiction.
Example output (one real row, 6 Sep 2026)
{"website": "https://apify.com/","url": "https://apify.com/","domain": "apify.com","websiteTitle": "Apify","bestEmail": "john.wick@thecontinental.com","emails": [{"email": "support@apify.com","method": "text","sources": ["https://apify.com/","https://apify.com/contact","https://apify.com/contact-sales","..."],"mxStatus": "valid","isRole": true,"isFree": false,"isDisposable": false},{"email": "hello@apify.com","method": "mailto","sources": ["https://apify.com/contact"],"mxStatus": "valid","isRole": true,"isFree": false,"isDisposable": false},{"email": "hello@apify.comproductapify","method": "text","sources": ["https://apify.com/contact"],"mxStatus": "none","isRole": true,"isFree": false,"isDisposable": false},"..."],"emailCount": 4,"hasEmail": true,"primaryPhone": "02993192861196","phones": [{"phone": "02993192861196","source": "text","confidence": "low"}],"phoneCount": 1,"socials": {"discord": "https://discord.com/invite/jyEM2PRvMU","linkedin": "https://linkedin.com/company/apify","x": "https://x.com/apify","github": "https://github.com/apify","tiktok": "https://tiktok.com/@apifytech"},"socialCount": 5,"organization": {"name": "Apify","type": "Organization","address": "Na Příkopě 959/27, Prague, 11000, CZ"},"contactPageFound": true,"pagesCrawled": 6,"crawledUrls": ["https://apify.com/","https://apify.com/contact","https://apify.com/contact-sales","..."],"confidence": 84,"scrapedAt": "2026-09-06T03:45:57.513Z"}
Changelog
- 0.1.2 (16 Sep 2026) — A run with no input no longer fails: the example input is the default, so "Run" with an empty form (or
{}via API) returns the demo dataset. Output unchanged. - 0.1.1 (16 Sep 2026) — Reliability: V8 heap capped at 70 % of run memory so garbage is collected before the container limit (prevents out-of-memory kills on big pages). No output change.
- 12 Sep 2026 — No more silent out-of-memory failures on large sites: one DOM per page, pages capped at 500 KB, concurrency scaled to run memory (default memory now 1 GB). Previously a run could die after 2–3 big sites with a bare exit code and no rows for the rest.
- 12 Sep 2026 — Cleaner values: JSON-escape fragments no longer leak into emails (
u003esupport@…duplicates are gone),support@acme.com.Tosentence-boundary captures are trimmed, text-regex phones must look like real phone formats (prices, IDs and repeated blocks such as11001100are rejected), anddomainis the site you asked for rather than a redirect host (gymshark.com, notus.checkout.gymshark.com). No price change, no field removed. - 0.0.7 (10 Sep 2026) — Soft run deadline (stops starting new sites when <45 s remain, SUMMARY always written) and
bestEmailnow prefers on-domain addresses. - 0.0.1 (25 Aug 2026) — Launch.
Found this useful? A review helps more than you'd think
If this Actor saved you time, a short review on the Reviews tab of this Store page takes 30 seconds and is the only signal other buyers have before they spend anything. If something is broken instead, open a ticket on the Issues tab — parser bugs and field requests get fixed.
Related Actors from the same account