Search domain name availability and registration prices. Use when the user mentions domains, TLDs, domain registration, domain availability, or wants to find...
---
name: dotld
description: >
Search domain name availability and registration prices. Use when the user
mentions domains, TLDs, domain registration, domain availability, or wants
to find, check, or brainstorm domain names. Runs the dotld CLI to query
the Dynadot API for real-time pricing and availability.
version: 1.0.7
license: MIT
allowed-tools: Bash(dotld*)
metadata:
tags: [domains, dns, dynadot]
openclaw:
requires:
bins: [dotld]
env: [DYNADOT_API_PRODUCTION_KEY]
primaryEnv: DYNADOT_API_PRODUCTION_KEY
---
# dotld — Domain Availability & Pricing
## Installation
If `dotld` is not already available on the machine, install it:
```bash
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:
1. `--dynadot-key <key>` flag (also auto-saves to config for future runs)
2. `DYNADOT_API_PRODUCTION_KEY` environment variable
3. 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:
```bash
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:
```bash
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`:
```bash
dotld acme.com startup.io mybrand
dotld --file domains.txt
```
## Output Interpretation
- `domain · Taken` — registered, not available
- `domain · $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:
```bash
dotld coolstartup.com
```
**User has a brand name or keyword** → run keyword expansion:
```bash
dotld coolstartup
```
**User wants to brainstorm** → suggest name variations, then batch-check them:
```bash
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:
```bash
dotld --file domains.txt
```
**Structured output** → when parsing results programmatically:
```bash
dotld acme --json
```
## Examples
### Check if a domain is taken
```bash
$ dotld example.com
example.com · Taken
```
### Explore TLDs for a keyword
```bash
$ 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
```bash
$ 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"
}
]
}
```
don't have the plugin yet? install it then click "run inline in claude" again.
added explicit external connection details (dynadot api endpoint and rate limits), clarified decision points for input type and api key resolution, documented edge cases (rate limits, auth expiry, network timeouts, empty results), expanded procedure into 8 discrete steps with inputs/outputs, and added output contract specifics for both human and json formats.
check domain name availability and real-time registration prices via the Dynadot API. use this skill when the user mentions domains, TLDs, domain registration, domain availability, or wants to find, check, or brainstorm domain names. runs the dotld CLI to query live pricing and availability across 9 popular TLDs (com, net, org, io, ai, co, app, dev, sh) or specific domains you provide.
external connection: Dynadot API
--dynadot-key <key> flag (auto-saves to ~/.config/dotld/config.json)DYNADOT_API_PRODUCTION_KEY environment variablerequired binaries
dotld CLI installed and in PATH. if missing, install via:curl -fsSL https://raw.githubusercontent.com/tedstonne/dotld/main/scripts/install.sh | bash
parameters
verify dotld is installed
which dotldverify Dynadot API key is set
dotld --help will show key statusparse user input
run exact domain lookup (if input contains dot)
dotld example.comexample.com · Taken (registered, unavailable)example.com · $9.99 · https://www.dynadot.com/domain/search?domain=example.com&rscreg=github (available)run keyword expansion (if input has no dot)
dotld acmeacme
├─ acme.com · Taken
├─ acme.net · Taken
├─ acme.io · $39.99 · https://www.dynadot.com/domain/search?domain=acme.io&rscreg=github
└─ acme.sh · Taken
run batch lookup (if multiple inputs or --file flag)
dotld domain1 domain2 domain3 OR dotld --file domains.txtconvert to JSON if requested
dotld <domain> --json{
"results": [
{
"domain": "example.com",
"available": false,
"price": null,
"currency": "USD",
"buyUrl": null,
"cached": false,
"quotedAt": "2026-02-21T00:00:00.000Z"
}
]
}
parse and present results to user
if input contains a dot: run exact domain lookup (step 4). if input has no dot, run keyword expansion across 9 TLDs (step 5).
if Dynadot API key is missing: check in order: --dynadot-key flag, DYNADOT_API_PRODUCTION_KEY env var, ~/.config/dotld/config.json. if all are empty, exit with error message and link to https://www.dynadot.com/account/domain/setting/api.html. user must provide key before proceeding.
if --file flag is provided: read domains from file (one per line) instead of command-line arguments. skip step 3 (parse single input), run batch lookup (step 6).
if --json flag is provided: output structured JSON (step 7) instead of human-readable tree table. useful for programmatic parsing or downstream tools.
if domain is available: display price (in USD), buy link, and encourage user to register. if domain is taken, move to next option or suggest variations.
if result set is empty: (e.g., file with no valid domains, or network issue), exit gracefully with error message. do not proceed to step 8.
if network timeout occurs: check --timeout parameter (default 10s). if user suspects slow network, increase timeout (e.g. --timeout 30s) and retry. if timeout persists after retry, suspect Dynadot API outage or user network issue.
if rate limit is hit: Dynadot API will return 429 or rate-limit error. user must wait before retrying. batch requests should be staggered or split across multiple runs. dotld may cache results (see cached field in JSON output).
if API key is invalid or expired: Dynadot API returns 401 or 403. user must refresh key at https://www.dynadot.com/account/domain/setting/api.html and update DYNADOT_API_PRODUCTION_KEY env or --dynadot-key flag.
human-readable table output (default)
JSON structured output (--json flag)
error output