Perplexity put a competitor's pricing in our row of a comparison table. We found it in a sales call.

Leo H.
⚠️ Hallucinations & brand confusion

This one actually cost us a deal. A prospect ran Perplexity before our call, asked it to compare us with two competitors on pricing. Perplexity returned a table where our pricing row showed the competitor's numbers — roughly 3x what we actually charge.

Prospect came in convinced we were enterprise-priced. took 15 minutes to unsell that.

Diagnosis after some digging:

Our pricing page was React-rendered. Like, the actual price numbers were loaded via a JS component. Perplexity's bot got an empty shell when it crawled. So it filled in with... the nearest visible pricing it could find elsewhere. Which happened to be the competitor's.

Fix was not fun but not that hard either:

  • Moved pricing to static HTML (still looks identical to users)
  • Added Product schema with offers.price and offers.priceCurrency
  • Added a /pricing.json endpoint that returns our plans as structured data

Perplexity corrected the table in their next crawl, roughly 12 days later.

The lesson: if your pricing is JS-rendered or behind any kind of load event, you're basically inviting AI engines to guess. And they'll guess from the wrong source.

Anyone else caught pricing hallucinations specifically? This seems like a category of bug that most teams don't know to look for.

53

3 replies

  1. Milan Novák

    The JS-rendered pricing issue is more common than people realize. I just checked 8 indie SaaS sites in my network and 5 of them have pricing that returns empty HTML when you curl the page without JS. It's a default behavior of most React + Tailwind setups and basically nobody checks it from the bot perspective.

  2. Inês Pereira

    The /pricing.json endpoint idea is underrated. We added one and it functions as ground truth for any programmatic consumer. Takes about 20 minutes to set up. Our Perplexity pricing accuracy improved within 2 weeks of adding it.

  3. Petr VlčekFounder

    Petr here — the 'fill in from nearest competitor' behavior is consistent across Perplexity and ChatGPT when they encounter JS-only pricing. It's not random, they tend to fill from whichever competitor has the most structurally visible pricing in your category. Worth curl-testing your /pricing page today if you haven't recently.

Add a reply

Have a related question or experience?

Post a new question