Invalid Sale Price
Your feed has a sale_price attribute but Google has determined the value is invalid. Common reasons: sale_price is higher than or equal to the regular price (not actually a discount), the discount is too small to be meaningful (under 1%), sale_price is below zero, formatting issues (missing currency, wrong decimal separator), or the sale_price doesn't match the sale price shown on your landing page.
Invalid value [sale_price]Impact: Invalid sale prices cause immediate disapproval of affected products. Google enforces strict rules: sale_price must be lower than price, the discount must be meaningful, and pricing must be accurate on the landing page. Products with invalid sale prices are pulled from Shopping until corrected — and patterns of artificial discounting can trigger misrepresentation reviews.
Root Causes
- 1Your sale_price is equal to or higher than the regular price — this happens when the 'sale' ended on your site but the feed still submits sale_price.
- 2Discount too small — Google flags discounts under 1% as not meaningful. A sale from $100.00 to $99.99 is too small to qualify as a real sale.
- 3Currency formatting mismatch — sale_price as '9.99' but the regular price has '9.99 USD' (currency suffix mismatch).
- 4Negative or zero sale_price — usually a calculation error in your feed app when applying discount logic.
- 5The sale_price in your feed doesn't match what's shown on the landing page — page reverts to regular price but feed still shows sale price.
Fix by Platform
- 1Identify the specific invalid sale_price: GMC Diagnostics → click affected product → note both the 'price' and 'sale_price' values.
- 2For sale_price >= price issues: this happens when your feed app submits compare_at_price as 'price' and the variant price as 'sale_price', but the compare_at_price is blank or equal. Fix in your feed app: map 'sale_price' only when compare_at_price > variant price; otherwise leave blank.
- 3In Simprosys: Feed Settings → Attribute Rules → sale_price → condition: 'IF compare_at_price > price THEN sale_price = price; ELSE blank'.
- 4For discount size: if you're showing small discounts (under 1%), consider removing the sale_price attribute and using just the price. Token discounts don't help performance.
- 5Test: after fixing, trigger a feed refresh and check GMC Diagnostics after 24 hours.
{% comment %} Only output sale_price if genuinely discounted {% endcomment %}
{% if variant.compare_at_price > variant.price %}
sale_price: {{ variant.price | money }}
price: {{ variant.compare_at_price | money }}
{% else %}
price: {{ variant.price | money }}
{% endif %}When This Doesn't Apply
Check your store now
Free compliance scan — 47 rules checked in minutes.
Frequently Asked Questions
What makes a sale_price invalid?+
Four common reasons: (1) sale_price >= price (not a real discount), (2) discount too small (< 1% off), (3) sale_price formatting issues (missing or wrong currency), (4) sale_price doesn't match landing page price. Google requires the sale_price to be meaningfully lower than the regular price AND consistent with what shoppers see on your product page.
What's the minimum discount Google accepts as valid?+
Google doesn't publish a hard minimum but in practice, discounts under 1% are flagged as 'invalid' (not meaningful enough to qualify as a sale). Discounts of 5% or more consistently pass validation. For Promotions (a separate Shopping feature), Google requires a minimum of 5% off. Best practice: if your discount is under 5%, just lower the regular price instead of using sale_price.
My sale ended but products are still flagged as invalid sale_price. Why?+
Your feed is likely still submitting stale sale_price values. When a sale ends, the sale_price attribute should be removed from the feed entirely. Check your feed app or CSV: expired sale dates should result in no sale_price being submitted. Also check your platform — ensure the 'on sale' or 'special price' fields are cleared on products whose sales have ended.
Can I show the same sale price year-round (evergreen sale)?+
Technically yes, but this is flagged as 'artificial discounting' by Google if the sale_price is the actual permanent price. If a product is always $29.99, just set price = $29.99, not price = $39.99 / sale_price = $29.99 forever. Artificial strikethrough pricing violates Google's honest pricing policy and can lead to account-level misrepresentation reviews. Use sale_price only for genuine time-limited promotions.