Merchant Center price mismatch: causes and fixes
Why Merchant Center reports a price difference between feed and landing page, how to find the cause and what to change per cause. With a check table.

Contents
Merchant Center reports a price mismatch between your feed and your landing page, and the affected item drops out of Shopping ads and free listings. There is rarely a typo behind it. Usually it is a systematic difference between what your store renders and what your feed submits. This article shows how to narrow down the cause, which six cases account for almost all of them, and what to change in each one.
Diagnosis: how to spot a Merchant Center price mismatch
In Merchant Center the message appears in the product view among the items that need attention. Each affected item lists the reason, often with the price Google found on the page next to the price from your feed. That comparison is your starting point. Google's own description of the check is short: Googlebot routinely crawls your landing pages and compares the price attribute in your data source with the price on the page.
The message comes in two severities:
- Warning. Google corrected the price through automatic item updates. The item keeps serving, but you are expected to fix the source.
- Disapproval. The price could not be corrected reliably, or the difference affects many items. The product does not serve at all.
If price differences pile up across the whole catalog, it stops being a per-item matter: Google's help states that mismatched prices may lead to an account suspension. That is why fixing the cause beats patching items one by one.
Before you hunt for causes, do three things:
- Open the product page from the feed link, not from your store navigation. Google checks the URL in the
linkattribute. - Open it in a private window with no login and no cart, from the country you are targeting.
- Compare three values: the price in the feed, the visible price on the page, and the price in the structured data (search the source for
"price"or use Google's Rich Results Test).
If all three match, the problem is feed freshness. If they differ, the table below points you at the cause.
The six most common causes
1. Tax or currency differ
The feed carries pre-tax prices or the wrong currency while the page shows the price a consumer pays. This happens with feeds exported from an ERP that calculates net internally, and in multi-currency stores where the feed uses the default currency while the page switches by visitor location.
How to check: Multiply the feed price by your standard tax rate and compare. If it matches then, it is tax. If the feed says USD while the target country uses another currency, it is currency.
Fix: Export the price a consumer actually pays, in the currency of the target country. For several countries, use a separate feed or a country-specific price mapping as described in the Merchant Center setup walkthrough. Make sure the page shows the same price when opened without any geo redirect.
2. Variants: Google sees a different one
Your feed submits "size M, $39.90" but the link opens a product page that defaults to "size XL, $44.90" or shows a "from $39.90" range. Google reads the price of the page as it renders on arrival.
How to check: Open the feed link. Is the submitted variant preselected? Does the page show a price range instead of one price?
Fix: Give every variant a link that preselects it. On Shopify that is the URL with the ?variant= parameter; other platforms have an equivalent. Alternatively, only submit the variant the page shows by default. Avoid "from" ranges, or make sure the structured data carries the price of the preselected variant. How to decide between one URL and separate products in the first place is covered in the article on Shopify product variants and SEO.
3. The discount only applies in the cart
The page shows $49.90, the feed says $44.90, because an automatic 10 percent discount kicks in at the cart. For Google, the price on the product page is what counts. A discount the customer cannot see there must not be anticipated in the feed.
How to check: Feed price lower than page price, and there is a promotion, coupon or volume rule in the store that is not printed on the product page.
Fix: Either show the reduced price on the product page with a struck-through original, and then use price and sale_price correctly in the feed, or set the discount up as a promotion in Merchant Center so it appears in the ad without changing the feed price.
4. Structured data differs from the visible price
The visible price is right, but the source carries a different number in the schema.org block: the pre-tax price, the price of another variant, a cached value from before a change, or a second block written by an app on top of the theme's own. Google gives structured data priority.
How to check: Run the page through the Rich Results Test. Two Product objects, or a price different from the visible one, is your answer. Search Console also reports errors and warnings for product snippets and merchant listings.
Fix: Keep exactly one source of structured data. On Shopify, check whether the theme and an SEO or reviews app both output product data. Price in the markup as the amount the customer pays, with priceCurrency, and one Offer per variant. The groundwork is in the article on product schema markup.
5. The feed is stale
The price changed in the store, but the feed only runs weekly, or the last fetch failed. Expired sale prices belong here too: sale_price is still in the feed while the promotion on the page has ended.
How to check: In Merchant Center, look at the data source and see when the last successful fetch ran. If all three prices agree right now, it was only lag.
Fix: Fetch the feed at least daily, and more often, or through the Merchant API, if prices change frequently. Bound promotions with sale_price_effective_date so the sale price expires on its own. After the fix, trigger a fresh review for the affected items instead of waiting for the next cycle.
6. Tiered pricing, volume discounts, personalized prices
The page shows a price per quantity ("$8.90 each from 10 units"), a price after login for B2B customers, or different prices by region. Google expects the price an anonymous visitor pays for a quantity of one.
How to check: Does the page show a different price with and without a login? Is the single-unit price clearly the main price, or is the tiered price more prominent?
Fix: Submit the single-unit price for an anonymous customer, and make that price unmistakably the main price on the page and in the structured data. If your business only works with login-gated prices, the product is not a good fit for Shopping unless you publish a public list price.
Table: spot the cause, fix it
| What you observe | Likely cause | What you change |
|---|---|---|
| Feed price × tax rate = page price | pre-tax price in the feed | export consumer prices |
| Feed currency differs from the page | wrong currency or geo switch | currency per target country, check the page without redirects |
| Page shows a "from" price or another variant | variant link missing | preselect the variant via URL |
| Feed price lower, discount only in the cart | discount not on the product page | show the sale price or use a promotion |
| Visible price right, source different | structured data wrong or duplicated | one source, one Offer per variant |
| All values agree right now | stale feed | fetch daily, set a sale period |
| Price per quantity or after login | tiered or customer-specific price | submit the single-unit anonymous price |
Putting automatic item updates in perspective
Merchant Center can take price, sale_price, availability and condition straight from your product page when the feed disagrees. Structured data on the page is the basis; where it is missing or incomplete, Google extracts the value from the page itself. According to the help page on automatic item updates, these automations are enabled by default, and you can review them under Products → Automations.
What it does:
- Individual differences get corrected, the item stays active, and you get a warning instead of a disapproval.
- Price changes between two feed fetches are caught.
What it does not do:
- It does not replace a current feed. Once differences are widespread, it stops covering you and items get disapproved anyway.
- It does not help when the structured data itself is wrong. Then Google adopts the wrong value with confidence.
Recommendation: leave the automation on for price and availability, keep structured data clean, and still run the feed daily. It is a safety line, not a process.
Step by step: work through price differences
- Pull the list. Filter all items with a price issue. Is it a handful or half the catalog? Many items point at tax, currency or feed age; few point at variants or promotions.
- Sample three to five items using the three-way comparison: feed, page, structured data.
- Assign the cause with the table above.
- Fix at the source. Change the export, the variant links, the theme or the promotion logic. Do not bend the feed by hand to match the page; the difference comes back on the next export.
- Re-fetch the feed and request a website check so the re-review does not wait for the next automatic crawl.
- Check after two or three days. If a few items remain, they usually have a second cause.
- Prevent it. Raise the fetch frequency, set sale periods in the feed, leave automatic item updates on.
If other disapproval reasons are still open next to price, the overview of disapproval reasons in Merchant Center covers them with a fix for each. Identifier problems, which often hit exactly the branded items where price comparison matters most, are handled in the article on missing or invalid GTIN.
When to intervene
A disapproved product is absent from every auction. If the cause cannot be fixed today, it is better to pull the item from the feed temporarily than to sit with a disapproval for days. An alert on the number of disapproved offers saves a lot of time here; in ecomando disapproved offers appear with their reason in the Google Shopping section, so you do not have to open Merchant Center to notice.
An account stays quiet long term when three things line up: the feed comes straight out of the store platform and runs daily, structured data has a single source, and discounts live where Google can see them, on the product page or as a promotion, not only in the cart.
Frequently asked questions
What does price mismatch mean in Merchant Center?
Google opened your product page and found a different price there than the one in your feed. The item gets a warning or a disapproval until both prices agree again.
Which price belongs in the feed?
The price a customer sees on the product page for a single unit and pays at checkout, in the currency of the target country and with the tax treatment that market expects. Discounts that only apply in the cart do not belong in the feed.
What are automatic item updates?
An automation in Merchant Center that lets Google take price, sale price, availability and condition from your product page when the feed disagrees. It is enabled by default and sits under Products then Automations. It catches individual differences but does not replace a current feed.
How long until the error disappears after I fix it?
After the next feed fetch and a fresh crawl of the page. Google states that Googlebot automatically re-crawls disapproved products over the following few hours or days, and you can request a website check to speed the re-review up.
Why is the price rejected even though the page shows the right number?
Often Google reads a different value from the structured data, or it sees a different variant than the one your feed submitted. Check the page source and the variant logic, not just the visible price.


