← Guides

ChatGPT shows outdated prices: why it happens and how to fix it

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

  1. One source of truth. The value in offers.price should 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.
  2. Sync currency and availability. priceCurrency should be MDL or RON, and availability should be InStock/OutOfStock in 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.
  3. 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.
  4. 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.
  5. Keep the markdown twin current. A clean text/markdown version 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

Common mistakes

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

Check your store for free

A 60-second audit shows how ready your store is for AI agents — and exactly what to fix first.

Run the free audit