TidyTools

Website contacts

POST https://tools.yukai.uk/api/v1/contacts

Extract contact details from a website. Reads the home page and up to maxPages - 1 likely contact pages over plain HTTP (a real browser only as a fallback with render=auto, for the home page only) and returns de-duplicated emails, phones (E.164), faxes, social profiles, address, logo, contact form and the contact pages found, with the page and method where each value was found (includeDetails).

Cost

Credits: 18 ($0.0018) per successful call. Failed calls are free. Source price: website-contact-extractor/site-processed.

Input

Send a JSON body (POST) or the same fields as a query string (GET).

Required: url.

FieldTypeDefaultDescription
url requiredstringCompany website: a domain (stripe.com), a URL or an e-mail address (its domain is used). A path in the URL (e.g. acme.com/de) is read too. Aliases: domain, website. Private, local and cloud-metadata addresses are refused.
maxPagesinteger5Pages read per site, the home page included.
renderstring"auto"auto (default): plain HTTP first, a real Chrome browser (home page only) only when the site blocks plain requests or needs JavaScript. never: plain HTTP only (fastest).
includeDetailsbooleantrueInclude where each value was found (emailDetails, phoneDetails, socialProfileSources, contactForms, organization, otherSocialLinks).

Examples

Replace tt_live_XXXX with your key from the pricing page.

curl

curl -i -X POST "https://tools.yukai.uk/api/v1/contacts" \
  -H "Authorization: Bearer tt_live_XXXX" \
  -H "Content-Type: application/json" \
  -d '{"url":"stumptowncoffee.com"}'

JavaScript (fetch)

const res = await fetch("https://tools.yukai.uk/api/v1/contacts", {
  method: "POST",
  headers: { "Authorization": "Bearer tt_live_XXXX", "Content-Type": "application/json" },
  body: JSON.stringify({"url":"stumptowncoffee.com"}),
});
console.log(res.status, res.headers.get("x-credits-charged"), res.headers.get("x-credits-balance"));
console.log(await res.json());

Python (requests)

import requests

r = requests.post(
    "https://tools.yukai.uk/api/v1/contacts",
    headers={"Authorization": "Bearer tt_live_XXXX"},
    json={"url": "stumptowncoffee.com"},
    timeout=120,
)
print(r.status_code, r.headers.get("x-credits-charged"), r.headers.get("x-credits-balance"))
print(r.json())

Response

JSON with "success": true and the result fields; on failure {"success": false, "error": {"code", "message", "retryable"}} and no credits are used. Every answer carries x-credits-charged (credits used) and x-credits-balance (balance after the call); check the balance any time with GET https://tools.yukai.uk/v1/billing/balance.

Full field list and response schema: OpenAPI spec website-contacts (its servers entry is the marketplace gateway; call https://tools.yukai.uk with your key).

← All routes · Pricing