Domain data

GET/api/v1/domainMCP get_domain_data1 credit per call

Registration date, domain age, registrar, monthly traffic, ranks and traffic sources for one domain.

Parameters

  • domain

    Typestring

    RequiredYes

    DescriptionDomain, URL or hostname. Normalized before lookup; IPs are rejected.

Request

GET https://seo-api.org/api/v1/domain?domain=example.com looks up one domain. The domain parameter accepts a bare domain, a URL or a hostname with www; it is normalized before lookup. Subdomains are looked up as they are. Every response uses the envelope { ok, data } on success and { ok: false, error } on failure. A full successful response looks like this (values are illustrative):

shell
curl "https://seo-api.org/api/v1/domain?domain=example.com" \
  -H "Authorization: Bearer YOUR_API_KEY"

Response

200 OK
{
  "ok": true,
  "data": {
    "domain": "example.com",
    "status": "ready",
    "message": null,
    "retryAfterSeconds": null,
    "site": {
      "title": "Example Domain",
      "description": "Example site used for illustration."
    },
    "registration": {
      "createdAt": 808372800000,
      "expiresAt": 1786852800000,
      "updatedAt": 1755043200000,
      "ageDays": 11283,
      "registrar": "RESERVED-Internet Assigned Numbers Authority",
      "nameServers": [
        "a.iana-servers.net",
        "b.iana-servers.net"
      ]
    },
    "traffic": {
      "latestMonth": "2026-09",
      "visits": 1840000,
      "bounceRate": 0.52,
      "pagesPerVisit": 1.6,
      "visitDurationSeconds": 74,
      "globalRank": 18452,
      "countryCode": "US",
      "countryRank": 9120,
      "category": "Computers Electronics and Technology",
      "categoryRank": 812,
      "sources": {
        "direct": 0.61,
        "searchOrganic": 0.27,
        "searchPaid": 0,
        "referrals": 0.08,
        "socialOrganic": 0.02,
        "socialPaid": 0,
        "mail": 0.01,
        "genAi": 0.01,
        "affiliate": null,
        "displayAds": null
      },
      "months": [
        {
          "month": "2026-09",
          "visits": 1840000,
          "bounceRate": 0.52,
          "pagesPerVisit": 1.6,
          "visitDurationSeconds": 74,
          "sources": null
        }
      ],
      "updatedAt": 1793145600000
    },
    "billing": {
      "creditsCharged": 1,
      "creditsRemaining": 99
    }
  }
}

Response fields

Times are Unix timestamps in milliseconds. Missing values are null, never 0, so unknown is never confused with zero.

  • domain

    Typestring

    DescriptionNormalized hostname: lowercase, no scheme or path, leading www. removed. Subdomains are kept.

  • status

    Type"ready" | "pending" | "empty" | "failed"

    Descriptionready: traffic data returned (1 credit). pending: being collected, retry later. empty: no traffic data exists. failed: collection failed.

  • message

    Typestring | null

    DescriptionHuman-readable explanation when status is not ready (English).

  • retryAfterSeconds

    Typenumber | null

    DescriptionWhen pending, how long to wait before calling again.

  • site.title / site.description

    Typestring | null

    DescriptionThe site's title and meta description as seen by the traffic panel.

  • registration.createdAt

    Typenumber | null

    DescriptionRegistration date, Unix time in milliseconds.

  • registration.ageDays

    Typenumber | null

    DescriptionWhole days between createdAt and the time of the response.

  • registration.expiresAt / updatedAt

    Typenumber | null

    DescriptionExpiry and last-updated dates from the registry, in milliseconds.

  • registration.registrar

    Typestring | null

    DescriptionSponsoring registrar name.

  • registration.nameServers

    Typestring[] | null

    DescriptionAuthoritative name servers.

  • traffic.latestMonth

    Typestring | null

    DescriptionMonth of the latest figures, YYYY-MM.

  • traffic.visits

    Typenumber | null

    DescriptionEstimated visits in latestMonth.

  • traffic.bounceRate

    Typenumber | null

    DescriptionShare of single-page visits, 0 to 1.

  • traffic.pagesPerVisit

    Typenumber | null

    DescriptionAverage pages viewed per visit.

  • traffic.visitDurationSeconds

    Typenumber | null

    DescriptionAverage visit duration in seconds.

  • traffic.globalRank / countryRank / categoryRank

    Typenumber | null

    DescriptionRank among all sites, within countryCode, and within category.

  • traffic.countryCode / category

    Typestring | null

    DescriptionTop country (ISO code) and site category.

  • traffic.sources

    Typeobject | null

    DescriptionTraffic-source shares for the latest month: direct, searchOrganic, searchPaid, referrals, socialOrganic, socialPaid, mail, genAi, affiliate, displayAds. Each 0 to 1, or null when unknown.

  • traffic.months[]

    Typearray

    DescriptionMonthly history in ascending order: month, visits, bounceRate, pagesPerVisit, visitDurationSeconds, sources.

  • traffic.updatedAt

    Typenumber | null

    DescriptionWhen the traffic figures were last collected, in milliseconds.

  • billing.creditsCharged

    Typenumber

    DescriptionCredits charged for this call: 1 or 0.

  • billing.creditsRemaining

    Typenumber | null

    DescriptionBalance after this call.

Billing

A lookup costs 1 credit only when status is ready. Looking up the same domain again within 24 hours is free, whichever of your keys or channels you use.

Errors

  • SEO_API.MISSING_API_KEY

    HTTP401

    MeaningNo Authorization header or x-api-key header.

  • SEO_API.INVALID_API_KEY

    HTTP401

    MeaningThe key does not exist or was revoked.

  • SEO_API.INVALID_DOMAIN

    HTTP400

    MeaningThe domain parameter is missing or is not a domain (IPs are rejected).

  • BILLING.INSUFFICIENT_CREDITS

    HTTP402

    MeaningThe account has no credits left. Repeat lookups within 24 hours still work.

  • SYSTEM.INTERNAL_SERVER_ERROR

    HTTP500

    MeaningSomething failed on our side. Retry with backoff.

Call it over MCP

Tool get_domain_data. Arguments and result match the REST call.

tools/call
{
  "name": "get_domain_data",
  "arguments": {
    "domain": "example.com"
  }
}

Call it from the CLI

terminal
npx @seo-api/cli domain example.com
npx @seo-api/cli domain example.com --json --wait

Other APIs