ChatGPT shows outdated prices: why it happens and how to fix it
Updated 2026-08-03
Why ChatGPT quotes an old price
ChatGPT, Perplexity, Gemini and Copilot don't reopen your store live for every answer. They lean on a snapshot their crawlers — GPTBot, OAI-SearchBot, PerplexityBot — collected earlier and cached. Until your new price lands in that snapshot, the assistant will confidently repeat yesterday's number.
This isn't cosmetic. Product data — price, currency, availability — is the heaviest AI-readiness category: 30% of the score. Across our rating of 63 stores in Moldova and Romania the median score is just 38/100, and a price that has drifted apart across sources is one of the usual culprits.
Three places a stale price hides
JSON-LD that disagrees with the storefront
An AI agent doesn't read the visible price tag — it reads the schema.org/Product markup:
{
"@type": "Product",
"offers": {
"@type": "Offer",
"price": "449.00",
"priceCurrency": "RON",
"availability": "https://schema.org/InStock"
}
}
The classic bug: your HTML shows 449 after a discount, but offers.price still says 499. The model trusts the markup and quotes 499. A mismatch between HTML and JSON-LD is problem number one.
A product feed on a schedule
If the price is pulled from an export (feed) that rebuilds once a day, there's a window between the reprice and the feed refresh where the old number is still exposed. The longer that window, the longer the assistant keeps repeating the wrong figure.
Cache — yours and theirs
A CDN, your plugin's page cache, the bot's own cache. Even perfect JSON-LD won't help if the visitor and the crawler are served yesterday's cached HTML page with a long max-age.
How to keep the price fresh
- One source of truth. The value in
offers.priceshould come from the same variable as the price on the storefront, not be typed into the markup template by hand. The Botmetria Woo plugin emits JSON-LD from the product's live price automatically, so HTML and markup never diverge. See the JSON-LD Product guide for details. - Sync currency and availability.
priceCurrencyshould beMDLorRON, andavailabilityshould beInStock/OutOfStockin line with real stock. A price with no currency, or with stale availability, breaks the assistant's answer just as badly as a wrong amount. - Shrink the feed window. Refresh the export right after a reprice, not on a nightly cron. Ideally, trigger it by the price-change event itself.
- Purge stale cache. When the price changes, invalidate the page cache and CDN for that URL. Make sure the bot isn't handed an old snapshot with a long
max-age. - Keep the markdown twin current. A clean
text/markdownversion of the product page is 20% of the score and increasingly the main way an agent reads the product. The twin must be built from the same price, not a separate static file everyone forgot to update. See Markdown for agents.
How to check
- Open the page source and find the
application/ld+jsonblock. Compareoffers.pricewith the storefront price — they must match to the cent. - Ask ChatGPT directly: "what's the price of <product> on <domain>" and check the answer. If it quotes the old one, the snapshot hasn't refreshed yet.
- Run the free Botmetria audit: it checks JSON-LD Product, availability and the markdown twin and shows where the price has drifted.
- Use the score bands to prioritise: ≤40 is red, 41–70 yellow, >70 green.
Common mistakes
- Discount in HTML only. 449 on screen, 499 in the markup. Change the price at the source, not in the layout.
- Price without currency.
priceis present,priceCurrencyis missing — the agent can't tell lei from lei. - A feed with a life of its own. The storefront is repriced, the feed isn't. Keep a single schedule or an event-driven export.
- Forgotten cache. You changed the price, but the CDN serves the old page to bots and humans for a week.
FAQ
Why does ChatGPT show a price that no longer exists on my site?
The assistant answers from a snapshot its crawler collected earlier. Until the new price reaches the JSON-LD and feed and the old cache is purged, the model keeps quoting the previous figure.
Why is the price in my HTML different from what ChatGPT says?
AI reads `offers.price` from the schema.org/Product markup, not the visible price tag. If a discount updated only the HTML and not the JSON-LD, the agent takes the old value from the markup.
How fast will ChatGPT pick up a new price?
It depends on when the crawler returns and rebuilds its snapshot. You speed it up with a single price source in JSON-LD, an event-driven feed refresh, and a cache purge right after each reprice.
Related guides
- JSON-LD Product: price and currency AI can read
- ChatGPT says "out of stock" but the item is available
Check your store for free
A 60-second audit shows how ready your store is for AI agents — and exactly what to fix first.