Methodology
This page explains how a name becomes a result and where our method stops. It is deliberately specific so you can judge whether to trust the output.
1. Source and ingestion
We start from the USPTO Trademark Annual Register (TRTYRAP), 1884-01-01 through 2025-12-31, obtained as 91 annual XML volumes (11.50 GiB) via a public-domain mirror of the USPTO bulk-data product. The annual and daily files share the same DTD and case-file field structure, so a single parser handles both. Volumes were byte-verified after download.
Each case-file element is parsed into a compact record: serial number, mark text, registration number, Nice class, filing date, registration date, owner, goods/services text, status code and status date.
2. Status classification
Status codes are the part most easily got wrong. We audited all 144 codes present in the data and mapped each to LIVE, DEAD or UNKNOWN using the USPTO status-code definition list (cons181), the USPTO status-code reference, and the TM5 standard. Unknown codes are surfaced as Unknown rather than silently treated as live.
Examples that are easy to misread: code 404 is a cancelled/dead status, 612 is abandoned, 739 is live (a Section 71 & 15 filing), and 689/690/692/694 are live. The audit found and corrected several earlier misclassifications, including 404 and 612 being counted as live.
A record is only marked live when its code is in the audited live set. The status date is carried through so you can see how old that status is.
3. Index layout and shard construction
Mark text is normalized and grouped by a short prefix. Where a prefix still produces an object larger than the edge memory budget, the prefix is lengthened by one character and split again, recursively, until every object fits. That produces 47,859 record shards plus 1,296 n-gram shards, 49,158 compressed objects in total, about 244.7 MiB.
All objects are gzip-compressed JSON and immutable once published. A manifest and a compact split-node table let the lookup resolve a name to one or two objects without scanning the index.
4. Exact and prefix lookup
An exact lookup resolves the name to its shard using the split-node table, decompresses a single small object, and filters records by normalized equality or prefix. Cost measured on the deployed infrastructure against the previous index build is 5.7 ms of CPU per query across a ten-query run, including JSON parsing. The worst-case shard in local testing (139 KiB compressed, 3,759 records) decompressed and parsed in 7.2 ms.
5. Similar-name lookup
For near-spellings we build a 2-gram inverted index. Instead of loading every gram bucket, an index of gram rarity lets the query pick the three rarest grams as seeds, which cuts a typical candidate set from roughly 35,000 to about 2,400. Candidates are then scored with an allocation-free Levenshtein implementation, and names whose length differs by more than three characters are rejected up front.
Popular grams are capped by sampling (all postings when a gram has at most 1,500 entries, otherwise a random 800) and the index stores the original posting count so hit counts remain meaningful. Cost measured against the previous index build is 11.8 ms of CPU per query including cold start, down from 130 ms before seed selection.
6. Risk label - and what it does not do
The current High / Moderate / Lower label reflects name similarity only. It does not yet incorporate goods-and-services class overlap, owner overlap, or mark strength. That weighting is on the roadmap and is described as not shipped on the data sources page.
We do not claim this predicts a USPTO refusal. Likelihood of confusion is a legal determination involving factors this tool does not evaluate. Use the label to prioritize which records to open, then verify on TSDR and, for a real decision, consult a trademark attorney.
7. Verification
After upload, sampled objects were hash-checked against their local originals. A separate end-to-end check resolved 1,276 known names against the published shards with zero misses, and 99.7% of lookups resolved through the single-shard fast path.