Sale prices, shipping and availability in a product feed
Three product feed attributes account for most of the rejections and incorrect listings I fix: the sale price (sale_price), shipping cost and time (shipping), and availability. These aren’t minor attributes: badly filled in or out of sync with the real site, they trigger a disapproval or show the buyer false information.
The situations I handle
- A promotion that ended on the site but a sale price still showing in the ad
- Shipping costs shown in the ad different from what’s actually charged at checkout
- A product out of stock on the site but still advertised as available
- A wrongly set promotion end date that makes the sale price disappear or reappear at the wrong time
- Shipping costs that vary by country without the feed reflecting it
- A Merchant Center disapproval pointing at one of these three attributes without knowing which to fix first
How I check these three attributes
-
Checking the sale price and its dates
I check sale_price matches exactly what’s actually charged at checkout, and that sale_price_effective_date correctly frames the promotion’s validity period. An expired end date left in the feed shows a sale price that no longer exists on the site. I also check the UTC offset is written explicitly (+0200 on French summer time, +0100 in winter): without it, Google reads the dates as UTC and the promotion ends two hours early.
-
Checking shipping costs and times
I check the shipping sub-field and its components: the delivery country covered, the service offered, the price charged and the time announced. A feed that doesn’t detail these sub-fields by market shows identical costs for every destination, even when that isn’t true.
-
Aligning availability with real stock
I check availability reflects the product’s real state at the time Google crawls the page: in stock, out of stock, or preorder as appropriate, never a state frozen at the last feed generation.
-
Cross-checking with the product page
For each of the three attributes, I compare what the feed sends with what’s actually shown on the product page, including any schema.org markup that might contradict either one.
-
Scheduling a regular refresh
I make sure these three attributes, more than others, get recalculated at every feed refresh: they’re the ones that change most often on a live shop.
Why these three attributes cause the most trouble
Price, shipping and availability share one thing: they’re the attributes that move most often on an active shop, sometimes several times a day. A static attribute like description or image stays correct for months; these three go stale fast if the feed isn’t resynchronised at the same pace as the site.
- sale_price with wrong dates shows a sale price after the offer really ended, or hides it before it starts.
- shipping not broken down by country or service gives the buyer a wrong cost estimate before they even reach the site.
- availability out of sync with stock gets a buyer clicking an ad for a product that’s no longer available.
In all three cases, the consequence goes beyond a technical disapproval: it’s a degraded buying experience that damages trust, even once the product does become available.
<item>
<g:id>REF-0001</g:id>
<g:price>39.90 EUR</g:price>
<g:sale_price>29.90 EUR</g:sale_price>
<g:sale_price_effective_date>2026-07-01T00:00+0200/2026-07-31T23:59+0200</g:sale_price_effective_date>
<g:availability>in_stock</g:availability>
</item>
Related pages
-
Fixing Merchant Center errors
The ordered method for reading a disapproval reason and fixing it.
-
Product feed for Pinterest
Pinterest’s own availability values and price format.
-
Product feed for the Meta catalogue
Adapting these same attributes for the Meta catalogue.
-
Connecting a product feed
The general guide to setting up a feed, across every channel.
Describe your need in one minute
A few targeted questions so I can reply with an estimate rather than another questionnaire.