{"id":1654,"date":"2026-03-03T07:54:07","date_gmt":"2026-03-03T06:54:07","guid":{"rendered":"https:\/\/newcraft.dev\/posts\/how-to-show-tax-exempt-prices-to-b2b-customers-before-checkout-in-shopify\/"},"modified":"2026-03-03T07:54:07","modified_gmt":"2026-03-03T06:54:07","slug":"how-to-show-tax-exempt-prices-to-b2b-customers-before-checkout-in-shopify","status":"publish","type":"marketing-post","link":"https:\/\/newcraft.dev\/nl\/posts\/how-to-show-tax-exempt-prices-to-b2b-customers-before-checkout-in-shopify\/","title":{"rendered":"How to Show Tax-Exempt Prices to B2B Customers Before Checkout in Shopify"},"content":{"rendered":"\n<p>\n  <strong>TL;DR:<\/strong> Shopify shows the same price to everyone. B2B customers with a valid VAT number want to see net prices before checkout, not discover the discount at the last step. The <a href=\"https:\/\/newcraft.dev\/posts\/shopify-vat-exemption-eu-businesses\/\">EU Tax Exemption app<\/a> lets B2B buyers validate their VAT number on your storefront and see tax-exempt pricing before they even add items to cart.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Problem: B2B Buyers See Consumer Prices<\/h2>\n\n\n\n<p>\n  If you sell B2C and B2B from the same Shopify store (and most EU merchants do), you&#8217;ve hit this wall: Shopify has one price display setting. Either all prices include VAT, or none of them do.\n<\/p>\n\n\n\n<p>\n  EU consumer law requires VAT-inclusive prices for B2C. So you set &#8220;prices include tax&#8221; and move on. But now your B2B customers from other EU countries, the ones who should pay net prices via reverse charge, see gross prices everywhere. They don&#8217;t find out they&#8217;re exempt until checkout, if the exemption works at all.\n<\/p>\n\n\n\n<p>\n  That&#8217;s a conversion problem. A German manufacturer browsing your store sees \u20ac119 instead of \u20ac100. They might not even get to checkout because the price looks uncompetitive compared to your competitors who show B2B pricing.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Why Shopify Doesn&#8217;t Solve This Natively<\/h2>\n\n\n\n<p>\n  Shopify&#8217;s native VAT validation only kicks in at checkout. There&#8217;s no mechanism to show different prices on product pages, collection pages, or the cart based on whether a visitor has a valid VAT number.\n<\/p>\n\n\n\n<p>\n  Shopify does offer &#8220;dynamic tax-inclusive pricing&#8221; which adjusts prices based on customer location. But that&#8217;s about geography, not B2B status. A German B2C customer and a German B2B customer see the same price. Location-based pricing doesn&#8217;t solve the B2B exemption problem.\n<\/p>\n\n\n\n<p>\n  Shopify Plus merchants with the B2B channel can set separate catalogs for wholesale customers. But that requires customers to have a B2B account, log in through a separate flow, and operate in a completely different buying experience. For merchants who serve both B2C and B2B through one storefront, that&#8217;s overkill.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Solution: Storefront VAT Validation Widget<\/h2>\n\n\n\n<p>\n  The approach that works for mixed B2C\/B2B stores is a storefront widget where visitors can enter their VAT number before browsing. Once validated, the store displays net prices for the remainder of their session.\n<\/p>\n\n\n\n<p>\n  Here&#8217;s how it works with the <a href=\"https:\/\/newcraft.dev\/posts\/embeddable-vat-widget-shopify\/\">EU Tax Exemption widget<\/a>:\n<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n  \n<li>B2B visitor sees a small widget on your store (product page, cart, or anywhere you place it)<\/li>\n\n  \n<li>They enter their VAT number<\/li>\n\n  \n<li>The number is validated against VIES in real time<\/li>\n\n  \n<li>If valid, prices update to show net amounts<\/li>\n\n  \n<li>At checkout, the tax exemption is applied automatically<\/li>\n\n  \n<li>The validated VAT number is <a href=\"https:\/\/newcraft.dev\/posts\/how-to-get-shopify-vat-numbers-into-your-accounting-software\/\">saved on the order<\/a> for your invoicing software<\/li>\n\n<\/ol>\n\n\n\n<p>\n  The B2C experience stays unchanged. Consumers see VAT-inclusive prices as required by EU law. Only validated B2B buyers see net prices.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Where to Place the Widget<\/h2>\n\n\n\n<p>\n  The widget is flexible. Most merchants place it in one or more of these locations:\n<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n  \n<li><strong>Product pages:<\/strong> Right below the price. B2B buyers see the net price immediately after validating<\/li>\n\n  \n<li><strong>Cart page \/ mini-cart:<\/strong> Before checkout, so the price difference is visible when reviewing the order<\/li>\n\n  \n<li><strong>Header or announcement bar:<\/strong> Persistent across pages, one-time validation for the whole session<\/li>\n\n  \n<li><strong>Dedicated B2B landing page:<\/strong> If you have a wholesale section, the widget greets visitors there<\/li>\n\n<\/ul>\n\n\n\n<p>\n  You can <a href=\"https:\/\/newcraft.dev\/posts\/place-tax-exemption-widget-exactly-where-you-want-it\/\">position the widget exactly where you want it<\/a> using CSS selectors or the theme editor. No coding required for most themes.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What About VAT Toggle \/ Price Switcher Apps?<\/h2>\n\n\n\n<p>\n  There are apps that add a &#8220;show prices excluding VAT&#8221; toggle button to your store. These let any visitor flip between gross and net prices. That&#8217;s a different solution for a different problem.\n<\/p>\n\n\n\n<p>\n  A toggle doesn&#8217;t validate anything. Any visitor can flip to net prices. That might work for informational purposes, but it doesn&#8217;t verify the buyer is actually an EU business, doesn&#8217;t apply the tax exemption at checkout, and doesn&#8217;t store the VAT number on the order for your accounting.\n<\/p>\n\n\n\n<p>\n  The VAT validation widget does all three: verification, exemption, and data capture. The toggle just changes what&#8217;s displayed.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Tax-Included Pricing and Cart Transform<\/h2>\n\n\n\n<p>\n  There&#8217;s a technical complication with tax-included pricing in Shopify. When you mark a customer as tax-exempt and your prices include tax, Shopify should deduct the VAT. But the behavior isn&#8217;t always consistent, especially with express checkout options and certain payment methods.\n<\/p>\n\n\n\n<p>\n  For Shopify Plus merchants, <a href=\"https:\/\/newcraft.dev\/posts\/shopify-checkout-remove-vat\/\">cart transform functions<\/a> provide a more reliable way to remove VAT at checkout. The cart transform intercepts the order before payment and applies the correct net pricing regardless of which checkout method the customer uses.\n<\/p>\n\n\n\n<p>\n  For non-Plus merchants, the standard tax exemption flow handles most cases correctly. The widget validates the number, tags the customer, and Shopify&#8217;s tax engine does the calculation.\n<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The Conversion Impact<\/h2>\n\n\n\n<p>\n  Showing net prices to B2B buyers isn&#8217;t just about accuracy. It&#8217;s about winning the sale. Professional buyers compare prices across suppliers. If your competitor shows \u20ac100 net and you show \u20ac119 gross, you look 19% more expensive, even though the final price is the same.\n<\/p>\n\n\n\n<p>\n  B2B buyers shouldn&#8217;t have to guess whether they&#8217;ll get a tax exemption. They should see their price from the moment they land on your store. That&#8217;s what the storefront widget delivers: price transparency before checkout, backed by VIES validation.\n<\/p>\n\n\n\n<p>\n  Check the <a href=\"https:\/\/newcraft.dev\/posts\/best-shopify-vat-app-comparison\/\">Shopify VAT app comparison<\/a> to see how different solutions handle pre-checkout pricing.\n<\/p>\n\n","protected":false},"excerpt":{"rendered":"<p>B2B buyers see gross prices on your Shopify store. Validate their VAT number on the storefront and show net prices before checkout.<\/p>\n","protected":false},"featured_media":0,"template":"","meta":{"_acf_changed":false,"_breakdance_hide_in_design_set":false,"_breakdance_tags":""},"class_list":["post-1654","marketing-post","type-marketing-post","status-publish","hentry"],"acf":{"related_apps":null},"_links":{"self":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/marketing-post\/1654","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/marketing-post"}],"about":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/types\/marketing-post"}],"wp:attachment":[{"href":"https:\/\/newcraft.dev\/nl\/wp-json\/wp\/v2\/media?parent=1654"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}