Verified Website Contact Finder
Pricing
from $10.00 / 1,000 site enricheds
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
Maintained by CommunityActor stats
0
Bookmarked
2
Total users
1
Monthly active users
12 days ago
Last modified
Categories
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
- Paste your website URLs into Website URLs.
- Leave everything else alone and click Start.
- 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
| Option | Default | What it does |
|---|---|---|
websites | — | Company websites to scan, up to 50 per run |
maxPagesPerSite | 12 | Pages read per website (1–40) |
collectPhones | true | Return phone numbers in international format |
collectSocials | true | LinkedIn, X, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads |
verifyEmails | true | Check each address and score it |
smtpProbe | false | Also open a mail-server handshake (see FAQ) |
respectRobots | true | Skip pages the site asks crawlers not to read |
browserFallback | true | Use a browser on pages that need one |
proxyConfiguration | Apify Proxy | Many 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 inwarnings.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.
| Event | When it applies | Price |
|---|---|---|
site-enriched | An email address or phone number was returned | $0.010 |
site-scanned | The 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
| Limit | Value |
|---|---|
| Websites per run | 50 |
| Pages read per website | 12 by default, 40 maximum |
| Bytes per page / per website | 2 MB / 16 MB |
| Time per page / per website | 15 s / 90 s |
| Emails / phones / socials per website | 50 / 25 / 25 |
| Redirects followed | 5 |
Contact, about, and imprint pages are always read first, so a small page budget still finds most contacts.
Errors
| Code | Meaning | Worth retrying? |
|---|---|---|
SITE_UNREACHABLE | No page on the site could be read | Yes |
SITE_TIMEOUT | The site took too long | Yes |
DNS_FAILURE | The hostname does not resolve | Yes |
ROBOTS_DISALLOWED | The site's robots.txt forbids its own homepage | No |
BLOCKED_DESTINATION | Resolves to a private or internal address | No |
INVALID_URL | Not a usable http/https URL | No |
BUDGET_EXHAUSTED | The run's maximum charge was reached | No |
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.