Contact Details & Email Extractor — Pay Only For Results avatar

Contact Details & Email Extractor — Pay Only For Results

Pricing

from $4.00 / 1,000 contact row with verified data

Go to Apify Store
Contact Details & Email Extractor — Pay Only For Results

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

Resultsmith

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

6 days ago

Last modified

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.com and http://www.galpin.com/) is crawled and billed once.
  • Junk addresses are dropped. Placeholders like you@example.com and error-tracking IDs like …@sentry-next.wixpress.com never 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 maxTotalChargeUsd in 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:

SignalValidation applied
Email addressSyntax check and live MX record on the domain (the domain can actually receive mail)
Phone numberParses as a valid number for its region (Google's libphonenumber)
Social profiles2 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 modelWhat you pay forCost 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 profilesabout $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

FieldDefaultWhat it does
startUrls—List of website URLs. One output row per URL.
maxPagesPerDomain5How many pages to crawl per site (1–20). Contact, about, and legal pages are found and prioritized automatically.
includeSocialstrueAlso extract social profile links.
phoneRegionHintUSTwo-letter country code used to validate phone numbers written without an international prefix.
useBrowserFallbacktrueIf static crawling finds nothing, retry the site with a real headless browser (helps with JavaScript-heavy sites).

How it works

  1. The homepage of each site is fetched and scanned.
  2. 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.
  3. Contact data is extracted from visible text, mailto:/tel: links, and JSON-LD structured data that businesses publish about themselves.
  4. Emails get an MX lookup, phones are validated per region, social links are normalized (share/intent links are filtered out).
  5. 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.txt is 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 run option hard-caps total spend per run.
  • Limited permissions — the Actor cannot access user data beyond its own run.
  • Machine-readable output — the billable and confidence fields 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 billable is 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.