Website Contact Finder API
Pricing
Pay per event + usage
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
Maintained by CommunityActor 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
| Field | Type | Description |
|---|---|---|
websiteUrl | string | Normalized website URL scanned. |
emails | string[] | Email addresses found in mailto links and visible text. |
phones | string[] | Phone numbers found in tel links and visible text. |
socialLinks | object | LinkedIn, Twitter/X, Facebook, Instagram, YouTube, GitHub, and TikTok URLs when found. |
contactPageUrl | string/null | First crawled URL that looks like contact/about/support/legal. |
pagesCrawled | number | Number of internal pages fetched. |
crawledAt | string | ISO timestamp of the scan. |
emailVerification | array | Optional verification results when enabled. |
error | string | Present 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
maxPagesPerSitelimits internal crawl depth.maxConcurrencycontrols parallel page fetches within the single website.requestTimeoutSecscontrols per-request HTTP timeout.useProxyenables Apify proxy when needed.verifyEmailsadds DNS/syntax verification to found emails.verificationLevelcan beformat,mx, orsmtp.
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 osimport requestsresponse = 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 ApifyClientclient = 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().itemsprint(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.
Social link extraction
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
maxPagesPerSitebetween 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.
Related scrapers
- https://apify.com/automation-lab/website-contact-finder
- https://apify.com/automation-lab/email-verifier
- https://apify.com/automation-lab/http-status-checker
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.