Verified Website Contact Finder avatar

Verified Website Contact Finder

Pricing

from $10.00 / 1,000 site enricheds

Go to Apify Store
Verified Website Contact Finder

Verified Website Contact Finder

Turn company websites into outreach-ready emails, phones, and social profiles, each with the page it came from and an honest deliverability score.

Pricing

from $10.00 / 1,000 site enricheds

Rating

0.0

(0)

Developer

Hussein Al-Mansori

Hussein Al-Mansori

Maintained by Community

Actor stats

0

Bookmarked

2

Total users

1

Monthly active users

12 days ago

Last modified

Share

Give it a list of company websites. Get back emails, phone numbers, and social profiles — each one carrying the exact page it came from and an honest score for whether the address can actually receive mail.

Built for the step after a Google Maps export or a CRM dump: you already have the websites, you need the contacts.

What you get

One result per website, whether or not anything was found. Never a silent failure.

{
"website": "https://example-company.com/",
"status": "verified",
"companyName": "Example Company Ltd",
"companyAddress": "1 High Street, London, EC1A 1BB, GB",
"emails": [
{
"address": "hello@example-company.com",
"kind": "role",
"sourceUrl": "https://example-company.com/contact",
"foundIn": "mailto",
"context": "Prefer email? Write to hello@example-company.com and we reply within a day.",
"verification": {
"syntaxValid": true,
"domainHasMx": true,
"smtp": "skipped",
"confidence": 60,
"limitation": "The domain can receive mail, but the individual mailbox was not checked."
}
}
],
"phones": [
{"e164": "+441234567890", "raw": "01234 567890", "region": "GB",
"sourceUrl": "https://example-company.com/contact", "foundIn": "telLink"}
],
"socials": [
{"platform": "linkedin", "url": "https://www.linkedin.com/company/example",
"sourceUrl": "https://example-company.com/"}
],
"pagesCrawled": 8,
"pagesNotRead": 3,
"robotsRespected": true,
"warnings": []
}

Why this one

Every contact shows its evidence. You get the page it came from, how it was found (mailto link, page text, JSON-LD, microdata, obfuscated text, or Cloudflare-protected), and the surrounding words. Any contact can be re-checked by hand in one click.

The confidence score is honest. Gmail, Microsoft 365, and Yahoo refuse mailbox checks from data centres. Tools that report those addresses as "verified" are guessing. This Actor caps the score, writes a plain limitation saying exactly what could not be established, and marks the result warning rather than pretending. Here, verified means the source is proven and a deliverability signal was obtained — never this mailbox is guaranteed to accept mail.

Role and personal addresses are labelled. info@ and sales@ come back as role; firstname.lastname@ as personal, so you can apply your own policy to each.

Fast by default, thorough when it matters. Pages are read with a plain request; only a page that hides its contacts behind JavaScript is escalated to a real browser. You are not paying browser prices for sites that never needed one.

Non-English sites work. Phone numbers come back in international + format whatever the local convention, and company details are read from structured data in any language.

Quick start

  1. Paste your website URLs into Website URLs.
  2. Leave everything else alone and click Start.
  3. Take the results from the dataset, or open the Contacts view for a flat table.

Common uses

  • Turn a Google Maps or directory export into an outreach list.
  • Fill missing contact fields on CRM records you already own.
  • Find the right inbox for accounts payable, press, or support at a supplier.
  • Enrich inbound signups with company name, address, and social profiles.
  • Give an AI agent a contact record whose source it can cite.

Input options

OptionDefaultWhat it does
websitesCompany websites to scan, up to 50 per run
maxPagesPerSite12Pages read per website (1–40)
collectPhonestrueReturn phone numbers in international format
collectSocialstrueLinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads
verifyEmailstrueCheck each address and score it
smtpProbefalseAlso open a mail-server handshake (see FAQ)
respectRobotstrueSkip pages the site asks crawlers not to read
browserFallbacktrueUse a browser on pages that need one
proxyConfigurationApify ProxyMany sites refuse data-centre addresses; leave this on

Reading the result

status is:

  • verified — the crawl completed cleanly and everything reported was established.
  • warning — something was uncertain. The reason is always in warnings.
  • failed — the site could not be read at all. Never charged.

Reaching your page budget is not a warning. It is normal, and pagesNotRead tells you how many more pages were found, so you can raise the budget if you want them.

Using it from code

curl -X POST "https://api.apify.com/v2/acts/al_mansouri~verified-website-contact-finder/run-sync-get-dataset-items?token=YOUR_TOKEN" \
-H 'Content-Type: application/json' \
-d '{"websites": ["https://example-company.com"], "maxPagesPerSite": 12}'

The Actor publishes a full input and dataset schema, so an AI agent can also discover and run it through Apify's MCP server without extra glue.

Pricing

Provisional, and not yet frozen — final prices are set from a measured benchmark.

EventWhen it appliesPrice
site-enrichedAn email address or phone number was returned$0.010
site-scannedThe website was read, but published no email or phone$0.004

No per-run start fee. You are charged once per website, never per contact, and never for a website that could not be read.

Social profiles alone do not trigger the higher price. A LinkedIn URL is worth having, but it is not a way to contact anyone and you could have found it yourself, so a site that yields only social links bills as a scan.

Send websites in batches. Every run pays a fixed container start of roughly 28 seconds, so one website per run costs several times more per site than fifty.

  • 50 websites, two thirds with an email or phone: about $0.40
  • 25 websites, half with an email or phone: about $0.18
  • 1 website: $0.004–$0.010, most of it the container start

Limits

LimitValue
Websites per run50
Pages read per website12 by default, 40 maximum
Bytes per page / per website2 MB / 16 MB
Time per page / per website15 s / 90 s
Emails / phones / socials per website50 / 25 / 25
Redirects followed5

Contact, about, and imprint pages are always read first, so a small page budget still finds most contacts.

Errors

CodeMeaningWorth retrying?
SITE_UNREACHABLENo page on the site could be readYes
SITE_TIMEOUTThe site took too longYes
DNS_FAILUREThe hostname does not resolveYes
ROBOTS_DISALLOWEDThe site's robots.txt forbids its own homepageNo
BLOCKED_DESTINATIONResolves to a private or internal addressNo
INVALID_URLNot a usable http/https URLNo
BUDGET_EXHAUSTEDThe run's maximum charge was reachedNo

A failed website is still published as a result with the reason attached, and is never charged.

Privacy and lawful use

Only public pages are read, and only pages robots.txt permits unless you turn that off yourself — which is recorded in the result.

Business contact details are personal data under the GDPR. Every record carries the page it came from so you can answer a source-disclosure request, addresses that look personal rather than role-based are labelled, and nothing is kept beyond your own run storage. Establishing a lawful basis for your outreach remains your responsibility.

Every URL is checked before it is requested, including each redirect hop and every link followed inside a site, so a site that redirects to a private or internal address is refused rather than read.

FAQ

Why is an address only scored 60? Its domain accepts mail, but the individual mailbox was not checked. That is the honest ceiling without a mail-server handshake.

Should I turn on the mail-server check? Usually not. Gmail, Microsoft 365 and Yahoo refuse those checks from data centres, and outbound mail ports are commonly blocked in cloud containers, so it often proves nothing. When it cannot establish anything, the result says so rather than inflating the score.

Why did a site return no emails? Either it publishes none, or it hides them behind a contact form. This Actor tells you that instead of inventing an address. Raising maxPagesPerSite sometimes reaches a contact page a small budget missed.

Does it guess addresses like firstname@company.com? No. Guessed addresses are how bounce rates and spam complaints happen. If it is not published, it is not returned.

What is not supported? Logins, paywalled pages, and CAPTCHA solving.

Support

Questions and bug reports go to the Issues tab on this Actor. The Changelog tab lists what changed in each version.