Domain & TLD Availability Checker — for Business Names
Pricing
from $4.70 / 1,000 domain checkeds
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
Maintained by CommunityActor stats
1
Bookmarked
1
Total users
0
Monthly active users
6 days ago
Last modified
Categories
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
tldsempty 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:
keywordis 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.keywordis normalized before use. It is lowercased and everything excepta–z,0–9, and-is stripped."Acme Robotics!"becomesacmerobotics;"Acme-Robotics"becomesacme-robotics. Supply the name exactly as you want it checked — spaces disappear rather than becoming hyphens.tldsentries are normalized too. Each is lowercased and stripped toa–zand0–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:
- Write down your 5–10 candidate business names
- Run the Actor once per name with
tldsset to the extensions you would actually accept - Export all datasets to CSV and sort by
available - Eliminate names where every acceptable TLD is taken
- For survivors, check
expires_aton 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:
- Run the Actor with the client's brand name and a wide
tldslist - Filter rows to
available: false - Review
registrarandexpires_aton the taken ones to judge whether they are actively held or parked - 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:
- Run the Actor on a target name across the TLDs you track
- Store
expires_atandregistrarper domain - Schedule the run to repeat (Apify Schedules) and diff against your last result
- Act on domains that flip from
available: falsetoavailable: 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:
- Call the Actor via the Apify API with
keywordand a shorttldslist - Read the dataset rows from the run
- Treat rows carrying
status: "error"as retryable and rows withavailable: nullas unknown - 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
.comdecides it, pass["com"]. - Type the name exactly as you want it checked. Spaces are removed, not hyphenated —
"acme robotics"checksacmerobotics.com, neveracme-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 toacmeroboticscomand you will checkacmeroboticscom.com.
Interpreting Results
available: nullis notavailable: true. Null means the lookup returned no verdict. Onlytruemeans free.- Check for
statusbefore 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 onerrortext.
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-checkedevent 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: nullmeans 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
keywordper run. - No hard cap on
tldslength, 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
nullfields occur. - A rate-limit ends the run early; TLDs after that point are silently skipped.
- One
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 (
keywordandtlds) - The
errortext andstatusfrom 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.
Related Actors
- LinkedIn Instant Profile Search — find people by name, job title, or company for founder and recruiter outreach.
- Google Maps Instant Lead Finder — pull business listings and contact details from Google Maps.
- YouTube Instant Email Scraper — extract public contact emails from YouTube channels.
Last Updated: July 2026