Domain data
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):
curl "https://seo-api.org/api/v1/domain?domain=example.com" \
-H "Authorization: Bearer YOUR_API_KEY"Response
{
"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.
{
"name": "get_domain_data",
"arguments": {
"domain": "example.com"
}
}Call it from the CLI
npx @seo-api/cli domain example.com
npx @seo-api/cli domain example.com --json --wait