Why does Google Merchant Center keep rejecting my products for missing shipping when shipping works fine at checkout?

Customers can check out fine, but Merchant Center still disapproves products in several countries with a missing shipping error. The gap is almost always what Shopify actually hands off to Google, not your storefront rates.

feedsshippinggoogle merchant centergoogle shoppingads

What's going on

A merchant runs Google & YouTube (Merchant Center) alongside Shopify. Checkout works correctly and shows accurate shipping costs for every country they sell to, yet Merchant Center's diagnostics show "Missing value [shipping]" disapprovals for a chunk of products, and the missing countries don't line up neatly with anything obvious in the store's settings. It's especially confusing when the exact same shipping setup worked without issue on a previous store, which makes it feel like something broke rather than something being unsupported.

The disconnect is that Merchant Center doesn't see your live storefront checkout at all. It only sees whatever shipping data got exported into the product feed, either through Shopify's automatic sync or through a shipping table configured manually inside Merchant Center itself. What checkout actually charges and what the feed says are computed completely independently, and Shopify only automates the handoff for a specific, fairly narrow shipping configuration.

When a store's shipping is more complex than a single flat-rate table, such as multiple shipping profiles by product or location, Shopify Markets-based rates, or rates calculated live by a carrier or a shipping app at checkout, that complexity is exactly what doesn't make it into the automated feed. Google ends up with no rate at all for the affected countries, so it disapproves the products rather than guessing.

Why it happens

Shopify's Google & YouTube channel app includes a setting that can automatically sync shipping information to Merchant Center whenever your store's shipping settings change, but per Shopify's own documentation, that sync only reads rates from your store's General shipping profile. Any product placed in a custom shipping profile, used for location-specific rates, restricted shipping, or per-product overrides, is excluded from that sync, which is a common reason multiple countries go missing while others look fine.

Real-time, carrier-calculated shipping, meaning rates fetched live from a carrier or a rate-shopping app at checkout rather than a fixed price or weight table, generally isn't something Merchant Center can import automatically either. Google's shipping settings are built around price- or weight-based rate tables, so carrier-calculated rates typically need to be represented separately, either through a supported carrier-rate configuration in Merchant Center or a manual fallback table. This is easy to miss if the store used to run flat or weight-based rates and later switched to a carrier- or app-driven setup.

It's also common for the General shipping profile itself to simply not have zones defined for every country the store now sells into, especially after expanding markets. Since the sync only reflects what's actually configured in that profile, any country without a defined zone there has nothing to export, regardless of what a shipping app or checkout is doing on the frontend.

5 ways to fix it

1

Check what your General shipping profile actually has configured for the flagged countries

In Shopify, go to Settings > Shipping and delivery and confirm the General profile (not a custom one) has a shipping zone and rate defined for every country showing as missing in Merchant Center. Per Shopify's documentation, only rates in the General profile sync automatically to Google — if a product sits in a custom profile, move it into General or add matching zones there before troubleshooting anything on the Google side.

2

If you use carrier-calculated or app-driven rates, set up manual shipping in Merchant Center as the source of truth

Carrier-calculated rates generally cannot be auto-imported reliably. In Merchant Center's shipping settings, build a price- or weight-based rate table per country or region that mirrors what customers actually pay at checkout, or a reasonable flat/threshold approximation. This is the fix most merchants land on when checkout uses live carrier rates — it decouples feed accuracy from the automatic sync entirely, and it costs nothing extra.

3

Compare the Merchant Center diagnostics rate against your real checkout rate, country by country

Pull the shipping value Merchant Center is using, or failing to find, for each flagged country from the diagnostics page, and compare it to what your checkout actually charges for a representative cart in that country. Where they match, the issue is purely a missing or incomplete export. Where they diverge, you likely have a fallback or default rate masking a real pricing mismatch that needs correcting in Shopify's shipping settings, not just Google's.

4

Make sure free shipping thresholds are represented in Merchant Center, not just at checkout

If any disapproved products qualify for a free-shipping threshold rather than a flat rate, confirm Merchant Center has a corresponding zero-cost shipping service configured for that condition. A threshold that exists only in Shopify's checkout logic, such as free shipping over a dollar amount, has no equivalent in a Merchant Center rate table unless you add one explicitly — a common cause of intermittent missing-shipping errors on otherwise correctly priced products.

5

For persistent multi-country gaps, consider a feed management app or manual attribute mapping

If your shipping logic genuinely varies by product and neither auto-import nor a single manual rate table can represent it, look at a dedicated feed management app, or check whether Merchant Center's current feed-mapping tools in your account can pull shipping-related values from Shopify metafields or tags. Which attributes support this kind of mapping changes over time, so confirm what's actually available before building a process around it — treat this as a fallback for complex catalogs, not a first step.

Bottom line

Almost every version of this problem traces back to the same root cause: Merchant Center never sees your live checkout, only whatever shipping data Shopify's sync manages to export, and that sync only covers General-profile, non-carrier-calculated rates. Start by confirming your General profile actually has zones for the flagged countries, then decide whether auto-import can realistically cover your shipping model or whether you need a manually maintained rate table in Merchant Center instead. Most merchants can resolve this with Shopify's and Google's native settings alone; a feed-management app is only worth adding if your shipping truly varies enough per product that no single rate table can represent it.

Still Stuck?

Browse the rest of the problem library, run a free storefront scan to catch issues like this automatically, or email us and we'll work out a custom solution for it.