No. Unlike most of other apps, with Multiple Google Shopping Feeds, only the products that are made available to feeds are counted towards the packages’ usage. Products are made available to feeds if they are included in feed groups. Even if you have thousands of products, you can still use the FREE package if the products in feeds are kept within the limit.

Products are made available to feeds in groups. When you create a new group, you can either include the whole products portfolio, or filter the group by collection(s).

You can define as many groups as you want to.

In each of the groups, you then define feeds, which target one of the Google Shopping markets. In the feeds you define important parameters that help Google better targeting your customer, e.g. product category, age group,  gender and so on.

Absolutely. Even better, the number of products in a collection is only counted once, no matter how many times the collection is included in different groups.

No. Same as collections, whole product portfolio can be included multiple times across feed groups and the total number of products is counted only once. It can be regarded as a special “All products” collection.

The first option is to add a feed group for each of the collections that need different feed settings. Inside feed groups, settings of the feed will apply to the group.

If you have a small number of products, or some of your products need special custom settings, you can configure custom feed settings at product level, which will override settings at the feed level. Custom feed settings can be accessed from product list (select products > More actions > Multiple Google Shopping feeds), single product page (More actions > Multiple Google Shopping feeds).

Please refer to the instructional video.

No. Whenever your shop hit the limit, e.g. when you add more products/create more feeds than the current package capacity, you get informed by the app with an offer to upgrade. Only when you agree and choose the package to upgrade, you then get directed to Shopify payment where you approve the new subscription.

Absolutely. If your usage fall back below a cheaper plan than the current one that you are on, you can always downgrade to the cheaper plan to save cost. The app automatically select the cheapest plan available that can cover the current usage (current number of products / number of feeds).

The app allow you to create multilingual feeds, if your shop support Shopify multilingual feature, or using a translation app (only Weglot) is user using sub-domain is supported). It does not do translation itself, but will create feeds using the translated product data. By default, only languages that have been enabled in shop are select-able.

We carefully follow Google Shopping information and constantly update the app to allow merchant to make the best out of Google policies. Google maintain a list of countries for each of the language that the shop support. For English, Google Shopping allow merchant to reach most of the countries, hence the long list. The app might show a warning that English is not the primary language in the selected country though. 

This is kind of a fallback solution if your shop is not multi-currency. The conversion is done by Google Shopping itself. If the products in your shop are listed in USD and you choose to target customers in United Kingdom, Google will do the math and convert the price from USD to GBP. People will see GBP in the ads, and when they click to go to your shop, they pay in USD. Most would not mind that, as long as the conversion is right (we can always trust Google can’t we?).

Feeds in local currency and local languages will allow you to create ads to reach customers in their own locales and that will be a big boosts to your international sales.

The app support multilingual feeds. If the shop support Shopify multilingual feature and use one of the compatible translator apps, all the enabled languages will be available for selection when create feeds.

Apart from the above compatible list, Weglot users who are using sub-domain is also supported. If you think that more translator app should be supported, please let us know.

The app also support multi-currency feeds if the shop is using Shopify multi-currency payments. If the shop is not multi-currency, you can still create translated feeds using the translated data you have, and rely on the auto currency conversion to feed to other country.

If your shop is multi currency but only support one broadly use language (e.g. English), you can still create multi-currency feeds and target all the countries that support that language.

Google bots regularly crawl the product pages’ “structured data” and compare with what was put in the feeds. This error message is an indication of mismatching data between product page and feed.

Google provide a tool to check the structured data of the product page.

The reason normally come down to either one or both of mismatching price value and/or price currency.

Mismatching price value is normally because the price value was modified after the feed was generated, and not re-sync (or not re-sync soon enough) to Google.

If you are a paid user, you should not encounter this error because the app automatically re-sync any product updates to Google, including changes due to Shopify foreign currency rates changes for multi-currency shop.

With free package, the app only re-sync product data regularly enough for the products not to expires in Google Merchant Center. The re-sync would typically be every 27 days.

If you are a paid user and see this error message, it is mostly because the shop is making multi-currency feeds using foreign currencies, and the product page is not configured properly to provide the right currency in it’s structured data. By default, most Shopify themes correctly switch currency on the product page user interface, but only show store default currency in structured data. 

If you are familiar with Shopify theme editor, you can look for the code that provide structured data in the product template, something like this

“priceCurrency”: “{{shop.currency}}”,

and change it to

“priceCurrency”: “{{ cart.currency.iso_code }}”

And that should be it

If you are not comfortable doing it, contact your theme developer and ask him to fix it for you.

Variant filters are use to select specific variants of a multi-variant product to be included in feed by specifying the option name and corresponding value.

For example you might have a shirt with a “Style” option, of which a value of “Short-Sleeve” specifing a variant for men and a value of “V-Neck” specifying a variant for women. Including both variants in a product feed is a waste since you lose the opportunity to specifically target the Short-Sleeve to customers who are looking for men’s t shirt and the V-Neck to customers who are looking for women shirt.

For such a case it is recommended to create 2 product feeds for each of the variant. For the first, create a variant filter to include “Style” equal to “Short-Sleeve” and you can set the gender to “male”. For the second, add a variant fliter to include “Style” equal to “V-Neck” and set the gender to “female”. By doing so you will manage to generate 2 separate items in Google Merchant Center from a single product in your shop, enable the opportunity to target better in Google Ads campaigns.

Please have a look at the instructional video.

You can think of tokens as place-holders, which will be filled with actual data from the right context (shop, product, variant…).

There are 2 types of token, static and dynamic.

Static tokens have fixed name, e.g {domain}, which will be filled with the current domain of the shop, or {product_title}, which will be filled with the product title in context.

Dynamic tokens include product attribute tokens ({pa_} tokens) and product metafield tokens.

Product attributes tokens are named after the product attribute (option) that it take value from. For example {pa_color} or {pa_size} will take the value of the option Color and option Size of the variant in context, respectively. That also mean if your product store the color of a variant under a different name, e.g. Options, Colour or 顏色 (color in Chinese), you need to change the token name accordingly, e.g. {pa_options}, {pa_colour} or {pa_顏色} accordingly.

Product metafield tokens are used to pull in data stored in product metafields. These are used to get SEO title/description of the products (global.title_tag and global.description_tag). Metafield tokens are also helpful if you want to make use of product Google Shopping data stored as metafields (e.g. Shopify Google Channel app store product category as mm-google-shopping.google_product_category, age group as mm-google-shopping.age_group). Some de-facto metafields can be selected from the dropdowns at the end of the inputs, but any metafields can be included using the format {namespace.key}.

token dropdown

Token name are always in lower case.

Setting up the tags are very important for your Google Ads campaign. The app does not set up the tags for you, but you can follow the instruction here.

If you connect a Google Merchant Account to the shop, the app install a verification tag to the header of theme.liquid file to handle site ownership verification and claim with Google. This is part of the standard verification process to use Google Shopping. The code snippet looks similar to the following

<!–Start Multiple Google Shopping Feeds verification–>
<meta name=”google-site-verification” content=”QoFAx7RP5t9BW8wgncz6VKCnwx8vedZDgOFqVhsAAnI” />
<!–End Multiple Google Shopping Feeds verification–>

If you decide to uninstall the app, due to the way Shopify work, permissions to edit the theme files will be removed from the app immediately. Therefore the app will not have an opportunity to remove this code snippet. Most of the time, it is ok to leave it there, it will not do any harm to your site performance. However in any cases that you want to remove it, you can follow the following steps.

1/ Go to Online Store > Themes. In the active theme section, click Actions > Edit code.

2/ Click theme.liquid on the left panel of the editor.

3/ Remove the code snippet (everything between and including the <!–Start Multiple Google Shopping Feeds verification–> and <!–End Multiple Google Shopping Feeds verification–>)

4/ Save the changes.

And that is it.

There could be a number of reason for this

  • The “Action for Out Of Stock variants” option you selected maybe in action. The option allow you to include or exclude the out of stock variants. For example, if you chose to exclude OOS variants and and all variants of a product (or the default variant of a single-variant product) is out of stock, that product will not appear in feed.
  • You may have choose a variant option filters. For example, if you selected to include only Black variant of a shirt in feed, other products which does not have a Black variant will not be included.
  • Unpublished products are NOT included in feeds. Most of the time this is the reason why the number of products in feeds are less than the available products. Unpublished products are only visible to store users, therefore they need to be excluded from feeds.

Currently only multi-currency feeds enabled by Shopify Payments is possible because of 2 constraints by Google:

1/ Google bots need to read the same price value & currency from the structured data in the product landing page compared to what in the feed. Think of structured data like data under the surface of the product pages. Your currency converter app may be able to show converted price on the surface to end users, but only Shopify Payments can also update the structured data under the surface for the bots to read.

2/ Google generally require a consistent price value & currency through out the whole process from when the user see the ads, clicked on it, arrived at the product page, add to cart then checkout. Again, only Shopify Payments provide that experience.

Besides, Shopify Payments provide a single source of truth for the converted price data so feed apps can read and build feeds, while 3rd party price converters do not.

The reason behind price mismatch of foreign currency feeds is exchange rate changes. Shopify exchange rates sometime can change as frequently as 15 minutes.
Whenever Shopify exchange rate updates, all the products’ prices in the product pages effectively change at the same time, causing a flood of changes that need to be synchronized to GMC as fast as possible. Although the app constantly sync the changes across, but there is always a lagging behind. If the number of items in GMC affected by this error is below 1%, then it is acceptable.
If the number of affected items is higher than 1%, changing the feed type to TSV can help. The reason is that the Content API is rate limited, so the flood of changes can choke it if it is big enough. TSV feeds are not subjected to this rate limit.

Content API feeds do not remove products from Google Merchant Center. Products no longer in feeds are just left in Google Merchant Center to expire. You need to manually remove them from GMC if they can not wait until expiry

Other type of feeds (file feeds) “shrink” the items every time they run, which mean products no longer in feeds are dropped out faster.


API feeds update individual products data change (prices, stock, description, title) instantly (in paid plans). However, since they are rate limited by Google API, they can be slow for cases that require mass product updates, including the initial run, regular re-new runs and foreign currency rate update runs (for foreign currency feeds).

API feeds do not remove products. Products no longer in feeds are just stop synchronized and left in GMC for expiry. If items need to be removed from GMC quicker, remove them in GMC manually, or switch to file feeds.

File feeds (XML, CSV, TSV) do not update individual products, but every time they run, they update the whole portfolio part that is included in feeds. File feeds are not subjected to Google API rate limits so they are much faster than API feeds for mass updates, that is why they are recommended for foreign currency feeds. In fact, file feeds can be suitable for most of the use cases, even for fast stock changing portfolio (Google bot can help to sync individual stock updates by crawling the landing page). File feeds are run:

1/ At least once every 24 hours.

2/ If it is a foreign currency feed, when the corresponding Shopify currency rate update

3/ When a new feed settings is saved

This error does not stop you from running paid ads campaigns. Your products are also still listed in the “free listings” program, although the performance might be affected. That is why we should strive to solve it.

More information from Google about this error is here.

Unfortunately Google does not publish what criteria are used to decide eligibility. It could be the feed data is not informational enough. It could relate to your merchant account, whether it is new, etc., or the market you target the feed too.

First we can try our best to be as informational about the products as we can. Data like color, material, sizes need to be submitted wherever possible. The app advanced features, including rule-based settings can help out to fill in the missing data.

And the eligibility changes over time too, so after updates to feed settings, give Google a few days to re-evaluate it.

By default, if a product has “Compare at price” (the higher price) in Shopify, the app will submit this higher price as the “normal” price and the standard (lower) price as the sale_price in product feeds.

However, in Google Shopping, the sale tag will only be displayed (with the higher price crossed out) your products meet some requirements by Google.

We also have a blog about this too.

So if the requirements are not met, your higher price (compare at price) will be shown. To avoid this, check the “Ignore compare price” in the Metadata tab of the feed editor.

The standard (lower price) will then be submit as normal price in feeds, without a sale price. Your product ads will show with this price instead of the higher price.

Other feed apps, including the Shopify Google app are known to override shipping settings in GMC regularly. So entries that are manually added or imported from other apps are overwritten.

It is recommended to use just one feed app. However, if you can’t remove the other app for some reasons, you can specify shipping settings at the feed level. You can do that in the Shipping tab of the feed editor, which will override shipping settings at the account level.

Each plan has limits of both the number of feeds and the number of products that can be included in feeds.

A feed is equivalent to a product list. Inside the app a feed contains all the settings that is needed by the app to build a quality product list, including the targeted ads platforms (Google, Facebook, Bing, etc.), feed language, feed currency and a list of feed attribute templates that define how to pull data into different attributes required by the corresponding ads platform. There is a large number of attributes so these settings are organized into different sections (tabs) in the feed editor for easier maintenance.

Please note that a feed is different from feed runs, which are being carried out frequently by the app to ensure that products are properly synchronized to the listing on the ads platform.

Each feed belong to a feed group, which also defines the products that are included (and excluded from feeds of the same feed group). Product inclusion (or exclusion) are done via Shopify collections (including a special “All products” collection representing all the products in store).

The following screenshot depicts the feeds and products included in a feed group.

The plan’s products limit is set based on the actual retrieval of the products. Therefore the collections are counted uniquely, meaning if the same collection are included multiple times in different feed groups, the products of that collection are counted only once because the app only need to retrieve it once. However, if a product is brought into feeds via 2 different collections, it will be counted twice as each collection requires a separate fetch. Products excluded by collections are not deducted from the plan’s limit, since the app still need to retrieve all the included products before doing the exclusion.
All products of all the uniquely included collections across all feed groups are counted towards the plan’s product limit.

All feeds in all feed groups are counted towards the plan’s feeds limit.

Feed are run by the app to ensure that products are properly synchronized with the ads platform. File feeds are run at least once every 24 hours (foreign currency feeds run more frequently to adapt with exchange rate changes). Google content API feeds run full every 26 days (enough to keep the items from being expired), but run for individual product update instantly when it occurs.

All the feeds also run whenever there is a new feed settings update, or when the manual “Refresh feeds” button is clicked in the app.