Attribute Guide

sale_price_effective_date Attribute: Scheduling Sales in Google Shopping

Full guide to the sale_price_effective_date attribute in Google Merchant Center. Date range format for activating and expiring sale prices, common mistakes…

Updated 4 min readBoostora Team
Google Shopping — Sale Price: Active vs. Expired

Zara Block Heel Sandals — Tan

<s>€79.00</s> <strong>€55.00</strong>fashion-store.com
Sale ends 30 Jun30% off

Sale is time-bounded → expires automatically → base price integrity preserved → strikethrough annotation appears correctly

Zara Block Heel Sandals — Tan

<s>€79.00</s> €55.00fashion-store.com

sale_price set but no effective date → sale never expires automatically → accidentally running a "permanent" sale → price integrity eroded, base price annotation conditions not met

sale_price_effective_date defines when a sale starts and ends. Without it, the sale runs indefinitely — which erodes the base price annotation requirement (price must be active 30+ days for the strikethrough to appear) and can cause policy issues if the "original" price is never actually charged.

What is sale_price_effective_date?

The sale_price_effective_date attribute defines the date range during which a product’s sale_price is active. It works as a scheduling mechanism: the sale price activates at the start datetime and automatically deactivates at the end datetime, reverting the displayed price to the regular price value. Outside this window, Google ignores the sale_price field entirely.

Without this attribute, a submitted sale_price is permanently active — it never expires. This is the single most common source of accidental ongoing sales, and it can silently undermine your ability to show the strikethrough annotation (which requires the base price to have been active for at least 30 of the past 200 days).

Technical specifications

Feed namesale_price_effective_date
RequiredRecommended (not technically required, but strongly advised when using sale_price)
FormatISO 8601 range: start/end — e.g., 2025-06-01T00:00:00+00:00/2025-06-30T23:59:59+00:00
Date-only format2025-06-01/2025-06-30 also accepted
SeparatorForward slash / between start and end
TimezoneInclude offset (e.g., +02:00, -05:00, or +00:00 for UTC)

How the sale_price + sale_price_effective_date pair works

  • Before start datetime: Google shows regular price. Sale price is present in feed but suppressed.

  • Between start and end datetime: Google shows sale_price with strikethrough on price (if the 30-day base price condition is met).

  • After end datetime: Google reverts to regular price. Sale price value remains in feed but is ignored.

  • No effective date set: Sale price is active indefinitely until removed from feed.

The 30-day base price annotation rule

For the strikethrough annotation to appear (showing the original price crossed out next to the sale price), the base price must have been the product’s actual price for at least 30 of the preceding 200 days. This means:

  • Running a sale for 30+ days without expiry erodes the base price history and can suppress the annotation

  • Back-to-back sales (sale ends, immediately another begins) also reduce time at base price

  • Artificially inflating price just before a sale — then immediately discounting — does not satisfy this requirement and is a policy violation

  • A well-timed, time-bounded sale (e.g., 7–14 days) preserves the base price history and ensures the annotation appears on the next sale

Rules

  • The start datetime must be before the end datetime — reversed ranges cause the sale price to never activate

  • sale_price must be strictly lower than price

  • Only one effective date range per product (not multiple ranges)

  • Do not set an end date in the past — the sale price will immediately be treated as expired

  • Timezone offsets are mandatory when including time components — omitting them can cause unexpected activation/expiry times

Best practices

  • Always set an end date — there is almost never a business reason for a sale to run indefinitely. Making time-bounded sales a hard rule in your feed pipeline prevents accidental extended promotions.

  • Schedule sales in advance via feed — upload sale_price + sale_price_effective_date with a future start date before the sale launches. This avoids same-day feed rushes and ensures the sale activates exactly on time.

  • Use supplemental feeds for dynamic sale scheduling — if you run frequent, short-duration promotions (e.g., flash sales), a supplemental feed scoped to sale-eligible products refreshes faster than a full feed and can activate/deactivate sales on a tighter schedule.

  • Respect the 30-day rule as a calendar constraint — after any sale period, allow at least 30 days at full price before launching another sale on the same products. This maintains annotation eligibility for future promotions.

Common mistakes

  • Setting sale_price without sale_price_effective_date — sale never expires automatically

  • Reversing start and end dates — sale never activates

  • Using a slash-free format (e.g., two separate date fields) — incorrect; must be a single start/end string

  • Omitting timezone offset — sale activates/expires at unexpected times

  • Setting an end date in the past — Google treats the sale as already expired and shows regular price immediately

  • Running sales so frequently that base price history falls below 30 days — strikethrough annotation is suppressed

  • Setting sale_price equal to price — no discount, no annotation, possible data quality warning

Frequently asked questions

What is the exact format for sale_price_effective_date?
The format is a date range using two ISO 8601 datetimes separated by a forward slash: YYYY-MM-DDThh:mm:ss+HH:MM/YYYY-MM-DDThh:mm:ss+HH:MM. Example: 2025-06-01T00:00:00+00:00/2025-06-30T23:59:59+00:00. This means the sale starts at midnight UTC on 1 June and expires at the end of 30 June. Always include timezone offsets. Date-only format (without time) is also accepted: 2025-06-01/2025-06-30, but including time gives you precise control over when the sale activates and expires.
Is sale_price_effective_date required when I use sale_price?
It is not technically required, but it is strongly recommended. When you set sale_price without sale_price_effective_date, the sale price activates immediately and never expires automatically — it remains active until you remove sale_price from the feed. This is the most common cause of accidentally extended sales. Always set an effective date range to guarantee automatic expiry.
What is the 30-day base price rule and how does it relate to this attribute?
For the strikethrough annotation (showing the original price crossed out next to the sale price) to appear in Shopping ads, Google requires that the base price (price) was the product's actual price for at least 30 of the preceding 200 days. If your sale runs too long — particularly due to a missing sale_price_effective_date — the discounted price effectively becomes the "real" price, the 30-day condition fails, and the strikethrough annotation is suppressed. A properly time-bounded sale protects your base price history.
Can I schedule a future sale using this attribute?
Yes. You can submit sale_price and sale_price_effective_date with a start date in the future, and Google will activate the sale price automatically when the start date arrives. The current price is shown until then. This is ideal for planned promotions (Black Friday, seasonal sales): upload the sale data in advance and it activates on schedule without requiring a same-day feed update.
What happens when the sale_price_effective_date end time passes?
Once the end datetime in sale_price_effective_date passes, Google automatically reverts to showing the regular price attribute value and removes the sale annotation. The sale_price value remains in your feed — Google simply ignores it because the effective date has expired. You do not need to remove sale_price from your feed after the sale ends, though it is good hygiene to clean it up during your next full feed update.
Can the sale_price be higher than the regular price?
No — Google requires that sale_price is strictly lower than price. If sale_price is equal to or higher than price, the sale annotation will not appear and the product may receive a data quality warning. Ensure any discount is genuine (at least a small reduction). Google also monitors patterns and will suppress strikethrough annotations for products with artificially inflated base prices.

Related guides