Browse

Website Contacts Scraper

Reads a domain's public pages and returns the email addresses, phone numbers and social profile links they publish.

POST https://YOUR_API_HOST/v1/website-contacts-scraper

Credits and caching

  • Success billing. 10 credits per domain with contacts found. You are charged only when the lookup finds something; a not-found result is free.
  • Results are cached per account for 7 days. Repeating the same lookup in that window is free and returns cache_hit: true.
  • Invalid input, rate limits and errors are never charged.
  • Read the billing rules for the full picture.

Request

Send a JSON body with Authorization: Bearer <key>. The body can be up to 64 KB.

FieldTypeRequiredNotes
urlstringnoUp to 2048 characters.
domainstringnoUp to 253 characters.
max_pagesintegernoDefault 5. Minimum 1. Maximum 10.
countrystringnoPattern ^[A-Za-z]{2}$.

Example request

Terminal
curl -X POST https://YOUR_API_HOST/v1/website-contacts-scraper \
  -H "Authorization: Bearer $LOOKVALID_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"domain":"python.org","max_pages":5}'

Response

The status is 200 whether or not anything was found. Check found. Every response also carries the X-Request-Id, X-Credits-Charged, X-Credits-Remaining and X-RateLimit-* headers.

Envelope

FieldTypeNotes
request_idstring-
product"website-contacts-scraper"-
foundbooleanFalse means the lookup ran and found nothing; it is free.
reasonstring or nullWhy nothing was found; null when found.
sourcesarray of stringWhere the data came from, including any attribution the licence requires.
credits_chargedinteger0 for a cache hit, a not-found result or an error.
credits_remaininginteger-
cache_hitbooleanTrue when the account already paid for this lookup within the cache window.
cacheobject-

The data object

Present when found is true, otherwise null.

FieldTypeNotes
emailsarray of object-
emails[].emailstring-
emails[].source_urlstring-
phonesarray of object-
phones[].e164string-
phones[].internationalstring-
phones[].countrystring or null-
phones[].source_urlstring-
social_profilesarray of object-
social_profiles[].platformstringOne of instagram, tiktok, youtube, x, facebook, linkedin, threads, reddit, pinterest, bluesky, twitch, snapchat, truthsocial.
social_profiles[].handlestring-
social_profiles[].urlstring-
pages_scannedarray of string-
scanned_atstring-

Captured example (2026-10-18)

A real run of this lookup on 2026-10-18, using the request above, which is a public input. The envelope fields are left out.

{
  "product": "website-contacts-scraper",
  "found": true,
  "data": {
    "emails": [],
    "phones": [],
    "social_profiles": [
      {
        "platform": "linkedin",
        "handle": "company/python-software-foundation",
        "url": "https://www.linkedin.com/company/python-software-foundation"
      },
      {
        "platform": "x",
        "handle": "ThePSF",
        "url": "https://x.com/ThePSF"
      }
    ],
    "pages_scanned": [
      "https://www.python.org/",
      "https://www.python.org/about/",
      "https://www.python.org/about/apps/",
      "https://www.python.org/about/quotes/",
      "https://www.python.org/about/gettingstarted/"
    ],
    "scanned_at": "2026-10-18T02:06:05.039Z"
  },
  "sources": [
    "https://www.python.org"
  ]
}

Errors

  • 400 invalid_input: The request input is invalid.
  • 401 unauthorized: The API key is missing, malformed, revoked or unknown.
  • 402 insufficient_credits: The account does not have enough credits for this lookup. Error code: insufficient_credits. During a trial whose allowance is used up the code is trial_allowance_exhausted: nothing is charged and the customer starts the plan from the billing page.
  • 405 method_not_allowed: This endpoint does not accept that HTTP method.
  • 413 payload_too_large: The request body is too large.
  • 429 rate_limited: Too many requests for this API key.
  • 500 internal_error: An unexpected error occurred.
  • 503 provider_unavailable: The data source for this product is unavailable right now.