Domain Contact Extraction
Read published company contact channels from a website: role email addresses, phone numbers, postal address and social links.
domain-contact-extract Example
{
"domain": "stripe.com"
} {
"domain": "stripe.com",
"phones": [],
"role_emails": [
"sales@stripe.com"
],
"fetched_urls": [
"https://stripe.com/",
"https://stripe.com/contact/sales"
],
"social_links": {
"twitter": "https://twitter.com/stripe",
"youtube": "https://youtube.com/@stripe",
"facebook": "https://www.facebook.com/StripeHQ",
"linkedin": "https://www.linkedin.com/company/stripe/",
"instagram": "https://www.instagram.com/stripehq/"
},
"postal_address": null,
"contact_page_url": "https://stripe.com/contact/sales",
"has_contact_page": true,
"personal_addresses_withheld": 0
} Inputs
| Field | Type | Required | What it is |
|---|---|---|---|
url | string | No | Alias for domain — full URL, hostname is extracted |
site | string | No | Alias for domain |
domain | string | Yes | Company domain (e.g. stripe.com) |
website | string | No | Alias for domain |
Output fields
How reliably each field appears in a successful answer.
| Field | Type | Appears |
|---|---|---|
domain | string | Always (present in every successful answer) |
phones | array | Sometimes (present only for some inputs) |
role_emails | array | Usually (present for most inputs) |
fetched_urls | array | Always (present in every successful answer) |
social_links | object | Usually (present for most inputs) |
postal_address | string | Sometimes (present only for some inputs) |
contact_page_url | string | Sometimes (present only for some inputs) |
has_contact_page | boolean | Always (present in every successful answer) |
personal_addresses_withheld | number | Always (present in every successful answer) |
How to call it
The same tool through each route. MCP clients reach it through Strale’s server at https://api.strale.io/mcp; the call below is what the agent sends.
# Needs an API key. max_price_cents caps what this call may cost.
curl -X POST https://api.strale.io/v1/do \
-H "Authorization: Bearer $STRALE_API_KEY" \
-H 'Content-Type: application/json' \
-d '{
"capability_slug": "domain-contact-extract",
"inputs": {
"domain": "stripe.com"
},
"max_price_cents": 5
}' {
"tool": "strale_execute",
"arguments": {
"slug": "domain-contact-extract",
"inputs": {
"domain": "stripe.com"
},
"max_price_cents": 5
}
} import { Strale } from "straleio";
const strale = new Strale({ apiKey: process.env.STRALE_API_KEY! });
const result = await strale.do({
capability_slug: "domain-contact-extract",
inputs: {
"domain": "stripe.com"
},
max_price_cents: 5,
}); import os
from straleio import Strale, DoRequest
strale = Strale(api_key=os.environ["STRALE_API_KEY"])
result = strale.do(DoRequest(
capability_slug="domain-contact-extract",
inputs={
"domain": "stripe.com",
},
max_price_cents=5,
)) # No account. The first request answers 402 with the price in USDC;
# an x402 client pays it from your wallet and repeats the request.
curl -i -X POST https://api.strale.io/x402/v2/domain-contact-extract \
-H 'Content-Type: application/json' \
-d '{
"domain": "stripe.com"
}' Limitations
Company contact channels only
Returns published company contact channels such as role email addresses, phone numbers, postal addresses and social links; it does not accept a person’s name, enumerate employees or guess personal email addresses. Personal-looking addresses are withheld even when published, with only their count returned in `personal_addresses_withheld`.
JavaScript-generated contacts are not visible
Only the initial HTML response is read. Contact details added by JavaScript or shown through interactive widgets can be missing, leaving empty or partial results.
Only one linked contact page is checked
At most one additional page is read: the first same-host link whose URL or text matches contact, kontakt, contact-us or get-in-touch, regardless of case. Deeper pages, JavaScript-only links and other labels can be missed, so `has_contact_page` can be false even when a contact page exists.
Phone numbers require explicit phone markup
Phone numbers are returned only from tel: links or schema.org telephone values in JSON-LD or microdata. Plain-text numbers are not extracted, so `phones` can be empty even when a number is visible on the page.
Postal address requires structured markup
Postal address relies on the page publishing schema.org JSON-LD or microdata markup; sites without structured markup return postal_address: null even if an address is visible in plain text on the page.
Only the first 300 KB of each page is scanned
Only the first 300 KB of each page is scanned. Contact details appearing later in a longer page are not found.
Related tools
- DNS Lookup Free
- SSL Certificate Check €0.03
- Tech Stack Detection €0.03
- WHOIS Lookup €0.05