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
.com
only. Only deviate (.dev, .co, .io, .ai) if the project is dev-tooling-only or the user explicitly asks.
这是一个多工具工作流,用于为新项目找到优质、实惠且可用的.com域名。基于Laura Roeder的规则构建:从实际可用的域名倒推——不要先爱上某个名字来源)。
默认仅检查
.com
域名。仅当项目为纯开发工具类或用户明确要求时,才考虑其他后缀(.dev、.co、.io、.ai)。

Step 0 — Environment checks

步骤0 — 环境检查

Verify these before proceeding (surface install commands if missing, don't try to install silently):
ToolCheckInstall if missing
Vercel CLI
vercel whoami
npm i -g vercel && vercel login
whois
which whois
brew install whois
(macOS)
Domainr API key
[ -n "$DOMAINR_API_KEY" ]
Get free key at rapidapi.com/domainr/api/domainr, add to
~/.zshenv
Namecheap API
[ -n "$NAMECHEAP_API_KEY" ] && [ -n "$NAMECHEAP_API_USER" ] && [ -n "$NAMECHEAP_CLIENT_IP" ]
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
vercel whoami
npm i -g vercel && vercel login
whois
which whois
brew install whois
(macOS)
Domainr API密钥
[ -n "$DOMAINR_API_KEY" ]
在rapidapi.com/domainr/api/domainr获取免费密钥,添加至
~/.zshenv
Namecheap API
[ -n "$NAMECHEAP_API_KEY" ] && [ -n "$NAMECHEAP_API_USER" ] && [ -n "$NAMECHEAP_CLIENT_IP" ]
在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:
BudgetWhat it buys
$0Only unregistered domains (rare for anything good)
$250–$1kAftermarket sweet spot (HugeDomains is the standout — Laura found "a ton of great .com's available for less than $1k")
$1k–$2kLaura'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–$2kLaura购买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):
  1. Two real words mashed together ← preferred (Helpscout, RightMessage, ConvertKit, Paperbell, Mailchimp). Easy to spell, remember, google.
  2. 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):
      try
      (TryGamma, TryRoam),
      use
      (UseMotion, UseChalk),
      with
      (WithCove, WithFrame),
      join
      (JoinHomebase, JoinHonor)
    • Classic prefixes (still work):
      get
      (GetMagic, GetResponse),
      go
      (GoCardless, GoFundMe),
      hey
      (HeyMarvin, HeyHenry),
      the
      (TheBrowserCompany, TheDyrt — editorial vibe)
    • Dated — avoid unless intentional:
      my
      (MyFitnessPal),
      meet
      (MeetEdgar)
    • Suffixes:
      +ly
      (Calendly, Grammarly — battle-tested but reads "2015 startup"),
      +ify
      (Spotify, Shopify — rare, hard to land authentically),
      +labs
      (AI/research positioning),
      +hq
      /
      +app
      (mostly informal)
    • Watch: trademark collision (
      UseSlack.com
      is a brand violation even if registrable); popular bare words often have
      try/use/get/join
      variants pre-grabbed by the same owner; longer URLs cost spelling-on-phone bandwidth
    • Full grid: if the user loves a bare word, generate all
      try/use/with/join/get/go/hey/the + word
      and
      word + ly/ify/labs/hq/app
      in one shot — ~15 variants
  3. One real word, slightly modified (Trello, Pinterest, Lyft) — fine.
  4. Made-up-sounds (Sunsama, Besedky) — only as fallback. Notoriously hard to remember.
  5. 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个候选域名:
  1. 两个真实词汇拼接 ← 首选(如Helpscout、RightMessage、ConvertKit、Paperbell、Mailchimp)。易拼写、易记忆、易搜索。
  2. 给核心词汇添加前缀/后缀 — 当核心词汇的.com已被占用或超出预算时使用。“我喜欢词汇X,但X.com已被注册,添加哪些限定词能获得可用的.com?”
    • 现代前缀(B2B SaaS风格)
      try
      (TryGamma、TryRoam)、
      use
      (UseMotion、UseChalk)、
      with
      (WithCove、WithFrame)、
      join
      (JoinHomebase、JoinHonor)
    • 经典前缀(仍适用)
      get
      (GetMagic、GetResponse)、
      go
      (GoCardless、GoFundMe)、
      hey
      (HeyMarvin、HeyHenry)、
      the
      (TheBrowserCompany、TheDyrt — 编辑风格)
    • 过时前缀(除非有意使用,否则避免)
      my
      (MyFitnessPal)、
      meet
      (MeetEdgar)
    • 后缀
      +ly
      (Calendly、Grammarly — 经检验有效,但带有“2015年创业公司”的印记)、
      +ify
      (Spotify、Shopify — 罕见,难以自然落地)、
      +labs
      (AI/研究定位)、
      +hq
      /
      +app
      (多为非正式风格)
    • 注意事项:商标冲突(即使
      UseSlack.com
      可注册,也属于品牌侵权);热门核心词汇的
      try/use/get/join
      变体通常已被同一所有者抢占;较长的域名会增加手机输入时的拼写成本
    • 全变体生成:若用户喜欢某个核心词汇,一次性生成所有
      try/use/with/join/get/go/hey/the + 词汇
      词汇 + ly/ify/labs/hq/app
      变体——约15个选项
  3. 单个真实词汇的轻微变体(如Trello、Pinterest、Lyft)——可行。
  4. 自创发音词汇(如Sunsama、Besedky)——仅作为备选。极难记忆。
  5. 常见单个词汇(如Clubhouse、Spoke、Blush、Finder)—— 避免使用。难以搜索,.com域名几乎已被占用,且易与其他产品冲突。
在检查前先展示编号的候选列表——不要浪费时间检查明显不合适的选项。

Step 3 — Primary availability check (Vercel CLI)

步骤3 — 初步可用性检查(Vercel CLI)

Use
vercel domains check
for availability and
vercel domains price
for registrar quotes. Loop candidates:
bash
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
For pricing on the candidates that came back available:
bash
vercel domains price candidate1.com candidate2.com candidate3.com
For a single deeper check on a taken domain (registrar status, expiration, nameservers if the domain is already Vercel-managed):
bash
vercel domains inspect candidate.com
TLD reliability: Vercel CLI is rock-solid for
.com
and most gTLDs, but returns errors for
.ai
,
.dev
,
.io
,
.app
(Vercel doesn't sell those registrar-side). Skip Step 3 for non-.com candidates and go straight to Step 4.
使用
vercel domains check
查询可用性,
vercel domains price
获取注册商报价。遍历候选域名:
bash
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.com
TLD可靠性:Vercel CLI对
.com
及大部分gTLD的检查非常可靠,但对
.ai
.dev
.io
.app
会返回错误(Vercel不提供这些后缀的注册服务)。对于非.com候选域名,跳过步骤3直接进入步骤4。

Step 4 — Cross-check with
whois

步骤4 — 使用
whois
交叉验证

Ground truth for registration status. Query the right server per TLD — pinning
-h whois.verisign-grs.com
to a non-.com produces silent false negatives.
Classification 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
    ,
    registrant
    ,
    name server
  • Reserved signals (treat as taken):
    is reserved
    ,
    reserved by
    ,
    not available for registration
    ,
    blocked for registration
  • Available signals:
    no match
    ,
    not found
    ,
    no entries found
    ,
    no object found
    ,
    not registered
    ,
    available for registration
.com
/
.net
— Verisign:
bash
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
done
Any other TLD — don't hardcode servers; ask IANA for the authoritative whois host, then query it (
whois.nic.<tld>
is the fallback convention):
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
Caveat: some registries have no port-43 whois at all (Google's
.dev
/
.app
/
.page
— IANA lists nothing and
whois.nic.dev
doesn't resolve). For those, RDAP below IS the ground truth.
RDAP for
.dev
/
.app
/
.io
and other modern TLDs
— JSON-native, cleaner than whois when the TLD supports it:
bash
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
done
RDAP 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 (
    https://data.iana.org/rdap/dns.json
    ). For a TLD outside it, an rdap.org 404 is meaningless — fall back to whois. Two useful direct endpoints not in the bootstrap:
    .io
    https://rdap.identitydigital.services/rdap/domain/<domain>
    ,
    .so
    https://rdap.nic.so/domain/<domain>
    .
  • A 200 body includes
    events[]
    — the
    expiration
    eventDate feeds the drop-watch in Step 7b.
Reading the results:
  • No match
    /
    no object found
    / RDAP 404 (whois-confirmed) = unregistered, available
  • Registrar: <name>
    / RDAP 200 = taken, check the aftermarket
  • 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 50
Its three states map to ours:
available
/
registered
/
unknown
(it never reports a timeout as available either).
这是注册状态的权威验证方式。根据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
    registrant
    name server
  • 保留信号(视为已占用):
    is reserved
    reserved by
    not available for registration
    blocked for registration
  • 可用信号:
    no match
    not found
    no entries found
    no object found
    not registered
    available for registration
.com
/
.net
— 使用Verisign服务器:
bash
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的
.dev
/
.app
/
.page
——IANA未列出任何服务器,且
whois.nic.dev
无法解析)。对于这类域名,下方的RDAP是权威验证方式。
.dev
/
.app
/
.io
及其他现代TLD的RDAP验证
— 原生JSON格式,当TLD支持时比whois更清晰:
bash
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
    https://data.iana.org/rdap/dns.json
    )。对于列表外的TLD,rdap.org返回的404无意义—— fallback到whois查询。两个不在引导列表中的实用直接端点:
    .io
    https://rdap.identitydigital.services/rdap/domain/<domain>
    .so
    https://rdap.nic.so/domain/<domain>
  • 200响应的body包含
    events[]
    ——其中的
    expiration
    eventDate可用于步骤7b的掉落监控。
结果解读
  • No match
    /
    no object found
    / RDAP 404(经whois确认)= 未注册,可用
  • Registrar: <name>
    / RDAP 200 = 已占用,需查询二手域名市场
  • 超时/速率限制/异常输出 = 未知——切勿归类为可用。应稍后重试而非直接忽略。
批量多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
它的三种状态与我们的分类对应:
available
/
registered
/
unknown
(同样不会将超时结果标记为可用)。

Step 5 — Domainr cross-check (aftermarket signal)

步骤5 — Domainr交叉验证(二手域名信号)

Domainr aggregates registrar + marketplace status across many TLDs. Skip if
DOMAINR_API_KEY
unset — otherwise:
bash
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
Status codes:
  • undelegated inactive
    → unregistered, free
  • active
    → registered, in use
  • marketed
    ,
    parked
    ,
    priced
    → for sale on aftermarket (Domainr surfaces price hint when available)
  • premium
    → registry premium (often $500+/yr)
marketed
or
priced
= high-signal flag to dig into HugeDomains/Afternic in Step 7.
Domainr聚合了多个TLD的注册商+市场状态。若未设置
DOMAINR_API_KEY
则跳过;否则:
bash
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
    ,
    priced
    → 在二手域名市场出售(Domainr会在可用时显示价格提示)
  • premium
    → 注册局高端域名(通常年费500美元以上)
marketed
priced
是强信号,提示需在步骤7中查询HugeDomains/Afternic。

Step 6 — Namecheap price check

步骤6 — Namecheap价格查询

Fallback registrar — sometimes cheaper than Vercel on year-1 promo pricing. Skip if
NAMECHEAP_API_*
unset — otherwise:
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"
= registrable at Namecheap registrar prices (typically $9–$15/yr for .com).
IsPremiumName="true"
= registry premium tier (skip unless under budget).
Reconcile Vercel + Domainr + Namecheap + whois. If they disagree (rare, happens during registrar transfers), trust
whois
for registration truth and the cheaper of Vercel/Namecheap for actual purchase.
备选注册商——有时第一年的促销价格比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"
= 可在Namecheap以注册商价格注册(.com通常为9–15美元/年)。
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:
  • curl
    (even with realistic User-Agent) → HugeDomains 403, GoDaddy Akamai access-denied
  • WebFetch
    → Cloudflare 403 across the board
  • dev-browser
    skill with real Chromium → Cloudflare fingerprints Playwright automation flags, serves challenge pages. Bypassing needs
    playwright-extra
    + stealth plugin (flaky) or pre-warmed browser profile with human-solved captcha (not worth it for a domain hunt)
  • domainr.com
    public web → IP-rate-limited
  • rdap.org
    → registration status only, no aftermarket pricing
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.com
Laura'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.
不要尝试爬取市场平台。所有爬取方式均已验证失败:
  • curl
    (即使使用真实User-Agent)→ HugeDomains返回403,GoDaddy触发Akamai访问拒绝
  • WebFetch
    → 所有平台均触发Cloudflare 403
  • 使用真实Chromium的
    dev-browser
    工具 → Cloudflare会识别Playwright自动化标记,返回验证页面。绕过验证需要
    playwright-extra
    + stealth插件(不稳定)或预加载已人工完成验证的浏览器配置文件(不值得为域名搜索投入)
  • domainr.com
    公开网页 → IP速率限制
  • 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.com
Laura的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
    redemptionPeriod
    or
    pendingDelete
    = 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.
  • 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
    pendingDelete
    = 所有者未续费。预估掉落时间≈过期日期+80天;可在DropCatch/SnapNames设置预订(约59–79美元,仅成功捕获时收费),而非议价。
  • 近期过期+着陆页显示“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):
  • curl
    against tmsearch.uspto.gov → AWS WAF challenge, JS shell only, no data
  • WebFetch
    against tmsearch.uspto.gov → same WAF, empty SPA shell
  • curl
    /
    WebFetch
    against Justia, Trademarkia, TrademarkElite → all 403
  • 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
agent-browser
. Angular + Material components, but the input + Enter-to-submit pattern is reliable.
bash
undefined
不可行方案(已验证——不要浪费时间):
  • curl
    访问tmsearch.uspto.gov → AWS WAF验证,仅支持JS环境,无数据返回
  • WebFetch
    访问tmsearch.uspto.gov → 同样触发WAF,仅返回空SPA壳
  • curl
    /
    WebFetch
    访问Justia、Trademarkia、TrademarkElite → 均返回403
  • USPTO开放数据门户API → 需要USPTO.gov账户关联ID.me(注册繁琐)
  • Marker API / RapidAPI USPTO端点 → 需要注册获取密钥
可行方案:使用
agent-browser
驱动真实的USPTO商标搜索SPA。基于Angular + Material组件,但输入+回车提交的模式可靠。
bash
undefined

Open + 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 tm
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

**结果解读**:
- 总结果数=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 tm

Step 10b — Social handle availability

步骤10b — 社交账号可用性检查

bash
undefined
bash
undefined

X / 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
undefined

Vercel

Vercel

vercel domains buy <domain>.com
vercel domains buy <domain>.com

Namecheap (via API — uses ~/.zshenv credentials)

Namecheap(通过API——使用~/.zshenv中的凭证)


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.

Vercel只需一条命令,且DNS与部署在同一控制台——除非Namecheap价格明显更低(通常在第一年促销时),否则优先选择Vercel。两者默认均开启自动续费。

**执行前请与用户确认——这会产生真实费用。**

对于二手域名购买:直接通过市场平台购买(HugeDomains/Afternic/Sedo均支持托管交易)。完成转移后,将域名的名称服务器指向Vercel或转移至Vercel。

Composes with

可组合使用的工具

  • toolify
    — wire up the Domainr and Namecheap API credentials if the user hasn't yet
  • business-brainstorm
    — pressure-test the underlying business idea BEFORE the domain hunt (a bad idea with a great .com is still a bad idea)
  • decide
    — for the "which of the top 3 candidates" call if it's not obvious
  • skillify
    — if the domain hunt surfaces a repeat workflow worth capturing (e.g., specific niche naming patterns), scaffold as its own sub-skill
  • toolify
    — 若用户尚未配置Domainr和Namecheap API密钥,可使用该工具完成配置
  • business-brainstorm
    — 在域名搜索前先验证底层商业想法(糟糕的想法即使配上优质域名仍是糟糕的想法)
  • decide
    — 当前3个候选域名难以抉择时使用
  • 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
    vercel domains buy
    until the user explicitly says "buy it." Real money. Availability + price checks (Step 3) use
    vercel domains check
    +
    vercel domains price
    which are safe.
  • 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或无法解析的响应均视为未知——切勿静默归类为可用。在呈现最终结果前重试未知项。
  • 先头脑风暴,后执行操作。除非用户明确说“购买”,否则不要运行
    vercel domains buy
    。这涉及真实费用。可用性+价格检查(步骤3)使用
    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筛查≠法律合规。仅将其用于初步筛选;对于重要名称,请咨询知识产权律师。

Reference

参考资料