Conversion
Currency and unit conversion in product feeds
Google Merchant Center already converts currency for Shopping ads, so most stores should not convert prices in the feed at all. Convert when shoppers in the target market actually see a local price on your site, or when a channel does not convert for you. Units are the opposite: Google accepts both metric and imperial in its attributes, but US shoppers search and read in inches and pounds. Below: when to convert, the formulas, and the rules that apply them to every row.
We connect your store, build the feed and keep it in sync. Updated 2026-10-27.
At a glance
- Google converts feed prices into the shopper's currency automatically using Google Finance rates and shows both prices; it is on in every Merchant Center account except in South Korea.
- Submit a converted price only when your landing page shows that price to that market, because the feed price has to match the site.
- In Textfinity, we set conversion up as an advanced rule: round(calc{[price] * 0.92}, 2) + " EUR" turns 24.99 USD into 22.99 EUR on every rebuild. The same calc turns 120 cm into 47.2 in.
- Google's dimension attributes accept cm or in, and weight accepts lb, oz, g or kg, so convert units for titles and descriptions, not to satisfy the spec.
When product feed currency conversion is needed, and when it is not
Google's own currency conversion handles the common case: a US store with USD prices advertising in Canada has its prices shown in CAD with the USD price alongside, estimated from Google Finance rates. You keep submitting your website prices, follow the price and tax rules of the feed currency's country, and add shipping and language for the new market. Microsoft Advertising does the same for additional countries in a feed (a feature it says is still rolling out): it shows the converted amount with the original currency in parentheses.
Convert in the feed when the shopper's checkout really is in the local currency: Shopify Markets or a localized storefront with its own price list, a price comparison site that expects local prices, or a separate feed per country where the landing page shows the converted amount. Converting while the site still shows the original currency creates the price mismatch Google disapproves for.
Three ways to convert prices in a feed
| Route | Where the rate comes from | Best for |
|---|---|---|
| Market prices from the store | Shopify Markets: a feed set to a market reads that market's variant prices | Shopify stores whose checkout already shows local prices; nothing to compute |
| Fixed rate in an advanced rule | A number you type: round(calc{[price] * 0.92}, 2) + " EUR" | Stores that set local prices by a policy rate and change it monthly |
| Rate sheet as a merged source | A Google Sheet keyed by SKU, with local prices computed by =GOOGLEFINANCE("CURRENCY:USDEUR") | Following the market rate without editing rules; joined on every sync |
Textfinity has no built-in exchange-rate feed. A fixed rate is predictable; a sheet follows the market but moves your prices without anyone looking.
Unit conversion: cm to inches and grams to pounds
Google's product_length, product_width and product_height accept cm or in (1 to 3,000, the same unit on all three); product_weight and shipping_weight accept lb, oz, g or kg. A metric catalog is valid for the US as it is. The conversion matters in text: 'Oak Sideboard, 71 in wide' matches how US shoppers search, '180 cm' does not. Each rule below is one advanced transform, tested on the values shown.
| Conversion | Advanced rule | Input → output |
|---|---|---|
| cm → in | round(calc{[width_cm] / 2.54}, 1) + " in" | 120 cm → 47.2 in |
| in → cm | round(calc{[length] * 2.54}, 1) + " cm" | 47.25 in → 120.0 cm |
| g → lb | round(calc{[weight_g] / 453.592}, 2) + " lb" | 450 g → 0.99 lb |
| g → oz | round(calc{[weight_g] / 28.3495}, 1) + " oz" | 250 g → 8.8 oz |
| kg → lb | round(calc{[weight_kg] * 2.20462}, 2) + " lb" | 2.5 kg → 5.51 lb |
| Mixed units | if [unit] equals "g" then round(calc{[weight] / 453.592}, 2) + " lb" else [weight] + " " + [unit] | 450 / g → 0.99 lb; 2 / kg → 2 kg |
calc{} reads the first number in a value and ignores commas, so '120 cm' and '1,299.00 USD' both work as input.
The decimal-comma trap
Because calc{} drops commas before reading the number, a European price like '24,99 EUR' is read as 2499, not 24.99, and '1.299,00' reads as 1.299. Each output column takes one transform, so you cannot run a regex on the comma and then multiply in the same column. Three ways out: export the price with a decimal point (the cleanest), prepare a dot-decimal price column in a merged source, or, if every price has exactly two decimals and no thousands separator, divide by 100 inside the same calc.
Two decimals, decimal comma, no thousands separator
round(calc{[price] / 100 * 1.08}, 2) + " USD"
"24,99 EUR" → "26.99 USD"Examples
Worked examples, by situation
Four stores, four different reasons to convert, each with the rule that does it.
Width in inches in the title, dimensions left in cm
Before
title: Oak Sideboard width_cm: 180 product_width: 180 cm
After
title: Oak Sideboard, 71 in wide product_width: 180 cm
How we set it up
We map title with the advanced expression [title] + ", " + round(calc{[width_cm] / 2.54}, 0) + " in wide". product_width stays a suffix rule (" cm") because Google accepts centimeters; only the shopper-facing text changes.
Bag weight in ounces for the title, grams for shipping
Before
title: Ethiopia Guji Whole Bean weight_g: 250
After
title: Ethiopia Guji Whole Bean Coffee, 8.8 oz shipping_weight: 250 g
How we set it up
We map title with the advanced expression [title] + " Coffee, " + round(calc{[weight_g] / 28.3495}, 1) + " oz", and shipping_weight with add suffix " g" on weight_g, since Google reads grams for carrier-calculated rates.
EUR catalog to SEK prices at a policy rate
Before
price: 89.00 EUR
After
price: 970 SEK
How we set it up
We build the feed from the Prisjakt template and map price with the advanced expression round(calc{[price] * 10.9}, 0) + " SEK". The rate is typed into the rule and reviewed monthly; the Swedish storefront shows the same rounded SEK prices, so the feed matches the site.
Use the market's own prices instead of computing them
Before
price: 59.00 EUR (primary market) UK market price: 52.00 GBP
After
price: 52.00 GBP link: https://store.example/en-gb/products/linen-shirt
How we set it up
The native Shopify connection pulls markets with the products. We set up the UK feed with the UK market selected: the variant price column then carries the UK market price (the market swaps the price only, not the currency or the URL), so price is an add suffix " GBP" on it, and link is a replace from regexp ^(https://[^/]+)/ to \1/en-gb/ on the product URL. An exclude filter "product.isPublishedInMarket is equal to False" drops products not sold in the UK.
Copy this plan
Plan: add currency or unit conversion to a feed
Decide first whether you need to convert at all; then it is one rule per column.
01
Check what the landing page shows
If the target market's shoppers see your original currency, keep the original price and let Google's or Microsoft's conversion show the local estimate. Convert only if the site charges in the local currency.
02
Pick the rate source
Shopify Markets prices if you have them, a fixed policy rate in a rule, or a Google Sheet with GOOGLEFINANCE rates joined as a merged source on SKU.
What we set up: For the sheet route, we join your rate sheet as a merged source keyed on SKU; every product needs a row in it if an advanced rule reads its columns.03
Write the price rule in the country's feed
One feed per country or market, so each gets its own currency, link and language.
What we set up: We build one feed per country from the channel template and map price with round(calc{[price] * RATE}, 2) + " EUR".04
Add unit conversions where shoppers read them
Titles and descriptions for the US market in inches and pounds; leave the dimension attributes in whatever unit Google accepts.
What we set up: We map title with an advanced rule using round(calc{…}, n).05
Check rows in the product explorer
Open a few products, including ones with commas in the price and empty weights, and read the mapped output before publishing. A calc on an empty value fails that product's mapping instead of falling through, and that includes a blank price; guard with if [weight] is empty then "" else … or filter blanks out.
What we set up: We check the mapped output of awkward products in the product explorer before the feed goes live.
Customization tips
Make it yours
Round to price points, not cents
round(calc{…}, 0) gives 970 SEK instead of 970.10 SEK. Whole numbers look deliberate and are easier to mirror on the storefront; the trade-off is a small margin drift you accept on every product.
A live rate moves your prices silently
A GOOGLEFINANCE sheet keeps prices near the market rate, but every sync can change every price, which Google and Microsoft then re-review. A fixed rate changed monthly is easier to keep in step with the site.
Keep the original currency in a custom label
Writing the source price into custom_label_4 lets you build campaign groups by original price band and spot conversion mistakes in reports without opening the feed.
Convert in one place only
If Shopify Markets already rounds and converts, do not apply a second rate in the feed. Double conversion is the most common cause of prices that disagree with the site.
Downloads
Take the files
FAQ
Questions about product feed currency conversion
Does Google Shopping convert currency automatically?
Yes. Currency conversion is on by default in Merchant Center (except in South Korea). Google shows the price converted into the shopper's local currency, estimated from Google Finance rates, alongside the original price. You keep submitting your website prices and follow the price and tax rules of the feed currency's country.
Should my feed price be in the target country's currency?
Only if your landing page shows that currency to shoppers in that country. The feed price must match the site, so a converted price on a site that charges in the original currency causes mismatches. Stores with local price lists, such as Shopify Markets, should send the local price.
How do I convert cm to inches in a product feed?
Divide by 2.54 and round. In Textfinity that is an advanced rule such as round(calc{[width_cm] / 2.54}, 1) + " in", which turns 120 cm into 47.2 in on every row. Google's dimension attributes accept cm directly, so convert where shoppers read the value, usually the title.
How do I convert grams to pounds in a product feed?
Divide grams by 453.592, or multiply kilograms by 2.20462. The rule round(calc{[weight_g] / 453.592}, 2) + " lb" turns 450 g into 0.99 lb. Google's shipping_weight accepts g and kg as well as lb and oz, so this is only needed where a channel or your copy wants pounds.
Set up for you
Have us set up price and unit conversion in your feeds.
Send us your store and the markets you sell to. We set up a feed per market in Textfinity and write the price and unit rules once; the software applies them on every rebuild.
Tell us your store and channels. We reply within 24 hours.