Attribute Guide

sale_price Attribute in Google Shopping: Strikethrough Pricing & CTR Impact

Complete guide to the sale_price attribute in Google Merchant Center. How to trigger strikethrough pricing in Shopping ads, formatting rules, effective date…

Updated 7 min readBoostora Team
Google Shopping — sale_price: Without vs. With

Adidas Ultraboost 22 — Core Black — UK 9

<span style="text-decoration:line-through;color:#94a3b8;font-size:12px;">€149.00</span> <span style="color:#ef4444;font-weight:700;">€99.00</span>sports-store.com
⭐ 4.6 (2,104)
SALESave €5033% off

Strikethrough price + SALE badge → immediate value signal → higher CTR

Adidas Ultraboost 22 — Core Black — UK 9

€149.00sports-store.com
⭐ 4.6 (2,104)

No sale signal. Competitor with same price but sale_price annotation wins on CTR.

sale_price triggers Google's native strikethrough pricing display — the crossed-out original price with the lower sale_price shown in red alongside a "Sale" badge. This is one of the highest-CTR annotations available in Shopping without any additional bidding cost.

What is the sale_price attribute?

The sale_price attribute submits a discounted price for a product alongside the regular price. When both are present and the sale_price is lower, Google automatically applies its strikethrough pricing treatment in Shopping ads — displaying the original price crossed out, the sale price highlighted in red, and a “Sale” badge on the listing tile.

This is one of the most impactful visual annotations available in Google Shopping without any extra cost or bidding requirement. It communicates immediate value to shoppers browsing the Shopping carousel, making the discount visible before they even click. CTR uplifts of 20–40% for sale-annotated listings versus identical non-sale listings are commonly reported across ecommerce categories.

Technical specifications

Feed namesale_price
RequiredOptional — but strongly recommended whenever you run a promotional price
FormatNumeric value + ISO 4217 currency code (e.g., 79.99 EUR)
Must be lower thanprice — validation fails if sale_price equals or exceeds price
Companion attributesale_price_effective_date — sets active start and end dates for the promotion
Landing page requirementSale price must match the price displayed on the product landing page

Where sale_price displays

  • Google Shopping Ads — The primary and most valuable placement. Google shows the original price crossed out in gray, the sale price in red or highlighted, and a “Sale” badge on the product tile. This treatment appears in the Shopping carousel, Shopping tab, and Search results with Shopping annotations.

  • Free Product Listings — The Shopping tab applies the same strikethrough treatment to free listings. Products on sale get a visual advantage even without paid campaigns.

  • Dynamic Remarketing — Remarketing display ads built from your product feed use the sale_price when it’s active. Shoppers who previously viewed a product and return to find it discounted are highly likely to convert.

  • Performance Max — PMax asset groups pull product data including sale_price for Shopping-channel product cards. Sale pricing is shown in PMax Shopping placements wherever applicable.

sale_price_effective_date — the essential companion

The sale_price_effective_date attribute defines the time window during which the sale price is valid. Its format is:

YYYY-MM-DDTHH:MM+TZ/YYYY-MM-DDTHH:MM+TZ

Example: 2026-11-29T00:00+01:00/2026-11-30T23:59+01:00 (Black Friday to end of Cyber Monday, CET)

  • Pre-load promotions — Submit the sale_price and effective_date before the sale starts. Google will activate the sale pricing automatically at the start time.

  • Automatic expiry — The sale price deactivates when the end time passes, without requiring a feed update. This prevents leaving promotional prices live accidentally after a campaign ends — one of the most common and costly feed management mistakes.

  • Without effective_date — sale_price is treated as permanently active. If you forget to remove it when the promotion ends, you’re advertising a price that no longer exists on your landing page, causing price mismatch disapprovals.

Rules (what Google enforces)

  • sale_price must be strictly lower than price — Equal prices cause the attribute to be ignored; higher sale_price triggers a data quality warning.

  • Must match landing page price — The sale price in the feed must match the actual discounted price on the product landing page at time of click. Price mismatches cause disapproval.

  • No artificial price inflation — Setting an inflated price to create the appearance of a large discount, when the “sale price” is actually the regular selling price, is a policy violation. Google cross-references historical pricing data and third-party sources.

  • Currency must match the feed’s target currency — Sale price currency must match price currency. You cannot submit price in EUR and sale_price in USD.

  • Format: no currency symbols — Use ISO 4217 codes (EUR, GBP, USD, CZK) not symbols (€, £, $).

Best practices

  • Always use sale_price_effective_date — Even for open-ended sales, setting an effective_date with an end time protects you from accidentally leaving stale sale prices active after a promotion ends.

  • Ensure landing page parity in real time — If your CMS updates prices dynamically (e.g., flash sales that start at midnight), your feed update cadence must align. Consider a supplemental feed for price/sale_price updates with a high fetch frequency (every 15–30 minutes) to keep feed and landing page in sync.

  • Use for genuine discounts only — The strikethrough effect loses consumer trust quickly if shoppers perceive the original price as inflated. Maintain consistent pricing history so the original price reflects genuine pre-sale pricing.

  • Combine with Merchant Promotions — Stack sale_price (for unit price discount) with a Merchant Promotion (for additional offer text like “Free shipping over €50” or “Extra 10% off with code”). The two work independently and together maximise Shopping real estate.

  • Prioritise high-margin or competitive products — Not every product needs a sale price. Focus sale_price annotations on products where the discount is meaningful (15%+) and where you compete against multiple merchants — the strikethrough effect has the largest relative CTR impact in competitive, price-sensitive queries.

sale_price vs. Merchant Promotions: key differences

Featuresale_priceMerchant Promotions
Where it showsStrikethrough on product tile"Special offer" link below listing
What it communicatesDiscounted unit pricePromotional deal text (codes, bundles, shipping offers)
Requires landing page matchYes — price must match pageYes — offer must be redeemable
Requires approvalNo (auto-applied)Yes — Google reviews promotions
Can be combinedYes — both can appear simultaneouslyYes

Impact on performance

  • CTR uplift — Strikethrough pricing is consistently one of the highest-impact Shopping annotations. CTR improvements of 20–40% versus non-sale listings in the same auction are commonly measured, particularly in fashion, electronics, and home goods.

  • Impression share in price-sensitive auctions — Google’s Smart Bidding models factor in price competitiveness. A lower sale_price signals stronger value to the algorithm, which can improve ad rank in auctions where price is a key quality signal.

  • Conversion rate — Sale-annotated listings convert at higher rates because the value proposition is visible before the click. Shoppers who click already know the discounted price, reducing bounce rates from price shock on the landing page.

  • Free listings uplift — In the Shopping tab’s free listings, sale annotations help products stand out in an organic context where bidding advantage doesn’t apply. Well-annotated free listings drive incremental traffic at zero CPC.

Common mistakes

  • Submitting sale_price without updating the landing page price — causes price mismatch disapproval

  • Omitting sale_price_effective_date and forgetting to remove sale_price after the promotion ends

  • Setting sale_price equal to price (doesn’t trigger strikethrough, just causes a validation warning)

  • Using currency symbols instead of ISO 4217 codes in the value

  • Using a comma as decimal separator (e.g., “79,99 EUR”) — must use period

  • Inflating the base price to create an artificially large apparent discount — policy violation

  • Applying sale_price to products that are already at their regular price in the store

Pro tips

  • Build a supplemental feed for promotional pricing — Don’t modify your primary feed to add sale prices. Instead, maintain a lightweight supplemental feed with just id, sale_price, and sale_price_effective_date columns. This decouples promotional pricing from your product catalogue and lets you update sale prices in seconds without regenerating your entire feed.

  • Schedule feed fetches to coincide with sale start times — Configure your supplemental feed’s fetch schedule to run at the exact time your promotion goes live. A 15-minute delay between your website going on sale and Google picking it up means 15 minutes of price mismatch risk. Pre-loading via sale_price_effective_date is the safest approach.

  • Monitor price mismatch warnings in Diagnostics immediately — Price mismatch is one of the fastest-escalating disapproval reasons in GMC. A warning can become a disapproval within 24 hours. Set up email alerts in GMC for new Diagnostics issues so you can react immediately during promotional periods.

  • Use price benchmarks in Merchant Center Insights to calibrate discounts — GMC’s Price Competitiveness report shows how your price compares to competitors for the same product. Use this data to set sale prices that genuinely outperform competitors — not just to show a strikethrough, but to win the price comparison that drives click decisions.

Frequently asked questions

What exactly does sale_price do in Google Shopping?
When you submit sale_price alongside price, Google automatically displays the original price crossed out in gray with the sale price highlighted in red, plus a "Sale" badge on the listing. This strikethrough annotation is one of the most powerful visual CTR boosters available in Shopping — and it costs nothing extra beyond the attribute itself.
Does sale_price need to be lower than price?
Yes — always. Google validates that sale_price is strictly lower than price. If sale_price equals or exceeds price, the attribute is ignored and the strikethrough won't appear. The minimum meaningful discount is 1 unit of the currency, but to trigger the "Sale" badge reliably, a noticeable discount (at least 5–10%) is recommended.
How do I format sale_price correctly?
Use the same format as the price attribute: a numeric value followed by a space and the ISO 4217 currency code. Example: 99.00 EUR, 79.99 GBP, 149.00 USD. Do not include currency symbols (€, £, $) — use the three-letter code only. Decimal separator must be a period (.), not a comma.
What is sale_price_effective_date and do I need it?
sale_price_effective_date is a companion attribute that sets start and end dates for when the sale price is active. Format: 2026-11-29T00:00+01:00/2026-11-30T23:59+01:00. Without it, sale_price is treated as permanently active. Using effective_date lets you pre-load promotional pricing in your feed before the sale starts and have it automatically expire — preventing you from accidentally leaving sale prices live after a promotion ends.
Does the sale_price need to match the landing page?
Yes — this is a strict Google policy requirement. The sale price displayed in Shopping ads must match the price shown on the product's landing page at the moment a shopper clicks. A sale price in the feed that doesn't match the landing page will cause product disapproval for "price mismatch." If your website's sale is time-limited, use sale_price_effective_date to keep the feed and landing page in sync.
Should I use Merchant Promotions instead of sale_price?
They serve different purposes and can be used together. sale_price creates the strikethrough pricing UI directly on the product listing — it communicates the discounted unit price. Merchant Promotions create a separate "Special offer" link with promotional text like "20% off with code SUMMER" — it communicates additional deals layered on top of the price. Many merchants use both simultaneously for maximum visibility.
Can I use sale_price for all products, or are there restrictions?
sale_price can be used for any product category. There are no category restrictions. However, certain product types have additional pricing rules — for example, products with mandatory installation fees or bundle-only pricing should reflect the total price the shopper pays. Avoid using sale_price to artificially inflate the base price and then "discount" back to the real selling price — Google detects this pattern and it constitutes a policy violation.

Related guides