Domain Availability Checker & Brand TLD Matrix avatar

Domain Availability Checker & Brand TLD Matrix

Pricing

from $2.50 / 1,000 domain checkeds

Go to Apify Store
Domain Availability Checker & Brand TLD Matrix

Domain Availability Checker & Brand TLD Matrix

Check brand keywords across TLDs with authoritative RDAP and DNS evidence, stable matrix output, and explicit unknown states.

Pricing

from $2.50 / 1,000 domain checkeds

Rating

0.0

(0)

Developer

TrueNorth

TrueNorth

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

4 days ago

Last modified

Share

Turn brand names into a deterministic keyword × top-level domain (TLD) matrix for naming research, startup domain discovery, agency projects, portfolio monitoring, and brand-protection watchlists. This bulk domain checker uses authoritative Registration Data Access Protocol (RDAP) routing plus optional Domain Name System (DNS) evidence and returns one auditable row per candidate.

Every result is registered, available, or unknown. Stable row, column, and matrix indexes make repeated runs easy to compare through JSON, CSV, Excel, Google Sheets, webhooks, or the Apify API.

Use it as a TLD availability matrix, TLD checker, brand domain checker, RDAP domain lookup, domain status API, domain availability API, or brand domain monitor. It is not a WHOIS scraper, premium domain pricing tool, registrar checkout, or domain-registration service.

This Actor is not affiliated with Vercel, any registry, or any registrar. It does not return registrar prices, premium status, purchasability, ownership advice, trademark clearance, registration services, or purchase guarantees.

Why use this domain availability checker?

  • Generate every brand keyword × TLD combination automatically.
  • Discover registry RDAP endpoints from the official Internet Assigned Numbers Authority (IANA) bootstrap registry.
  • Require both authoritative RDAP 404 and exact DNS NXDOMAIN before returning available.
  • Preserve explicit unknown results for rate limits, unsupported TLDs, stale evidence, malformed responses, transport failures, and RDAP/DNS conflicts.
  • Include evidence timestamps, endpoint provenance, cache status, attempts, HTTP status, and stable reason codes.
  • Export one strict domain-status API row per candidate.
  • Schedule identical matrices and monitor domain registration status over time.
  • Cache stable positive and negative evidence while never persisting transient errors.

Input

{
"keywords": ["acme", "acme-labs"],
"tlds": ["com", "org", "io"],
"dnsCorroboration": true
}
FieldRequiredExact limitsMeaning
keywordsyes1–100; each canonical label ≤ 63 bytesOne DNS label per entry
tldsno1–50; default com, org, net, ioSingle-label TLDs; one leading dot accepted
dnsCorroborationnodefault trueRequired for any available result

Maximum matrix size is 2,000 cells. Input is Unicode Normalization Form C (NFC)-normalized, lowercased, converted with Internationalized Domain Names in Applications (IDNA), and validated at runtime. Canonical duplicates, embedded dots, invalid labels, unknown properties, and oversized matrices fail input validation.

Output

Default dataset contains one strict item per matrix cell. Keyword order is outer; TLD order is inner. Concurrent network completion never changes row-major output order.

{
"keyword": "acme",
"tld": "com",
"canonicalKeyword": "acme",
"canonicalTld": "com",
"domain": "acme.com",
"rowIndex": 0,
"columnIndex": 0,
"matrixIndex": 0,
"status": "unknown",
"reason": "CONFLICT_RDAP_404_DNS_EXISTS",
"checkedAt": "2026-07-27T12:00:00.000Z",
"rdap": {
"classification": "not_found",
"authoritative": true,
"bootstrapFresh": true,
"serviceBaseUrl": "https://registry.example/rdap/",
"requestUrl": "https://registry.example/rdap/domain/acme.com",
"finalUrl": "https://registry.example/rdap/domain/acme.com",
"httpStatus": 404,
"attempts": 1,
"cached": false,
"responseTimeMs": 121,
"checkedAt": "2026-07-27T12:00:00.000Z",
"errorCode": null
},
"dns": {
"enabled": true,
"classification": "exists",
"queryType": "SOA",
"attempts": 1,
"cached": false,
"responseTimeMs": 42,
"checkedAt": "2026-07-27T12:00:00.000Z",
"errorCode": null
}
}

Run-level OUTPUT in the default key-value store reports exact total, registered, available, and unknown counts, DNS setting, timestamps, and dataset ID.

Understanding the three states

  • registered: authoritative RDAP returned a valid matching domain entity. With DNS enabled, DNS must not contradict RDAP with NXDOMAIN.
  • available: fresh IANA routing led to an authoritative RDAP 404, and DNS returned exact NXDOMAIN.
  • unknown: evidence was incomplete, stale, unsupported, malformed, rate-limited, unavailable, or contradictory.

available describes evidence at check time, not a purchase guarantee. Domain state can change immediately after a check.

Common unknown reasons:

  • CONFLICT_RDAP_FOUND_DNS_NXDOMAIN
  • CONFLICT_RDAP_404_DNS_EXISTS
  • DNS_ERROR
  • DNS_REQUIRED_FOR_AVAILABILITY
  • STALE_BOOTSTRAP_CANNOT_PROVE_AVAILABILITY
  • NO_AUTHORITATIVE_RDAP_SERVICE
  • RDAP_HTTP_ERROR
  • RDAP_RATE_LIMITED
  • RDAP_TRANSPORT_ERROR
  • RDAP_INVALID_RESPONSE

Evidence and cache policy

Actor downloads official IANA DNS RDAP bootstrap data, accepts only HTTPS service bases, follows at most three HTTPS redirects, and never guesses registry endpoints. Bootstrap remains fresh for 24 hours and can locate positive RDAP records from stale fallback for up to seven days; stale 404 never proves availability.

Cached evidence keeps its original timestamp:

  • RDAP found: 12 hours
  • RDAP 404: 15 minutes
  • DNS exists: 15 minutes
  • DNS NXDOMAIN: 5 minutes

Errors are never persisted between runs. DNS disabled skips DNS network calls; RDAP 404 then remains unknown. A DNS Start of Authority (SOA) query distinguishes exact NXDOMAIN from NOERROR with no data (NODATA).

Billing behavior

Pay-Per-Event (PPE) integration uses one domain-checked event per successfully persisted dataset row. No event is charged before persistence, after a failed dataset write, or during guarded local fixture verification. Apify Store pricing shown at run time is the source of truth; this repository does not claim that planned pricing is remotely configured.

Monitoring and AI workflows

Schedule identical input and compare domain, status, reason, and checkedAt. Stable indexes support Sheets, CSV, webhooks, vector databases, relational databases, and Retrieval-Augmented Generation (RAG) pipelines. Preserve status, reason, rdap, and dns when asking a large language model (LLM) to rank candidates. Treat transitions into or out of unknown as evidence-health changes, not registration events.

Do not use output as legal trademark advice or proof that a domain can be purchased.

Data sources and limits

  • IANA RDAP bootstrap: https://data.iana.org/rdap/dns.json
  • Registry RDAP endpoints: validated HTTPS bases published through IANA bootstrap data
  • DNS evidence: exact SOA query with NXDOMAIN separated from NOERROR/NODATA

No WHOIS (historical domain-registration lookup protocol) HTML scraping, browser automation, registrar account, private API key, pricing endpoint, checkout action, typo generation, or legal conclusion is used.

Local development

Requires Node.js 22 and pnpm 10.

pnpm install --frozen-lockfile
pnpm test
pnpm coverage
pnpm format:check
pnpm lint
pnpm typecheck
pnpm build
pnpm validate:schemas
apify validate-schema

Deterministic fixture mode is internal and test-only. It requires NODE_ENV=test, loopback transport, fixture files under tests/fixtures, and a non-Cloud environment. Any fixture flag on Apify Cloud aborts startup. Fixture verification persists rows and writes OUTPUT but never emits PPE charges.