↗ contactfinder.
BUILT FOR MACHINE CLIENTS

A contact API
you can inspect.

Target + contact goal → ranked public business contacts with original evidence.

1. Make a request

curl https://contactfinder.online/api/v1/find \
  -H 'Content-Type: application/json' \
  -H 'Idempotency-Key: a-random-secret-at-least-16-chars' \
  -d '{"target":{"domain":"example.com"},"contact_goal":"sales"}'

Provide a domain, website, known URL, business name, organization, or professional name with business context. Optional country, city, region and location help disambiguate. Name-only searches return candidate websites for explicit selection. Add preferred_methods, max_results (1–10), and tier (quick, standard, deep).

2. Authorize payment

Read HTTP 402 and its PAYMENT-REQUIRED header. Use an x402 v2 EVM client to sign the exact USDC requirement. Resend the identical body and Idempotency-Key with PAYMENT-SIGNATURE. CDP verifies and settles to the configured receiving wallet before research begins. No cookies or browser session required.

Demo requests accept PAYMENT-SIGNATURE: demo:<your-key>. Demo contacts are fictional. Real payments are unavailable when live configuration is incomplete.

3. Read the evidence

Contacts include value, original display value, purpose, original department term, organization (observed site name), confidence, verification_class, verification_status, source_url, checked_at and evidence containing original text, source URL, declared page language, detected writing system and retrieval timestamp. best_contact references a contact ID. Confidence is a ranking heuristic, not a statistical guarantee.

verification_class is VERIFIED only when the contact was observed on the target's official site; LIKELY when observed on an external public source; INFERRED and UNKNOWN are reserved states that the extractor never upgrades. published_on_official_site and published_on_external_source mean the contact was observed. Syntax alone does not verify an email. MX checks and deliverability have separate fields. The MVP does not infer addresses or probe mailboxes. External source freshness remains unknown.

4. Retrieve or retry

GET /api/v1/requests/{id}
Authorization: Bearer <original Idempotency-Key>

Keep this key secret. HTTP 202 means processing; check the Location URL again after a few seconds. For retryable provider failures, send the original request and key again with Authorization: Bearer <same Idempotency-Key> and no new payment (an unauthenticated, unsigned request only receives a fresh 402 challenge). Up to two free retries. Humans can open /result/{id} with the key. For settlement_unknown, preserve the request ID and wait for operator reconciliation. Never generate a fresh key for a payment whose outcome is uncertain.

Health

GET /api/v1/health checks configuration only and never touches the database. GET /api/v1/health?ready=1 also checks database readiness; it is rate limited and cached for five minutes.

Global inputs

UTF-8 input and evidence are preserved. source_languages, local_terms and aliases guide local search. request_language and preferred_output_language are independent of country. Explanations use stable machine codes; quoted evidence is never translated automatically. International domains use IDNA for retrieval, while original input remains in the result. E.164 phones require explicit country context or an international prefix.

Errors & limits

400 invalid input/URL/key; 402 payment required; 409 conflicting key or reused payment; 413 body above 16 KiB; 415 unsupported content type; 429 rate limit; 503 unavailable configuration, provider failure, or uncertain settlement. Retrieval uses public HTTP(S), DNS address pinning, three redirects, 12-second deadlines and 1 MB page limits. No authenticated or private pages.

Privacy & retention

Public business/professional use only. No private personal data, passwords, home addresses or access-control bypass. Results and supporting excerpts expire after the configured retention period (default 30 days). Compact replay and accounting records remain for 365 days. No bulk outreach or contact database is built.

Price & scope

Current prices and budgets. Price = max(0.03 USDC, 3 × the variable cost of one research attempt using the full tier budget), rounded up to six decimals and fixed before the search. Current prices: quick 0.061761 · standard 0.086565 · deep 0.111608 USDC. Actual per-request cost is recorded separately. There is no automatic post-search repricing. Bounded static HTML research may miss JavaScript-only contacts, obfuscated addresses and unsupported local terminology. A zero-contact result or ambiguous entity is a valid paid outcome. Two provider-failure retries; no automatic refunds.

Current pricing model
{
  "currency": "USDC",
  "network": "eip155:8453",
  "mode": "live",
  "model": "variable-cost-v2",
  "formula": "max(minimum_usdc, multiplier × estimated_variable_cost_usd), rounded up to 0.000001 USDC",
  "multiplier": 3,
  "minimum_usdc": 0.03,
  "cost_basis": "worst_case_single_attempt",
  "calibration": {
    "measured_at": "2026-09-28",
    "method": "Live pipeline with the production page fetcher against 6 real business websites (EN, DE, JA, RU, FR); zero paid search needed.",
    "measured_max": {
      "cpu_seconds": 0.38,
      "wall_seconds": 7.7,
      "result_bytes": 14283,
      "searches": 0
    }
  },
  "tiers": [
    {
      "tier": "quick",
      "amount": "0.061761",
      "currency": "USDC",
      "model_id": "8bf64b49eb4e31e7",
      "formula": "max(minimum_usdc, multiplier × estimated_variable_cost_usd), rounded up to 0.000001 USDC",
      "multiplier": 3,
      "minimum_usdc": 0.03,
      "estimated_variable_cost_usd": 0.020586856533,
      "cost_basis": "worst_case_single_attempt",
      "cost_components_usd": {
        "search": 0.016,
        "page_provider": 0,
        "model": 0,
        "browser": 0,
        "email_verification": 0,
        "compute_cpu": 0.000062222222,
        "compute_memory": 0.000329777778,
        "invocations": 0.0000024,
        "edge_requests": 0.000008,
        "transfer": 0.0000688128,
        "storage": 0.000115643733,
        "database": 0.003,
        "settlement": 0.001,
        "other": 0
      },
      "searches": 2,
      "pages": 3,
      "priced_attempts": 1,
      "included_attempts": 3,
      "assumptions": {
        "memory_gb": 2,
        "cpu_seconds_base": 1,
        "cpu_seconds_page": 0.25,
        "overhead_seconds": 10,
        "page_timeout_seconds": 12,
        "search_seconds": 5,
        "result_bytes": 65536,
        "replay_bytes": 8192,
        "storage_amplification": 2,
        "retrieval_allowance": 2,
        "retention_days": 30,
        "wall_seconds_per_attempt": 56
      },
      "rates": {
        "search_credit_usd": 0.008,
        "settlement_usd": 0.001,
        "cpu_hour_usd": 0.128,
        "memory_gb_hour_usd": 0.0106,
        "invocation_usd": 6e-7,
        "edge_request_usd": 0.000002,
        "transfer_gb_usd": 0.21,
        "storage_gb_month_usd": 0.35,
        "database_attempt_usd": 0.003,
        "other_attempt_usd": 0
      }
    },
    {
      "tier": "standard",
      "amount": "0.086565",
      "currency": "USDC",
      "model_id": "8bf64b49eb4e31e7",
      "formula": "max(minimum_usdc, multiplier × estimated_variable_cost_usd), rounded up to 0.000001 USDC",
      "multiplier": 3,
      "minimum_usdc": 0.03,
      "estimated_variable_cost_usd": 0.028854967644,
      "cost_basis": "worst_case_single_attempt",
      "cost_components_usd": {
        "search": 0.024,
        "page_provider": 0,
        "model": 0,
        "browser": 0,
        "email_verification": 0,
        "compute_cpu": 0.000088888889,
        "compute_memory": 0.000571222222,
        "invocations": 0.0000024,
        "edge_requests": 0.000008,
        "transfer": 0.0000688128,
        "storage": 0.000115643733,
        "database": 0.003,
        "settlement": 0.001,
        "other": 0
      },
      "searches": 3,
      "pages": 6,
      "priced_attempts": 1,
      "included_attempts": 3,
      "assumptions": {
        "memory_gb": 2,
        "cpu_seconds_base": 1,
        "cpu_seconds_page": 0.25,
        "overhead_seconds": 10,
        "page_timeout_seconds": 12,
        "search_seconds": 5,
        "result_bytes": 65536,
        "replay_bytes": 8192,
        "storage_amplification": 2,
        "retrieval_allowance": 2,
        "retention_days": 30,
        "wall_seconds_per_attempt": 97
      },
      "rates": {
        "search_credit_usd": 0.008,
        "settlement_usd": 0.001,
        "cpu_hour_usd": 0.128,
        "memory_gb_hour_usd": 0.0106,
        "invocation_usd": 6e-7,
        "edge_request_usd": 0.000002,
        "transfer_gb_usd": 0.21,
        "storage_gb_month_usd": 0.35,
        "database_attempt_usd": 0.003,
        "other_attempt_usd": 0
      }
    },
    {
      "tier": "deep",
      "amount": "0.111608",
      "currency": "USDC",
      "model_id": "8bf64b49eb4e31e7",
      "formula": "max(minimum_usdc, multiplier × estimated_variable_cost_usd), rounded up to 0.000001 USDC",
      "multiplier": 3,
      "minimum_usdc": 0.03,
      "estimated_variable_cost_usd": 0.03720263431,
      "cost_basis": "worst_case_single_attempt",
      "cost_components_usd": {
        "search": 0.032,
        "page_provider": 0,
        "model": 0,
        "browser": 0,
        "email_verification": 0,
        "compute_cpu": 0.000124444444,
        "compute_memory": 0.000883333333,
        "invocations": 0.0000024,
        "edge_requests": 0.000008,
        "transfer": 0.0000688128,
        "storage": 0.000115643733,
        "database": 0.003,
        "settlement": 0.001,
        "other": 0
      },
      "searches": 4,
      "pages": 10,
      "priced_attempts": 1,
      "included_attempts": 3,
      "assumptions": {
        "memory_gb": 2,
        "cpu_seconds_base": 1,
        "cpu_seconds_page": 0.25,
        "overhead_seconds": 10,
        "page_timeout_seconds": 12,
        "search_seconds": 5,
        "result_bytes": 65536,
        "replay_bytes": 8192,
        "storage_amplification": 2,
        "retrieval_allowance": 2,
        "retention_days": 30,
        "wall_seconds_per_attempt": 150
      },
      "rates": {
        "search_credit_usd": 0.008,
        "settlement_usd": 0.001,
        "cpu_hour_usd": 0.128,
        "memory_gb_hour_usd": 0.0106,
        "invocation_usd": 6e-7,
        "edge_request_usd": 0.000002,
        "transfer_gb_usd": 0.21,
        "storage_gb_month_usd": 0.35,
        "database_attempt_usd": 0.003,
        "other_attempt_usd": 0
      }
    }
  ],
  "policy": "Prepaid fixed tier: max(minimum, 3 × variable cost of one research attempt that uses the full tier budget). Cost covers search credits, compute, database, transfer, storage and CDP settlement; there are no model, browser or translation calls. Actual per-request cost is recorded separately and is usually lower (known-domain lookups often need no paid search). No retrospective surcharge or automatic refund. Zero-contact and ambiguous results are paid outcomes. Provider failures allow two free retries with the identical key/body. Unknown settlements require reconciliation."
}