Why we refuse to invent a competitor’s pricing

Every comparison page on this site is built from facts with a source URL and a date. Here is the code that makes it impossible to publish one without them, and what it cost us.

Janan · · 4 min read

Ask any language model what Klaviyo costs and it will tell you, fluently and with total confidence. It will often be wrong. Prices move, plans get renamed, the free tier changes its limits, and the model is remembering a page that may no longer exist. That is fine when you are chatting. It is not fine when you publish it on a comparison page with a competitor’s name at the top.

So we made it impossible. Not discouraged in a prompt: impossible in code. A fact about another company cannot reach a page on this site unless there is a record of it with the page it came from and the day we read it.

The rule

One line in our build guide governs the whole comparison side of this site: never invent a fact about a competitor. Pricing, features, ratings, limits and integrations come from a record with a source URL and a verified date. No record, no claim. No model-recalled pricing, ever.

That sounds like a policy. It only works because it is a schema. A competitor fact in our database physically cannot exist without a source URL and a verification date — both columns are non-null — so the way to publish an unsourced price is to change the database, not to have a bad day.

Three gates, and what each one catches

We do use a research model to find the facts. It reads the live web and returns citations. But what comes back is treated as a claim, not an answer, and it has to survive three checks before it becomes a record.

  • The exact page must have been read. Not the same site — the same page. "The research opened klaviyo.com/about, and the model says the price is on klaviyo.com/pricing" is refused.
  • The page must belong to the product itself or to the Shopify App Store. A price from a comparison blog, a review site, or a rival’s landing page is refused, however confident it sounds.
  • The model must quote the sentence it read the number in. If it cannot produce the sentence, we cannot check the reading, so the fact is dropped.

The one that nearly got through

The first gate exists because of a test we wrote and then watched fail. Our citation check originally matched by website, which is the right behaviour for an ordinary claim: a tracking parameter on a URL should not lose you a real source. For a price it is exactly wrong. The research had genuinely read one page on a competitor’s site, and the model attributed a number to a different page on that same site. Same host, so it passed.

It would have produced a plausible, specific, sourced-looking price that nobody had actually read. That is a worse failure than an obvious mistake, because it looks like diligence. Competitor facts now require an exact match on the page address.

A wrong number that looks sourced is worse than an obvious guess. It survives review.

What it costs us

Gaps. Our comparison tables have holes in them where a fact could not be sourced, and we would rather show a hole than a guess. Every table carries the date it was last checked, and every cell links to the page the value came from, so you can disagree with us using the same evidence we used.

It also costs us pages. A comparison page that cannot source enough about the other product does not get published at all. Our quality checks stop it before it reaches the sitemap, and it sits in the drafts until someone fixes it or we retire it.

Why this is not just manners

There is a commercial argument too, and it is the stronger one. Google’s spam policies treat large volumes of pages made primarily to manipulate rankings, rather than to help people, as scaled content abuse — and the consequence lands on the whole site, not the offending pages. Google Search Central: spam policies

A few hundred comparison pages assembled from a model’s recollection is precisely that pattern. Sourcing every fact is the difference between a reference someone can check and a page that merely looks like one. We would rather have fewer pages that are true.

If we get something wrong

We will. Prices change the week after we check them. Every comparison page carries a link to report an error, and if you are right we fix it and re-date the fact. If you work at one of the companies we compare ourselves to, that link goes to a person.

The pages also say plainly that we wrote them and that we sell a competing product. Open bias costs less trust than hidden bias, and it lets you weigh the opinion separately from the facts. The facts are the part we have made checkable.

Sources

Read next