Contact Details & Email Extractor — Pay Only For Results
Pricing
from $4.00 / 1,000 contact row with verified data
Contact Details & Email 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
from $4.00 / 1,000 contact row with verified data
Rating
0.0
(0)
Developer
Resultsmith
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
6 days ago
Last modified
Categories
Share
Contact Details Extractor — Pay Only For Results
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.
No surprise bills
A common complaint about contact scrapers is a bill that doesn't match the listed price: credit spent on runs that found nothing, every page billed whether or not it had contacts, duplicate rows or placeholder emails counted as results. This Actor is built so none of that can happen:
- One charge, per verified row. No start fee, no per-page or per-URL fee, no compute charge.
- Empty, blocked, and failed sites cost $0.
- Each site is one row. The same site entered twice
(
https://galpin.comandhttp://www.galpin.com/) is crawled and billed once. - Junk addresses are dropped. Placeholders like
you@example.comand error-tracking IDs like…@sentry-next.wixpress.comnever reach your results, and an email only makes a row billable if its domain has a working MX record. - You can set a ceiling. Give the run a maximum charge (in the run
options, or
maxTotalChargeUsdin the API). Once it's reached, further verified rows are withheld, never billed.
Worked example: 100 websites, 60 with verified contacts → 60 × $0.006 = $0.36. The other 40 cost $0.
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.
What you'll actually pay
Most contact scrapers charge for work done — pages crawled or rows returned — whether or not anything is found. This Actor charges only for verified results.
Example: 1,000 business websites, 5 pages crawled per site (this Actor's default):
| Pricing model | What you pay for | Cost for 1,000 websites |
|---|---|---|
| Per page crawled ($2 per 1,000 pages, a common rate on Free and Starter plans) | Every page fetched, whether or not it had contact info | $10.00 |
| This Actor ($6 per 1,000 verified rows) | Only rows with an MX-valid email, a valid phone, or 2+ social profiles | about $4.20 |
The $4.20 assumes 70% of sites yield verified data — what we measured on 20 real business websites on the Apify platform (14 of 20). Your rate depends on your list: dead, parked, and bot-walled domains cost $0 here, so a messy list costs you less, not more.
Some per-row scrapers charge less per row than we do. They also bill every row they return — including empty rows and emails nobody has validated.
On Apify's Scale and Business plans the price drops to $5 and $4 per 1,000 verified rows — about $3.50 and $2.80 per 1,000 websites at the same hit rate.
This compares what you pay, not how much each tool finds — we haven't measured other scrapers' hit rates. The fairest comparison is cost per verified contact on your own list: run the same sample through both. Rates above are examples of common pricing on Apify Store; check each Actor's current pricing before comparing.
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" }] }
Connect it to your agent in one step
Point any MCP client at this URL. It exposes only this Actor, and you sign in with your Apify account the first time it's used:
https://mcp.apify.com?tools=resultsmith/contact-details-extractor
Claude Code:
$claude mcp add --transport http contact-extractor "https://mcp.apify.com?tools=resultsmith/contact-details-extractor"
Claude Desktop, Cursor, or any stdio client:
{"mcpServers": {"contact-extractor": {"command": "npx","args": ["-y", "@apify/actors-mcp-server", "--tools", "resultsmith/contact-details-extractor"],"env": { "APIFY_TOKEN": "YOUR_APIFY_TOKEN" }}}}
The agent sees a tool named resultsmith--contact-details-extractor, plus
get-dataset-items to read the rows. Then ask it something like:
Find contact details for these websites: example-dealer.com, example-agency.com. Keep only rows where
billableis true and give me a table of website, best email, best phone, and LinkedIn. Then tell me how many rows were billed and what that cost at $6 per 1,000 verified rows.
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. For a typical list that works out to about $4.20 per 1,000 websites — see What you'll actually pay. On Apify's Scale and Business plans it's $5 and $4 per 1,000 verified rows.
How is this different from other contact scrapers?
Most scrapers bill per page crawled or per row returned, 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).
Feedback and usage stats
Rate a result (free). Run the Actor with feedbackRating (useful,
wrong, or missing), the feedbackRunId of the run you're rating, and an
optional feedbackNote. It crawls nothing and costs nothing. Built so AI
agents can report a bad result as easily as people can.
{ "feedbackRating": "wrong", "feedbackRunId": "<earlier run ID>", "feedbackNote": "Phone number is a fax line" }
Anonymous usage stats. Each run sends us counts only — number of sites,
verified rows, duration, and how the run was started (Console, API, or a
schedule) — plus a one-way hash of the input so we can tell when the same list
is run twice. Never the URLs, the contacts found, or who you are.
Set shareUsageStats to false to opt 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.