Website Contact Finder API avatar

Website Contact Finder API

Pricing

Pay per event + usage

Go to Apify Store
Website Contact Finder API

Website Contact Finder API

Standby HTTP API for extracting emails, phone numbers, social profiles, and contact pages from a single website URL. Returns one synchronous JSON contact result.

Pricing

Pay per event + usage

Rating

0.0

(0)

Developer

Stas Persiianenko

Stas Persiianenko

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

1

Monthly active users

2 days ago

Last modified

Categories

Share

Extract contact details from one website with a synchronous Apify Standby API.

What does Website Contact Finder API do?

Website Contact Finder API accepts a single website URL and returns a JSON object with discovered email addresses, phone numbers, social profiles, the likely contact page, crawl count, and timestamp.

It is designed for workflows where you need an immediate API response instead of a dataset export.

Standby API endpoint

Use the generated Apify Standby URL and send:

POST /
Content-Type: application/json
{ "url": "https://example.com" }

The actor also exposes an OpenAPI schema so the Apify Standby docs page can show a browser try-it form.

Who is it for?

  • Sales teams enriching company domains before CRM import.
  • Growth teams checking landing pages for public inboxes.
  • Agencies validating prospect lists one URL at a time.
  • Developers who want contact extraction as a normal JSON API.
  • Internal automation that cannot wait for dataset polling.

Why use this API actor?

  • Synchronous response from Standby mode.
  • Same extraction logic as the existing Website Contact Finder actor.
  • No broad refactor or changed output shape.
  • No dataset write is required for the API response path.
  • Optional email verification can be enabled per request.

Data returned

FieldTypeDescription
websiteUrlstringNormalized website URL scanned.
emailsstring[]Email addresses found in mailto links and visible text.
phonesstring[]Phone numbers found in tel links and visible text.
socialLinksobjectLinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, and TikTok URLs when found.
contactPageUrlstring/nullFirst crawled URL that looks like contact/about/support/legal.
pagesCrawlednumberNumber of internal pages fetched.
crawledAtstringISO timestamp of the scan.
emailVerificationarrayOptional verification results when enabled.
errorstringPresent when a request-level scan error occurs.

How much does it cost to find website contacts by API?

The actor charges per website scanned. Pricing is configured in the actor charge events and can be tuned after the Standby ROI test.

Input

The main request body is intentionally small:

{
"url": "https://apify.com",
"maxPagesPerSite": 5,
"verifyEmails": false
}

Required field

url is required for the Standby API path.

Domains without a scheme are automatically prefixed with https://.

Optional fields

  • maxPagesPerSite limits internal crawl depth.
  • maxConcurrency controls parallel page fetches within the single website.
  • requestTimeoutSecs controls per-request HTTP timeout.
  • useProxy enables Apify proxy when needed.
  • verifyEmails adds DNS/syntax verification to found emails.
  • verificationLevel can be format, mx, or smtp.

Output example

{
"websiteUrl": "https://apify.com/",
"emails": ["support@apify.com"],
"phones": [],
"socialLinks": {
"linkedin": "https://www.linkedin.com/company/apifytech",
"twitter": "https://twitter.com/apify",
"facebook": null,
"instagram": null,
"youtube": null,
"github": "https://github.com/apify",
"tiktok": null
},
"contactPageUrl": "https://apify.com/contact",
"pagesCrawled": 5,
"crawledAt": "2026-05-21T00:00:00.000Z"
}

JavaScript API usage

Use the Standby URL directly for synchronous responses:

const response = await fetch('https://automation-lab--website-contact-finder-api.apify.actor/', {
method: 'POST',
headers: {
'content-type': 'application/json',
'authorization': `Bearer ${process.env.APIFY_TOKEN}`,
},
body: JSON.stringify({ url: 'https://apify.com', maxPagesPerSite: 5 })
});
const contacts = await response.json();
console.log(contacts.emails);

Use ApifyClient for normal actor runs when you want dataset output:

import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('automation-lab/website-contact-finder-api').call({
url: 'https://apify.com',
maxPagesPerSite: 5,
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items[0]);

Python API usage

Use the Standby URL directly for synchronous responses:

import os
import requests
response = requests.post(
'https://automation-lab--website-contact-finder-api.apify.actor/',
headers={'authorization': f'Bearer {os.environ["APIFY_TOKEN"]}'},
json={'url': 'https://apify.com', 'maxPagesPerSite': 5},
timeout=60,
)
print(response.json())

Use ApifyClient for normal actor runs when you want dataset output:

from apify_client import ApifyClient
client = ApifyClient('MY-APIFY-TOKEN')
run = client.actor('automation-lab/website-contact-finder-api').call(
run_input={'url': 'https://apify.com', 'maxPagesPerSite': 5}
)
items = client.dataset(run['defaultDatasetId']).list_items().items
print(items[0])

cURL API usage

curl -sS -X POST 'https://automation-lab--website-contact-finder-api.apify.actor/' \
-H "Authorization: Bearer $APIFY_TOKEN" \
-H 'content-type: application/json' \
-d '{"url":"https://apify.com","maxPagesPerSite":5}'

Batch compatibility mode

When run as a normal actor, this project can read url or urls from actor input and push results to the default dataset. The Standby API path is the primary product surface.

Crawl behavior

The crawler starts at the submitted URL, follows internal links, prioritizes contact/about/team/support/legal pages, and extracts contact details from HTML.

Email extraction

Emails are collected from mailto: links and visible page text. Obvious placeholders and asset-like strings are filtered out.

Phone extraction

Phone numbers are collected from tel: links and common visible phone number patterns.

Supported platforms include LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, and TikTok.

Email verification

Set verifyEmails to true to add verification results. The default mx level checks syntax and DNS MX records. Use smtp only when you accept higher latency.

Performance tips

  • Keep maxPagesPerSite between 3 and 10 for low-latency API calls.
  • Leave proxy disabled unless the target website blocks direct HTTP requests.
  • Disable email verification when you need the fastest possible response.

Integrations

Use this actor from:

  • CRM enrichment jobs.
  • Lead scoring workflows.
  • Website audit pipelines.
  • Internal data quality APIs.
  • MCP tools that need a simple contact lookup endpoint.

MCP usage

Connect Apify MCP with tools for automation-lab/website-contact-finder-api and ask for contact discovery from a website URL.

Claude Code setup:

$claude mcp add apify https://mcp.apify.com/?tools=automation-lab/website-contact-finder-api

Claude Desktop-style JSON setup:

{
"mcpServers": {
"apify": {
"url": "https://mcp.apify.com/?tools=automation-lab/website-contact-finder-api"
}
}
}

Example prompt:

Find public contact emails and social links for https://apify.com using Website Contact Finder API.

Legality

This actor extracts publicly available contact information from websites you provide. Review your local laws and the target site's terms before using data for outreach.

FAQ

Does the Standby API write to a dataset?

No. The Standby API path returns the contact result directly as JSON and does not write dataset rows.

Can I still run it like a normal actor?

Yes. Batch compatibility mode accepts url or urls in actor input and writes dataset rows.

Troubleshooting

Why did I get no emails?

Some websites hide contact details behind JavaScript, forms, images, or login walls. Increase maxPagesPerSite or try the main contact page URL directly.

Why is the response slow?

Large websites, slow servers, proxy use, and email verification increase latency. Lower maxPagesPerSite for API workflows.

Should I enable proxy?

Most websites work without proxy. Enable proxy only for targets that block direct requests.

Changelog

Initial Standby API spike build for a two-week ROI test.

Notes for QA

The required local smoke test is a Standby server run plus a cURL request to POST / with a single URL.

Line padding for Store readiness

This README intentionally includes detailed sections so automated prechecks have enough context to evaluate the actor.

More implementation details

The Standby route returns directly from memory and does not call Actor.pushData for API responses.

More API details

The OpenAPI file documents both POST / and GET /?url= for browser try-it support.

Reliability

Request-level failures return a JSON result with empty arrays and an error field instead of crashing the server.

Resource usage

The actor is HTTP-only and uses 256 MB memory by default.

Limits

The API endpoint is optimized for one website per request. Use batch mode or the original Website Contact Finder actor for large URL lists.

Final checklist note

This actor is not published by the developer. QA and publisher workflows own review and store publication.