Make your pricing page machine-readable
Tables beat prose. Prose beats images. Images are invisible — and so is anything that needs JavaScript to appear.
The problem
Assistants quote your pricing wrongly, or refuse to quote it at all. Three causes, in order of how often they are the real one:
- The numbers live in a rendered image, or in a component that only appears after JavaScript runs.
- The currency and billing period are stated somewhere other than next to the number, so the two get separated in extraction.
- The page shows one price and your billing system charges another, because the page is hand-maintained.
Wrong pricing is the most expensive kind of misdescription: it reaches the buyer at the moment of the decision, and it is the fact most likely to be repeated by third parties who read your page once and never check again.
The fix
- Put every price in real text, inside a real
<table>. Not a grid of styled divs — a table, with headers. Extraction follows structure. - State the currency and the billing period in the same cell as the number.
$29 / month (USD)survives being lifted out of context.29under a heading three rows up does not. - Give each tier a stable heading id so a passage can be addressed and linked.
- Say what happens at the edges — what the free tier excludes, what “contact us” means in rough terms, whether the annual number is per-month-billed-annually or the annual total. These are the ambiguities that produce confidently wrong answers.
- Generate the table from the same source your billing uses. A hand-maintained price table disagrees with reality within a quarter, silently.
Verify it
Fetch your own page with curl and read what comes back. Whatever is missing there is missing for
most AI crawlers too: analysis across more than 500 million crawler fetches found
no evidence that GPTBot, ClaudeBot or PerplexityBot execute JavaScript at all.
An independent write-up of the same data
puts client-rendered content out of reach of roughly seventy per cent of them.
Then ask an assistant what your product costs and compare the answer to the table, field by field. Disagreements are usually the edges, not the headline number.
Caveat
A machine-readable price is a price your competitors can monitor automatically, and so can aggregators who will republish it without the context. That is the trade: legibility cuts both ways, and you cannot have the accurate citation without the exposure. Most teams should take the trade. Some — enterprise sales with genuinely negotiated pricing — should publish the structure and the ranges rather than the numbers, which is still far better than an image.