OSS · Python CLI

domain-pre-flight

Bad domains disguise themselves as good ideas.

Check the domain before you register it. Structure, TLD abuse risk, past-content history, typosquat similarity against 120 brand stems, negative meaning in 11 languages, and LLMO fitness — one command, one 0–100 verdict.

View on GitHub How it scores →

  • One verdict before you buy 0–100 across GREEN / YELLOW / ORANGE / RED
  • Catch the silent traps TLD abuse, past ownership, homoglyphs, brand overlap
  • Detect typosquats 120 brand stems, Levenshtein + bigram + confusables
  • Callable from agents MCP server bundled: 4 tools, stdio
  • Open Source · MIT
  • PyPI + MCP
  • 11 subcommands
  • Created by Ken Imoto
Terminal demo: domain-pre-flight flags my-app123.tk as RED 10/100 with three itemised deductions (.tk TLD risk -70, 3 digits -15, 1 hyphen -5), then clears llmoscore.com as GREEN 100/100.

Three steps

  1. domain-pre-flight check <domain> Run every enabled check and print a scored verdict in seconds — mostly offline.
  2. --check-handles / --check-trademark Opt-in online checks: same-name handles across 5 platforms and trademark deep-link scan.
  3. --json ↳ exit 0 / 1 / 2 Machine-readable output plus an exit code aligned with the band, ready to wire into CI.

Who it’s for

  • Indie hackers & solo makers sanity-check the name before you buy it — one command instead of five browser tabs
  • Startup founders & PMs triage a shortlist of company or product names against the traps that eat weeks after launch
  • Growth & marketing teams weigh names on pronunciation, memorability and LLMO fitness before you lock one in
  • Automation engineers wire it into CI so a bad domain never reaches the registrar step

When to reach for it

  • Naming a new product or side project: judge the top three candidates on one common yardstick
  • Considering a short or number-heavy SLD: the deductions show exactly what the pattern will cost you
  • Buying a pre-owned domain: the Wayback probe surfaces what lived on it before
  • Automating domain procurement: pipe it in and let the exit code decide whether the pipeline continues

Install

pip install domain-pre-flight

# CLI + MCP server
pip install "domain-pre-flight[mcp]"

The optional extra bundles an MCP server, so agents like Claude can call the same checks as tools over stdio.

What it checks

  • Structure: length, hyphens, digits, IDN/punycode, RFC 1035 validity — fully offline
  • TLD abuse risk: Spamhaus and SURBL statistics per TLD, up to −70 for the worst offenders
  • Past-content history: Wayback Machine snapshot count and archive span, up to −25
  • Typosquat and brand similarity: Levenshtein distance and bigram overlap against ~120 well-known brand stems, up to −60
  • Negative meaning: term match across 11 languages (EN, ES, PT, JA, KO, ZH, HI, AR, VI, TH, ID), up to −70
  • LLMO fitness: pronunciation and memorability heuristics, scored 0–20 (experimental)
  • Homoglyphs: IDN visual look-alike detection against known confusables, up to −75
  • Same-name handles (opt-in): GitHub, npm, PyPI, X, Instagram availability check

Real verdicts

Four domains, defaults, verdict strings copied verbatim from the tool. Measured 2026-07-12 with v0.10.0.

Passes (GREEN band)

domainbandscoremain deductions
example.comGREEN100/100(none)
llmoscore.comGREEN100/100(none)

Rejections (ORANGE / RED bands)

domainbandscoremain deductions
google.comORANGE40/100brand match: google (−60)
my-app123.tkRED10/100.tk TLD (−70), digits (−15), hyphen (−5)

A clean .com brand-free name lands at 100. Introduce a .tk TLD and add digits, and 90 points are gone before you check anything else. A name that matches an existing brand exactly loses 60 to trademark risk alone. The verdict does not tell you which name to pick — it tells you which ones you should not.

How much one choice moves the number

Same SLD, only the shown factor changed. Real deductions from the tool.

TLD choice

.tk vs .com → 70-point gap

.tk carries the maximum TLD abuse deduction (−70) because Spamhaus and SURBL rank it in the highest tier; .com adds no deduction. Same SLD, seventy points apart.

Brand collision

Levenshtein 0 vs 3 → 60-point gap

An SLD identical to a known brand costs 60 points (UDRP risk). A distance of 3 to the same brand is a note, not a deduction. The bar is drawn at "someone will confuse you for them".

Usage

# full check (structure + history + verdict)
domain-pre-flight check example.com

# offline only — skip the Wayback call
domain-pre-flight check example.com --no-history

# add handle availability across 5 platforms
domain-pre-flight check example.com --check-handles

# JSON output for CI (exit code matches the band)
domain-pre-flight check example.com --json

What real runs return

Three common patterns, all measured with defaults. Reason strings are copied verbatim from the tool.

  • my-app123.tk → RED (10/100): .tk TLD risk −70, 3 digits −15, 1 hyphen −5. Three separate red flags stack in a name that "sounds fine".
  • google.com → ORANGE (40/100): identical to known brand "google" −60. The verdict does not care that the TLD is clean — the trademark risk carries the whole deduction.
  • llmoscore.com → GREEN (100/100): no brand overlap, no negative-meaning hits across 11 languages. What a clean candidate looks like.

The tool does not pick names. It surfaces, before you buy, the pattern buried in a name you were about to commit to.

Status: experimental. Score weights and thresholds are still being calibrated against real-world domain decisions. The verdict is one input, not the only one — Wayback misses will still show up, and homoglyph attacks against your live brand need dedicated monitoring.

Why this tool exists

Domain decisions travel one way. Once you buy, the name lives on your product, in every URL, in every "the correct spelling is —" moment. The signals that would have flagged it — a heavily abused TLD, an existing brand within edit distance 1, an English word that reads as a slur in another language, a URL that used to host something you would not want to inherit — are all cheap to check before you register, and expensive to escape afterwards. This tool checks all of them, at once, in one command.

Alongside dnstwist and Namechk

Different questions. dnstwist generates the permutations attackers might register against your brand; Namechk checks availability across social platforms. domain-pre-flight is the layer before either one — should this name be registered at all, and against what criteria.

domain-pre-flightdnstwistNamechk
What it answers Should I register this domain? Which look-alikes could target my brand? Is this handle free everywhere?
Aggregate 0–100 verdict ✓ 4-band with CI exit code
Past-content history ✓ Wayback probe
Negative meaning (multi-language) ✓ 11 languages
Typosquat generation via list_typo_permutations (MCP) ✓ 20+ algorithms
Same-name handle check ✓ 5 platforms ✓ 90+ platforms
License MIT Apache-2.0 Proprietary (SaaS)

A dash means the official docs describe no such feature as of July 2026. The tools are complementary: use domain-pre-flight to decide whether to buy, dnstwist to see who might buy against you, and Namechk when handles across many social platforms are the deciding factor.

FAQ

How is the score calculated?

Each check produces a deduction from a 100-point starting score. The total maps to one of four bands: GREEN (90–100), YELLOW (70–89), ORANGE (40–69), RED (0–39). The exit code follows the band (0 / 0 / 1 / 2), so scripts can gate on it. All weights live in a single scoring module in the repo — auditable, editable, versioned.

Does it need any API keys?

No. Every check runs against public data. Wayback uses the free CDX API, TLD risk reads bundled Spamhaus / SURBL statistics, and the negative-meaning scan uses vendored word lists. The tool works fully offline with --no-history.

How reliable is the LLMO fitness score?

The LLMO fitness score is an experimental heuristic — consonant clusters, vowel ratio, length, repeated substrings, on a 0–20 scale. Its bias toward English-language pronunciation is documented in ADR 0008. Treat it as a signal, not a verdict.

How is this different from dnstwist?

dnstwist generates permutations of a domain that attackers might use against it. domain-pre-flight decides whether the domain you are considering is worth registering in the first place. The tool ships with an MCP tool called list_typo_permutations that uses the same idea for a different purpose — to check whether the name you want is a typo of someone else’s.

Does it check trademarks?

It generates pre-filled deep-links to USPTO, EUIPO and J-PlatPat for you to check by hand — a decision recorded in ADR 0009 because automated queries against those registries are unreliable and are the wrong signal for a "should I register this?" question. The typosquat check flags brand overlap with 120 well-known stems, which catches most of the collisions before you even open a registry.

Can I call it from an agent?

Yes. Install with pip install "domain-pre-flight[mcp]" and run domain-pre-flight-mcp; the MCP server exposes four tools (check_domain, check_handles, check_trademark, list_typo_permutations) over stdio. Claude, Cursor and any other MCP-capable agent can call the same checks the CLI runs.

Can I add my own brand list or negative-meaning terms?

Yes — brand stems live in data/known_brands.txt and negative-meaning terms in data/negative_meanings/<lang>.txt. Both are plain text and reloaded on every run, so a fork or a PR is enough to tune them.

What is out of scope?

Domain valuation, WHOIS scraping, bulk monitoring of domains you already own, and paid backlink-quality signals. The tool is a pre-flight check for the moment before you register, not a domain-portfolio manager.

About the author

Built by Ken Imoto: 300+ technical articles across Zenn, Qiita, Dev.to and this site, 40+ books in 4 languages, 400K+ pageviews on Zenn and Qiita, 4 research papers on Zenodo, and creator of the LLMO Framework.

Related

The LLMO fitness score operationalizes part of the LLMO Framework — a broader set of practices for making content discoverable by LLMs. Read the framework for the wider context.

Related developer tools

All products →

← All products