domain — is this name actually free?
A name is not available because a domain is free. It has to be clear on every surface the
product will live on: the zones you will buy, the App Store (where names are unique and a
collision blocks release), Google Play, the code host, and the trademark register. Checking only
the domain is how people buy a domain for a name the App Store will later refuse.
Output: a table of candidates against those surfaces, and a recommendation that says what the
runner-up trades away.
Workflow
- List candidates. 6–12 names, including the user's own suggestions verbatim — they know
their brand voice, and the job here is verification, not taste.
- Zones. RDAP first, whois for ccTLDs — RDAP lies about them, see Gotchas.
- App Store. Exact-name search. Do this before pricing domains: a blocked store name
makes the domain worthless.
- Code host. GitHub is a reliable signal; most social sites are not.
- Whatever sits on a taken
.com. Fetch its title. Parked junk, "Coming Soon" and a live
business in the same category are three different risks, not one.
- Trademark. Search the exact name plus "trademark". Flag holders who defend aggressively
in that category.
- Recommend one, with the trade-off stated.
Zones
# RDAP: 404 = free, 200 = registered. -L is required — rdap.org answers 302 first.
avail() { [ "$(curl -sL -o /dev/null -w '%{http_code}' --max-time 20 \
"https://rdap.org/domain/$1")" = "404" ] && echo FREE || echo taken; }
# ccTLDs (.co .io .me .ai …) — RDAP usually has no server for them, so whois is the source.
avail_cc() { whois "$1" 2>/dev/null | grep -qiE "no match|not found|no data found" \
&& echo FREE || echo taken; }
Run the check against a domain known to be registered (google.com, google.co) before
trusting a batch. That one control call is what separates a report from a guess.
App Store
curl -s "https://itunes.apple.com/search?term=NAME&entity=software&limit=25&country=us" \
| python3 -c "
import json,sys,re
n='NAME'.lower()
r=json.load(sys.stdin)['results']
hit=[a['trackName'] for a in r if n==re.sub(r'[^a-z0-9]','',a['trackName'].lower().split(':')[0])]
print('TAKEN: '+hit[0] if hit else 'free')"
Match the part before the colon — store names are Brand: Subtitle and the subtitle is
marketing, not identity. On a hit, follow up with
https://itunes.apple.com/lookup?id=<trackId>: an app with zero ratings and an untouched 1.0 is
a name collision, not a market leader, and that difference changes the advice you give.
Code host
curl -s -o /dev/null -w "%{http_code}" https://github.com/NAME — 404 means free.
Gotchas
- RDAP returns 404 for entire ccTLD zones it has no server for.
google.co reports 404, i.e.
"free". Every .co, .io or .me checked that way reads as available, and every one of those
answers is worthless. Use whois there, and prove the method on a domain you know is taken.
curl without -L against rdap.org returns 302 for everything, so free and taken look
identical.
- whois for
.app and other Google Registry zones often returns nothing at all — and empty
output reads as "no match" to a careless grep, i.e. "free". RDAP works there; whois does not.
- A taken
.com is three different situations. Fetch the <title>: a live business in the
same category kills the name in every zone; a parking page costs only that zone; "Coming Soon"
means someone is building right now, which is the worst case — they will look like a copy of
you, or you of them.
- Google Play's search page echoes the query string, so grepping its HTML for the name
matches the query itself and reports a collision that does not exist. Look for app cards.
- X and Instagram return 200 for handles that do not exist — they serve an app shell before
resolving the name. As availability checks they are noise. GitHub's 404 is honest.
- App Store names are unique per store. A free domain plus a taken store name means the
product cannot ship under that name. The store is the constraint that cannot be negotiated;
check it first.
Don't
- Don't buy before the store check. The domain is the cheap, reversible part.
- Don't trust one method or one source. Two independent signals (RDAP + DNS
NS, or whois +
the live site) cost seconds and catch every zone-wide false positive above.
- Don't put the mechanism in the name —
*AI, *GPT, *Chain. It dates the brand to a
single year, and in trust-sensitive categories (health, legal, immigration, finance) it
advertises that a machine decides, which is the opposite of what those buyers are looking for.
- Don't take a name whose
.com runs a competitor, even when your zone is free. You will
feed their typo traffic forever and lose every trademark argument.
- Don't promise the outcome in the name in a regulated category — a brand that sounds like a
guarantee ("approved", "granted") invites both the regulator and the disappointed customer.
Optimism is fine; a promise is not.
- Don't optimise only for English. Check how the word lands in the languages the product
actually sells in. A name that is a real word in each travels for free, and casual slang that
reads as addressed to one gender quietly excludes half the market.
1---2name: solo-domain3description: Check whether a product name is actually free — across domain zones (RDAP + whois), the App Store, Google Play, GitHub and trademarks — before buying anything. Use when the user says "проверь домен", "свободно ли имя", "check this domain", "нужно название", "придумай имя проекту", is picking a brand, or is about to buy a domain. Do NOT use for DNS records, hosting or redirects on a domain already owned (that is /deploy).4license: MIT5---67# domain — is this name actually free?89A name is not available because a domain is free. It has to be clear on **every surface the10product will live on**: the zones you will buy, the App Store (where names are unique and a11collision blocks release), Google Play, the code host, and the trademark register. Checking only12the domain is how people buy a domain for a name the App Store will later refuse.1314Output: a table of candidates against those surfaces, and a recommendation that says what the15runner-up trades away.1617## Workflow18191. **List candidates.** 6–12 names, including the user's own suggestions verbatim — they know20 their brand voice, and the job here is verification, not taste.212. **Zones.** RDAP first, whois for ccTLDs — RDAP lies about them, see Gotchas.223. **App Store.** Exact-name search. Do this *before* pricing domains: a blocked store name23 makes the domain worthless.244. **Code host.** GitHub is a reliable signal; most social sites are not.255. **Whatever sits on a taken `.com`.** Fetch its title. Parked junk, "Coming Soon" and a live26 business in the same category are three different risks, not one.276. **Trademark.** Search the exact name plus "trademark". Flag holders who defend aggressively28 in that category.297. **Recommend one**, with the trade-off stated.3031### Zones3233```sh34# RDAP: 404 = free, 200 = registered. -L is required — rdap.org answers 302 first.35avail() { [ "$(curl -sL -o /dev/null -w '%{http_code}' --max-time 20 \36 "https://rdap.org/domain/$1")" = "404" ] && echo FREE || echo taken; }3738# ccTLDs (.co .io .me .ai …) — RDAP usually has no server for them, so whois is the source.39avail_cc() { whois "$1" 2>/dev/null | grep -qiE "no match|not found|no data found" \40 && echo FREE || echo taken; }41```4243**Run the check against a domain known to be registered** (`google.com`, `google.co`) before44trusting a batch. That one control call is what separates a report from a guess.4546### App Store4748```sh49curl -s "https://itunes.apple.com/search?term=NAME&entity=software&limit=25&country=us" \50 | python3 -c "51import json,sys,re52n='NAME'.lower()53r=json.load(sys.stdin)['results']54hit=[a['trackName'] for a in r if n==re.sub(r'[^a-z0-9]','',a['trackName'].lower().split(':')[0])]55print('TAKEN: '+hit[0] if hit else 'free')"56```5758Match the part **before the colon** — store names are `Brand: Subtitle` and the subtitle is59marketing, not identity. On a hit, follow up with60`https://itunes.apple.com/lookup?id=<trackId>`: an app with zero ratings and an untouched 1.0 is61a name collision, not a market leader, and that difference changes the advice you give.6263### Code host6465`curl -s -o /dev/null -w "%{http_code}" https://github.com/NAME` — 404 means free.6667## Gotchas6869- **RDAP returns 404 for entire ccTLD zones it has no server for.** `google.co` reports 404, i.e.70 "free". Every `.co`, `.io` or `.me` checked that way reads as available, and every one of those71 answers is worthless. Use whois there, and prove the method on a domain you know is taken.72- **`curl` without `-L` against rdap.org** returns 302 for everything, so free and taken look73 identical.74- **whois for `.app` and other Google Registry zones** often returns nothing at all — and empty75 output reads as "no match" to a careless grep, i.e. "free". RDAP works there; whois does not.76- **A taken `.com` is three different situations.** Fetch the `<title>`: a live business in the77 same category kills the name in every zone; a parking page costs only that zone; "Coming Soon"78 means someone is building right now, which is the worst case — they will look like a copy of79 you, or you of them.80- **Google Play's search page echoes the query string,** so grepping its HTML for the name81 matches the query itself and reports a collision that does not exist. Look for app cards.82- **X and Instagram return 200 for handles that do not exist** — they serve an app shell before83 resolving the name. As availability checks they are noise. GitHub's 404 is honest.84- **App Store names are unique per store.** A free domain plus a taken store name means the85 product cannot ship under that name. The store is the constraint that cannot be negotiated;86 check it first.8788## Don't8990- **Don't buy before the store check.** The domain is the cheap, reversible part.91- **Don't trust one method or one source.** Two independent signals (RDAP + DNS `NS`, or whois +92 the live site) cost seconds and catch every zone-wide false positive above.93- **Don't put the mechanism in the name** — `*AI`, `*GPT`, `*Chain`. It dates the brand to a94 single year, and in trust-sensitive categories (health, legal, immigration, finance) it95 advertises that a machine decides, which is the opposite of what those buyers are looking for.96- **Don't take a name whose `.com` runs a competitor**, even when your zone is free. You will97 feed their typo traffic forever and lose every trademark argument.98- **Don't promise the outcome in the name** in a regulated category — a brand that sounds like a99 guarantee ("approved", "granted") invites both the regulator and the disappointed customer.100 Optimism is fine; a promise is not.101- **Don't optimise only for English.** Check how the word lands in the languages the product102 actually sells in. A name that is a real word in each travels for free, and casual slang that103 reads as addressed to one gender quietly excludes half the market.