InsightsProduct data

Your feed, your page and your structured data should agree on price: how shopping agents read a contradiction

A shopping agent can read the same product's price from three places; the product feed, the text on the page and the JSON-LD. If they disagree, the agent can't tell which one to trust. What the Agent Readiness Index 2027 shows is missing, and how to check consistency.

Three paper panels on a collage table: an envelope, a browser frame and a folded scroll, with a violet ribbon crossing between them.
Three witnesses describe one product, and the agent must decide whose word to believe. Illustration: Specoria · generated with AI

A shopping agent doesn't have to learn a product's price from one place. It can read it from the store's product feed, from the text on the page, or from the structured data embedded in the page (schema.org Product and Offer, usually as JSON-LD). For a human shopper the difference is invisible: there is a price on the screen, and that's it. For an agent, the three sources are three separate witnesses. If they say the same thing, the price is settled. If they don't, the agent is left with two bad options: pick one and risk being wrong, or drop the product and move to a store that is consistent.

The feed is no longer a side channel

For a long time the product feed looked like something only shopping ads needed. That is changing. In one vendor's data (Profound, reported by Search Engine Journal), the share of ChatGPT product recommendations coming from product feeds jumped from 8.26% to 61.54% on 10 July 2026. OpenAI has not confirmed the figure and it is a single measurement; still, the direction is clear: agents increasingly find a product through the feed and check it on the page itself.

That makes every product whose feed price differs from its page price a question mark for the agent.

What's missing on the page side?

A torn paper price tag split into two halves on a table, a brass magnifying glass above them, and a thin violet strip bridging the tear.
Two halves of one tag meet at a violet seam, and only a close look shows whether they fit. Illustration: Specoria · generated with AI

The global edition of the Agent Readiness Index 2027 measured 471 stores; on 343 of them we could find and read a product page. Among those 343 stores:

  • 70.3% had product structured data (schema.org Product) (confidence interval 65% to 75%).
  • 66.2% had complete price, currency and stock in their structured data (confidence interval 61% to 71%).
  • 81.6% had a price readable in the first HTML response, without running JavaScript (confidence interval 77% to 85%).

In other words, roughly a third of the stores whose product page we could read offer no complete structured price that an agent could compare with the feed. On those stores the agent has to infer the price from the page text, and inference is where inconsistencies hide most easily.

The sample is not random; the method and its limits are set out in the report. These figures are from the global edition, not the Turkish one.

Where do contradictions come from?

On many platforms the feed, the page and the structured data are produced by different systems at different times. Typical causes (a checklist, not a frequency measurement):

  1. The feed is generated once a day; the price changes during the day. A sale starts at noon, the feed updates the next morning.
  2. The sale price lives only on the page. The page shows the discounted price while the JSON-LD and the feed keep the list price.
  3. Variant prices collapsed into one. The feed lists every size as its own row; the JSON-LD on the page carries only the first variant's price.
  4. VAT and currency. The feed shows prices without VAT, the page with VAT; or the feed says TRY and the structured data says USD.
  5. Stock has the same problem. The feed says "in stock", the page says "sold out". Less frequent than price, but just as confusing for an agent.

How to check it

You can do it by hand: pick a few products from the feed, open each page, find price, priceCurrency and availability in the JSON-LD in the page source, and compare them with the feed row. Repeat during sales and right after a price update.

Specoria does this with its catalog and page consistency check. It picks up to 8 rows from your catalog among links to your store's own domain, reads the pages one by one with pauses in between, and compares the price and stock in the page's structured offer with the catalog. No AI model is used in this check: the result is a direct comparison of two sources. If a page can't be opened or has no offer, the result is not "mismatch" but is reported separately as "couldn't check" or "no offer". A mismatch becomes a task in your project and is measured again on the same products after the fix.

And what we haven't measured yet: we have no published rate for how common price mismatches are across stores. The Index did not include this comparison; we'll write about it separately once enough measurements have built up.

What to fix first

  1. Generate price and stock from one source. Feed, page text and JSON-LD should read the same price field; no second, hand-entered field.
  2. Write the sale price in all three places. If the discount shows on the page, it should show in the JSON-LD and the feed too, with its end date if there is one.
  3. Update the feed when the price changes. If a daily export isn't enough, trigger it on price changes.
  4. Give every variant its own offer. If size or colour changes the price, write each variant's price separately.
  5. State currency and VAT clearly. If the price includes VAT, it should do so in every source; never leave the currency field empty.

For an agent, trust doesn't come from one correct price. It comes from seeing the same price everywhere.