← All feed attributes

expiration_datewhy products vanish 30 days after the last refresh

Google Shopping attribute reference · updated 20 September 2026 · 3 min read

Short answer. Every product expires from Merchant Center 30 days after its last refresh, silently; expiration_date lets you set an earlier date for a product, in ISO 8601 format (YYYY-MM-DDThh:mm±hhmm, up to 25 characters). The attribute does not extend the 30 days: only a fetch or upload that includes the product refreshes it.

Attributeexpiration_date
RequirementOptional for each product.
Format
  • ISO 8601 date-time: YYYY-MM-DDThh:mm[±hhmm] or YYYY-MM-DDThh:mmZ.
  • Up to 25 characters.
  • Cannot exceed the 30-day default.

Google’s rules for expiration_date

Common mistakes, and the error each one becomes

Where the value comes from on a connected store

ShopifyNot set; the catalogue refreshes with every sync and fetch.
WooCommerceNot set; the feed is rebuilt on every fetch, so every published product is refreshed each time Google reads it.

The free feed check reads this attribute from any feed file and reports the defects above; every check is listed.

Questions merchants ask

Can I set expiration_date to 90 days to keep products longer?

No. The 30-day default is the maximum; the attribute can only shorten it.

What counts as a refresh?

The product being included in a fetched or uploaded feed, or updated through the API. Editing it in Merchant Center refreshes that product.

How do I stop products expiring?

A scheduled fetch of a feed that contains them, more often than every 30 days. Daily is the usual setting.

Sources

Read next

“Products expired” in Merchant Center: why your catalogue empties itself every 30 daysEvery product expires 30 days after its last refresh, with no disapproval and no error. What counts as a refresh, why a feed that uploaded once isn’t enough, and the two settings that stop the slow drain.
6 min
WooCommerce product feed not updating: why prices go stale, and the four fixesA WooCommerce feed still showing yesterday’s price has one of four causes: a file built on a timer, WP-Cron that never ran, a page cache serving an old copy, or a Merchant Center fetch nobody scheduled. How to tell them apart in five minutes and fix each.
7 min
Not sure what's wrong with your feed?Paste your feed URL and FeedRobin checks every product for missing barcodes, images, descriptions and more — free, no account needed.
Check my feed — it's free What it checks →