domain
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
Chinese/domain — Brainstorm + check available .com domains
/domain — 头脑风暴与可用.com域名检查
Multi-tool workflow to find a great, affordable, available .com for a new project. Built on Laura Roeder's rule: work backwards from what's actually available — don't fall in love with a name first (source).
Defaults to only. Only deviate (.dev, .co, .io, .ai) if the project is dev-tooling-only or the user explicitly asks.
.com这是一个多工具工作流,用于为新项目找到优质、实惠且可用的.com域名。基于Laura Roeder的规则构建:从实际可用的域名倒推——不要先爱上某个名字(来源)。
默认仅检查域名。仅当项目为纯开发工具类或用户明确要求时,才考虑其他后缀(.dev、.co、.io、.ai)。
.comStep 0 — Environment checks
步骤0 — 环境检查
Verify these before proceeding (surface install commands if missing, don't try to install silently):
| Tool | Check | Install if missing |
|---|---|---|
| Vercel CLI | | |
| whois | | |
| Domainr API key | | Get free key at rapidapi.com/domainr/api/domainr, add to |
| Namecheap API | | Enable API at ap.www.namecheap.com/settings/tools/apiaccess/, add 3 env vars, whitelist your IP |
Domainr + Namecheap are optional — the workflow degrades gracefully without them (skips the corresponding cross-check steps).
在开始前验证以下工具(若缺失则显示安装命令,不要静默安装):
| 工具 | 检查方式 | 缺失时的安装方法 |
|---|---|---|
| Vercel CLI | | |
| whois | | |
| Domainr API密钥 | | 在rapidapi.com/domainr/api/domainr获取免费密钥,添加至 |
| Namecheap API | | 在ap.www.namecheap.com/settings/tools/apiaccess/启用API,添加3个环境变量并白名单你的IP |
Domainr和Namecheap为可选工具——若未配置,工作流会自动降级(跳过对应的交叉验证步骤)。
Step 1 — Set the budget
步骤1 — 设定预算
Ask: what would you pay for a great .com on this project? Anchor defaults:
| Budget | What it buys |
|---|---|
| $0 | Only unregistered domains (rare for anything good) |
| $250–$1k | Aftermarket sweet spot (HugeDomains is the standout — Laura found "a ton of great .com's available for less than $1k") |
| $1k–$2k | Laura's Paperbell.com range — plenty of brandable options |
| $2k+ | Premium |
Filter all candidates to under-budget BEFORE falling in love.
询问:你愿意为这个项目的优质.com域名支付多少钱? 参考默认区间:
| 预算 | 可购买的域名类型 |
|---|---|
| $0 | 仅未注册域名(优质域名极少) |
| $250–$1k | 二手域名黄金区间(HugeDomains是首选——Laura发现“大量优质.com域名售价低于1000美元”) |
| $1k–$2k | Laura购买Paperbell.com的预算区间——有大量可品牌化的选项 |
| $2k+ | 高端域名 |
在爱上某个域名前,先过滤掉所有超出预算的候选者。
Step 2 — Seed words for "branded" combos
步骤2 — 生成“品牌化”组合的种子词
Ask what the product does + the feeling/category. Brainstorm 20–40 candidate domains using these preferences (in order):
- Two real words mashed together ← preferred (Helpscout, RightMessage, ConvertKit, Paperbell, Mailchimp). Easy to spell, remember, google.
- Prefix/suffix the bare word — grab the .com when the bare word is taken or over budget. "I love word X, X.com is gone, what qualifier unlocks the .com?"
- Modern prefixes (B2B SaaS feel): (TryGamma, TryRoam),
try(UseMotion, UseChalk),use(WithCove, WithFrame),with(JoinHomebase, JoinHonor)join - Classic prefixes (still work): (GetMagic, GetResponse),
get(GoCardless, GoFundMe),go(HeyMarvin, HeyHenry),hey(TheBrowserCompany, TheDyrt — editorial vibe)the - Dated — avoid unless intentional: (MyFitnessPal),
my(MeetEdgar)meet - Suffixes: (Calendly, Grammarly — battle-tested but reads "2015 startup"),
+ly(Spotify, Shopify — rare, hard to land authentically),+ify(AI/research positioning),+labs/+hq(mostly informal)+app - Watch: trademark collision (is a brand violation even if registrable); popular bare words often have
UseSlack.comvariants pre-grabbed by the same owner; longer URLs cost spelling-on-phone bandwidthtry/use/get/join - Full grid: if the user loves a bare word, generate all and
try/use/with/join/get/go/hey/the + wordin one shot — ~15 variantsword + ly/ify/labs/hq/app
- Modern prefixes (B2B SaaS feel):
- One real word, slightly modified (Trello, Pinterest, Lyft) — fine.
- Made-up-sounds (Sunsama, Besedky) — only as fallback. Notoriously hard to remember.
- Common single-word objects (Clubhouse, Spoke, Blush, Finder) — AVOID. Ungoogleable, .com always taken, collides with other products.
Surface a numbered candidate list before checking — don't burn cycles checking obvious losers.
询问产品功能、传递的感受或所属品类。根据以下优先级生成20–40个候选域名:
- 两个真实词汇拼接 ← 首选(如Helpscout、RightMessage、ConvertKit、Paperbell、Mailchimp)。易拼写、易记忆、易搜索。
- 给核心词汇添加前缀/后缀 — 当核心词汇的.com已被占用或超出预算时使用。“我喜欢词汇X,但X.com已被注册,添加哪些限定词能获得可用的.com?”
- 现代前缀(B2B SaaS风格):(TryGamma、TryRoam)、
try(UseMotion、UseChalk)、use(WithCove、WithFrame)、with(JoinHomebase、JoinHonor)join - 经典前缀(仍适用):(GetMagic、GetResponse)、
get(GoCardless、GoFundMe)、go(HeyMarvin、HeyHenry)、hey(TheBrowserCompany、TheDyrt — 编辑风格)the - 过时前缀(除非有意使用,否则避免):(MyFitnessPal)、
my(MeetEdgar)meet - 后缀:(Calendly、Grammarly — 经检验有效,但带有“2015年创业公司”的印记)、
+ly(Spotify、Shopify — 罕见,难以自然落地)、+ify(AI/研究定位)、+labs/+hq(多为非正式风格)+app - 注意事项:商标冲突(即使可注册,也属于品牌侵权);热门核心词汇的
UseSlack.com变体通常已被同一所有者抢占;较长的域名会增加手机输入时的拼写成本try/use/get/join - 全变体生成:若用户喜欢某个核心词汇,一次性生成所有和
try/use/with/join/get/go/hey/the + 词汇变体——约15个选项词汇 + ly/ify/labs/hq/app
- 现代前缀(B2B SaaS风格):
- 单个真实词汇的轻微变体(如Trello、Pinterest、Lyft)——可行。
- 自创发音词汇(如Sunsama、Besedky)——仅作为备选。极难记忆。
- 常见单个词汇(如Clubhouse、Spoke、Blush、Finder)—— 避免使用。难以搜索,.com域名几乎已被占用,且易与其他产品冲突。
在检查前先展示编号的候选列表——不要浪费时间检查明显不合适的选项。
Step 3 — Primary availability check (Vercel CLI)
步骤3 — 初步可用性检查(Vercel CLI)
Use for availability and for registrar quotes. Loop candidates:
vercel domains checkvercel domains pricebash
for domain in candidate1.com candidate2.com candidate3.com; do
echo -n "$domain: "
vercel domains check "$domain" 2>&1 | grep -E "available|not available|Error" || echo "checking..."
doneFor pricing on the candidates that came back available:
bash
vercel domains price candidate1.com candidate2.com candidate3.comFor a single deeper check on a taken domain (registrar status, expiration, nameservers if the domain is already Vercel-managed):
bash
vercel domains inspect candidate.comTLD reliability: Vercel CLI is rock-solid for and most gTLDs, but returns errors for , , , (Vercel doesn't sell those registrar-side). Skip Step 3 for non-.com candidates and go straight to Step 4.
.com.ai.dev.io.app使用查询可用性,获取注册商报价。遍历候选域名:
vercel domains checkvercel domains pricebash
for domain in candidate1.com candidate2.com candidate3.com; do
echo -n "$domain: "
vercel domains check "$domain" 2>&1 | grep -E "available|not available|Error" || echo "checking..."
done对返回可用的候选域名查询价格:
bash
vercel domains price candidate1.com candidate2.com candidate3.com对已被占用的域名进行深度检查(注册状态、过期时间,若域名由Vercel管理则显示名称服务器):
bash
vercel domains inspect candidate.comTLD可靠性:Vercel CLI对及大部分gTLD的检查非常可靠,但对、、、会返回错误(Vercel不提供这些后缀的注册服务)。对于非.com候选域名,跳过步骤3直接进入步骤4。
.com.ai.dev.io.appStep 4 — Cross-check with whois
whois步骤4 — 使用whois
交叉验证
whoisGround truth for registration status. Query the right server per TLD — pinning to a non-.com produces silent false negatives.
-h whois.verisign-grs.comClassification order matters (stolen from unclaimed): check for REGISTERED signals first, then available signals. A parked domain's whois/lander can contain "this domain is available for sale" — grepping for "available" first turns a taken name into a false positive. And reserved ≠ available: "is reserved", "not available for registration", "blocked for registration" all mean taken, even though RDAP often 404s these names.
- Registered signals: ,
creation date,registrar:,registry expiry,registrantname server - Reserved signals (treat as taken): ,
is reserved,reserved by,not available for registrationblocked for registration - Available signals: ,
no match,not found,no entries found,no object found,not registeredavailable for registration
.com.netbash
for domain in candidate1.com candidate2.com; do
result=$(whois -h whois.verisign-grs.com "$domain" 2>&1)
if echo "$result" | grep -qiE "registrar:|creation date"; then
expiry=$(echo "$result" | grep -i "registry expiry" | head -1 | sed 's/.*: //')
echo "$domain → TAKEN (expires $expiry)"
elif echo "$result" | grep -qiE "is reserved|reserved by|not available for registration|blocked for registration"; then
echo "$domain → RESERVED (not registrable)"
elif echo "$result" | grep -qi "no match"; then
echo "$domain → AVAILABLE"
else
echo "$domain → UNKNOWN (do not treat as available)"
fi
doneAny other TLD — don't hardcode servers; ask IANA for the authoritative whois host, then query it ( is the fallback convention):
whois.nic.<tld>bash
tld=ai
server=$(whois -h whois.iana.org "$tld" 2>/dev/null | grep -i "^whois:" | awk '{print $2}')
server=${server:-whois.nic.$tld}
whois -h "$server" candidate.$tldCaveat: some registries have no port-43 whois at all (Google's // — IANA lists nothing and doesn't resolve). For those, RDAP below IS the ground truth.
.dev.app.pagewhois.nic.devRDAP for / / and other modern TLDs — JSON-native, cleaner than whois when the TLD supports it:
.dev.app.iobash
UA="domain-skill/0.1 (availability check)"
for domain in candidate.dev candidate.app; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "$UA" "https://rdap.org/domain/$domain")
case "$code" in
404) echo "$domain → probably available (confirm via whois — see caveat)" ;;
200) echo "$domain → TAKEN" ;;
429) echo "$domain → rate-limited, sleep + retry" ;;
*) echo "$domain → UNKNOWN (do not treat as available)" ;;
esac
sleep 1 # rdap.org rate-limits aggressively
doneRDAP gotchas (all verified by the unclaimed project):
- Always send a User-Agent — rdap.org (and some registry servers) 403 bare requests, and a 403 read naively looks like "not 404 = taken."
- 404 ≠ proof of availability. Registry-reserved, blocked, and premium-unsold names also 404 on RDAP. Before reporting a name available on RDAP evidence alone, confirm with a whois query (Step 4 above) — if whois says reserved, it's taken.
- rdap.org only routes TLDs in the IANA bootstrap (). For a TLD outside it, an rdap.org 404 is meaningless — fall back to whois. Two useful direct endpoints not in the bootstrap:
https://data.iana.org/rdap/dns.json→.io,https://rdap.identitydigital.services/rdap/domain/<domain>→.so.https://rdap.nic.so/domain/<domain> - A 200 body includes — the
events[]eventDate feeds the drop-watch in Step 7b.expiration
Reading the results:
- /
No match/ RDAP 404 (whois-confirmed) = unregistered, availableno object found - / RDAP 200 = taken, check the aftermarket
Registrar: <name> - Timeout / rate-limit / weird output = UNKNOWN — never bucket as available. Retry later instead.
Bulk multi-TLD sweeps — if the hunt widens beyond a dozen candidates or beyond .com, don't hand-roll the loop; unclaimed does RDAP+whois with correct classification, resumable SQLite caching, and pricing (Node 24+):
bash
npx unclaimed check orbit --tlds com,io,ai,dev
npx unclaimed sweep --words-file ./candidates.txt --tlds com
npx unclaimed available --sort commercial --limit 50Its three states map to ours: / / (it never reports a timeout as available either).
availableregisteredunknown这是注册状态的权威验证方式。根据TLD选择正确的服务器——若给非.com域名指定会导致无声的假阴性结果。
-h whois.verisign-grs.com分类顺序至关重要(借鉴自unclaimed):先检查已注册信号,再检查可用信号。停放域名的whois/着陆页可能包含“此域名可出售”的内容——若先搜索“available”会将已占用域名误判为可用。另外保留≠可用:“is reserved”、“not available for registration”、“blocked for registration”都表示已占用,即使RDAP常对这类域名返回404。
- 已注册信号:、
creation date、registrar:、registry expiry、registrantname server - 保留信号(视为已占用):、
is reserved、reserved by、not available for registrationblocked for registration - 可用信号:、
no match、not found、no entries found、no object found、not registeredavailable for registration
.com.netbash
for domain in candidate1.com candidate2.com; do
result=$(whois -h whois.verisign-grs.com "$domain" 2>&1)
if echo "$result" | grep -qiE "registrar:|creation date"; then
expiry=$(echo "$result" | grep -i "registry expiry" | head -1 | sed 's/.*: //')
echo "$domain → 已占用(过期时间:$expiry)"
elif echo "$result" | grep -qiE "is reserved|reserved by|not available for registration|blocked for registration"; then
echo "$domain → 已保留(不可注册)"
elif echo "$result" | grep -qi "no match"; then
echo "$domain → 可用"
else
echo "$domain → 未知(请勿视为可用)"
fi
done其他任意TLD — 不要硬编码服务器;向IANA查询权威whois主机,再进行查询( fallback规则为):
whois.nic.<tld>bash
tld=ai
server=$(whois -h whois.iana.org "$tld" 2>/dev/null | grep -i "^whois:" | awk '{print $2}')
server=${server:-whois.nic.$tld}
whois -h "$server" candidate.$tld注意:部分注册局完全没有端口43的whois服务(如Google的//——IANA未列出任何服务器,且无法解析)。对于这类域名,下方的RDAP是权威验证方式。
.dev.app.pagewhois.nic.dev.dev.app.iobash
UA="domain-skill/0.1 (availability check)"
for domain in candidate.dev candidate.app; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "$UA" "https://rdap.org/domain/$domain")
case "$code" in
404) echo "$domain → 可能可用(请通过whois确认——见注意事项)" ;;
200) echo "$domain → 已占用" ;;
429) echo "$domain → 触发速率限制,请等待后重试" ;;
*) echo "$domain → 未知(请勿视为可用)" ;;
esac
sleep 1 # rdap.org限制严格的速率RDAP注意事项(均经unclaimed项目验证):
- 务必发送User-Agent — rdap.org(及部分注册局服务器)会拒绝无User-Agent的请求,返回403,若误判为“非404=已占用”会导致错误。
- 404≠可用的证明。注册局保留、屏蔽及未售出的高端域名在RDAP中也会返回404。仅基于RDAP结果报告域名可用前,请通过whois查询确认(见步骤4)——若whois显示已保留,则域名已占用。
- rdap.org仅路由IANA引导列表中的TLD()。对于列表外的TLD,rdap.org返回的404无意义—— fallback到whois查询。两个不在引导列表中的实用直接端点:
https://data.iana.org/rdap/dns.json→.io,https://rdap.identitydigital.services/rdap/domain/<domain>→.so。https://rdap.nic.so/domain/<domain> - 200响应的body包含——其中的
events[]eventDate可用于步骤7b的掉落监控。expiration
结果解读:
- /
No match/ RDAP 404(经whois确认)= 未注册,可用no object found - / RDAP 200 = 已占用,需查询二手域名市场
Registrar: <name> - 超时/速率限制/异常输出 = 未知——切勿归类为可用。应稍后重试而非直接忽略。
批量多TLD扫描 — 若候选域名超过12个或扩展到.com以外的后缀,不要手动编写循环;unclaimed工具支持RDAP+whois正确分类、可恢复的SQLite缓存及定价查询(需Node 24+):
bash
npx unclaimed check orbit --tlds com,io,ai,dev
npx unclaimed sweep --words-file ./candidates.txt --tlds com
npx unclaimed available --sort commercial --limit 50它的三种状态与我们的分类对应: / / (同样不会将超时结果标记为可用)。
availableregisteredunknownStep 5 — Domainr cross-check (aftermarket signal)
步骤5 — Domainr交叉验证(二手域名信号)
Domainr aggregates registrar + marketplace status across many TLDs. Skip if unset — otherwise:
DOMAINR_API_KEYbash
for domain in candidate1.com candidate2.com; do
curl -s "https://domainr.p.rapidapi.com/v2/status?domain=$domain" \
-H "X-RapidAPI-Key: $DOMAINR_API_KEY" \
-H "X-RapidAPI-Host: domainr.p.rapidapi.com" \
| jq -r --arg d "$domain" '.status[] | "\($d): \(.status) — \(.summary)"'
doneStatus codes:
- → unregistered, free
undelegated inactive - → registered, in use
active - ,
marketed,parked→ for sale on aftermarket (Domainr surfaces price hint when available)priced - → registry premium (often $500+/yr)
premium
marketedpricedDomainr聚合了多个TLD的注册商+市场状态。若未设置则跳过;否则:
DOMAINR_API_KEYbash
for domain in candidate1.com candidate2.com; do
curl -s "https://domainr.p.rapidapi.com/v2/status?domain=$domain" \
-H "X-RapidAPI-Key: $DOMAINR_API_KEY" \
-H "X-RapidAPI-Host: domainr.p.rapidapi.com" \
| jq -r --arg d "$domain" '.status[] | "\($d): \(.status) — \(.summary)"'
done状态码说明:
- → 未注册,免费
undelegated inactive - → 已注册,正在使用
active - ,
marketed,parked→ 在二手域名市场出售(Domainr会在可用时显示价格提示)priced - → 注册局高端域名(通常年费500美元以上)
premium
marketedpricedStep 6 — Namecheap price check
步骤6 — Namecheap价格查询
Fallback registrar — sometimes cheaper than Vercel on year-1 promo pricing. Skip if unset — otherwise:
NAMECHEAP_API_*bash
DOMAINS="candidate1.com,candidate2.com,candidate3.com"
curl -s "https://api.namecheap.com/xml.response?ApiUser=$NAMECHEAP_API_USER&ApiKey=$NAMECHEAP_API_KEY&UserName=$NAMECHEAP_API_USER&Command=namecheap.domains.check&ClientIp=$NAMECHEAP_CLIENT_IP&DomainList=$DOMAINS" \
| xmllint --xpath '//*[local-name()="DomainCheckResult"]' - 2>/dev/null \
| grep -oE 'Domain="[^"]+" Available="[^"]+"( IsPremiumName="[^"]+")?( PremiumRegistrationPrice="[^"]+")?'Available="true"IsPremiumName="true"Reconcile Vercel + Domainr + Namecheap + whois. If they disagree (rare, happens during registrar transfers), trust for registration truth and the cheaper of Vercel/Namecheap for actual purchase.
whois备选注册商——有时第一年的促销价格比Vercel更便宜。若未设置则跳过;否则:
NAMECHEAP_API_*bash
DOMAINS="candidate1.com,candidate2.com,candidate3.com"
curl -s "https://api.namecheap.com/xml.response?ApiUser=$NAMECHEAP_API_USER&ApiKey=$NAMECHEAP_API_KEY&UserName=$NAMECHEAP_API_USER&Command=namecheap.domains.check&ClientIp=$NAMECHEAP_CLIENT_IP&DomainList=$DOMAINS" \
| xmllint --xpath '//*[local-name()="DomainCheckResult"]' - 2>/dev/null \
| grep -oE 'Domain="[^"]+" Available="[^"]+"( IsPremiumName="[^"]+")?( PremiumRegistrationPrice="[^"]+")?'Available="true"IsPremiumName="true"协调Vercel + Domainr + Namecheap + whois的结果。若出现分歧(罕见,通常发生在注册商转移期间),以whois的注册状态为准,以Vercel/Namecheap中价格较低者作为实际购买渠道。
Step 7 — Aftermarket sweep for taken candidates
步骤7 — 已占用候选域名的二手市场扫描
Don't try to scrape marketplaces. All verified failing:
- (even with realistic User-Agent) → HugeDomains 403, GoDaddy Akamai access-denied
curl - → Cloudflare 403 across the board
WebFetch - skill with real Chromium → Cloudflare fingerprints Playwright automation flags, serves challenge pages. Bypassing needs
dev-browser+ stealth plugin (flaky) or pre-warmed browser profile with human-solved captcha (not worth it for a domain hunt)playwright-extra - public web → IP-rate-limited
domainr.com - → registration status only, no aftermarket pricing
rdap.org
What works: compose marketplace URLs and have the user click. ~30 seconds per domain, 100% reliable. For every "taken" candidate the user is still curious about, output:
namedyoulove.com — TAKEN (Registrar: GoDaddy)
Aftermarket pricing — click to verify:
HugeDomains: https://www.hugedomains.com/domain-profile.cfm?d=namedyoulove&e=com
Afternic: https://www.afternic.com/domain/namedyoulove.com
Sedo: https://sedo.com/search/searchresult.php4?keyword=namedyoulove.com
Dan/GoDaddy: https://dan.com/buy-domain/namedyoulove.comLaura's HugeDomains note: she got Paperbell.com from HugeDomains for $1,795 and recommends them as the best aftermarket starting point — "a ton of great .com's available for less than $1k." Always check HugeDomains first on taken candidates.
不要尝试爬取市场平台。所有爬取方式均已验证失败:
- (即使使用真实User-Agent)→ HugeDomains返回403,GoDaddy触发Akamai访问拒绝
curl - → 所有平台均触发Cloudflare 403
WebFetch - 使用真实Chromium的工具 → Cloudflare会识别Playwright自动化标记,返回验证页面。绕过验证需要
dev-browser+ stealth插件(不稳定)或预加载已人工完成验证的浏览器配置文件(不值得为域名搜索投入)playwright-extra - 公开网页 → IP速率限制
domainr.com - → 仅提供注册状态,无二手域名定价
rdap.org
可行方案:生成市场平台的URL,让用户点击访问。每个域名约耗时30秒,100%可靠。对于用户仍感兴趣的每个“已占用”候选域名,输出:
namedyoulove.com — 已占用(注册商:GoDaddy)
二手域名定价 — 点击验证:
HugeDomains: https://www.hugedomains.com/domain-profile.cfm?d=namedyoulove&e=com
Afternic: https://www.afternic.com/domain/namedyoulove.com
Sedo: https://sedo.com/search/searchresult.php4?keyword=namedyoulove.com
Dan/GoDaddy: https://dan.com/buy-domain/namedyoulove.comLaura的HugeDomains提示:她以1795美元从HugeDomains购买了Paperbell.com,并推荐其作为二手域名市场的最佳起点——“大量优质.com域名售价低于1000美元”。对于已占用的候选域名,始终先检查HugeDomains。
Step 7a — Liveness probe: is anything actually on the taken domain?
步骤7a — 活跃度探测:已占用域名是否有实际内容?
You can't scrape the marketplaces, but you CAN fetch the taken domain itself — and its lander usually tells you where it's for sale. A taken name with no real site is also the best negotiation/outreach lead: the owner isn't using it.
bash
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
for domain in taken1.com taken2.com; do
body=$(curl -sL --max-time 6 -A "$UA" "https://$domain/" 2>/dev/null | head -c 16384)
[ -z "$body" ] && body=$(curl -sL --max-time 6 -A "$UA" "http://$domain/" 2>/dev/null | head -c 16384)
final=$(curl -sIL --max-time 6 -A "$UA" -o /dev/null -w '%{url_effective}' "https://$domain/" 2>/dev/null)
hay="$final
$body"
if [ -z "$body" ]; then
echo "$domain → NONE (no DNS / dead server — best outreach lead)"
elif echo "$hay" | grep -qiE "sedoparking|bodis\.com|parkingcrew|afternic|dan\.com|hugedomains|buy this domain|domain (name )?is for sale|domain for sale|buy now for|parked free|this web page is parked|domain has expired"; then
marker=$(echo "$hay" | grep -oiE "sedoparking|afternic|dan\.com|hugedomains|for sale" | head -1)
echo "$domain → PARKED ($marker — for-sale lead, note which marketplace)"
else
echo "$domain → LIVE (real site, owner is using it — long shot)"
fi
done(The final-URL check matters: many parked domains redirect straight to their marketplace host — e.g. landing on hugedomains.com tells you where to buy even if the lander body is JS.)
Classify each taken candidate:
- NONE (no DNS / connection refused) → strongest lead. Owner is squatting passively — whois-contact outreach or marketplace lowball.
- PARKED → for sale. The marker/redirect host tells you which marketplace to open from the Step 7 links (a HugeDomains lander = buy via HugeDomains, and the first 16KB often shows the asking price — no scraping fight needed).
- LIVE → in use. Drop unless the user really wants it.
Only probe taken candidates the user still cares about — it's one live request per domain.
你无法爬取市场平台,但可以访问已占用域名本身——其着陆页通常会显示出售渠道。没有真实网站的已占用域名是最佳的议价/联系对象:所有者并未使用该域名。
bash
UA="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)"
for domain in taken1.com taken2.com; do
body=$(curl -sL --max-time 6 -A "$UA" "https://$domain/" 2>/dev/null | head -c 16384)
[ -z "$body" ] && body=$(curl -sL --max-time 6 -A "$UA" "http://$domain/" 2>/dev/null | head -c 16384)
final=$(curl -sIL --max-time 6 -A "$UA" -o /dev/null -w '%{url_effective}' "https://$domain/" 2>/dev/null)
hay="$final
$body"
if [ -z "$body" ]; then
echo "$domain → 无内容(无DNS/服务器失效——最佳联系对象)"
elif echo "$hay" | grep -qiE "sedoparking|bodis\.com|parkingcrew|afternic|dan\.com|hugedomains|buy this domain|domain (name )?is for sale|domain for sale|buy now for|parked free|this web page is parked|domain has expired"; then
marker=$(echo "$hay" | grep -oiE "sedoparking|afternic|dan\.com|hugedomains|for sale" | head -1)
echo "$domain → 已停放($marker — 出售线索,记录对应平台)"
else
echo "$domain → 活跃(有真实网站,所有者正在使用——成功概率低)"
fi
done(最终URL检查很重要:许多停放域名会直接重定向到其市场平台——例如,跳转到hugedomains.com即可知道购买渠道,即使着陆页内容为JS加载。)
对每个已占用候选域名分类:
- 无内容(无DNS/连接被拒绝)→ 最强线索。所有者被动囤积——可通过whois联系或在市场平台低价出价。
- 已停放 → 待出售。标记/重定向主机提示需从步骤7的链接中打开对应平台(HugeDomains着陆页=通过HugeDomains购买,前16KB内容通常会显示报价——无需爬取)。
- 活跃 → 正在使用。除非用户特别想要,否则放弃。
仅对用户仍感兴趣的已占用候选域名进行探测——每个域名需发起一次真实请求。
Step 7b — Drop-watch: taken but expiring soon
步骤7b — 掉落监控:已占用但即将过期
For taken candidates, Step 4 already surfaced the expiry date. gTLD post-expiry lifecycle: auto-renew grace (≤45d) → redemption (30d) → pending delete (5d), so a lapsed name drops back to the pool ~75–80 days after expiry. Most names just get renewed — but if a candidate is NONE/PARKED and expiry already passed, it may genuinely be dropping:
bash
whois -h whois.verisign-grs.com candidate.com | grep -iE "expiry|domain status"- Status or
redemptionPeriod= the owner let it lapse. Estimate drop ≈ expiry + 80 days; put a backorder in at DropCatch/SnapNames (~$59–79, pay only on catch) rather than negotiating.pendingDelete - Recently-expired + parked-with-"domain has expired"-lander = same story.
- This is an "if abandoned" estimate, not a promise — recheck weekly as the date approaches.
对于已占用候选域名,步骤4已显示过期日期。gTLD过期后的生命周期:自动续费宽限期(≤45天)→ 赎回期(30天)→ 删除待处理(5天),因此过期域名会在过期后约75–80天重新回到可用池。大多数域名会被续费,但如果候选域名处于无内容/已停放状态且已过期,则可能真的会掉落:
bash
whois -h whois.verisign-grs.com candidate.com | grep -iE "expiry|domain status"- 状态为或
redemptionPeriod= 所有者未续费。预估掉落时间≈过期日期+80天;可在DropCatch/SnapNames设置预订(约59–79美元,仅成功捕获时收费),而非议价。pendingDelete - 近期过期+着陆页显示“domain has expired”的已停放域名 → 同上。
- 这是“若被遗弃”的预估,而非承诺——临近日期时每周重新检查。
Step 8 — Bucket the results
步骤8 — 结果分类
Group into:
- Available now (~$10–$30/yr) — primary candidates
- Aftermarket-listed under budget — secondary (capture asking price + marketplace, from Step 7/7a)
- Dropping soon — lapsed per Step 7b; backorder instead of buying
- Outreach leads — taken, NONE/PARKED liveness, no reasonable listing; direct whois-contact offer
- Aftermarket over budget OR live site on it — drop
将结果分为以下几组:
- 立即可用(约10–30美元/年) — 主要候选者
- 二手市场列出且在预算内 — 次要候选者(记录报价+平台,来自步骤7/7a)
- 即将掉落 — 步骤7b中判定为已过期;通过预订而非直接购买
- 联系线索 — 已占用、无内容/已停放、无合理报价;直接联系whois联系人出价
- 二手市场超出预算或有活跃网站 — 放弃
Step 9 — Negotiate on aftermarket listings
步骤9 — 二手域名议价
When a candidate is listed:
- Sticker price is rarely the floor. Try a lowball 30–50% below ask.
- HugeDomains + Afternic have "Make an offer" — use it.
- If Step 7a classified the domain PARKED or NONE and the owner isn't on a marketplace, look up whois contact + offer directly. A domain with no live site for years is a motivated-seller signal — lead with a modest concrete number, not "are you interested in selling."
当候选域名在市场列出时:
- 标价很少是底价。尝试出价为报价的30–50%。
- HugeDomains和Afternic支持“出价”功能——使用该功能。
- 若步骤7a判定域名已停放或无内容且所有者未在平台列出,可查询whois联系人并直接出价。多年未使用的域名是所有者愿意出售的信号——直接给出具体的合理价格,不要问“你是否有兴趣出售”。
Step 10 — NOW do the name research (not before!)
步骤10 — 最后进行名称调研(不要提前做!)
For top 3–5 candidates that survived availability + budget:
- Google the bare word — what else exists with it?
- Trademark check (USPTO) — see Step 10a
- Social handle availability — see Step 10b
- Say it out loud — spellable for someone on a phone call?
针对通过可用性+预算筛选后的前3–5个候选域名:
- 搜索核心词汇——是否有其他同名产品?
- 商标检查(USPTO)——见步骤10a
- 社交账号可用性——见步骤10b
- 大声念出来——电话沟通时是否易拼写?
Step 10a — USPTO trademark search via agent-browser
步骤10a — 通过agent-browser进行USPTO商标搜索
What does NOT work (verified — don't waste cycles):
- against tmsearch.uspto.gov → AWS WAF challenge, JS shell only, no data
curl - against tmsearch.uspto.gov → same WAF, empty SPA shell
WebFetch - /
curlagainst Justia, Trademarkia, TrademarkElite → all 403WebFetch - USPTO Open Data Portal API → requires USPTO.gov account linked to ID.me (hard signup)
- Marker API / RapidAPI USPTO endpoints → require key signup
What works: drive the real USPTO Trademark Search SPA with . Angular + Material components, but the input + Enter-to-submit pattern is reliable.
agent-browserbash
undefined不可行方案(已验证——不要浪费时间):
- 访问tmsearch.uspto.gov → AWS WAF验证,仅支持JS环境,无数据返回
curl - 访问tmsearch.uspto.gov → 同样触发WAF,仅返回空SPA壳
WebFetch - /
curl访问Justia、Trademarkia、TrademarkElite → 均返回403WebFetch - USPTO开放数据门户API → 需要USPTO.gov账户关联ID.me(注册繁琐)
- Marker API / RapidAPI USPTO端点 → 需要注册获取密钥
可行方案:使用驱动真实的USPTO商标搜索SPA。基于Angular + Material组件,但输入+回车提交的模式可靠。
agent-browserbash
undefinedOpen + search
打开并搜索
agent-browser open "https://tmsearch.uspto.gov/" --session tm
sleep 4
agent-browser fill "#searchbar" "<phrase to check>" --session tm
agent-browser press Enter --session tm
sleep 6
agent-browser open "https://tmsearch.uspto.gov/" --session tm
sleep 4
agent-browser fill "#searchbar" "<待检查短语>" --session tm
agent-browser press Enter --session tm
sleep 6
Capture results
捕获结果
agent-browser screenshot /tmp/tm-<slug>.png --session tm
agent-browser eval "(()=>{const m=document.body.innerText.match(/([0-9,]+)\s+results?\s+for/i); return m?m[0]:'no count';})()" --session tm
**Reading the result:**
- Total result count = USPTO's fuzzy/word search across the whole DB. Common words return tens of thousands — not a clearance signal on its own.
- **What matters**: scan first 5–10 visible mark names in the screenshot (or `snapshot -i | grep wordmark`). USPTO orders by relevance — an **exact-phrase match appears at the top**. If top hits are fragmentary ("MY KNOW", "KNOW MY" as separate marks), you almost certainly don't have a blocking exact-phrase registration.
- **Filter to "Live" only** in the sidebar to focus on actually-blocking marks (Dead/Cancelled don't matter for new applications).
- **Class matters**. A "GIFT ASSESSMENT" mark registered for gift-assessment services (USPTO classes 41 education, 42 SaaS, or 45 personal services) would block you. Same words in gift-baskets-class-35 might be okay.
**This is screening, not legal advice** — for any name you're seriously committing to, run past an IP lawyer or full clearance service (Cometrics/Corsearch).
```bash
agent-browser close --session tmagent-browser screenshot /tmp/tm-<slug>.png --session tm
agent-browser eval "(()=>{const m=document.body.innerText.match(/([0-9,]+)\s+results?\s+for/i); return m?m[0]:'no count';})()" --session tm
**结果解读**:
- 总结果数=USPTO在整个数据库中的模糊/词汇搜索结果。常见词汇会返回数万条结果——这本身不是可注册的信号。
- **关键信息**:查看截图中前5–10个可见的商标名称(或`snapshot -i | grep wordmark`)。USPTO按相关性排序——**完全匹配的短语会出现在顶部**。若顶部结果是碎片化的(如“MY KNOW”、“KNOW MY”作为独立商标),则几乎可以肯定不存在阻碍性的完全匹配注册。
- **仅筛选“活跃”状态**:在侧边栏勾选“Live”以聚焦真正有阻碍性的商标(已失效/已注销的商标对新申请无影响)。
- **类别很重要**。注册为礼品评估服务(USPTO类别41教育、42 SaaS或45个人服务)的“GIFT ASSESSMENT”商标会阻碍你使用该名称。但同一词汇在礼品篮类别35中可能是可行的。
**这只是筛查,不是法律建议**——对于你认真考虑使用的名称,请咨询知识产权律师或专业的合规服务(如Cometrics/Corsearch)。
```bash
agent-browser close --session tmStep 10b — Social handle availability
步骤10b — 社交账号可用性检查
bash
undefinedbash
undefinedX / Twitter (404 = available)
X / Twitter(404=可用)
for handle in candidate1 candidate2; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://x.com/$handle" --max-time 10)
echo " @$handle → x.com $code"
done
for handle in candidate1 candidate2; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36" "https://x.com/$handle" --max-time 10)
echo " @$handle → x.com $code"
done
LinkedIn company page (404 = available)
LinkedIn公司主页(404=可用)
for handle in candidate1 candidate2; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "Mozilla/5.0" "https://www.linkedin.com/company/$handle" --max-time 10)
echo " $handle → linkedin $code"
done
**Instagram is unreliable from script** — IG returns 200 for any URL (SPA shell loads even for non-existent handles, "isn't available" message renders client-side). Give the user a click-through:
Instagram: https://instagram.com/<handle>
30 seconds of manual click beats fighting the IG SPA detection.for handle in candidate1 candidate2; do
code=$(curl -sL -o /dev/null -w "%{http_code}" -A "Mozilla/5.0" "https://www.linkedin.com/company/$handle" --max-time 10)
echo " $handle → linkedin $code"
done
**脚本检查Instagram不可靠**——IG对任何URL都返回200(即使账号不存在,也会加载SPA壳,“不可用”消息在客户端渲染)。请给用户提供点击链接:
Instagram: https://instagram.com/<handle>
手动点击耗时30秒,比对抗IG的SPA检测更可靠。Step 11 — Buy it
步骤11 — 购买域名
When the user picks a winner that's directly available, buy at whichever registrar quoted the lowest price in Step 3 vs Step 6:
bash
undefined当用户选定直接可用的域名后,选择步骤3和步骤6中报价较低的注册商购买:
bash
undefinedVercel
Vercel
vercel domains buy <domain>.com
vercel domains buy <domain>.com
Namecheap (via API — uses ~/.zshenv credentials)
Namecheap(通过API——使用~/.zshenv中的凭证)
curl -s "https://api.namecheap.com/xml.response?ApiUser=$NAMECHEAP_API_USER&ApiKey=$NAMECHEAP_API_KEY&UserName=$NAMECHEAP_API_USER&Command=namecheap.domains.create&ClientIp=$NAMECHEAP_CLIENT_IP&DomainName=<domain>.com&Years=1&..."
Vercel is one-command and keeps DNS in the same dashboard as deploys — preferred unless Namecheap is meaningfully cheaper (often is on year-1 promo). Auto-renew on by default for both.
**Confirm with the user before running — this charges real money.**
For aftermarket purchases: buy through the marketplace directly (HugeDomains/Afternic/Sedo all handle escrow). Then transfer or point nameservers to Vercel after transfer completes.curl -s "https://api.namecheap.com/xml.response?ApiUser=$NAMECHEAP_API_USER&ApiKey=$NAMECHEAP_API_KEY&UserName=$NAMECHEAP_API_USER&Command=namecheap.domains.create&ClientIp=$NAMECHEAP_CLIENT_IP&DomainName=<domain>.com&Years=1&..."
Vercel只需一条命令,且DNS与部署在同一控制台——除非Namecheap价格明显更低(通常在第一年促销时),否则优先选择Vercel。两者默认均开启自动续费。
**执行前请与用户确认——这会产生真实费用。**
对于二手域名购买:直接通过市场平台购买(HugeDomains/Afternic/Sedo均支持托管交易)。完成转移后,将域名的名称服务器指向Vercel或转移至Vercel。Composes with
可组合使用的工具
- — wire up the Domainr and Namecheap API credentials if the user hasn't yet
toolify - — pressure-test the underlying business idea BEFORE the domain hunt (a bad idea with a great .com is still a bad idea)
business-brainstorm - — for the "which of the top 3 candidates" call if it's not obvious
decide - — if the domain hunt surfaces a repeat workflow worth capturing (e.g., specific niche naming patterns), scaffold as its own sub-skill
skillify
- — 若用户尚未配置Domainr和Namecheap API密钥,可使用该工具完成配置
toolify - — 在域名搜索前先验证底层商业想法(糟糕的想法即使配上优质域名仍是糟糕的想法)
business-brainstorm - — 当前3个候选域名难以抉择时使用
decide - — 若域名搜索过程中发现可重复使用的工作流(如特定细分领域的命名模式),可将其构建为独立的子工具
skillify
Notes on quality
质量说明
- Three states, always. Every check resolves to AVAILABLE / TAKEN / UNKNOWN. A timeout, rate-limit, 403, or unparseable response is UNKNOWN — never silently bucketed as available. Retry UNKNOWNs before presenting final results.
- Brainstorming-first, action-last. Never run until the user explicitly says "buy it." Real money. Availability + price checks (Step 3) use
vercel domains buy+vercel domains checkwhich are safe.vercel domains price - Budget filter is non-negotiable. If the user pushes back ("but I love it"), remind them that's exactly the trap Laura warned about.
- Multi-tool ensemble is intentional. No single tool covers all the bases cleanly — Vercel is fast but limited to gTLDs; whois is definitive but per-TLD-specific; Domainr aggregates; Namecheap prices year-1 promo; RDAP fills the modern-TLD gap; agent-browser drives USPTO. Skipping any leaves a blind spot.
- Don't fight marketplace scraping. HugeDomains/Afternic/Sedo/Dan all Cloudflare-block automation. Output click-through URLs. 30 seconds of manual click is more reliable than a headless-browser workaround.
- USPTO screening ≠ legal clearance. Use this for gut-check filtering; run serious names past an IP lawyer.
- 始终保持三种状态。每次检查都会得到可用/已占用/未知三种结果。超时、速率限制、403或无法解析的响应均视为未知——切勿静默归类为可用。在呈现最终结果前重试未知项。
- 先头脑风暴,后执行操作。除非用户明确说“购买”,否则不要运行。这涉及真实费用。可用性+价格检查(步骤3)使用
vercel domains buy+vercel domains check,这些操作是安全的。vercel domains price - 预算筛选不可协商。若用户提出异议(“但我喜欢这个域名”),提醒他们这正是Laura警告的陷阱。
- 多工具组合是有意设计的。没有单一工具能完美覆盖所有需求——Vercel速度快但仅支持gTLD;whois是权威但需针对不同TLD配置;Domainr聚合信息;Namecheap提供第一年促销价;RDAP填补现代TLD的空白;agent-browser驱动USPTO查询。跳过任何工具都会留下盲区。
- 不要尝试爬取市场平台。HugeDomains/Afternic/Sedo/Dan均使用Cloudflare阻止自动化。输出可点击的URL即可。手动点击30秒比无头浏览器绕过更可靠。
- USPTO筛查≠法律合规。仅将其用于初步筛选;对于重要名称,请咨询知识产权律师。