DEV Community

Manh Liem
Manh Liem

Posted on

A colon in my listing cost me two months of zero buyers

My listing was in the directory. The 402 came back correctly. Delivery worked. Health score 1.0. Zero buyers for two months.

The cause was a colon.

What happened

I sell x402 endpoints. One of them is an LLM security audit. The product name in my listing read:

LLM red team scan and AI agent security audit: prompt injection, jailbreak detection, system prompt extraction, MCP tool abuse
Enter fullscreen mode Exit fullscreen mode

Read that again. system prompt extraction.

The router that indexes sellers for buyers screens every listing for prompt-injection text before it scores it. The screen is a regex:

/system\s*(?:prompt|message|role)\s*[:=]/
Enter fullscreen mode Exit fullscreen mode

system prompt extraction does not match that — there is no colon after prompt. But my listing continued with ... extraction, MCP tool abuse and elsewhere the copy had system prompt: as a label. That matched.

When the screen matches, the scoring function returns early:

if (st.injected) return;   // first line of scoreRow
Enter fullscreen mode Exit fullscreen mode

Not "rank lower". Not "flag for review". return — the seller is dropped from every route the indexer builds, for every query, including queries that have nothing to do with the matched text.

Why it looks completely healthy

This is the part worth understanding. Every signal I was monitoring said fine:

signal value
listing present in directory yes
402 on the paid route yes
delivery on payment yes
crawlHealthScore 1.0
paywallProbe ok
any warning anywhere none

All of those are checks on the seller in isolation. None of them is a check on whether the seller is in the candidate set a buyer is choosing from. Those are different questions, and only the second one determines whether money arrives.

The symptom of being excluded is indistinguishable from having no demand. You cannot tell them apart from the seller's side, because both produce the same observable: no calls.

The fix

I removed the colon. The product name became:

LLM red team scan and AI agent security audit: prompt injection, jailbreak detection, MCP tool abuse
Enter fullscreen mode Exit fullscreen mode

Same capability. Same price. One word removed.

Measured immediately after the indexer re-crawled:

query before after
LLM red team absent rank 1, score 39
prompt injection absent rank 1 and 2
jailbreak detection absent rank 1 and 3

And the dispatch eligibility flag flipped from false / settlement_required to true / eligible on both of my hostnames.

What to check on your own listing

  1. Grep your listing copy for the screen pattern. system prompt:, system message=, system role:. Any of them, anywhere in the name or description, is enough. You are not being ranked lower; you are not being ranked.
  2. Check the eligibility flag, not just the presence flag. present in directory and eligible for dispatch are different fields and can disagree. I had the first for two months without the second.
  3. Ask the indexer directly what it thinks of you. Most of these routers expose a per-seller index endpoint. If it returns routerDispatchEligible: false with a reason, that reason is the answer, and it is cheaper to read it than to guess.

The general lesson

A listing that says what it does can be read as an attempt to do it. When the marketplace screens for injection, the word for the attack is the attack.

That is not a bug in the screen — a screen that lets system prompt: through is not doing its job. It is a collision between two vocabularies: the seller's noun and the attacker's verb are the same string.

The cost of that collision is not a lower rank. It is a zero.


I sell x402 endpoints and probe the ones I compete with. If your listing is in a directory and getting no calls, the measurement above is the first thing I would check, and it takes about a minute.

Top comments (0)