Name Availability Research
Two-part check for any candidate name: (1) domains (scriptable, reliable) and (2) trademarks (must be done through the browser skill — registries block scripts).
When to use
A user is choosing a name for a startup / SaaS / product / brand and wants to know if it is actually usable: can they get a domain, and is it free of conflicting trademarks (especially EU / EUIPO and DACH national offices).
1. Domain availability (scripted)
scripts/check-domains.sh <name> [tld ...] # paths relative to this skill dir
scripts/check-domains.sh acme # default TLD set: ai com
scripts/check-domains.sh acme com ai io de # specific TLDs
scripts/check-domains.sh acme.ai foo.com # full domains accepted too
scripts/check-domains.sh -t com,ai,io a b c # several names x several TLDs
scripts/check-domains.sh --json acme com ai # machine-readable output
Options: -t/--tlds LIST · -j/--jobs N (parallelism, default 6) · --json · --no-cache.
How it decides TAKEN / AVAILABLE / UNKNOWN / INVALID-TLD — signals are checked in
order of reliability and it stops at the first decisive one, so most lookups take well
under a second:
- IANA TLD list (cached 30 days): an undelegated TLD is reported
INVALID-TLD, never "available" —acme.zzzis a typo, not a free domain. - RDAP (
rdap.org): 200 = registered. - DNS NS records present = registered & delegated.
- whois free/taken markers (decisive for
.de,.at, etc., which have no open RDAP); rate-limit replies are reported asUNKNOWN, never as free. - RDAP 404 with no contradicting whois = available.
A domain registered but not configured (no DNS) is still correctly flagged TAKEN via
RDAP/whois — more accurate than a plain DNS check. whois/dig are optional; the script
notes on stderr when a signal was unavailable. Always tell the user this is a strong
indicator, not a guarantee — premium, reserved and blocked names can still fail at a
registrar checkout.
2. Trademark search
Try the trademark-search skill first — it queries the
TMview JSON API directly (curl + jq, no browser) and returns marks, Nice classes, status,
owner and a verdict:
../trademark-search/scripts/tmview-search.sh "<name>" -o DACH
Fall back to the browser route below when that API is unavailable, when you need the original record pages, or when checking registers TMview does not cover well.
Browser fallback
EUIPO / TMview / WIPO web UIs sit behind bot-protection and cannot be scraped with curl
(connections are dropped). Do this step with an available browser skill —
agent-browser, browser-tools, or web-browser.
Get the verification links:
scripts/tm-links.sh "<name>"
Then, using the browser skill:
- Open TMview (
https://www.tmdn.org/tmview/) — searches EUIPO + national offices. Search the exact name; set Offices = EM (EUIPO) for the EU mark. Also run it with no office filter to catch national (DE/AT/CH) and international registrations. - For each hit, capture: mark text, owner/applicant, Nice class(es), status (Registered / Filed / Expired / Withdrawn), and office.
- Cross-check Germany on DPMAregister if the brand is DACH-focused.
- Also run WIPO Global Brand Database for worldwide / international marks.
Interpreting trademark results
- No identical or similar marks in relevant Nice classes → name looks clear.
- Identical mark, different & unrelated Nice class → often usable, but flag the risk.
- Identical/similar mark in the SAME or related class (for software/SaaS that's typically Nice class 9, 42, and often 35) → conflict; recommend a different name.
- Always note this is not legal advice — recommend a trademark attorney before filing.
Recommended output to the user
Produce a compact table per candidate name:
| Name | Domains (key TLDs) | EUIPO/TM status | Verdict |
|---|---|---|---|
| Acme | .com taken, .ai free, .de free | 1 mark, class 25 (apparel) — unrelated | ✅ usable (get .ai) |
Then give a clear recommendation and the caveats (indicator not guarantee; not legal advice).