dotld — Domain Availability & Pricing
Installation
If dotld is not already available on the machine, install it:
curl -fsSL https://raw.githubusercontent.com/tedstonne/dotld/main/scripts/install.sh | bash
Prerequisites
dotld requires a Dynadot production API key. The key is resolved in this order:
--dynadot-key <key>flag (also auto-saves to config for future runs)DYNADOT_API_PRODUCTION_KEYenvironment variable- Saved config at
~/.config/dotld/config.json
Get a key at: https://www.dynadot.com/account/domain/setting/api.html
If the key is missing, dotld exits with an error and a link to the key page.
Modes of Operation
Exact domain lookup
When the input contains a dot, dotld checks that specific domain:
dotld example.com
Output:
example.com · Taken
Or if available:
example.com · $9.99 · https://www.dynadot.com/domain/search?domain=example.com&rscreg=github
Keyword expansion
When the input has no dot, dotld auto-expands across 9 popular TLDs — com, net, org, io, ai, co, app, dev, sh:
dotld acme
Output:
acme
├─ acme.com · Taken
├─ acme.net · Taken
├─ acme.org · Taken
├─ acme.io · $39.99 · https://www.dynadot.com/domain/search?domain=acme.io&rscreg=github
├─ acme.ai · Taken
├─ acme.co · Taken
├─ acme.app · Taken
├─ acme.dev · Taken
└─ acme.sh · Taken
Multiple domains at once
Pass multiple arguments or use --file:
dotld acme.com startup.io mybrand
dotld --file domains.txt
Output Interpretation
domain · Taken— registered, not availabledomain · $39.99 · https://...— available with registration price and buy link- Prices are in USD
Flags
| Flag | Description |
|---|---|
--json | Output structured JSON instead of the tree table |
--file <path> | Read domains from a file (one per line) |
--dynadot-key <key> | Provide API key (auto-saved to config) |
--timeout <duration> | Request timeout, e.g. 5s, 500ms (default: 10s) |
--currency USD | Currency for prices (only USD supported in v1) |
Workflow Guidance
User has a specific domain → run exact lookup:
dotld coolstartup.com
User has a brand name or keyword → run keyword expansion:
dotld coolstartup
User wants to brainstorm → suggest name variations, then batch-check them:
dotld coolstartup launchpad rocketship
Present results as a ranked list: show available domains sorted by price, include buy links. Suggest next steps — open a buy link, check more TLDs, try name variations.
Batch from file → when the user has a list:
dotld --file domains.txt
Structured output → when parsing results programmatically:
dotld acme --json
Examples
Check if a domain is taken
$ dotld example.com
example.com · Taken
Explore TLDs for a keyword
$ dotld acme
acme
├─ acme.com · Taken
├─ acme.net · Taken
├─ acme.org · Taken
├─ acme.io · $39.99 · https://www.dynadot.com/domain/search?domain=acme.io&rscreg=github
├─ acme.ai · Taken
├─ acme.co · Taken
├─ acme.app · Taken
├─ acme.dev · Taken
└─ acme.sh · Taken
JSON output for scripting
$ dotld example.com --json
{
"results": [
{
"domain": "example.com",
"available": false,
"price": null,
"currency": "USD",
"buyUrl": null,
"cached": false,
"quotedAt": "2026-02-21T00:00:00.000Z"
}
]
}