6 min read

Sale price and price how discounts show in Google Shopping

Sending a lower price is not the same as showing a discount. Google needs both attributes, in the right order, and a recent history of the higher one.

Sale price and price how discounts show in Google Shopping

You dropped the price for a summer sale and expected a red strikethrough badge on your Shopping listing. Nothing changed. That is because Google only shows the discount when it sees a distinct price and sale_price, and when the original price has been the going rate for long enough to count as the base.

The two attributes

  • price is the reference price, the one that gets crossed out
  • sale_price is the discounted price actually being paid today
  • sale_price must be lower than price, and both are inclusive of VAT in the UK

Send them like this

<g:price>29.99 GBP</g:price>
<g:sale_price>19.99 GBP</g:sale_price>
<g:sale_price_effective_date>2026-09-01T00:00Z/2026-09-30T23:59Z</g:sale_price_effective_date>

The base-price rule (the one that catches everyone)

Google will only show the strikethrough when the price you now call base has been the actual price for at least 30 days in the last 200. If you only ever showed 19.99 and now claim 29.99 as the base, Google ignores the discount and shows 19.99 flat. The intention is to stop fake anchoring.

Effective date window

sale_price_effective_date is optional but recommended for scheduled sales. Format is ISO 8601, start slash end, always in UTC. Outside the window Google uses price only. Inside it, price gets struck through and sale_price is the paid price.

Common mistakes

  • Sending the same value in both price and sale_price, no discount is shown
  • Sending ex-VAT in one and inc-VAT in the other, the mismatch triggers a price disapproval
  • Local time in sale_price_effective_date, must be UTC with the Z suffix
  • Rotating the sale price weekly so no value ever accumulates 30 days as the base, kills the strikethrough

In AiFeedOptimiser

The CSV importer and every platform adapter auto-map compare_at_price to price and price to sale_price when the two differ. Rules can also set sale_price_effective_date automatically from a Shopify tag like sale-summer.

More from the blog

Ship a feed that passes on the first fetch

Start a 14-day trial of AiFeedOptimiser. No credit card required.

Start free trial