Your products were approved, nothing changed, and now Merchant Center says they are expiring. Nothing is wrong with them. Merchant Center treats product data as perishable, and the clock is 30 days from the last time anything refreshed it.
The three words Google uses are worth keeping apart, because people use them interchangeably and they mean different things: expiring is the alert, Needs Update is the marker on your product list, and an expired feed is a data source problem that stops campaigns. “Expiring items” is the phrase merchants search for; it isn’t a Merchant Center label.
The 30-day rule, and the exception
Google states it on the expiration date attribute page: All products expire from your Merchant Center account 30 days after the last refresh.
Then the exception that explains why some merchants never see this: Products added directly in Merchant Center don’t expire.
So if you type products into Merchant Center by hand, this page isn’t about you. If anything sends data, whether a platform app, a feed file, a Google Sheet, the Merchant API or Google reading your website, the 30 days apply, counted from the last refresh of that product, not from when you created it.
What “Needs Update” actually is
The column on your product list is not a status. Google is specific: “Needs Update” is an indicator overlaid on existing statuses, not a status itself.
and If your product is marked as "Needs Update", this means you must update product data, not necessarily that there’s a change in your product's overall status.
(Google’s page on product status).
The timing matches the rule above: Products enter this status 30 days after their last update.
So an approved product can carry the marker and still be selling. It is a warning that it won’t be for much longer.
The alert, three days out
Merchant Center’s product data alerts include a status change you can act on. Google says: A change in item status from " active " to " expiring " may also cause an alert. This status change occurs 3 days before an item expires.
(Google’s page on product data alerts).
Three days is the whole notice period, and the email arrives whether or not the cause was deliberate. Treat an expiry email as a feed problem to check that week, not something to file.
How a refresh happens
Google names two ways, plus one it does on its own.
You send the data again. Google says products can be refreshed by re-submitting your data source or scheduling regular data source uploads
. A manual upload counts; so does a scheduled fetch.
Google refreshes them from your site. The same page: Google will also regularly check your website and refresh your products automatically if the product data can be validated, for example, by the crawling of schema.
This is why stores with good product markup sometimes never hit the 30-day wall even on an idle feed, and why stores whose markup is written by JavaScript do. Our post on merchant listing structured data issues covers what Google can and can’t read.
If you add your store as a website data source, the crawl has its own rhythm. Google says that route checks your website at least once every 24 hours
(Google’s page on adding products from your online store).
Scheduling it, so you stop thinking about it
Three practical facts from Google’s page on scheduled updates:
- The option only exists for some source types:
Scheduled updates only appear for scheduled fetch and Google Sheets data sources.
A file you uploaded from your computer has no schedule until you give it a URL. - The URL has to be a file:
Note that pointing to an HTML page of your website will cause the processing of your product data source to fail.
A link to your shop’s collection page is not a feed. - API sources don’t need any of this:
API data sources : Feeds managed via the Merchant API update in real time when your integration sends API requests and don’t use scheduled fetches.
A Google Sheets source has its own default, which Google puts at every 24 hours
(Google’s page on using Google Sheets).
Our reading of the practical advice: a daily schedule removes the whole problem, because no product can reach 30 days. A weekly one works too, as long as nothing breaks for a month.
The expiration date attribute: a second, earlier clock
The attribute lets you retire a product on a date of your choosing, but it can only pull the date forward, never push it back. Google: Your product will expire on the specified date or 30 days after the last refresh, which ever is sooner.
How far ahead you can set it: that page says Provide a date up to one year in the future .
The product data specification lists the attribute as Optional The date that your product should stop showing.
without naming a limit, so if you are looking for the number, it is on the attribute’s own page.
Use it for seasonal lines and campaign-only products. Don’t use it as a stock control: a date in the past will quietly take a product off Google while everything in your store looks fine.
What an expired feed does to Google Ads
This is the version of the problem that costs money, because it is not one product but all of them. Google Ads says: Merchant Center data feeds need to be uploaded every 30 days, after which time they expire.
and then If a feed is expired, any Shopping campaigns that use this feed won't be able to serve.
(Google Ads’ page on Merchant Center account issues).
So a Shopping campaign that stops spending with no disapprovals, no policy issue and no budget change is worth checking against the feed’s last upload date before anything else.
Stale data has a second cost: as stock moves, the availability Merchant Center holds drifts away from the availability the page shows, and that is an account-level problem rather than a product one. If it has already turned into a suspension, our guide to how to fix a Misrepresentation suspension covers the way back.
A short checklist
- Open your data sources and look at the last fetch or upload date on each one. Anything older than a few weeks is the cause.
- Give every file source a URL and a schedule. Daily, if the file is generated automatically.
- Check the Needs Update column on the product list, and remember it sits on top of the real status rather than replacing it.
- Look for an
expiration_dateyour platform or app sets without telling you. A past date behaves exactly like a deleted product. - Check your Shopping campaigns if products vanished all at once rather than a few at a time.
- Fix product markup if you rely on Google refreshing from your site, since that route depends on Google being able to read the page.
If products are missing and none of this explains it, our guide to products not showing works through the other causes, and our post on products Google still shows after you removed them covers the opposite problem.
Where to check on each platform
- Shopify. The Google & YouTube app syncs continuously, so expiry usually means the app has disconnected or a product fell out of its publication scope. Check the app’s sync status rather than hunting for a feed.
- WooCommerce. Google for WooCommerce sends data through Google’s API, so if products are expiring, the plugin has stopped syncing. Check its connection and its scheduled actions.
- BigCommerce, Wix, Squarespace and others. Find the data source in Merchant Center, confirm whether it is a scheduled fetch, a Sheet or an app, and give it a daily schedule where the option exists.
One more place to look if your integration moved recently: a tool still calling the retired Content API stops refreshing products silently, which looks exactly like expiry. Our post on the move from the Content API to the Merchant API covers how to tell.
Where ShieldKit fits
Expiry is a data source problem, and our checks don’t read your data sources, so this is one to fix inside Merchant Center. What our free store check can tell you is whether the other half of the refresh route works: whether our crawler could load your product pages at all, and whether the Product structured data was there in the HTML it received, which is the markup Google refreshes products from, and the part that goes missing when a script writes it after the page loads.
FAQ
Why do my Merchant Center products expire?
Because Google treats product data as perishable: all products expire 30 days after their last refresh. The exception is products added directly in Merchant Center, which Google says don’t expire.
What does “Needs Update” mean?
That the product hasn’t been refreshed for 30 days. Google calls it an indicator overlaid on existing statuses, not a status itself, so an approved product can show it and still be selling, for a few more days.
How do I stop products expiring?
Refresh them on a schedule. Google allows scheduled updates for scheduled fetch and Google Sheets sources; API integrations update in real time; and Google will also refresh products itself from your website if it can validate the product data there, for example by crawling your markup.
How far ahead can I set expiration_date?
Google’s expiration date page says up to one year in the future. It also says the product expires on your date or 30 days after the last refresh, whichever comes first, so the attribute can only make a product expire sooner.
My Shopping campaign stopped serving, could this be why?
Yes. Google Ads says feeds need uploading every 30 days and that an expired feed stops any Shopping campaign using it from serving. Check the last upload date on the data source before looking at bids or budgets.