This is the error that does not look like an error. Your products are approved. Diagnostics is clean. No red disapproval banner anywhere. And yet a chunk of your catalog simply never appears in Google Shopping or in Free listings. You filter the Products view and see the destination quietly missing:
Excluded destination [excluded_destination]: Shopping_ads
The cause is the excluded_destination attribute, and it is doing exactly what it was designed to do: keeping those products out of the destination you listed. The problem is almost always that you did not mean to set it, or an app or feed rule set it for you. This post covers what the attribute does, the exact values Google accepts, and how to find and remove an exclusion you did not intend.
TL;DR
excluded_destinationis a product attribute that tells Google which destinations a product should NOT appear in. It is not a disapproval, so it does not show up in Diagnostics.- If a product has
excluded_destination: Shopping_ads, it will not show in Shopping ads even though it is otherwise approved. excluded_destinationalways wins overincluded_destinationwhen the two conflict.- The most common cause is a feed app, channel app, or feed rule that writes the attribute automatically based on a tag, collection, or visibility setting.
- The fix is to remove or correct the attribute at the source, then refetch the feed.
What excluded_destination actually means
Google supports multiple destinations from one product feed: Shopping ads, Free listings, Display ads, Local inventory ads, and several more. By default a product is eligible for the destinations enabled on your account. The excluded destination [excluded_destination] attribute lets you opt a specific product out of specific destinations.
The accepted values, verbatim from Google's spec, are:
Shopping_ads
Display_ads
Local_inventory_ads
Free_listings
Free_local_listings
Cloud_retail
Local_cloud_retail
youtube_affiliate
youtube_merchandise
How it is submitted depends on the feed type:
- Text/CSV feeds: plain value, e.g.
Display_ads. - XML feeds: wrapped in tags, e.g.
<g:excluded_destination>Display_ads</g:excluded_destination>. - Multiple exclusions: submit the attribute multiple times (recommended) or comma-separate the values, e.g.
Display_ads,Shopping_ads.
It is a repeated, optional, per-product field. There is also a companion attribute, included_destination [included_destination], which does the opposite. When the two conflict on the same product, Google states the rule plainly: the excluded destination value always takes precedence over the included destination value.
Why this is so hard to spot
Most feed errors are loud. They disapprove the product and post a reason in Diagnostics. excluded_destination does neither. The product is valid, so Google honors the exclusion silently. There is nothing to "fix" from Google's point of view because you told it to do this.
That is exactly why it eats hours of debugging time. Merchants check Diagnostics, see green, and conclude Google is broken or there is an indexing delay, when the real answer is a one-word attribute on the product that an app set three weeks ago.
Where the unintended exclusion usually comes from
In practice, almost nobody types excluded_destination by hand. It gets injected by automation:
- Shopify channel and feed apps. Many feed apps map a Shopify tag, collection, or the "Google: exclude from Shopping" metafield to
excluded_destination. A product that picks up the wrong tag gets excluded. - Feed rules in Merchant Center. A supplemental feed or a feed rule can set
excluded_destinationbased on a condition you configured and forgot about. - Product visibility settings. Some integrations translate a store-side "hide from Google" toggle directly into
excluded_destinationrather than removing the product from the feed. - Migration leftovers. Moving from one feed tool to another can carry the attribute across when the old tool had set it.
How to find and fix it
Step 1: Confirm the attribute is actually set
In Merchant Center, go to Products > All products, click into one of the missing products, and look at the attribute list. If you see excluded_destination with a value matching the destination the product is missing from (for example Shopping_ads), that is your answer.
You can also see this through the Content API product statuses: the destinationStatuses array will list the destination under disapprovedDestinations or simply omit it from approvedDestinations, while the product itself carries the excludedDestinations value.
Step 2: Find what is setting it
Trace the attribute back to its source:
- If you use a Shopify or WooCommerce feed app, check its exclusion settings, tag mappings, and any "exclude from Google" rules.
- In Merchant Center, check Data sources > your feed > Feed rules for any rule that sets
excluded_destination. - Check whether a supplemental feed is adding the attribute on top of your primary feed.
Step 3: Remove or correct the value
- App-driven: remove the tag, metafield, or setting that triggers the exclusion, then let the app regenerate the feed.
- Feed rule: edit or delete the rule in Merchant Center, then refetch.
- Intentional exclusion you want to keep for some products: make sure the condition only matches the products you actually want excluded. Over-broad conditions (for example "exclude all products in the Wholesale collection") catch more than intended.
Step 4: Refetch and verify
After the change, trigger a feed fetch or wait for the next scheduled one. Open a previously missing product and confirm excluded_destination is gone (or no longer lists the destination you care about). The product becomes eligible again on the next processing cycle.
What not to do
- Do not add
included_destinationto override it. The exclusion wins over the inclusion, so this does nothing. Remove the exclusion at the source instead. - Do not delete and re-add the product to force it back. That resets review state and can trigger
pending_initial_policy_reviewon the recreated item. Fix the attribute, do not recreate the product. - Do not confuse it with a disapproval. If Diagnostics is clean but products are missing, an exclusion or a country or expiration issue is the more likely cause, not a hidden policy strike.
How SnowPipe handles this
SnowPipe maps your store catalog to the Google Merchant API v1 with explicit, visible field mappings. Because you can see exactly which source field maps to each Google attribute, an excluded_destination value never gets written silently. If you want to exclude products, you do it with an export filter that is shown in the pipeline, not a hidden tag-to-attribute rule buried in an app.
When products are intentionally filtered out, SnowPipe shows the filtered count in the job summary, so "47 of 50 products synced" tells you three were held back on purpose rather than leaving you to wonder why your catalog count does not match.
Frequently asked questions
What does excluded_destination do in Google Merchant Center?
It opts a product out of specific Google destinations such as Shopping ads or Free listings. The product stays approved but does not appear in the excluded destination. It is a deliberate suppression, not an error.
Why are my products approved but not showing in Shopping?
The most common silent cause is an excluded_destination: Shopping_ads value on those products, often set automatically by a feed app or feed rule. Check the attribute on a missing product in Products > All products. Country and expiration issues are the other two common silent causes.
What values does excluded_destination accept?
Shopping_ads, Display_ads, Local_inventory_ads, Free_listings, Free_local_listings, Cloud_retail, Local_cloud_retail, youtube_affiliate, and youtube_merchandise. You can submit several by repeating the attribute or comma-separating values.
Does included_destination override excluded_destination?
No. When both are set and conflict, Google applies the exclusion. The excluded value always takes precedence, so adding an inclusion does not bring the product back. Remove the exclusion instead.
How do I stop an app from excluding products?
Find the tag, metafield, collection, or feed rule the app uses to decide exclusions and correct it. Then regenerate or refetch the feed so the attribute is removed on the next processing cycle.
Tired of products disappearing for reasons Diagnostics never shows?
Try SnowPipe free — connect your store and get explicit, visible field mappings with no silent exclusions. Or, book a 15-min demo and I'll walk you through your specific setup.