Website Contact Finder — Business Emails, Phones & Socials
Pricing
from $33.50 / 1,000 website contact checks
Website Contact Finder — Business Emails, Phones & Socials
One contact row per company website: published business e-mails (info@, sales@ …), phones, 16 social profiles, contact pages, postal address and organisation name, each with the page it came from. Crawls contact/about/team pages, honours robots.txt. Pay only for sites with contact details.
Pricing
from $33.50 / 1,000 website contact checks
Rating
0.0
(0)
Developer
NexGen Watch
Maintained by CommunityActor stats
0
Bookmarked
1
Total users
1
Monthly active users
3 days ago
Last modified
Categories
Security
Limited permissionsShare
Website Contact Finder — Business Emails, Phones, Socials & Address from Any Domain
Turn a list of company websites into one outreach-ready contact row per site: the business e-mail addresses the company publishes (info@, sales@, support@, hello@ …), its phone numbers, 16 social profiles (LinkedIn, X/Twitter, Facebook, Instagram, YouTube, TikTok, GitHub, Pinterest, Threads, Bluesky, Telegram, WhatsApp, Crunchbase, Glassdoor, Trustpilot, G2), its contact pages, postal address and organisation name — each with the page it was found on. The crawler reads the home, contact, about, team, imprint and support pages first, then follows the site's own contact-like links, up to maxPagesPerSite pages, honouring robots.txt on every request. Pay only for sites where contact details were found. Built by NexGen Watch on Apify.
- Business contacts, not people: generic company mailboxes are returned; mailboxes that look like a named person are counted in
personal_emails_omittedand never exported. No guessing, no pattern-built addresses — only what the site literally publishes. - CRM-ready columns:
primary_email,primary_phone,linkedin,twitter,facebook,instagram,youtube,organization,addresses, plus the fullemails/phones/social_linkslists andevidence(which page each item came from). - Optional e-mail domain check (
verifyEmails): confirms each found domain publishes MX records — free, no messages sent. - Honest and polite: identified
NexGenWatchBotuser agent, robots.txt per site and per path, SSRF-guarded (public hosts only), no logins, no third-party database.
Billing: $0.02 per run start, then $0.05 per contact-bearing site (website_contact_check, verdict EXTRACTED). Sites with no public contact details (NO_CONTACTS), robots-blocked, unreachable or unparseable targets are free status rows.
Who uses this
- Sales and growth teams enriching lead lists from Google Maps, directories or spreadsheets with the company's public inbox, phone and LinkedIn page.
- Agencies and local-business marketers building outreach lists with the contact page and address already attached.
- Data teams who need one deduplicated, evidenced contact row per domain for a CRM import.
📊 Sample Output
Real rows from run E7nkRKD0gboRVQxX4 on build 0.2.31 (2026-10-19), the Quick start input below (long values shortened):
| domain | verdict | organization | emails | phones | twitter / x | contact_pages | addresses | pages | ||
|---|---|---|---|---|---|---|---|---|---|---|
| apify.com | EXTRACTED | Apify Technologies s.r… | hello@apify.com, support@apify.com | https://www.linkedin.com/compa… | https://x.com/apify | https://apify.com/contact, htt… | Na Příkopě 959/27, Prague, 110… | 4 | ||
| allbirds.com | EXTRACTED | help@allbirds.com | +1 (424) 363-8064 | https://twitter.com/allb… | https://www.instagram.com/al… | https://www.allbirds.com/pages… | 3 |
The run finished with the status message: NORMAL: 2 contact-bearing, 0 no-contact (0 not-found, 0 ambiguous, 0 service-fault, 0 unparseable) of 2 | billable=2 | website_contact_check charged=2, delivered=2
✅ What you get
One website_contact_check row per website (verdict: EXTRACTED rows are billed; every other verdict is a free status row):
emails(generic business mailboxes),primary_email,personal_emails_omitted(how many named-person mailboxes were seen and left out),email_domain_mx(withverifyEmails).phones(from tel: links, structured data and labelled text),primary_phone.social_links(16 networks, grouped), withlinkedin,twitter,facebook,instagram,youtubeas single columns.contact_pages,addresses(structured-data and<address>blocks),organization(legal or display name from the site's structured data).evidence— the page URL each e-mail and phone first appeared on;pages_fetched,pages_blocked_by_robots,robots_status,coverage_summary.verdict:EXTRACTED(billed) ·NO_CONTACTS(readable, nothing published — free) ·ROBOTS_BLOCKED·SSRF_BLOCKED·SERVICE_FAULT·UNPARSEABLE(all free), withunbilled_reason.
⚙️ Sample inputs
1. Quick start — two sites (the Store example)
{"domains": ["apify.com", "allbirds.com"]}
About $0.12 on the Free tier ($0.02 start + 2 × $0.05).
2. A lead list, deeper crawl, with e-mail domain check
{"domains": ["example-dental.com", "example-plumbing.co.uk", "example-agency.de"],"maxPagesPerSite": 20,"verifyEmails": true,"requestTimeoutSecs": 30}
3. From the API — URLs instead of domains
{"urls": ["https://www.example-store.com/", "https://www.example-clinic.ca/contact"]}
🧾 JSON sample record
{"record_type": "website_contact_check","input": "apify.com","origin": "https://apify.com","domain": "apify.com","source": "buyer-supplied website, robots-permitted pages only (own fetch; no third-party API)","emails": ["hello@apify.com","support@apify.com"],"phones": [],"social_links": {"g2": ["https://www.g2.com/products/apify"],"github": ["https://github.com/apify"],"linkedin": ["http://linkedin.com/company/apify","https://www.linkedin.com/company/apify"],"tiktok": ["https://www.tiktok.com/@apifyoffice","https://www.tiktok.com/@apifytech"],"twitter": ["https://x.com/apify"]},"contact_pages": ["https://apify.com/contact","https://apify.com/contact-sales","https://apify.com/contact-sales/demo"],"addresses": ["Na Příkopě 959/27, Prague, 11000, CZ"],"organization": "Apify Technologies s.r.o.","personal_emails_omitted": 1,"primary_email": "hello@apify.com","primary_phone": null,"linkedin": "https://www.linkedin.com/company/apify","twitter": "https://x.com/apify","facebook": null,"instagram": null,"youtube": null,"email_domain_mx": null,"evidence": {"support@apify.com": "https://apify.com/","hello@apify.com": "https://apify.com/contact"},"pages_fetched": 4,"pages_blocked_by_robots": [],"robots_status": "loaded","verdict": "EXTRACTED","coverage_summary": "fetched 4 permitted page(s); 0 path(s) robots-blocked; robots=loaded","unbilled_reason": null}
🔧 How it works
Fetch. The host is resolved and must be public (SSRF guard). robots.txt is read and honoured for our user agent. The home, contact, about, team, imprint and support pages are fetched first, then the home page's own internal links with contact-like names, up to maxPagesPerSite — each path checked against robots before it is read.
Extract. E-mails from mailto: links, structured data and page text (image names, example domains, no-reply and system addresses filtered out; named-person mailboxes counted, not returned); phones from tel: links and structured data, falling back to numbers next to "phone / call / tel" labels; social profiles by 16 vendor URL patterns (share and login links excluded); contact pages from the site's navigation; addresses and the organisation name from JSON-LD and <address> blocks.
Billing. Each contact-bearing row is pushed and charged in one call; a row that cannot be charged is not delivered. A batch where every site was blocked or unreachable ends SUCCEEDED with SOURCE UNAVAILABLE … nothing charged.
Limits. 10,000 sites per run; 1–50 pages per site; 50 e-mails, 20 phones, 10 links per network per site.
💰 Pricing example
| Event | Free | Bronze | Silver | Gold |
|---|---|---|---|---|
Actor Start (apify-actor-start) | $0.02 | $0.02 | $0.02 | $0.02 |
Website contact check (website_contact_check) | $0.05 | $0.045 | $0.04 | $0.0335 |
- 100 sites, 80 with contact details: $0.02 + 80 × $0.05 = $4.02 (the other 20 are free
NO_CONTACTSrows) - 1,000 sites, 800 with contact details: $0.02 + 800 × $0.05 = $40.02
A run that delivers zero contact-bearing rows charges the $0.02 start fee only. The start fee is charged once per GB of run memory; the default run memory is 1024 MB.
⚖️ Legal & ToS
Reads only pages a company publishes on its own website and permits in robots.txt, identifies itself with a contact User-Agent and never logs in. It returns the business contact details the organisation chose to publish; it is not a person-discovery tool and omits mailboxes that look like a named individual. Use the output in line with each site's terms and the anti-spam and privacy law that applies to your outreach (CAN-SPAM, GDPR, CASL …).
❓ FAQ
Q: Why are some e-mails missing that I can see on the site?
A: Named-person mailboxes (first.last@, jsmith@) are deliberately left out — the count is in personal_emails_omitted. Addresses rendered by JavaScript, inside images or behind a form are not in the HTML and cannot be read.
Q: What does verifyEmails check?
A: Only that the e-mail domain publishes MX (or A) records, i.e. that it can receive mail. It does not test the mailbox and sends nothing.
Q: A site returned NO_CONTACTS but has a contact form.
A: A form is not a published address or number. The row is free; contact_pages still lists the form page so you can use it.
Q: What formats can I export? A: JSON, CSV, Excel or XML from the Dataset tab or API — the single-value columns make the CSV CRM-ready.
🆘 Troubleshooting
- verdict = ROBOTS_BLOCKED → the site's robots.txt disallows the pages for crawlers; nothing is fetched and nothing billed.
- verdict = SERVICE_FAULT → every permitted page answered 4xx/5xx or timed out; raise
requestTimeoutSecsor retry later. Free. - Few results per site → raise
maxPagesPerSite(contact details often sit on imprint, support or location pages). - Run TIMED-OUT → split the batch or raise the run timeout; delivered rows are kept.
🔗 Related Actors
- Contact Enrichment by Domain — the CRM-record flavour: one evidenced contact record per domain with a per-domain cap.
- Tech Stack Detector — what the same websites run (CMS, ecommerce, analytics, CRM, chat, email provider).
- Technographics Enricher — stack + DNS signals as CRM columns per domain.
- 🏢 About NexGen Watch — more than 300 public-data actors, pay-per-result: apify.com/nexgenwatch.
⭐ Found this useful?
A quick review on the Apify Store helps other teams find it. Feature request? Open it from the Issues tab — every one is read.
