Skip to main content

Hi,

We are a small business with a niche market, which means one Shopify website that ships worldwide. Our default currency is $USD but we have a currency selector on-site which prompts users to view the site in local currency. Most customers are in UK.

Klaviyo is not differentiating currencies in abandoned cart email templates when importing using “item.line_price”, so the automated prices in our flows are a mix of USD, GBP, EUR…. varying per customer.

How can we import product prices in specific currencies to create separate flows per country? We know this data is available from Shopify as we use it in other tools.

Andy

Hi Haydn,

I received this message from Klaviyo support after I also contacted them directly.


“Presently, Klaviyo is only able to support one currency. This is because Klaviyo receives event data from Shopify with the value of the item, but we do not receive the currency of the value associated with the item. That said, this is something that's on our Engineering team's radar but I can't offer an ETA on if/when this feature will be added.

I'm terribly sorry for not being able to provide a workaround at this time. If I can answer any further questions, please let me know.”

Hopefully they will be able to add this feature soon.

Andy


@AndyS - I don’t want to disagree with Klaviyo’s official answer, but you might be able to do this with your own custom “Added to Cart” event so your cart abandonment email is triggered on a custom event rather than the built-in “Checkout Started” event.

Here’s documentation on how to add a Custom Add to Cart Event:
How to Create a Custom "Added to Cart" Event for Shopify

Now the key part of how this works is based on the “Viewed Product” code snippet that passes in the product data to Klaviyo.  You need to make a modification here to add in the product prices by their respective currency.

In the documentation, the code snippet looks like this:

<script type="text/javascript">
var _learnq = _learnq || ];
var item = {
Name: {{ product.title|json }},
ProductID: {{ product.id|json }},
Categories: {{ product.collections|map:'title'|json }},
ImageURL: "https:{{ product.featured_image.src|img_url:'grande' }}",
URL: "{{ shop.secure_url }}{{ product.url }}",
Brand: {{ product.vendor|json }},
Price: {{ product.price|money|json }},
CompareAtPrice: {{ product.compare_at_price_max|money|json }}
};
_learnq.push(;'track', 'Viewed Product', item]);
_learnq.push(;'trackViewedItem', {
Title: item.Name,
ItemId: item.ProductID,
Categories: item.Categories,
ImageUrl: item.ImageURL,
Url: item.URL,
Metadata: {
Brand: item.Brand,
Price: item.Price,
CompareAtPrice: item.CompareAtPrice
}
}]);
</script>

You just need to add a new “Metadata” value like “Currency” to specify USD/GBP/EUR, etc... and make sure the “Price” is reflected in the correct currency value (e.g. if USD, then Price is in USD Value, if EUR, then price is in EUR value). 

I don’t have the Shopify Template syntax handy to make this copy/paste, and you might have other factors I don’t know about, but if you can present the price with the local currency on the website, then you should be able to pass that same data to this code snippet to Klaviyo.

Hope this works!

** Note, without some additional effort, there are still some limitations to Klaviyo’s example like not being able to show the entire cart content, but only the most recent added item.  The solution to that is somewhat out of scope, but possible if you have a good Shopify developer.


@AndyS Indeed Klaviyo only shares 1 currency in the feed between Shopify and Klaviyo. Since checkout started is send server side you don't have much control over this data. It would default to the main price and currency that's used in Shopify.

The only way it would work is to have some control over what's getting send and alter the information flowing to Klaviyo. You'd need a second checkout started with the information you need.

Unlike with the checkout started which is send server side the other steps like: browse abandonment, viewed product or added to cart do let you change the front-end script and have it include any other information. I'd also send an event to Klaviyo that sends the currency (or language) someone has chosen.

The main reason a lot of companies do choose to have different shopify site is because of multilanguage/multicurrency. Having one site to rule them all also means having a lot of payment options that don't make sense to most users (if you're including country specific payment options - increases conversion). Whenever possible keep it aligned with currency and language of the Country you're taillering to.

That being said, I'm not sure if you'd be able to use Littledata in combination with Segment to create a second flow of data to Klaviyo in order to add multicurrency without having to built a custom shopify plugin yourself.

 


Hey @AndyS ,

 

Thank you for writing in!

Assuming that your customers have a “Country” saved on their profile based on their location or the website they visit, the first step here would be to add a conditional split in your flow to differentiate your customers from different countries.  

 

 

Once you add the split, you can add the same email template for every path but change the currency in the templates depending on the their country. 

You can change the currency for a specific template as outlined here

This should help you send the right emails to your customers in their respective currencies.

 

Hope this helps!

Happy Sending :) 

 


Hi Nikita,

Thanks a lot for answering quickly. This looks like a step in the right direction for us. Thanks for explaining.

We only have one website and switching currency is optional, so for example a UK customer could choose to add items to their cart using the currency $USD.

If we use a conditional split by country and set all UK customers’ currency to £GBP in Klaviyo, our current tests are still showing the $USD price for these orders, but with a £GBP symbol. It only shows the correct £GBP price if the user was using the site in £GBP.

Is there a way to pull the price from the Item ID in Shopify rather than the price in the basket? For example, with some of our other apps, we are able to pull correctly converted prices via “price_usd”, “price_gbp” and “price_eur” fields directly from Shopify, meaning the prices are always accurate.

Andy


Hey @AndyS, @nikitavaidya,

Did you get anywhere with this?  Having the same issue!

Haydn


Ahh, ok thanks Andy


@Haydn if it’s helpful, I can also include your feedback on this to our teams so that it is further documented for this particular feature. 


 In case it helps anyone who discovers this old thread, Shopify sends a “presentment_currency” parameter for events such as Added to Cart and Checkout Started, which you can use in the following way to present dynamic currrencies.

I imagine other eCommerce platforms will send a similar parameter which you could use to conditionally display currencies - much easier to manage than needing to use conditional splits and have an email per currency!

{% if event.extra.presentment_currency == 'GBP' %}
&pound;{{ item.line_price|floatformat:2 }}
{% elif event.extra.presentment_currency == 'EUR' %}
&euro;{{ item.line_price|floatformat:2 }}
{% elif event.extra.presentment_currency == 'USD' %}
${{ item.line_price|floatformat:2 }}
{% else %}
{{ item.line_price|floatformat:2 }}
{% endif %}

The above uses the {{ event.extra.presentment_currency }} value (which you can find if you “Preview” your email and look at the parameters displayed on the right hand side) and displays…

  • £ - if the currency is GBP
  • € - if the currency is EUR
  • $ - if the currency is USD
  • Just the numerical price - all else

By changing the if and elif statements to other 3-digit ISO currency codes, you could extend this if needed.

To wrap this up, you would change the code below…

{{ item.product.title }}
Quantity: {{ item.quantity|floatformat:0 }} — Total: {% currency_format item.line_price|floatformat:2 %}

to…

{{ item.product.title }}
Quantity: {{ item.quantity|floatformat:0 }} — Total: {% if event.extra.presentment_currency == 'GBP' %}
&pound;{{ item.line_price|floatformat:2 }}
{% elif event.extra.presentment_currency == 'EUR' %}
&euro;{{ item.line_price|floatformat:2 }}
{% elif event.extra.presentment_currency == 'USD' %}
${{ item.line_price|floatformat:2 }}
{% else %}
{{ item.line_price|floatformat:2 }}
{% endif %}

Essentially, just copying and pasting my snippet above to sit after “Total :”.


Reply