Contact Details Scraper: Emails, Phones & Socials
Pricing
$1.50 / 1,000 page scrapeds
Contact Details Scraper: Emails, Phones & Socials
Crawl company websites and get emails, phone numbers and 13 social profile links (LinkedIn, X, Instagram, Facebook, YouTube, TikTok and more) per site, deduplicated, with a mail-ready flag per email domain. Obeys robots.txt. $1.50 per 1,000 pages, failed pages free, MCP-ready.
Pricing
$1.50 / 1,000 page scrapeds
Rating
0.0
(0)
Developer
Nguyen Vu Trung Hieu
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Share
Contact Details Scraper: Emails, Phones and Social Links from Any Website
Give it company websites and it returns the emails, phone numbers and social profile links each site publishes, one clean row per site. You pay per use: $1.50 per 1,000 pages read. Pages that fail to load are free, and so is the mail-ready check.
It reads the start page, then the contact, about and other same-site pages it links to, up to the depth and page limits you set. Each email domain gets a mail-ready flag from public DNS (MX, SPF and DMARC), so you know which addresses can receive mail before you write.
Use it to build a lead list from company domains, to enrich a CRM with contact pages and socials, or to find the right inbox for a partnership email.
Use it from an AI agent (MCP)
The same finder is available as a hosted MCP server at https://contacts.openkrill.app/mcp (tool name find_contact_details, overview at tools.openkrill.app).
It reads up to 20 pages of one site per call, with no sign-up and no key.
On Apify you can also call this Actor from any MCP client through the Apify MCP server.
What you get
For every start URL (or every page, with mergeContacts off):
emails: frommailto:links and page text, lowercased and sorted. Emails written asname [at] site [dot] comand Cloudflare-protected emails are decoded.phones: fromtel:links. Numbers seen only in page text go tophonesUncertain. Dates, order numbers and years are left out.- Social profile links for 13 networks, each in one canonical
httpsform: LinkedIn, X (Twitter), Instagram, Facebook, YouTube, TikTok, Pinterest, Discord, Snapchat, Threads, Telegram, Reddit and WhatsApp. Share buttons, single posts and videos are left out. scrapedUrls: the pages read, in the order they were read.emailDomains(optional): for each email domain,mailReady,mx,spf,dmarcand a short note.- Error rows: a start URL that can't be read gives one row with
error(for examplehttp 503orrobots.txt disallows), so one broken site never fails the run.
Linktree pages are followed to the sites they list, and robots.txt is obeyed for the user agent OpenKrillContactBot.
Input
| Field | Description |
|---|---|
startUrls | Websites to crawl, such as company home pages. A bare domain means https. |
maxRequestsPerStartUrl | Pages to read at most per start URL, the start page included. Default 20. |
maxDepth | How many links away from the start page to go. 0 reads only the start page. Default 2. |
maxRequests | Cap on pages read over the whole run. Use it to cap cost. Default 1000. |
sameDomain | Follow only links on the same site (www. does not matter). Default on. |
mergeContacts | One merged row per start URL (default), or one row per page with its depth and referrer. |
checkMailDomains | Add the mail-ready flag per email domain. Default on. |
{"startUrls": [{ "url": "https://www.python.org/" }, { "url": "https://www.mozilla.org/" }],"maxRequestsPerStartUrl": 10,"maxDepth": 1}
Example output
{ "originalStartUrl": "https://shop.example/", "domain": "shop.example","scrapedUrls": ["https://shop.example/", "https://shop.example/contact"],"emails": ["sales@shop.example", "support@shop.example"], "phones": ["+14155550134"], "phonesUncertain": ["02079460958"],"linkedIns": ["https://linkedin.com/company/shop-example"], "twitters": ["https://x.com/shopexample"],"instagrams": [], "facebooks": [], "youtubes": [], "tiktoks": [], "pinterests": [], "discords": [],"snapchats": [], "threads": [], "telegrams": [], "reddits": [], "whatsapps": ["https://wa.me/14155550134"],"emailDomains": [{ "domain": "shop.example", "mailReady": true, "mx": true, "spf": true, "dmarc": true,"note": "Accepts mail; publishes SPF and DMARC." }] }
Pricing
You pay per event: $1.50 per 1,000 pages ($0.0015 per page-scraped event, one event per page read).
Pages that fail to load, robots.txt files and the mail-ready check are free.
Your spending limit caps the crawl itself, so a run never reads more pages than the limit can pay for.
FAQ
Does it run JavaScript? No. It reads the HTML a site serves. Contacts drawn only by JavaScript are not seen, which keeps runs fast and cheap.
Does it find a person's private email? No. It reads only what a website publishes on its own pages. It doesn't guess addresses or look people up by name.
Why is a phone number in phonesUncertain?
It was seen in page text, not in a tel: link. Check it before you call.
What does mailReady false mean? The domain has no MX record (or a null MX), so mail to it is likely to bounce.
Limits
- Static HTML only, no JavaScript and no logins.
- Same-site links only by default. Other sites are not followed, except from Linktree pages.
- robots.txt is obeyed. A site that disallows the bot gives an error row and costs nothing.
- A page is read up to 2 MB and 20 seconds.
Credits
Written from scratch from the public description of what a contact details scraper does. No code from any other scraper was read or used.