Website Contacts API
Business website → role emails, E.164 phones, social profiles. 1 credit when something is found, 0 when not.
GET request to /v1/website/contacts that responds with clean JSON and costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh. Start with 100 free credits — no credit card.What is the Website Contacts API?
Pass a business website or a bare domain and get its public contact details as JSON. Up to 3 pages of the same site are read: the home page, then its contact or about pages. Pages are read as HTML; JavaScript is not run. emails[] holds role addresses such as info@, contact@, hello@, office@, sales@, support@ and booking@. Addresses that carry a person's name (jane.doe@) are not returned, and a webmail address is returned only when the site shows it as its contact. phones[] is E.164 (+15125550100); a number that cannot be normalized is left out, not guessed. socials{} has one profile URL each for facebook, instagram, linkedin, tiktok, x and youtube — share buttons and post links are not profiles — and a network is null when the site links no profile for it. contactPageUrl is the contact page that was read, or null when the site has none. pagesScanned counts the pages read. robots.txt is respected for the CaptapiBot user agent; when it disallows the site the response is empty with blockedByRobots true and costs 0. Every key is always present. A call that finds at least one email, phone or social profile costs 1 credit; an empty result costs 0, and failures cost 0. Use the results in line with the anti-spam and privacy rules that apply to you (for example GDPR and CAN-SPAM). cache defaults to false; cache=true reuses a 24 hour response and cache hits are free.
What you get
- Role email addresses (info@, contact@, sales@ and similar)
- Phone numbers in E.164 format
- One profile URL each for Facebook, Instagram, LinkedIn, TikTok, X and YouTube
- 1 credit when contacts are found; 0 for an empty result or a failure
Try it
Fill in the parameters below and copy a ready-to-run request, or open the live Playground to run it against your account (no API key paste).
Parameters
curl "https://api.captapi.com/v1/website/contacts?url=https%3A%2F%2Fatxfamilydental.com" \
-H "Authorization: Bearer capt_live_..."
# or: -H "x-api-key: capt_live_..."Edit the parameters and the code updates instantly. Switch languages and hit copy.
Example response
{
"success": true,
"data": {
"url": "https://atxfamilydental.com/",
"domain": "atxfamilydental.com",
"emails": [
"info@atxfamilydental.com"
],
"phones": [
"+15125550100"
],
"socials": {
"facebook": "https://www.facebook.com/atxfamilydental",
"instagram": null,
"linkedin": null,
"tiktok": null,
"x": null,
"youtube": null
},
"contactPageUrl": "https://atxfamilydental.com/contact",
"pagesScanned": 2,
"blockedByRobots": false
}
}Billing metadata is returned in response headers: X-Captapi-Credits (credits charged), X-Captapi-Cache (hit or miss), and X-Captapi-Request-Id (include it when contacting support). Where the response has a source field, it names the path that served the data: native, extended, cache or asr. Failed requests (4xx/5xx) are never charged. See the full list of error codes in the error reference.
Response structure
A successful call returns success and a data object with the following fields:
Top-level fields
urlThe page that was read as the home page, after redirects.domainRegistered domain of the site (www and subdomains share it).emailsRole email addresses found on the site (info@, contact@, sales@ and similar). Addresses that carry a person's name are not returned. [] when none are found.phonesPhone numbers in E.164 format. Numbers that cannot be normalized are left out. [] when none are found.contactPageUrlThe contact page that was read, or null when the site has none.pagesScannedHow many pages of the site were read (0–3).blockedByRobotstrue when robots.txt disallows the site for our crawler; the lists are then empty and the call costs 0. Always true or false.sourcenative for a fresh read, cache for a cache hit.
Socials
The socials object contains:
facebookFacebook page URL, or null.instagramInstagram profile URL, or null.linkedinLinkedIn company page URL, or null.tiktokTikTok profile URL, or null.xX profile URL, or null.youtubeYouTube channel URL, or null.
Parameters
| Name | Type | Required | Description |
|---|---|---|---|
| url | string | Yes | Business website or bare domain, for example https://atxfamilydental.com or atxfamilydental.com (https:// is added). Social profile URLs are not accepted here. |
| cache | boolean | No | Set true to use the 24h cache (0 credits on hit). Default false. |
Authentication: send your key as Authorization: Bearer capt_live_.... A typical call costs 1 credit. Pass cache=true for a free 24h cache hit; default is always fresh.
How it works
- 1. Sign up — get 100 free credits, no card required.
- 2. Create a key from your dashboard.
- 3. Send one request to
/v1/website/contactsand parse the JSON response.
Use cases
Lead enrichment
Add role emails, phone numbers and social profiles to a list of business websites, such as the website column of a Maps search.
Social profile discovery
Find a business's Instagram, Facebook, TikTok, LinkedIn, X and YouTube profiles from its website, then pass them to the matching profile endpoints.
Contact data checks
Compare the phone number a site publishes with the one in your CRM. You pay only when something is found.
Frequently asked questions
What does the Website Contacts API do?+
The Website Contacts API lets you fetch full metadata and key stats from a public Website contacts using one GET request to /v1/website/contacts. It returns clean JSON — no OAuth or infrastructure setup required.
How many credits does the Website Contacts API cost?+
A call that finds at least one email, phone or social profile costs 1 credit. An empty result costs 0, a robots.txt block (blockedByRobots: true) costs 0, and failures cost 0. cache=true hits are free; the default is cache=false (24h TTL when cache is on).
Do I need a Website API key or OAuth?+
No. A single Captapi key works across every platform Captapi supports — YouTube, TikTok, Instagram, Facebook, Twitter/X, Reddit, Threads, Bluesky, Pinterest, LinkedIn, Rumble, Spotify, Kwai, and more. We handle access, rate limits, retries, and authentication for you.
Which email addresses are returned?+
Role addresses such as info@, contact@, hello@, office@, sales@, support@, booking@ and appointments@. Addresses that carry a person's name (jane.doe@) are not returned. A webmail address (for example a gmail.com address) is returned only when the site shows it as its contact in a mailto: link or its structured data. Image file names (logo@2x.png) and sample addresses are filtered out.
Which pages are read?+
Up to 3 pages of the same site: the home page, then contact or about pages linked from it (or /contact, /contact-us and /about when the home page links none). Pages are read as HTML without running JavaScript, so details that a script draws after load are not seen. Pages marked noindex or nofollow are skipped.
Does it respect robots.txt?+
Yes. robots.txt is read first and followed for the CaptapiBot user agent and for *. When it disallows the site, the response is empty with blockedByRobots: true and costs 0 credits.
What format are phone numbers in?+
E.164, for example +15125550100. The country comes from a + prefix on the page or from the site's country domain; a .com site is read as North American numbering. A number that cannot be normalized is left out rather than guessed.
Is the Website Contacts API suitable for production use?+
Yes. It is a stable REST endpoint with predictable JSON and automatic retries. Pass cache=true to serve from the 24h cache (0 credits on hit); default is always fresh. Selected profile endpoints also accept cacheMaxAge=1d|3d|7d|14d|30d. Use it for analytics, monitoring, and content automation.
Ready to use the Website Contacts API?
Sign up, grab your key, and make your first call in 60 seconds.