Company Website Contacts

Public company contacts from a website: role emails with MX check, phones, address, company IDs.

Reads the home page and up to 5 contact pages and returns role emails (info@, sales@ ...) with an MX check, phone numbers normalised to E.164 with confidence, address, Danish CVR and EU VAT ids and official social profiles. Personal-looking emails are omitted and robots.txt is respected.

$0.003 per call in USDC on Base via x402, or pay by card with prepaid credits (3 credits) · 1 free call per caller · no signup ·

GET https://freetier-agent-api.pages.dev/api/site-contacts

When to use it

Use site-contacts when you need the business contact details of a company from its own website. Use page-rag when you need the text of a page, and email-verify to check one email address you already have.

Parameters

NameTypeDescription
url requiredstringcompany website
countrystringdefault phone country, ISO-2, default DK

Example output (real response, trimmed)

{
 "domain": "tryg.dk",
 "url": "https://tryg.dk/",
 "name": "Tryg",
 "legalName": null,
 "orgType": null,
 "description": "Tryg er Danmarks største forsikringsselskab. Find din kommende forsikring her. Få masser af gratis fordele med EkstraTryghed.",
 "language": "da",
 "address": null,
 "emails": [],
 "personalOrUnknownEmailsOmitted": 0,
 "emailsDroppedNoMx": 0,
 "phonesOmittedAsLikelyPersonal": 0,
 "phones": [
  {
   "e164": "+4532736870",
   "national": "+45 32 73 68 70",
   "country": null,
   "type": null,
   "validated": false,
   "sources": [
    "text"
   ],
   "foundOn": [
    "https://tryg.dk/kundeservice/hjaelp-til-min-side"
   ],
   "confidence": "medium"
  }
 ],
 "vatOrCompanyIds": [
  "DK-CVR 24260666"
 ],
 "socialProfiles": {
  "linkedin": [
   "https://www.linkedin.com/company/tryg",
   "https://www.linkedin.com/company/trygg-hansa"
  ],
  "facebook": [
   "https://www.facebook.com/TrygDanmark",
   "https://www.facebook.com/TryggHansa"
  ],
  "instagram": [
   "https://www.instagram.com/tryg_forsikring",
   "https://www.instagram.com/trygg_hansa"
  ],
  "youtube": [
   "https://www.youtube.com/user/TrygDanmark",
   "https://www.youtube.com/user/TrygForsikringNorge"
  ]
 },
 "pagesFetched": [
  {
   "url": "https://tryg.dk/",
   "status": 200
  },
  {
   "url": "https://tryg.dk/kundeservice",
   "status": 200
  }
 ],
 "robotsBlocked": [],
 "fetchedAt": "2026-10-24T18:11:07.639Z",
 "note": "Phone validation in this API uses a lighter rule set than the Apify Actor (no libphonenumber).",
 "sources": [
  {
   "name": "Cloudflare DNS over HTTPS (live MX/A/AAAA lookup)",
   "url": "https://developers.cloudflare.com/1.1.1.1/encryption/dns-over-https/"
  }
 ]
}

Try it

Free call (no wallet needed)

curl -s "https://freetier-agent-api.pages.dev/api/site-contacts?url=https%3A%2F%2Ftryg.dk"

Pay by card (no wallet): prepaid credits

Buy a credit pack on Gumroad (1,000 credits $3), then send your license key. The X-Credits-Remaining response header shows your balance; failed calls are not charged.

curl -s "https://freetier-agent-api.pages.dev/api/site-contacts?url=https%3A%2F%2Ftryg.dk" \
  -H 'X-License-Key: YOUR-LICENSE-KEY'

JavaScript / TypeScript (@x402/fetch)

// npm i @x402/fetch @x402/evm viem
import { wrapFetchWithPaymentFromConfig } from "@x402/fetch";
import { ExactEvmScheme } from "@x402/evm";
import { privateKeyToAccount } from "viem/accounts";

const account = privateKeyToAccount(process.env.EVM_PRIVATE_KEY); // wallet with USDC on Base
const fetchWithPayment = wrapFetchWithPaymentFromConfig(fetch, {
  schemes: [{ network: "eip155:8453", client: new ExactEvmScheme(account) }],
});
const res = await fetchWithPayment("https://freetier-agent-api.pages.dev/api/site-contacts?url=https%3A%2F%2Ftryg.dk");
console.log(await res.json());

Python (x402 + httpx)

# pip install "x402[httpx,evm]" eth-account
import asyncio, os
from eth_account import Account
from x402 import x402Client
from x402.http.clients import x402HttpxClient
from x402.mechanisms.evm import EthAccountSigner
from x402.mechanisms.evm.exact.register import register_exact_evm_client

async def main():
    client = x402Client()
    register_exact_evm_client(client, EthAccountSigner(Account.from_key(os.environ["EVM_PRIVATE_KEY"])))
    async with x402HttpxClient(client) as http:
        r = await http.get("https://freetier-agent-api.pages.dev/api/site-contacts?url=https%3A%2F%2Ftryg.dk")
        print(r.json())

asyncio.run(main())

A bare request without parameters returns the HTTP 402 payment challenge (x402 v2 in the PAYMENT-REQUIRED header, v1 in the body). Invalid input gets a 400 before any payment.

Billing policy

Failed calls are never charged. Failed calls are never charged: the payment is verified first, the request runs, and the payment is settled only if it succeeded. Errors (4xx/5xx) are not settled, and invalid input is rejected before any payment or free call.

Uptime and latency

Independent monitoring of this endpoint: 402index service page (health, 30-day uptime, p50 latency).

Also available as


Agent Extraction API by FreeTier Kits · Terms · llms.txt · /.well-known/x402 · MCP: https://freetier-agent-api.pages.dev/mcp · Contact: tec@mail.grokbot.com
This site and its texts were written with AI assistance and reviewed for accuracy; example outputs are real responses from the API.