Website Contact Finder

Find public emails, phone numbers, social links, source URLs, confidence signals, crawl diagnostics, and optional MX checks from websites or domains.

Data fields

FieldTypeDescription
domainstringNormalized website domain.
seedUrlstringOriginal URL used to start the crawl.
sourceUrlstring | nullBest public page where contact data was found.
contactPageTypestringSignal such as contact, about, mailto, schema_org, or general.
emailsarrayEmail records with normalized email, source URL, confidence, and optional MX validity.
phonesarrayPublic phone numbers found on crawled pages.
socialLinksobjectPublic social profile links grouped by platform.
matchedSignalsarraySignals explaining why contact data was matched.

Input preview

startUrlsStart URLs
domainsDomains
maxPagesPerDomainMaximum pages per domain
crawlDepthCrawl depth
includeSitemapCheck sitemap.xml
sameDomainOnlyStay on the same domain

API and agents

This actor can be run through Apify API, datasets, webhooks, schedules, and the official Apify MCP server.

How this actor works

See example inputs, outputs, API usage, and practical limits before running this actor on Apify.

Open Apify page

Find public emails, phone numbers, and social profile links from company websites and domains.

Website Contact Finder turns domains or public URLs into lead-ready contact records with source URLs, confidence signals, crawl diagnostics, extraction errors, and optional MX checks.

At a glance

  • Contact discovery: Crawl public home, contact, about, team, legal, support, footer, and sitemap-discovered pages.
  • Lead-ready output: Export emails, phones, social links, source URLs, confidence signals, pages crawled, and errors.
  • Evidence-first records: Keep every discovered contact tied to the public page where it was found.
  • Controlled crawl: Use maxPagesPerDomain, crawlDepth, and sameDomainOnly to keep runs bounded.
  • Enrichment options: Turn on phone extraction, social link extraction, and MX checks only when needed.

What can it do?

Website Contact Finder turns public websites and domains into structured contact records.

  • Find public business emails with source URLs, confidence signals, and optional MX checks.
  • Collect public phone numbers from homepage, contact, about, support, legal, footer, and sitemap-discovered pages.
  • Extract social links for LinkedIn, Facebook, Instagram, X/Twitter, YouTube, and TikTok profiles.
  • Keep contact evidence so every result can be traced to the page where it was found.
  • Use it as a website contact API for lead enrichment, CRM cleanup, sales research, or AI-agent workflows.

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

Input example

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
}

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 sameDomainOnly for clean company-level results.
  • Turn on MX validation only when needed.
  • Review sourceUrl before 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 ApifyClient
import os

client = 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 and AI agents

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.

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 a run fails, returns no data, or a field looks wrong, open an issue from the Actor page.

Please include the Apify run ID or run URL, input JSON, one example public URL, query, or input item, what you expected, and what the dataset returned. Small reproducible inputs make parsing or site-layout issues much faster to fix.

Version

Current build target: 0.1.

Common questions

Questions and answers reused from the canonical actor README.

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.