Contact Details Extractor — Pay Only For Results
Pricing
$6.00 / 1,000 contact row with verified data
Contact Details Extractor — Pay Only For Results
Extract emails, phone numbers, and social profiles from any list of websites. Pay only for verified results: an MX-checked email, a valid phone, or live social profiles. Empty rows are always free. Polite crawling that auto-discovers contact and about pages.
Pricing
$6.00 / 1,000 contact row with verified data
Rating
0.0
(0)
Developer
Resultsmith
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
5 days ago
Last modified
Categories
Share
Give it a list of website URLs and get back clean, validated contact details: emails, phone numbers, and social profile links — one row per website.
The pricing is different from every other contact scraper: you are only billed for rows that contain at least one verified contact field. Empty rows are free. If we can't find anything verifiable on a site, that result costs you $0 — you never pay for dead URLs, parked domains, or sites that block crawlers.
What counts as a verified (billable) row
A row is billed only if it contains at least one of:
| Signal | Validation applied |
|---|---|
| Email address | Syntax check and live MX record on the domain (the domain can actually receive mail) |
| Phone number | Parses as a valid number for its region (Google's libphonenumber) |
| Social profiles | 2 or more distinct platforms (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok) |
Everything else is delivered free — including partial data that didn't pass validation, so you can still see what was found.
Output
One row per input URL:
{"url": "https://example.com","emails": [{ "value": "info@example.com", "source": "contact-page", "mxValid": true }],"phones": [{ "value": "+14155551234", "formatted": "(415) 555-1234", "valid": true }],"socials": {"linkedin": "https://linkedin.com/company/example","x": null, "facebook": "https://facebook.com/example","instagram": null, "youtube": null, "tiktok": null},"billable": true,"confidence": "high","pagesCrawled": 4,"crawlMode": "cheerio"}
The billable field tells you exactly which rows you paid for. confidence
is high when 2+ verified signal types are present, medium for 1,
low/none otherwise.
Input
| Field | Default | What it does |
|---|---|---|
startUrls | — | List of website URLs. One output row per URL. |
maxPagesPerDomain | 5 | How many pages to crawl per site (1–20). Contact, about, and legal pages are found and prioritized automatically. |
includeSocials | true | Also extract social profile links. |
phoneRegionHint | US | Two-letter country code used to validate phone numbers written without an international prefix. |
useBrowserFallback | true | If static crawling finds nothing, retry the site with a real headless browser (helps with JavaScript-heavy sites). |
How it works
- The homepage of each site is fetched and scanned.
- Links to contact, about, imprint/legal, and support pages are scored and crawled first — the page budget is never wasted on blog posts or product pages.
- Contact data is extracted from visible text,
mailto:/tel:links, and JSON-LD structured data that businesses publish about themselves. - Emails get an MX lookup, phones are validated per region, social links are normalized (share/intent links are filtered out).
- Crawling stops early once a site has yielded a full contact set, so runs stay fast and cheap.
Fair crawling & data ethics
- Only business-published contact information is collected — what companies put on their own contact pages, footers, and structured data. No third-party enrichment, no guessed email patterns, no personal-data lookups.
robots.txtis respected, requests are throttled to one at a time per domain, and the crawler identifies itself with a descriptive user agent.
Use with AI agents (MCP)
This Actor is built for autonomous use by AI agents via the Apify MCP server:
- Bounded, results-based spend — an agent can never burn budget on failed
lookups: rows without verified data cost $0, and the
Maximum cost per runoption hard-caps total spend per run. - Limited permissions — the Actor cannot access user data beyond its own run.
- Machine-readable output — the
billableandconfidencefields let an agent filter for verified contacts without re-validating anything.
Minimal input an agent needs:
{ "startUrls": [{ "url": "https://example.com" }] }
Frequently asked questions
How do I extract email addresses from a list of websites?
Paste your URLs into startUrls and run. The Actor crawls each site's
contact, about, and legal pages, extracts emails from text, mailto: links,
and JSON-LD, then MX-validates each address so you only pay for emails whose
domain can actually receive mail.
What does it cost to scrape contact details?
$6.00 per 1,000 verified contact rows — and only verified rows count. A row with no MX-valid email, no valid phone, and fewer than 2 social profiles is delivered free. There is no subscription and no per-URL or compute charge.
How is this different from other contact scrapers?
Most scrapers bill per URL processed or per compute-second, so dead domains and bot-walled sites cost as much as hits. Here, billing is gated on validation: if nothing on the row is verified, the row is free.
Can it find phone numbers and social media profiles too?
Yes — phones are validated with libphonenumber against your phoneRegionHint,
and social links are recognized across LinkedIn, X/Twitter, Facebook,
Instagram, YouTube, and TikTok (share/intent links are filtered out).
Good to know
- Sites that block datacenter traffic (some large retail chains) may return an empty row. You are not charged for those.
- Use the Maximum cost per run option in the run settings to hard-cap spending — the Actor stops charging the moment your limit is reached.
- Found a problem? Open an issue on this page — issues are checked daily.