Tax issue Google Shopping and Shopify causing mismatched value (page crawl) [price]

Thanks.

The problem is that Shopify is getting in the way of us submitting consistent prices. I want to submit one price for everyone, but Shopify won’t provide me with the explicit variant price as it has been entered into the backend of the store, it is trying to be clever and modifying this price based on where it thinks the customer wants to ship it to.

I also do not want to have to punitively charge international customers 20% more just to placate Google. I also don’t want to have to set up international store(s) just to solve this problem when our UK store is configured to ship interntionally perfectly well. It duplicates the maintenance effort and costs for no good reason.

I would be satisfied if I could simply get something like variant.original_price or something, which returned the price entered into the Shopify backend explicitly. This would solve the problem.

I don’t really understand why it’s doing this. Geolocation is not 100% reliable, and there are instances where a customer might want to ship something to an address in the UK whilst not being in the UK themselves (or not appearing to be). They could be on holiday, they could be buying a gift and drop shipping it to someone, etc.

I have found a sortof solution, I think, but it is unreliable. There is a setting - cart.taxes_included - which you can query to determine whether the visitor (Google in this case) is seeing VAT inclusive prices in their cart. I’m not sure how reliable this is, since the Googlebot hasn’t added anything to the cart when they land on the website. It depends on how and when the cart object is instantiated, I guess.

At the moment I have some code that looks like this:

{%- assign variant_real_price = variant.price -%}
{%- if cart.taxes_included == false and variant.taxable -%}
{%- assign variant_real_price = variant.price | times: 1.2 | floor -%}
{%- endif -%}

This appears to work for the most part, but it often returns inaccurate numbers. For example, if we have a product that is 31.95 inc VAT, then the ex VAT price is 26.625. But the only price I can get out of Shopify (variant.price) for an international customer is a rounded number, 26.63. If I “times: 1.2” on this number I get 31.956, which rounded = 31.96, which is wrong.

If I use “floor” instead, as I have above, then a product that is 24.95 inc VAT (20.791666666666667 ex VAT) will be rounded to 20.79 by Shopify, and when I times that by 1.2 I get 24.948 - and if I use floor on that I get 24.94 - which is wrong.

Here is my final code to fix this problem:

assign variant_real_price = variant.price
if cart.taxes_included == false and variant.taxable
    assign variant_price_t = variant.price | times: 1.2 | round: 1

    assign variant_split_price = variant_price_t | split: "."
    if variant_split_price.size == 2 
        if variant_split_price[1] >= 8
            assign variant_real_price = variant_price_t | round
        else
            assign variant_real_price = variant_price_t | floor
        endif
    endif
endif

This code checks to see if the current price being shown to the visitor (i.e. Googlebot) includes taxes or not, by checking cart.taxes_included. if this is false, and the variant is taxable (variant.taxable = true), we know we need to modify the price.

From there, we add the VAT by multiplying the price by 1.2, and rounding it to one decimal place. After that we split the decimal part off and check to see whether or not it is greater than .8 or not. If it is, we round the number up (round), otherwise it is rounded down (floor).

Examples:

  • variant.price = 1663 (product £19.95 inc VAT)

  • calculated price = 1995.6

  • .6 is not >= .8, so 1995.6 is rounded down to 1995 by using floor

  • variant.price = 3329 (product £39.95 inc VAT)

  • calculated price = 3994.8

  • .8 >= .8, so 3994.8 is rounded up to 3995 by using round

  • variant.price = 3725 (product £44.70 inc VAT)

  • calculated price = 4470

  • no decimal part, so calculated price used as is.

This has worked for all of the products I’ve tried so far, although most if not all of our prices end in either .x0 or .x5. The VAT rate is hard-coded for any taxable product as 20% (1.2) as well.

I just thought I’d update this answer with a final resolution.

It turns out Shopify can - on request - disable the automatic price adjustments based on geolocation feature on a per-store basis. It is not a setting store owners can see or manage, only Shopify can turn it off. It appears to default to “on”, since I had to explicitly ask for it to be disabled on all of the stores I run.

Once turned off - prices are shown the same for everyone that visits the website until they confirm where they are shipping the products, which is the logical configuration since it is shipping destination that dictates whether VAT is added or not (at least in the UK, shipping internationally).

Once Shopify turned off this setting it obviated my fabricated Google pricing code shown above, so please disregard it if you’re trying to achieve the same goal as I was. Instead, just contact Shopify and ask for this feature to be switched off.

You can disable that feature by going to Shopify > Settings > Markets > In the preferences section disable Include or exclude tax based on your customer’s country

No, that setting determines whether customers get charged tax or not based on their shipping country.

As I explained earlier in the thread, with the hidden geolocation setting switched on - Shopify would show prices with VAT removed to customers it thought wouldn’t pay it, before they had entered their shipping address. In other words - a customer based in the USA landing on my UK website would see prices with VAT removed on the PDP and collection pages (everywhere a price is shown), before they’ve even said they want to ship their order to the USA.

This hidden setting controls the presentation of prices, not the actual price quoted once the customer has specified a shipping address in the cart (which is controlled by the setting you mentioned).

In essence, what I wanted to achieve was to stop Shopify deciding itself what prices to show customers, instead I wanted customers (and Google) worldwide to see the same prices on the website until they had provided a shipping address, at which point VAT would be removed. This ensures a consistent experience, and fixes my issue with Google Merchant Centre complaining about the displayed website prices being different to the feed prices, which was my problem all along.

I have an international client, with your exact same issue. And I resolved the pricing issue as per the previous reply.

By unchecking this option, all prices are shown VAT inclusive as they should be, regardless of where the user is located.

I have implemented this fix a month ago, and everything is working as expected.

If Shopify provided another solution, that is great.

Yes, but unless Shopify have changed things in the last month it means that your client is charging the VAT inclusive price to everyone, including customers where VAT wouldn’t be charged, because that’s what that setting controls. In essence - international customers would be charged 20% extra.

For example - with that setting unchecked, with a client based in the UK selling internationally:

  • Product A is £30 in the backend, with “Charge tax on this item” switched on

  • Customer A in UK buys it, they pay £30 with £5 of the price (20%) being VAT - OK.

  • Customer B outside UK buys it, they pay £30 with £0 of the price being VAT - NOT OK.

Customer B has been overcharged 20% relative to Customer A. Customer B should only have paid £25.

So, you’re both right and wrong in my opinion. Unchecking that option does result in the same price being shown to everyone, but it also results in the same price being charged to everyone, which is not what we want.

Yes that is correct, now I understand that you don’t want to do this.

In that case unchecking just that one option is indeed not enough.

Just to confirm that you asked for (disable the automatic price adjustments based on geolocation feature on a per-store basis)

And they disabled it?

The reason I ask to confirm is that I have found Shopify support to sometimes not wanting to go the extra mile (or don’t understand the issue and thus assume can not help), or sometimes don’t want to help. While I know they can do it.

It’s a hit and miss with support.

Thanks for this communication, this will help a lot of other people.

Yes, that is correct.

I emailed them explaining the problem above, they confirmed that they have a internal setting that tries to “best guess” what price the customer will pay, based on geolocation. They also confirmed that this setting is hidden from storeowners and can only be changed by them (for now).

I requested that they disable this setting on our stores. I had to request it for each one separately.

They confirmed the setting had been switched off. At that point the behaviour of our stores was as desired - i.e. the price shown on the website (and to Google scrapers) is the price entered in the backend, and customers are charged the correct amount based on location.

It isn’t until the customer adds the product(s) to the cart and specifies where it is being shipped to (which determines whether VAT is charged) that the price in the cart changes.

I have that setting you mentioned switched on (because we do want to include or exclude taxes based on customer country).

To be clear - with this hidden setting enabled (which is default I think, as I had to request it be turned off for every store) and the setting you mentioned checked - Shopify will change the displayed price based on geolocation, messing up Google etc.

With your setting switched off, customers who shouldn’t be charged VAT will pay 20% (or whatever the VAT rate is) extra for products, which leads to justifiable complaints.

Hope I’ve explained it well enough. :slightly_smiling_face:

Thank you very much, your reply is greatly appreciated. :+1:

Sorry but this has got nothing to do with the Google Shopping app (whether it is present or not). It is relating to Google crawling the site and “seeing” different prices shown to customers than are present in the feed.

@DazC the person @Pandacuadscom has been leaving replies everywhere where I have replied, if you look at his profile, there are no other replies (as of writing now, he most likely will start and change his tactic once he reads this) with less than relevant and sometimes incorrect replies. Not sure what the objective is, but the person is certainly not helping anyone. Half a year ago this happened as well, somebody only replied where I am replying, and even copied my answers and posted them as its own word for word.

Hi @DazC

I have the exact problem you outline above and am just wondering if the “hidden” feature solution is still working/relevant? I know that some new settings have been made available in Tax etc but I cannot work out which will not break the Google Feed/Price Mismatch situation.

I am about to embark on the hit and miss process of asking Shopify to do it at their end. I am sure it used to work (VAT removed if location was not UK etc). For some reason it stopped at some point.

Thanks,

C.

I can confirm that Shopify will not turn this setting off if you ask them. See attached screenshot. They weren’t very helpful so if anyone has any other solutions it would be appreciated?

Apologies for digging up this two year old topic!

I have had equally unhelpful responses though I have pushed them pretty hard on this and raised at least 2 or 3 tickets about it.

One thing that was left out of all the info above was that the accounts where they did switch it of may well have been Shopify Plus accounts which may also make a huge difference.

Anyway, I think the only other option is the code hack that Daz mentions. We might implement that at some point but not right now as we do not want to break our Google Merchant Center account again which may happen if we are not careful.

Is this still a current issue for anybody? We’ve hit the exact same issue as described by @DazC - Google Merchant Center is auto updating our product prices - based on the US based crawler seeing an assumed VAT free UK GBP price… Any workarounds?

I had some code that fixed this, which I provided earlier in the thread - in this post:

https://community.shopify.com/post/1548772

Ultimately I somehow (?) managed to get Shopify to disable their “guess what the customer is going to pay” setting which was overriding the prices on the website, and therefore what Google was seeing - and disputing, because it didn’t match the structured data being submitted.

That’s not much help, but that’s how I ultimately solved it with Shopify.

EDIT: Forgot to add - we’re on Plus, for what it’s worth.

Thanks @DazC - that’s super helpful. I’ll keep that approach of upping the display price in reserve should we not find another way around this - it’s a good backstop. Only thing that’s troubling me - is that from a UX perspective, Shopify are sort of helping by showing the most relevant price to the customer up front.

Has anybody here come across an approach using multiple feeds / sub accounts into Merchant center? I guess even with that setup - Google would crawl the UK site - and then Shopify would present the wrong number as it’s assumption is that a US based customer is viewing… Frustrating.

I’ve reached out to support and their Tax division is apparently looking into this further. I gained zero traction in requesting the internal kill switch for this “feature” to be flipped off…

I’d love to see the"guess what the customer is going to pay" setting appear in the Tax admin section soon… :slightly_smiling_face:

If you want to use Google Shopping, yes the product landing page needs to be the same as the data feed. So using multifeeds will not fix your product landing page issue, but it will allow you to add the vat to the prices.

As Google crawls from anywhere in the world, you will need to show prices inc vat regardless where the users is located.

This issue, is commonly misunderstood with users from the UK, that want to show ex vat to other countries.

So instead, the correct way is to show ex vat, based on query strings, not ip based.

This can be done, when appending the query string ?currency=USD

Then show the correct price based on this, not based on IP, that is the correct and only way forward.