Website Contact Finder
Pricing
from $0.05 / 1,000 contact extracteds
Website Contact Finder
Find public emails, phone numbers, social links, source URLs, confidence signals, crawl diagnostics, and optional MX checks from websites or domains.
Pricing
from $0.05 / 1,000 contact extracteds
Rating
0.0
(0)
Developer
Hanna Nosova
Maintained by CommunityActor stats
0
Bookmarked
6
Total users
1
Monthly active users
an hour ago
Last modified
Categories
Share
Find public emails, phone numbers, and social profile links from company websites and domains. Website Contact Finder turns a list of domains into lead-ready contact records with source URLs, confidence signals, crawl counts, and extraction errors.
What does Website Contact Finder do?
Website Contact Finder crawls public pages on a website and extracts useful contact details for sales, partnerships, recruiting, agency prospecting, and enrichment workflows.
It can collect:
- 📧 Email addresses
- ☎️ Phone numbers
- 🔗 Social profile links
- 🌐 Source pages where each contact was found
- ✅ Confidence signals and optional email-domain MX status
- 🧭 Crawl diagnostics such as pages crawled and errors
Who is it for?
This actor is useful for teams that need structured contact data from public websites.
- Sales teams building prospect lists
- Agencies enriching domain lists
- Recruiters looking for company contact channels
- Partnership teams finding business development inboxes
- Data teams cleaning or validating web leads
- Founders researching target accounts
Why use this actor?
Manually opening every company website and checking the footer, contact page, about page, team page, and social links is slow. Website Contact Finder automates that repetitive work and keeps every discovered contact tied to an evidence URL.
Key features
- Bounded website crawl with depth and page limits
- Sitemap discovery for faster contact-page discovery
- Contact, about, team, legal, support, and footer-oriented discovery
- Email, phone, and social link extraction
- Optional MX validation for email domains
- Dedupe across pages
- Confidence score for each email
- Lead-ready row per domain
What data can you extract?
| Field | Description |
|---|---|
domain | Normalized website domain |
seedUrl | Original URL used to start the crawl |
sourceUrl | Best page where contact data was found |
contactPageType | Signal such as contact, about, mailto, or general |
emails | Email records with confidence and source URL |
phones | Public phone numbers found on pages |
socialLinks | LinkedIn, Facebook, Instagram, X/Twitter, YouTube, TikTok |
matchedSignals | Signals that explain why the record was matched |
pagesCrawled | Number of pages visited for the domain |
errors | Non-fatal crawl or fetch errors |
Pricing
This Actor uses Apify pay-per-event pricing. The prices below come from the current Actor pricing configuration. Apify public plans map to Store discount tiers, so the table shows both the user-facing plan context and the pricing tier name. The final price shown in Apify depends on the user account plan and any custom agreement.
| Event | What is charged | Price |
|---|---|---|
start | One-time fee charged when a run starts. Covers fixed startup cost (init, proxy warmup, first HTTP setup). | $0.005 |
| Event | What is charged | Free / no discount | Starter / Bronze | Scale / Silver | Business / Gold | Custom / Platinum | Custom / Diamond |
|---|---|---|---|---|---|---|---|
contact | Charged per contact extracted. | $0.09721 / 1,000 | $0.08453 / 1,000 | $0.06593 / 1,000 | $0.05072 / 1,000 | $0.03381 / 1,000 | $0.02367 / 1,000 |
Apify may also charge platform usage for compute, storage, proxies, or data transfer outside this Actor pricing. Check the Actor run and the Apify Pricing tab for the exact cost shown to your account.
Input options
You can provide full URLs or plain domains.
{"startUrls": [{ "url": "https://www.w3.org/contact/" }],"maxPagesPerDomain": 10,"crawlDepth": 2,"includeSitemap": true,"includePhones": true,"includeSocialLinks": true,"validateMx": false,"sameDomainOnly": true}
Start URLs
Use startUrls when you already have full URLs such as homepage URLs, contact page URLs, or company website URLs.
Domains
Use domains when your source list contains values like example.com. The actor will convert each domain into an HTTPS start URL.
Crawl settings
maxPagesPerDomain controls the maximum number of pages visited per website. Start with 10 to keep runs fast, then increase for larger websites.
crawlDepth controls how many link levels the actor follows from the seed URL.
Contact enrichment settings
Enable phone extraction when you want public telephone numbers. Enable social extraction when you want official social profile links. Enable MX validation when you want to check whether an email domain can receive mail.
Output example
{"domain": "w3.org","seedUrl": "https://www.w3.org/contact/","sourceUrl": "https://www.w3.org/contact/","contactPageType": "mailto","emails": [{"email": "contact@w3.org","normalizedEmail": "contact@w3.org","sourceUrl": "https://www.w3.org/contact/","confidence": 100,"mxValid": null}],"phones": [],"socialLinks": {},"matchedSignals": ["email_regex", "mailto"],"pagesCrawled": 3,"firstSeenAt": "2026-06-22T00:00:00.000Z","errors": []}
Tips for best results
- Start with homepage URLs or known contact-page URLs.
- Keep page limits modest for first runs.
- Use
sameDomainOnlyfor clean company-level results. - Turn on MX validation only when needed.
- Review
sourceUrlbefore importing contacts into outreach tools.
Integrations
Use the output dataset with:
- CRM enrichment workflows
- Google Sheets exports
- Sales engagement tools
- Lead scoring pipelines
- Internal prospecting dashboards
- No-code automation tools
API usage with Node.js
import { ApifyClient } from 'apify-client';const client = new ApifyClient({ token: process.env.APIFY_TOKEN });const run = await client.actor('fetch_cat/website-contact-finder').call({startUrls: [{ url: 'https://www.w3.org/contact/' }],maxPagesPerDomain: 10});console.log(run.defaultDatasetId);
API usage with Python
from apify_client import ApifyClientimport osclient = ApifyClient(os.environ['APIFY_TOKEN'])run = client.actor('fetch_cat/website-contact-finder').call(run_input={'startUrls': [{'url': 'https://www.w3.org/contact/'}],'maxPagesPerDomain': 10,})print(run['defaultDatasetId'])
API usage with cURL
curl -X POST 'https://api.apify.com/v2/acts/fetch_cat~website-contact-finder/runs?token=APIFY_TOKEN' \-H 'Content-Type: application/json' \-d '{"startUrls":[{"url":"https://www.w3.org/contact/"}],"maxPagesPerDomain":10}'
MCP usage
Connect this actor to Apify MCP and ask your assistant to find public contacts for a list of company websites.
Claude Code setup:
$claude mcp add apify https://mcp.apify.com/?tools=fetch_cat/website-contact-finder
Claude Desktop JSON setup:
{"mcpServers": {"apify": {"url": "https://mcp.apify.com/?tools=fetch_cat/website-contact-finder"}}}
Example prompts:
- "Find public emails and LinkedIn links for these domains."
- "Crawl these company websites and return contact-page evidence URLs."
- "Validate email domains with MX checks for this prospect list."
Data quality notes
The actor extracts public information from web pages. Email confidence scores are heuristics based on source page and contact signals. Always review results before using them in outreach.
Legality
Only use this actor for lawful purposes and follow applicable privacy, anti-spam, and marketing rules. The actor is intended for public business contact discovery, not private or restricted data access.
Troubleshooting
Why did a website return no contacts?
Some websites hide contact information behind forms, images, scripts, or login walls. Increase maxPagesPerDomain, provide a known contact page, or review the errors field.
Why are there fewer pages crawled than my limit?
The actor stops when it runs out of same-domain links or reaches the configured crawl depth.
Should I enable proxies?
Most public websites do not need proxies. Leave proxy settings disabled unless a target blocks direct requests.
Related scrapers
Explore related actors from the same account:
- Facebook Pages Scraper
- TikTok Profile Scraper
- YouTube Channel Details Scraper
- Threads Profile & Posts Scraper
- Website Content Crawler Lite
FAQ
Can it crawl multiple websites in one run?
Yes. Add multiple entries to startUrls or domains.
Does it validate every email address?
It can optionally validate the email domain with MX records. It does not send email or verify inbox ownership.
Does it charge per page?
No. The current design charges per saved website/domain contact record, not per crawled page.
Can it find social links?
Yes. It detects common public social profile domains including LinkedIn, Facebook, Instagram, X/Twitter, YouTube, and TikTok.
Limits
The actor uses strict depth and page caps to keep runs predictable. Very large websites may require higher limits or a targeted contact-page URL.
Support
If you need a specific website pattern supported, include an example URL and the expected contact fields when opening an issue.
Version
Current build target: 0.1.