Domain Contact Extraction

Read published company contact channels from a website: role email addresses, phone numbers, postal address and social links.

Pay by wallet (x402) domain-contact-extract

Example

Input
{
  "domain": "stripe.com"
}
Answer
{
  "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

FieldTypeRequiredWhat it is
urlstringNoAlias for domain — full URL, hostname is extracted
sitestringNoAlias for domain
domainstringYesCompany domain (e.g. stripe.com)
websitestringNoAlias for domain

Output fields

How reliably each field appears in a successful answer.

FieldTypeAppears
domainstringAlways (present in every successful answer)
phonesarraySometimes (present only for some inputs)
role_emailsarrayUsually (present for most inputs)
fetched_urlsarrayAlways (present in every successful answer)
social_linksobjectUsually (present for most inputs)
postal_addressstringSometimes (present only for some inputs)
contact_page_urlstringSometimes (present only for some inputs)
has_contact_pagebooleanAlways (present in every successful answer)
personal_addresses_withheldnumberAlways (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
  }'

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