Ask ChatGPT what your software costs and there is a good chance it will quote a number you retired eighteen months ago. Pricing is the single most frequently wrong fact about brands in AI answers, and the reason is structural rather than accidental: prices change faster than any retrieval layer refreshes, and they are usually rendered in exactly the formats that retrieval handles worst. SQSEO surfaces this by fanning your brand into the pricing questions buyers actually ask, so you can see which wrong number is circulating before a prospect quotes it back at you.
Why pricing is the worst case for retrieval
Every other fact about your company is comparatively stable. Your category, your founding year, your headquarters, the problem you solve: all of these can sit in a model’s weights or a cached document for a year and remain true. A price cannot.
Three properties make pricing uniquely fragile. It changes often, sometimes quarterly. It is frequently rendered by JavaScript from a billing system rather than written into the HTML. And it is usually expressed in a pricing table, which is a layout, not a sentence.
That last point matters more than it sounds. Retrieval systems work on chunks of text, and the research underpinning modern retrieval, from dense passage retrieval onward, matches a query against passages rather than against page layouts. A pricing table that reads “Starter / Pro / Enterprise” across the top and “19 / 49 / Contact us” underneath makes perfect sense to a human eye and collapses into ambiguous fragments once flattened into text. The number 49 survives. The fact that 49 belongs to Pro, is per month, is per seat, and is billed annually frequently does not.
What actually goes wrong, in order of frequency
| Failure | What the answer says | Root cause | How you find it | Fix difficulty |
|---|---|---|---|---|
| Stale price | An old tier price, confidently | Cached page or model memory older than your last change | Run pricing prompts and compare to today | Low, fix the page and wait |
| Orphaned number | A real number attached to the wrong tier | Table flattened into text, labels lost | Read the answer’s cited page as plain text | Low, rewrite in sentences |
| Missing billing period | ”49 dollars” with no per month or per year | The period lives in a heading or a toggle | Check whether your page states it inline | Low |
| Invented price | A number you have never charged | Model filling a gap from category priors | No source cited, or a competitor cited | High, needs a citable page |
| Competitor price attributed to you | Their number, your name | Comparison page nearby in the index | Check which URLs are cited | Medium |
The first three are your fault and cheap to fix. The last two are the ones that cost deals, and they happen most to companies whose pricing is behind a “contact us” button, because a model asked for a number with no retrievable number available will often produce one anyway.
The chunking problem, stated plainly
When a page is prepared for retrieval it gets split into chunks of a few hundred tokens. Whatever context sits outside a chunk is invisible to whatever sits inside it.
So if your page has an H2 saying “Pricing, per user per month, billed annually” and then a table three hundred words later, the qualifier and the number can land in different chunks. The chunk containing 49 says only 49. Retrieved alone and handed to a model, it becomes “49 dollars” with whatever billing assumption the model finds most probable, which is usually monthly.
The fix is unglamorous and effective: repeat the qualifier next to every number, in prose, in the same sentence. “The Pro plan is 49 dollars per seat per month when billed annually, or 59 dollars per seat month to month.” That sentence survives any chunk boundary because it carries its own context. This is the same principle behind writing an answer-first paragraph for AI ingestion, applied to a number instead of a claim.
Tables are good for snippets and bad for prices
There is a genuine tension here. Structured tables help AI engines extract comparisons, and a structured table does make it easier to get an AI snippet. For a feature comparison that is true. For pricing it is only half true, because a table encodes the relationship between tier and price in two dimensions, and flattening removes one of them.
The answer is not to remove the table. It is to state the same information twice: keep the table for humans and for snippet extraction, and add a short prose paragraph underneath that says each price in a full sentence. Redundancy that looks unnecessary to a designer is exactly what makes a fact survive retrieval.
Markup helps as a third layer. Google’s guidance on structured data and the schema.org Product and Offer types give you a machine readable place to state price, currency, and billing period unambiguously. Markup alone will not carry an answer, because most generative engines read the rendered text, but it costs little and it removes ambiguity for the systems that do parse it.
JavaScript pricing pages are invisible more often than you think
If your prices are fetched client side from a billing API, there is a real chance the crawler that fed the answer engine never saw a number at all. Google documents this directly in its JavaScript SEO basics, and the situation is worse for the newer AI crawlers, several of which do far less rendering than Googlebot.
The test takes thirty seconds. Fetch your pricing page with curl and search the raw HTML for your headline number. If it is not there, the page ships no price to anything that does not execute JavaScript, and every AI answer about your pricing is being generated from somewhere else: a review site, an old blog post, a competitor comparison, or the model’s imagination.
Server side rendering the price, or at minimum embedding it in the initial HTML alongside the interactive component, closes this gap entirely and is usually a small change.
Currency, region and the answer that is right somewhere else
Multi currency pricing produces a specific failure: the answer quotes a real price in the wrong currency, or converts one at a stale rate. A page that shows dollars to one visitor and euros to another based on IP has, from a crawler’s perspective, a single price whose currency depends on where the crawl came from.
State every currency you publish, in text, on the same page. “Pricing is 49 dollars, 45 euros, or 39 pounds per seat per month” is one sentence that removes the entire class of error. If regional pricing genuinely differs beyond conversion, say so explicitly rather than leaving a model to infer that your euro price is a conversion of your dollar price.
Contact-us pricing has a cost you can measure
Enterprise sales teams hide pricing deliberately, and that is a legitimate commercial choice. It has a consequence in AI search that did not exist in classic SEO: a search engine with no price simply showed no price, while a generative engine asked for a price will often supply one.
Where does that number come from? Usually from whatever is adjacent in the retrieved context, which means a competitor’s published pricing, a review site’s estimate, or a years old forum post. Research on generative engine optimization found that the content characteristics of a source materially change how generative engines use it, and the practical corollary here is that if you publish nothing, something else gets used.
The middle path that works is to publish a floor and a shape without publishing the whole model. “Plans start at 1,200 dollars per month and scale by seats and volume; most teams of 20 to 50 land between 2,000 and 4,000” gives a model something true and citable, gives a buyer a qualifying signal, and keeps your negotiation room.
Comparison pages: yours or theirs
If you do not publish a clear price, your competitors’ comparison pages become the most retrievable source of information about your pricing, and they are not written to flatter you. This is one of the strongest arguments for owning your own comparison content, and it connects directly to why competitors get cited instead of you.
A comparison page you control that states your pricing accurately alongside alternatives serves two purposes: it is the kind of content generative engines reach for when answering comparison queries, and it puts a correct number in the retrievable pool.
Free tiers, trials and the discount that outlives the campaign
Three pricing adjacents cause almost as much trouble as the headline number.
Free tiers get remembered long after they are retired, because “free” is a highly quotable fact that spreads into third party listicles, directories and comparison pages that nobody updates. A company that removed its free plan two years ago can still be listed as free across a dozen retrievable sources. The correction is to publish an explicit statement that there is no free tier and what replaced it, since a model cannot retrieve an absence.
Trial lengths drift the same way. Fourteen days becomes seven, the page updates, and the old number persists everywhere it was quoted. Stating the trial length in prose on the pricing page, and in any page that mentions trials at all, at least makes the current figure the most common one in the pool.
Promotional discounts are the worst of the three because they were true when published. A launch offer page saying fifty percent off the first year sits in the index forever unless it is dated or removed. Date every promotional claim in the text itself, not only in metadata, so that a retrieved chunk carries its own expiry: “During our 2026 launch, the first year was half price” ages honestly in a way that “Get 50 percent off” never does.
Seat based, usage based, and the models that confuse everyone
Pricing shape matters as much as pricing level. A model asked how much something costs will try to give a single number, and pricing structures that resist a single number produce the most creative answers.
Usage based pricing is the hardest case. “0.002 dollars per thousand tokens” is precise and useless as an answer to “how much does this cost”, so a model will either quote the unit rate without context or invent a monthly figure. The fix is to publish worked examples in prose: “A team sending 2 million tokens a month pays about 4 dollars; a team at 200 million pays about 400.” Those sentences are retrievable, quotable, and true, and they give the model the shape of the answer rather than a rate it has to do arithmetic on.
Hybrid models with a platform fee plus usage need the same treatment. State the floor, state a typical total, and state what drives the number up. Research on how generative engines use source content points the same way as ordinary editorial sense here: sources that state quantitative claims plainly get used more readily than sources that require inference.
Per seat pricing has its own trap, which is the difference between billed seats and active users. If your page says 49 per user, a model will report 49 per user, and a prospect with 200 employees and 30 licence holders will do the wrong multiplication. Saying “per licensed seat, not per employee” costs six words.
How to audit your pricing in AI answers
Run a fixed set of prompts, at least ten times each, across the engines your buyers use. Ask them four ways: what does X cost, how much is X per month, is X expensive, and X pricing. Different phrasings retrieve differently.
Record three things per run: the number given, the billing period stated, and the URL cited. The URL is the most actionable of the three, because it tells you whether the answer came from your page, a third party, or nothing at all. An answer with no citation is a model guessing, and that is a content gap rather than a correction problem.
Signed, credentialed content is a different lever entirely, as covered in do author pages affect AI citations. Then repeat monthly. Pricing answers are slow to correct after a change, so knowing how long your last update took to propagate tells you how far ahead of a price change you need to publish.
A worked example: a stale price that cost a deal
A B2B tool raised its entry tier from 29 to 49 dollars. The pricing page updated the same day. Six weeks later prospects were still arriving quoting 29, having asked an assistant.
The audit found three causes stacked. The pricing page rendered its numbers client side, so the raw HTML contained no price at all. A two year old blog post titled “why we charge 29 dollars” was fully server rendered and still live, and it was the most retrievable pricing text the company owned. And two competitor comparison pages still listed 29.
The fixes took a week. The pricing page shipped its numbers in the initial HTML with a prose paragraph under the table. The old blog post was updated in place rather than deleted, keeping its URL and inbound links while correcting the number and adding a dated note. And a new comparison page stated current pricing alongside three alternatives. Six weeks after that, the 29 figure had largely dropped out of answers.
Key takeaways
Pricing breaks in AI answers because it changes fastest, renders client side most often, and lives in tables that flatten badly. State every price in a full sentence carrying its own tier, currency and billing period, keep the table as well, and ship the number in the initial HTML rather than from a client side fetch. If you refuse to publish pricing, publish a floor and a shape anyway, because a model asked for a number will find one somewhere. Audit with fixed prompts monthly and record the cited URL, not just the number.