Domain & TLD Availability Checker — for Business Names avatar

Domain & TLD Availability Checker — for Business Names

Pricing

from $4.70 / 1,000 domain checkeds

Go to Apify Store
Domain & TLD Availability Checker — for Business Names

Domain & TLD Availability Checker — for Business Names

Check business-name availability across hundreds of TLDs (.com, .net, .io, .co, .ai, and more).

Pricing

from $4.70 / 1,000 domain checkeds

Rating

0.0

(0)

Developer

EndSpec

EndSpec

Maintained by Community

Actor stats

1

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Check whether a business name is available as a domain across every TLD you care about — .com, .net, .io, .co, .ai and any others you list — in one run.


Simple Input-Output Example

Input (keyword is the business name; tlds is optional):

{
"keyword": "acmerobotics",
"tlds": ["com", "io"]
}

Output (one dataset row per TLD checked):

[
{
"domain": "acmerobotics.com",
"tld": "com",
"available": false,
"registrar": "GoDaddy.com, LLC",
"valid": true,
"created_at": "2014-03-11T00:00:00Z",
"expires_at": "2027-03-11T00:00:00Z",
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\"]}"
},
{
"domain": "acmerobotics.io",
"tld": "io",
"available": true,
"registrar": null,
"valid": true,
"created_at": null,
"expires_at": null,
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\"]}"
}
]

Important Notes:

  • You get results instantly — one whois lookup per TLD, run in sequence
  • One row and one charge per TLD. Leaving tlds empty checks 10 TLDs, so a default run produces 10 rows and 10 charges
  • Availability is checked at the domain registration level only — this is not a trademark or company-registry search
  • All data comes from public whois records only
  • Contact: contact@endspec.net

Full Actor Documentation

Domain & TLD Availability Checker

Find out instantly whether your business name is still free. Check one name across .com, .net, .org, .io, .co, .ai, .app, .dev, .biz, .info — or any custom list of TLDs — and get availability plus registrar details for each.


Overview

The Domain & TLD Availability Checker is an Apify Actor that performs a domain availability check for a single business name across a list of TLDs (top-level domains), using public whois records. You give it a name; it returns one structured row per TLD telling you whether that domain is available, and if it is taken, who it is registered with and when the registration was created and expires.

It is built for the moment before you commit to a name: founders shortlisting brands, agencies clearing naming options for clients, and developers wiring a name-availability check into their own tooling.

What this Actor does not do: it does not check trademarks, does not check secretary-of-state or company-registry filings, does not check social-media handle availability, and does not suggest alternative names. It answers exactly one question, precisely: is <name>.<tld> registered?

What You Can Do

  • Check a business name across many TLDs at once: one input, one row per extension, in a single run
  • See availability per TLD: a clear boolean per domain rather than a page of whois text
  • Identify the current registrar: when a domain is taken, see which registrar holds it
  • See registration and expiry dates: spot domains whose registration lapses soon
  • Use your own TLD list: check only the extensions that matter to your brand, or a long tail of them
  • Export cleanly: pull results as JSON, CSV, or Excel from the Apify dataset, or straight from the API

Data Availability

All data returned by this Actor is publicly available information. Domain registration status, registrar, and registration dates come from public whois records that registries and registrars publish for exactly this purpose. This Actor does not return private registrant contact details; it makes public registration status easier to query programmatically.


Actor Input Parameters

The Actor accepts the following input parameters:

keyword • Type: string • Required: Yes in practice — the input schema does not mark it required, but the run fails without a usable value • Default: none (the console pre-fills acmerobotics as an example) • Description: The business name to check, without any extension. e.g., acmerobotics

tlds • Type: array of strings • Required: Optional • Default: ["com", "net", "org", "io", "co", "ai", "app", "dev", "biz", "info"] — used whenever tlds is omitted, empty, or not an array • Description: The domain extensions to check. One whois lookup — and one charge — runs per entry. e.g., ["com", "io", "ai"]

Important Notes:

  • keyword is effectively required. If it is missing, blank, or contains no usable characters, the run fails with an error and produces no dataset rows. It does not emit an error row.
  • keyword is normalized before use. It is lowercased and everything except a–z, 0–9, and - is stripped. "Acme Robotics!" becomes acmerobotics; "Acme-Robotics" becomes acme-robotics. Supply the name exactly as you want it checked — spaces disappear rather than becoming hyphens.
  • tlds entries are normalized too. Each is lowercased and stripped to a–z and 0–9; a leading dot is removed automatically, so ".com" and "com" behave identically. Entries that reduce to nothing are dropped.
  • Cost scales with the number of TLDs, not the number of names. Ten TLDs means ten lookups and ten charges. Trim the list if you only care about .com.
  • One name per run. The Actor checks a single keyword; to check a shortlist of names, run it once per name (see Best Practices).
  • A rate-limit stops the run early. If the service is busy mid-run, the Actor writes one busy row and skips every remaining TLD — those TLDs produce no rows at all. See Output Examples.

Input Examples

Example 1: Name Only (Default TLD List)

{
"keyword": "acmerobotics"
}

When to use: The standard brand check. Runs all 10 default TLDs and returns 10 rows.

Example 2: A Focused TLD Shortlist

{
"keyword": "northwindlabs",
"tlds": ["com", "io", "ai"]
}

When to use: When only a few extensions are realistic for your brand. Cheaper and faster than the default — three lookups instead of ten.

Example 3: A Hyphenated Name

{
"keyword": "north-wind-labs",
"tlds": ["com"]
}

When to use: Hyphens are preserved. Note that "north wind labs" would collapse to northwindlabs instead — if you want the hyphens, type them.

Example 4: Empty Keyword (Run Will Fail)

{
"keyword": "!!!",
"tlds": ["com"]
}

Result: Every character is stripped by normalization, leaving nothing to check. The run fails with Input "keyword" is required (the business name to check). and writes no dataset rows.


Output Structure

The Actor writes results to the Apify dataset — one row per TLD checked — from which you can export JSON, CSV, or Excel, or read them via the Apify API.

Successful Row Format

{
"domain": "string",
"tld": "string",
"available": true,
"registrar": "string or null",
"valid": true,
"created_at": "string or null",
"expires_at": "string or null",
"_query": "string"
}

Field Descriptions:

domain • Type: string • Description: The full domain that was checked — your normalized keyword joined to the TLD, e.g. acmerobotics.com

tld • Type: string • Description: The extension this row covers, without the dot, e.g. com

available • Type: boolean or null • Description: true if the domain appears unregistered and available, false if it is registered. null when the lookup returned no availability verdict.

registrar • Type: string or null • Description: The registrar currently holding the domain. Typically null for available domains, and may be null for registered ones when the record does not disclose it.

valid • Type: boolean or null • Description: Whether the domain name itself is valid/resolvable as a name for that TLD. null when not reported.

created_at • Type: string or null • Description: When the registration was first created, as reported in the public record. null for available domains and for records that omit it.

expires_at • Type: string or null • Description: When the current registration expires. null for available domains and for records that omit it.

_query • Type: string • Description: A JSON string echoing your own normalized input — keyword and the full tlds list — repeated on every row so a multi-TLD run stays traceable after export.

Note on status: successful rows do not carry a status field. status is present only on error rows, where it is always the string "error". Test for the presence of status to separate failures from results.

Error Row Format

{
"domain": "string",
"tld": "string",
"status": "error",
"error": "string",
"_query": "string"
}

error • Type: string • Description: A human-readable failure message. Only the rate-limit message is a fixed, stable string (shown verbatim in Example 4 below). Other failures produce a variable diagnostic message and should be treated as opaque text — do not pattern-match on it. Branch on the presence of status: "error" instead.


Output Examples

Example 1: Registered Domain (Full Record)

{
"domain": "acmerobotics.com",
"tld": "com",
"available": false,
"registrar": "GoDaddy.com, LLC",
"valid": true,
"created_at": "2014-03-11T00:00:00Z",
"expires_at": "2027-03-11T00:00:00Z",
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\",\"ai\"]}"
}

The name is taken on .com, held by the named registrar, and the registration runs to 2027.

Example 2: Available Domain

{
"domain": "acmerobotics.ai",
"tld": "ai",
"available": true,
"registrar": null,
"valid": true,
"created_at": null,
"expires_at": null,
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\",\"ai\"]}"
}

Nobody has registered it — so there is no registrar and there are no registration dates. This is the shape you are hoping for.

Example 3: Lookup Succeeded but Returned No Verdict (Partial / Empty Data)

{
"domain": "acmerobotics.io",
"tld": "io",
"available": null,
"registrar": null,
"valid": null,
"created_at": null,
"expires_at": null,
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\",\"ai\"]}"
}

The lookup completed but the public record carried no availability verdict — common for TLDs whose registries publish thin or rate-limited whois data. available: null means "unknown", not "available". This row is charged like any other completed lookup, because the lookup did run. Re-check the TLD, or verify at a registrar, before acting on it.

Example 4: Service Busy (Rate-Limited — Run Stops Early)

{
"domain": "acmerobotics.io",
"tld": "io",
"status": "error",
"error": "Our servers are busy right now — please retry shortly. You were not charged.",
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"io\",\"ai\"]}"
}

This message is a fixed string and is safe to match on. This row also ends the run: the remaining TLDs in your list (here, ai) are skipped and produce no rows at all. Compare _query against the rows you actually received to see what was skipped, and re-run for the remainder. You are not charged for this row or for the skipped TLDs.

Example 5: Lookup Failed for a Single TLD

{
"domain": "acmerobotics.zzz",
"tld": "zzz",
"status": "error",
"error": "Our servers returned HTTP 500: <diagnostic detail>",
"_query": "{\"keyword\":\"acmerobotics\",\"tlds\":[\"com\",\"zzz\"]}"
}

A single lookup failed — most often an unrecognized or unsupported TLD. The run continues to the next TLD. The error text here is a variable diagnostic string, not a fixed constant: its wording depends on the failure and it is not part of this Actor's stable contract. Detect the failure with status === "error" and treat error as text for a human to read. You are not charged for a failed lookup.


Use Cases

For Founders and Startups

Name shortlisting: Before you print anything, learn which of your candidate names still has a usable domain — and on which extension.

Example Workflow:

  1. Write down your 5–10 candidate business names
  2. Run the Actor once per name with tlds set to the extensions you would actually accept
  3. Export all datasets to CSV and sort by available
  4. Eliminate names where every acceptable TLD is taken
  5. For survivors, check expires_at on the .com — an imminent expiry may be worth watching

For Brand Managers and Agencies

Defensive TLD sweep: Once a name is chosen, find out which neighbouring extensions are already held by someone else, and by which registrar.

Example Workflow:

  1. Run the Actor with the client's brand name and a wide tlds list
  2. Filter rows to available: false
  3. Review registrar and expires_at on the taken ones to judge whether they are actively held or parked
  4. Register the still-available extensions worth defending

For Domain Investors

Expiry monitoring: Track when registrations on names you follow are due to lapse.

Example Workflow:

  1. Run the Actor on a target name across the TLDs you track
  2. Store expires_at and registrar per domain
  3. Schedule the run to repeat (Apify Schedules) and diff against your last result
  4. Act on domains that flip from available: false to available: true

For Developers

Name-availability endpoint: Wire a domain check into a signup flow, an internal naming tool, or a CRM enrichment step.

Example Workflow:

  1. Call the Actor via the Apify API with keyword and a short tlds list
  2. Read the dataset rows from the run
  3. Treat rows carrying status: "error" as retryable and rows with available: null as unknown
  4. Cache verdicts briefly — registration status changes slowly, and every call is a charge

Best Practices

Input

  • Trim the TLD list. The default checks 10 extensions and charges for 10. If only .com decides it, pass ["com"].
  • Type the name exactly as you want it checked. Spaces are removed, not hyphenated — "acme robotics" checks acmerobotics.com, never acme-robotics.com.
  • Do not include the dot in TLDs. It is stripped for you, but "com" is the intended form.
  • Never put an extension in keyword. "acmerobotics.com" normalizes to acmeroboticscom and you will check acmeroboticscom.com.

Interpreting Results

  • available: null is not available: true. Null means the lookup returned no verdict. Only true means free.
  • Check for status before reading data fields. Its presence marks an error row; successful rows omit it entirely.
  • Confirm at a registrar before you buy. Whois data can lag, and premium or reserved names may show as available yet be unbuyable at a normal price.
  • Only the busy message is stable. Match on status, not on error text.

Running at Scale

  • One name per run. For a shortlist, start one run per name — they execute independently and can run in parallel.
  • Re-run rather than retry in place. If a run stops on the busy row, wait a few minutes and re-run the TLDs you did not receive.
  • Schedule periodic re-checks with Apify Schedules if you are monitoring expiry, rather than polling frequently — nothing changes minute to minute.
  • Log run IDs so support can trace a specific result.

Cost, Performance, and Limits

  • Charging is per TLD, not per run. The Actor charges the domain-checked event once for each lookup that completes and returns a row. A default 10-TLD run charges 10 events; a ["com"] run charges one. The current rate is shown on the Actor's Pricing tab (launch price: $0.0050 per domain checked), and the standard Apify Actor-start event applies.
  • Failed lookups are not charged. Any row carrying status: "error" — busy or otherwise — is written without a charge.
  • Completed lookups with no verdict are charged. A row with available: null means the lookup ran and returned nothing conclusive; the work happened, so it bills as a normal check.
  • Performance: lookups run sequentially, one per TLD. A default 10-TLD run typically finishes in seconds. Runtime scales linearly with the length of tlds.
  • Resource use is minimal — this is a lookup Actor, not a browser-based scraper. No proxies and no browser are involved.
  • Limits:
    • One keyword per run.
    • No hard cap on tlds length, but each entry costs one lookup and one charge — long lists get expensive linearly.
    • Unrecognized TLDs produce an error row rather than a verdict.
    • Whois coverage is not uniform: some registries publish full records, others publish little, which is why null fields occur.
    • A rate-limit ends the run early; TLDs after that point are silently skipped.

Data Sources and Legality

This Actor reads publicly available domain registration data — the whois records that registries and registrars publish about which domains are registered, by which registrar, and until when. It returns no private registrant contact details.

Checking whether a domain is registered is a routine, public operation that the domain system exists to answer. That said:

  • You are responsible for how you use the results. Complying with applicable laws, registrar terms, and any relevant terms of service is your responsibility.
  • Availability is not clearance. A free domain says nothing about whether a name is free of trademark, company-registry, or other legal encumbrance. Consult a professional before you commit a business name.
  • Data is reported as published. Whois records may lag reality, and this Actor does not modify or enrich what the public record says.

FAQ

Q: Does an available domain mean the business name is free to use? A: No. This is a domain availability check only. Trademarks, company registrations, and other rights are outside its scope entirely — clear those separately.

Q: Can I check several business names in one run? A: No — one keyword per run. Start one run per name; they can run in parallel, and each writes its own dataset.

Q: Why is available null instead of true or false? A: The lookup completed but the public record returned no availability verdict — common for TLDs with thin or rate-limited whois data. Treat null as unknown and verify at a registrar.

Q: Why did I get fewer rows than TLDs I asked for? A: The run hit a busy/rate-limit condition and stopped early. The last row will carry status: "error" with the busy message, and every TLD after it was skipped. Re-run for the remainder in a few minutes — you were not charged for what you did not receive.

Q: How am I charged — per run or per domain? A: Per domain. One domain-checked event per completed lookup, so the default 10-TLD list charges 10.

Q: Am I charged when a lookup fails? A: No. Rows with status: "error" are never charged. Lookups that complete but return no verdict (available: null) are charged, because the check did run.

Q: My name has spaces. What should I pass? A: Whatever you want checked, literally. Spaces are stripped rather than converted, so "acme robotics" checks acmerobotics. If you want acme-robotics, type the hyphen.

Q: Can I check hundreds of TLDs? A: Yes — pass whatever list you like. Just note it is one lookup and one charge per entry, and the run gets proportionally longer.

Q: How current is the data? A: It reflects the public record at the time of the run. Registration status changes slowly, but recently registered or recently expired domains can take time to appear accurately.

Q: Can I use this commercially? A: Yes. The data is public registration information.


Contact & Support

Questions? Need Help? We're Here for You!

For questions, technical support, feature requests, or general inquiries about the Domain & TLD Availability Checker, please reach out:

Email: contact@endspec.net

Response Time: We respond within 24 hours during business days.

What to Include in Your Inquiry:

  • Your question or issue description
  • The Apify run ID (if applicable)
  • The input you used (keyword and tlds)
  • The error text and status from any error rows
  • What you expected versus what you received

If a run returns error rows, the service may be briefly busy — re-run a few minutes later, and note that failed lookups are never charged. If it persists, email us with the run ID and we will investigate.



Last Updated: July 2026