Shopify Markets and Google Shopping Without Duplicate IDs
See how Shopify Markets and WooCommerce plugins send each country to Merchant Center, and how to stop one product splitting into two IDs and two histories.
Shopify Markets and WPML on WooCommerce decide what your site shows, while a sales channel or feed plugin sends products to Google. Shopify’s Google & YouTube app syncs the countries you switch on, and Google for WooCommerce builds a separate feed for every country, language and currency. Merchant Center then identifies each product by language, feed label and offer ID. Shopping breaks when a second source sends the same product under another ID, when variants or translations never reach the feed, or when price and shipping use different currencies.
This article focuses on the store platform. Our guide to international PPC for online stores covers everything else that changes when you sell in several countries, from campaign structure to targets and budgets per market.
What is Shopify Markets, and where does Google come in?
Shopify’s help (Markets) describes a market as an audience defined by conditions: location, customer group, retail location or sales channel. For each market, you can override the store’s defaults for currency, language, pricing, product availability, theme content, domains and taxes. All of it runs from one store. Shopify’s International sales tools page also names the alternative: several stores, for teams that run each local market on their own.
One Shopify service goes by two names, which makes searching harder. Shopify renamed Markets Pro to Managed Markets in June 2024 (Markets Pro is now Managed Markets). In Managed Markets, Global-e becomes the merchant of record, the legal seller of each order, and takes over tax, duties and local payments. Shopify’s Managed Markets page limits it to merchants based in the continental United States and certain stores in Canada and the United Kingdom.
Markets decide what a shopper in each country sees on your site. The Google & YouTube app, a Shopify sales channel, gets your products into Merchant Center. Shopify’s page about the app (Google & YouTube) says Google manages it and points set-up questions to Merchant Center Help.
How does Shopify send several countries to Merchant Center?
Google’s help for Shopify users (Syncing your products) gives the path:
- In the Google & YouTube app, open the settings.
- Open the country and language setting, select the countries you want to sync and save.
- Make sure each of those countries sits in an enabled Shopify market with general shipping rates. Country information syncs properly only from such markets. Shopify’s channel requirements add that only rates in the General shipping profile sync to Merchant Center.
- Choose Automatically Sync future countries if new markets should reach Google as soon as you add them, or Manually select countries to decide each time.
After saving, open Settings → Data sources in Merchant Center and check that each new country has products. Google also warns that turning on countries may affect your campaigns, so review their location settings.
Five rules from Google’s help and Shopify’s requirements page are easy to miss:
- A country in two markets gets its own data source. If one country belongs to several Shopify markets, the app treats it as a “Standalone Country”. Its products move to a dedicated data source labelled with the two-letter country code, such as “US”, instead of the market name. Google’s FAQ on that page says these products count as new, so their performance history resets. The offer IDs themselves, such as
shopify_ZZ_…, stay the same, so conversion tracking keeps working. - Campaigns filtering by the old label lose those products. A campaign set to the old data source label, such as “USD_market_1”, stops picking up products moved to the country source. Switch it to the new label. Campaigns that advertise all products keep running as before.
- Attribute rules stay behind. Copy the rules from the old data sources to the new country sources by hand. The split also raises your offer count, so you may need to request a quota increase.
- Connecting an account overwrites its existing feed. When you connect a Merchant Center account that already has a product feed, Shopify overwrites that feed to avoid conflicts between the store and the account.
- Variant names must be in English. Shopify’s requirements page puts it plainly: “Product options, including variants, need to be in English to sync with Google.”
Google shut down the Content API for Shopping on 18 August 2026. If your IDs changed around that date, look at what else changed at the same time: the feed app, the app’s settings or a data source. We cover the app’s general sync problems in our article on where platform feed exports break.
Shopify’s help on local prices (Pricing in local currencies) says customers can see prices, pay and get refunds in their own currency. Prices convert at the market rate by default or at rates you set, and you need Shopify Payments with one-page checkout to use all of it. For Google, Shopify’s channel requirements ask you to sell in a currency that matches the country. Merchant Center converts the ad price into the shopper’s currency, and the click lands on a product page with the matching currency and price.
How does WooCommerce send several countries with WPML?
The Google for WooCommerce plugin has its own Markets screen. Its documentation (Multilingual and Multi-Currency Product Feeds) sets out the steps:
- Install WPML and translate the products into each target language. For a different currency per market, install WooCommerce Multilingual & Multicurrency and turn on multi-currency mode. These are the only two plugins the documentation names as supported.
- Go to Marketing → Google for WooCommerce → Markets and select Add Market.
- Pick the country, then its languages and currencies. Each combination becomes its own feed: Belgium with Dutch, French and German in euros gives three feeds.
- Enter delivery times if the market needs them, and save.
Translations and currencies come from WPML and its companion plugin; Google for WooCommerce only reads them. That has three consequences:
- Untranslated products drop out. Only products translated into a market’s language join that market’s feed. A store with 20 products in English, 10 of them translated into French, sends 10 to every French feed.
- Shipping must use the price currency. WooCommerce warns that Google disapproves a product whose price and shipping cost are in different currencies. With the “Sync from WooCommerce” option, the plugin converts shipping costs at your exchange rates or uses fixed costs per currency. With “Set up in Google Merchant Center”, you create a shipping service for each currency yourself.
- Tax follows the market. Prices for the United States and Canada go to Google without tax. For other countries, the plugin adds tax at your WooCommerce rates, calculated on the converted price.
Deleting a market empties its data sources in Merchant Center, and you can delete any market except the Primary Market. Google expects a separate feed per language: its help (Show products in multiple target countries) asks for a separate data source with translated data when a new country uses a different primary language.
With WPML, also compare the IDs in your English and French feeds. According to WPML’s REST API guide (Using WordPress REST API with WPML Multilingual & Multicurrency for WooCommerce), WPML creates each translation as a product of its own, with a translation_of field pointing to the original product’s ID. If one product carries different IDs in the two feeds, Google sees two products, not one product in two languages. Our guide to localising Google Ads for a new language covers what to translate beyond the feed, from titles to keywords and assets.
Shopify or WooCommerce: what differs on the way to Merchant Center
| Shopify: Google & YouTube app | WooCommerce: Google for WooCommerce with WPML | |
|---|---|---|
| Where you choose countries | App settings, country and language selection, from markets with shipping rates | Marketing → Google for WooCommerce → Markets |
| What one data source holds | Sources labelled by market, such as “USD_market_1”; a country in several markets gets its own source with a country-code label | One feed per country, language and currency |
| Languages | Product options and variant names in English | Only products translated into the market’s language |
| Currency | Sell in a currency that matches the country; Google converts the ad price | Set by WooCommerce Multilingual & Multicurrency; shipping in the price currency |
| Shipping | Only rates from the General shipping profile sync | Converted from WooCommerce, or one shipping service per currency in Merchant Center |
Why does one product turn into two in Merchant Center?
Merchant Center recognises a product by three values, not by its name or link. Google’s Merchant API guide (Add and manage products) writes them as contentLanguage~feedLabel~offerId, for example en~US~sku12345:
- the content language of the product data;
- the feed label, which ties a data source to campaigns (see feed labels in Merchant Center);
- the offer ID, the
idattribute in your feed.
Change any of the three and you have a different product. A supplemental feed applies only when all three match an existing product. Google’s ID rules (ID [id]) build on that:
- Use the same ID for the same product in every target country, and in every language within one country.
- Keep the ID stable. If you change it, you overwrite the product and its history.
- Make IDs differ by more than letter case. IDs are case-sensitive, yet Google Ads filtering, or matching a supplemental feed to the primary one, may confuse abc123 with ABC123.
- You can use the same IDs in several Merchant Center accounts without “duplicate products” disapprovals.
On the campaign side, Google’s help on feed labels (Use feed labels to advertise products from specific product data sources) says each campaign can use only one feed label. You set the language and feed label when you create a data source, and they stay fixed after that.
| What happens | What Merchant Center sees | Result |
|---|---|---|
| A second source sends the catalogue in its own ID format: another feed app or a file | two offer IDs for one product, same language and feed label | two products split impressions, clicks and conversions |
The ID format changes, for example from a country code to shopify_ZZ_ | a new offer ID | the old product’s history stays behind |
| A Shopify country moves to a standalone data source | a new data source label | history resets; campaigns filtering by the old label stop showing the products |
| A translation gets its own ID | a different offer ID in another language | the language versions count as separate products |
| A supplemental feed uses IDs in the wrong letter case | an offer ID that doesn’t exist | the supplemental data doesn’t apply |
Example store, not client data.
A tableware shop sells 3,000 products in Czechia and Slovakia on WooCommerce with WPML. Its Czech feed sends a mug as cs~CZ~TW-1001 and its Slovak feed sends the same mug as sk~SK~TW-1001: one offer ID, two languages, two feed labels, as Google asks.
Then the shop adds a second feed plugin for Czechia, which sends the mug as app-TW-1001. Merchant Center now holds 6,000 Czech products for a 3,000-product catalogue, and each product’s clicks and sales split between two entries. The shop has translated only 1,800 products into Slovak, so 1,200 products, or 40% of the catalogue, never reach the Slovak feed.
In one five-country account, 82% of German spend went to products listed twice
GetProfit manages Google Ads for a Shopify business that sells in five EU countries. Each country has its own Merchant Center account and its own Google Ads account. Our article on Merchant Center for several countries covers whether one account per country or one account for all works better.
Most offer IDs carry the country code: shopify_AT_…, shopify_DE_…. Italy’s IDs switched to shopify_ZZ_… in January 2026. In Germany, the same products also arrived from a separate feed app under a second prefix built from the shop’s name, ShopnameDE_….
A two-week comparison in April 2026, 1–14 April against 15–28 April, shows the effect. Its German lists contain eight product variants under both prefixes. For one of them, the conversion that put it among the gainers sits under the second-prefix ID, and its impression growth, from 288 to 648, under the Shopify ID. One product, two rows, and each row tells only part of the story.
A feed audit on 1 September 2026, covering the preceding year, measured the scale:
| What we found | Number |
|---|---|
| German products sent under two offer IDs, with the same price and link, in one Merchant Center account, one feed label and one country | 1,543 |
| Pairs in which both copies spent money, and their share of German ad spend | 692 pairs, 82% |
| Pairs running both copies in the same campaign | 672 |
| Products that bring 78% of German revenue and have their history split between two IDs | 69 |
| ROAS under each of the two prefixes | 330% and 338% |
| Products across the five markets with Shopify option values such as “Default” in the title | 1,845 |
Share of Italy’s ad spend in the 12 months to 5 September 2026 that sits on old IDs, replaced by shopify_ZZ_ in January 2026 | 55% |
Products under both prefixes earned almost the same ROAS, so the choice is about which history to keep, and the one with more volume wins. A supplemental feed can’t merge two primary products, so switch off the other source in the app that sends it. In Italy, more than half of the year’s spend sits on IDs that no longer exist. A 12-month product report for that market therefore shows only part of the picture.
Letter case mattered too. Our own reports store IDs in lower case. When we first built a supplemental feed for Germany from them on 7 September 2026, Merchant Center rejected 3,344 of 3,344 rows with “Offer does not exist”. After we restored the original case, all 3,344 rows went through without errors.
This is one account and an observation, not an experiment: your shares will differ, but the mechanism is the same.
What to do: one product, one ID, in every country
- Count the sources per country. In Merchant Center, open Settings → Data sources and add up the products in the primary sources for each feed label. Check that the total matches the number of products you sell in that country. A total close to double means two sources send the same catalogue.
- Keep one source, and the ID with more history. Before you choose, compare clicks and conversions for each set of IDs in Google Ads. Switch off the other source in the app or plugin that sends it. A week later, check that the product count per feed label has fallen to the catalogue size.
- Freeze the ID format. Before you reinstall the Google & YouTube app, change feed apps or rebuild the WooCommerce markets, export the current IDs. After the change, compare a sample of new IDs with the export. New IDs mean new products without history, so plan the change outside your peak season.
- Switch campaigns to the new label after a data source split. If Shopify moved a country into a standalone data source, change every campaign that filters by the old label and copy the attribute rules to the new source. Then check that each campaign still has products to show.
- Check every language feed against the catalogue. In WooCommerce, the gap between the catalogue and a language feed is the part you still need to translate. In Shopify, search titles for option values such as “Default” and keep option names in English.
- Match currencies and countries. Send price and shipping in the same currency in each feed. If your site shows only one currency, Google’s help (About currency conversion) explains that ads show a converted estimate based on Google Finance rates. In that case, you follow the price and tax rules of the country whose currency you use. Finally, set location targeting in Google Ads to the same countries as in Merchant Center: Google requires this for products to show there.
- Build supplemental feeds from Merchant Center IDs. Take the IDs from a Merchant Center export, not from a Google Ads report, so the letter case matches.
Whichever platform sends the feed, these problems show up in the same two places: Merchant Center and Google Ads. GetProfit’s portal works with the data in your Google Ads account and your Merchant Center feed. That makes it compatible with any store platform, whether your store runs on Shopify, WooCommerce or something else.
GetProfit is compatible with any platform your store is built on. The portal changes nothing without your consent.
Sources
- Markets (Shopify Help Center) — what a market is and which settings it customises. Checked 2 October 2026.
- International sales tools (Shopify Help Center) — markets run from one store; several stores as the alternative. Checked 2 October 2026.
- Markets Pro is now Managed Markets (Shopify Changelog, 2 July 2024) — the rename, effective 24 June 2024. Checked 2 October 2026.
- Managed Markets (Shopify Help Center) — Global-e as merchant of record; who can use it. Checked 2 October 2026.
- Google & YouTube (Shopify Help Center) — the channel syncs products to Merchant Center and is managed by Google. Checked 2 October 2026.
- Google & YouTube channel requirements (Shopify Help Center) — currency matching the country; General shipping profile only; existing feed overwritten; product options and variants in English; converted ad prices. Checked 2 October 2026.
- Pricing in local currencies (Shopify Help Center) — local-currency prices, automatic or manual exchange rates, Shopify Payments with one-page checkout. Checked 2 October 2026.
- Syncing your products (Google Merchant Center Help) — choosing countries in the app; markets with shipping rates; standalone country data sources; history reset; raw IDs unchanged; old-label campaigns; attribute rules; offer count. Checked 2 October 2026.
- ID [id] (Google Merchant Center Help) — same ID across countries and languages; stable IDs; changing an ID overwrites history; letter case; same IDs across accounts. Checked 2 October 2026.
- Add and manage products (Merchant API, Google for Developers) — products identified by content language, feed label and offer ID; supplemental data must match all three; Content API for Shopping shut down on 18 August 2026. Checked 2 October 2026.
- Use feed labels to advertise products from specific product data sources (Google Merchant Center Help) — one feed label per campaign; language and feed label fixed at data source creation. Checked 2 October 2026.
- Show products in multiple target countries (Google Merchant Center Help) — a separate translated data source for a new language; location targeting must match target countries. Checked 2 October 2026.
- About currency conversion (Google Merchant Center Help) — automatic conversion with Google Finance rates; price and tax rules of the currency’s country. Checked 2 October 2026.
- Multilingual and Multi-Currency Product Feeds (WooCommerce documentation) — supported plugins; Markets set-up; one feed per country, language and currency; untranslated products excluded; shipping currency; tax; deleting markets. Checked 2 October 2026.
- Using WordPress REST API with WPML Multilingual & Multicurrency for WooCommerce (WPML documentation) — translations created with
translation_ofpointing to the original product. Checked 2 October 2026. - GetProfit data: one Shopify account selling in five EU countries — product comparison 1–28 April 2026; feed audit of 1 September 2026 over the preceding year; supplemental feed set-up on 7 September 2026; Italian ID change over the 12 months to 5 September 2026.
Test-Market a New Country in Google Ads: Budget and Time
Work out the budget, length and scale-or-stop rule for a new-country test in Google Ads, with a shop that tests 50 products for six weeks as the example.
International PPC: Shopping and PMax Across Countries
See what changes when your store sells in several countries, from shipping settings in Merchant Center to ROAS targets per market, and the order to set it up.
Slow Season for Online Stores: How Deep It Goes, What Helps
Get a plan for your weakest months, such as cutting ad spend in steps instead of pausing, and see how big the revenue gap was in 96 online stores.
Ecommerce Growth Strategy: Google Ads Levers and Their Order
Get a five-step plan to grow your store's revenue from Google Ads. It starts with conversion numbers you can trust and uses data from 1,360 store-months.
Agency vs In-House vs Freelancer: Who Should Run Google Ads?
Find the set-up that fits your store's budget and catalogue, then check whoever runs the ads by one number: the share of budget on products that never sell.
Seasonal Demand in Ecommerce: Measure It and Plan Google Ads
See how seasonal online stores really are, with data from 96 stores, and what to do in Google Ads and the catalogue before, during and after the peak.