Contact Details Scraper: Emails, Phones, Socials
Pricing
from $30.00 / 1,000 site with contacts
Contact Details Scraper: Emails, Phones, Socials
Contact details scraper for any website: emails (incl. Cloudflare-protected), phone numbers in E.164 and social media links, one row per site. A website email extractor with no proxies or login.
Pricing
from $30.00 / 1,000 site with contacts
Rating
0.0
(0)
Developer
TechyMaki Labs
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
20 hours ago
Last modified
Categories
Share
Give it a list of website URLs. It crawls each site's contact-style pages and returns one item per site with emails, phone numbers (normalised to E.164) and social profile links.
Use it as a website email scraper, email extractor, contact info scraper, phone number scraper or social media links scraper for lead lists, CRM enrichment or supplier research. You pay $0.03 only for sites where a contact was found, plus $0.001 per page.
What it does
- Follows only links on the same registrable domain whose URL or link text matches
contact|about|impressum|kontakt|team|legal|privacy|support|company, plus the start page. Pages per site are capped. - Emails: from
mailto:links and page text; decodes Cloudflare email protection (data-cfemailand/cdn-cgi/l/email-protection#...); decodesname [at] domain [dot] comstyle obfuscation; lowercases, de-duplicates, drops false positives (logo@2x.png, Sentry-style tracking ids,example.com,name@company.complaceholders). - Phones: from
tel:links, validated and normalised to E.164 with libphonenumber. Numbers without an international prefix usedefaultCountry. Optionally parses phone-like text too (includePhonesUncertain). - Socials: LinkedIn, Facebook, Instagram, X/Twitter, YouTube, TikTok, Pinterest, Discord.
sourcePagestells you the first page where each email or phone was seen.
Built on Crawlee CheerioCrawler (plain HTTP, no browser), concurrency 10. No proxies, captcha solving or stealth tricks: pages that block plain requests are not scraped.
Input
| Field | Type | Default | Meaning |
|---|---|---|---|
startUrls | array | required | Website URLs, one result per site |
maxPagesPerSite | integer | 10 | Page cap per site, including the start page |
maxDepth | integer | 2 | Link depth from the start page (0 = start page only) |
defaultCountry | string | US | ISO-2 code for parsing local phone numbers |
includePhonesUncertain | boolean | false | Also parse phone-like numbers in plain text (more hits, more false positives) |
{ "startUrls": [{ "url": "https://www.nzpost.co.nz/" }], "maxPagesPerSite": 8, "maxDepth": 2 }
Output
Real item from a local run (see samples/sample-output.json for all nine sites):
{"domain": "nzpost.co.nz","startUrl": "https://www.nzpost.co.nz/","emails": ["oversize@nzpost.co.nz", "youshop@nzpost.co.nz", "yspickup@nzpost.co.nz", "cyber.security@nzpost.co.nz"],"phones": ["+6439831425", "+6448975675", "+6469528600", "+6479600468", "+6499770102"],"phonesRaw": ["+6439831425", "+6448975675", "+6469528600", "+6479600468", "+6499770102"],"socials": {"linkedin": ["https://linkedin.com/company/nzpost"],"facebook": ["https://facebook.com/newzealandpost"],"instagram": ["https://instagram.com/newzealandpost"],"twitter": ["https://x.com/nzpost"],"youtube": [], "tiktok": [], "pinterest": [], "discord": []},"pagesScraped": 8,"sourcePages": {"+6439831425": "https://www.nzpost.co.nz/contact-support","cyber.security@nzpost.co.nz": "https://www.nzpost.co.nz/contact-support/scams-and-fraud"},"scrapedAt": "2026-10-26T12:57:33.189Z"}
(sourcePages shortened here.) Social links are canonical profile URLs: https, no www, no tracking query, twitter.com → x.com, and share/embed/post links removed. A site that cannot be loaded returns an error field and is not charged contact-site.
You are responsible for using extracted contact data lawfully (e.g. GDPR/CAN-SPAM). The actor only reads publicly published pages.
Pricing (pay per event)
| Event | Price | Charged |
|---|---|---|
page-scraped | $0.001 | per page fetched and parsed |
contact-site | $0.03 | per site where at least one email or phone was found |
apify-actor-start | $0.00005 | once per run (Apify's standard start event) |
Platform compute is included: you pay only the events above. Sites that fail to load are not charged contact-site. The actor stops gracefully when your max-charge limit is reached.
Measured locally
9 public sites, maxPagesPerSite 8, maxDepth 2: 69 pages, about 19 s crawl (about 29 s including start-up), all 9 sites returned at least one email or phone. On the Apify platform: 3 sites in 19.7 s at 1 GB memory.
Limitations
- Static HTML only. Contacts rendered by JavaScript, or behind forms, images or logins, are not found.
- Sites that return 403 or captchas to plain HTTP requests are not bypassed.
- Phones come from
tel:links by default. Numbers shown only as text needincludePhonesUncertain, and can include false positives (for example, fragments of longer numbers). - Same-domain detection uses the public suffix list: for hosts that are themselves public suffixes (for example
nhs.uk), the exact hostname is used, sowwwand non-wwwvariants count as different sites. Use the hostname that the site actually serves. - Test coverage: decoder, filters, phone and social extraction are tested against real captured pages (including a real Cloudflare-protected page from wpbeginner.com).
[at]/[dot]de-obfuscation is tested only on synthetic text because no real page using it was found. - Email addresses and phone numbers are personal data in some contexts. Make sure your use complies with applicable law and each site's terms.