Living Websites

Why a literal trademark search misses the obvious collision

A search box that matches your query literally will happily tell you a name is clear when it is not. name-collision gate exists because of one confirmed gap: querying a full proposed name against the CIPO Canadian Trademarks Database can return zero results while the shorter, famous mark sitting inside that name is registered and live. The fix is not a smarter search box. It is asking more than one question.

The literal-search gap

The CIPO search field is literal. Queried live, "tim hortons coffee shop" returns 0 results, while "tim hortons" alone returns 42 registered marks, including one in class 43, an unmistakable food-and-beverage collision. A gate that only ever queries the full proposed name would report that clean name-clash-free result and let a name through that collides with one of the most recognized marks in the country.

This is not a rare edge case. Any real business name tends to carry extra words the registered mark it collides with does not: a location, a category word, a tagline. Every one of those extra words is a place the full-phrase query can go blind.

Token-prefix expansion, capped

Instead of one query, the gate fires several. It normalizes the proposed name, then queries the full phrase, then drops trailing tokens one at a time down to a floor of two tokens, capped at four queries per name variant. A five-word name yields the full phrase plus three shorter prefixes, four queries total. It also checks the obvious singular and plural variant of the first word, so "Cafe" and "Cafes" both get queried rather than only whichever form the name happened to type.

A returned mark counts as relevant when the normalized mark name is contained in the proposed name, or the proposed name is contained in the mark name, in either direction, on token boundaries. That containment check is what turns the shorter "tim hortons" hit into a real match against the longer proposed name, closing the exact gap the full-phrase-only query left open.

The worst verdict across every expanded query wins. One clean full-phrase query does not clear a name that a token-prefix query still finds a live collision for.

Politeness is construction-level, not a setting

More queries per name means more load on a public registry, so the throttle is not something a caller can turn down. Every call against the real CIPO endpoint is held to at least 2000 milliseconds apart, and that floor cannot be lowered from the options passed in; a lower throttle is honored only when a test double stands in for the real endpoint. Rapid-fire querying against the live endpoint returns an empty, non-JSON body, the registry's own soft-throttle response, which the gate treats as a failure to retry, never a clean result.

One retry is allowed on a server error, a network failure, or that empty-body signal. If the retry also fails, the check comes back INCONCLUSIVE with the underlying status and error message captured, and a live sweep across many names takes minutes by design rather than seconds.

Keep reading, then see the rest of the tooling.

name-collision gate runs today as an internal check in our own publish pipeline. It is not currently published as a standalone open source project.

See the rest of our honesty tooling

FAQ

Why not just query the full proposed name once?

Because the CIPO search field matches literally, and a longer proposed name can mask a shorter registered mark hiding inside it. The confirmed live example: "tim hortons coffee shop" returns 0 results while "tim hortons" alone returns 42, including a same-class hit. One query is not enough to trust.

Can I lower the throttle to check names faster?

Not against the real endpoint. The 2000 millisecond floor between CIPO calls is enforced in the code and cannot be passed in lower; a shorter interval is honored only when a test double stands in for the live registry, which by definition never touches production.

What happens if CIPO throttles the gate mid-sweep?

A rapid-fire query returns an empty, non-JSON body from CIPO's own soft-throttle, which the gate retries once and then reports as INCONCLUSIVE with the error captured, never as a silent pass.