Shopify B2B app technical fit: which modules are an app embed, which are blocks, when the cart drawer becomes a theme edit, and why a VAT field inside checkout stays Plus.
2026-11-05

B2B app technical fit: theme and tax

Uninstall is the test. Theme app blocks are supposed to leave with the app. A line you pasted into `cart-drawer.liquid` will not. OO - B2B & Wholesale uses both, and the docs say so. The listing on 5 November 2026 carries Built for Shopify. That badge is Shopify’s bar for extensions, performance, and a clean removal of the app’s own blocks. It is not a promise that every VAT form on your theme was installed as a block.

Must-haves

Drop the app if a row here is missing and you still need that row.

  • Custom prices, tax display, and login-to-see-prices ride the shared app embed. No embed, no storefront price for those modules.

  • Bulk forms, quotes, the wholesale cart, and registration are blocks on a specific template. The embed does not draw those forms by itself.

  • The dashboard reports whether the block is active on the published theme. A block on an unpublished copy is not live.

  • Switching themes does not delete the configuration inside the app. You still add the embed and the blocks again.

  • The VAT form on `/cart` is a block. A cart drawer ignores that block. The documented fix is a snippet in the drawer file. That edit is yours. Uninstall does not pull it out.

  • A VAT field inside checkout is a checkout UI extension, and the install article is written for a Shopify Plus checkout. Other plans keep the form on the cart or in the drawer.

  • VIES and the Tax Exempt module are Starter, not Free.

  • Goods that ship from outside the EU are outside this reverse charge. The FAQ points at an EU fulfillment location.

Two mounts, not one

The module map is the page that stops a guess.

ModuleWhere it sits in the themePlan
Custom pricingShared app embedFree: one active list. Starter removes the cap
Volume pricingSame embedStarter
Tax displaySame embedStarter
Login to see pricesSame embedStarter
Order limitsSame embedGrowth
Tax ExemptEmbed, plus a cart block or a drawer snippetStarter
Bulk formsBlock on the product template or on a pageGrowth
Quote requestTheme blockGrowth
Wholesale cartBlock on the cart templateGrowth
Registration formsTheme blockFree: one active form. Starter: no form cap

Every module card has Finish setup. Until you run it, the configuration can exist in the admin and still be absent on the storefront. The bulk-form guide is blunt: nothing is added to the theme until you place a block. The dashboard shows Product Page Active or Bulk Order Page Active only when that block is saved on the published theme.

Company price lists use the same embed. Contacts see the custom price after they log in, once the embed is on. Those lists do not consume a Shopify B2B catalog slot. The app does not claim to replace Plus catalogs. Basic, Grow, and Advanced keep the catalog limits Shopify already publishes. If catalogs are enough, this embed is optional.

The plan check belongs on this app’s listing, OO - B2B & Wholesale, not on a second wholesale app in the same tab.

Cart, drawer, checkout

The VAT form shows up only after two switches. The embed is on in the active theme, and the form is placed on the cart or in the drawer. Add Tax Exempt to your theme is that page. The dashboard reads App active when the embed is enabled on the published theme. Not active means the embed is missing or the theme was not saved.

A real cart page takes the Tax Exempt block through Add Cart Extension.

A drawer does not. The docs tell you to paste an empty element, a `div` with id `ooTaxExemption`, into `cart-drawer.liquid`, `drawer-cart.liquid`, `mini-cart.liquid`, or `cart-notification.liquid`. The setup screen has a copy button. If the file is hard to find, they send you to in-app chat. That snippet is the lock-in exception. Shopify’s Built for Shopify rule says online-store apps use theme app extensions so uninstall removes the blocks. A snippet you typed into a Liquid file is not one of those blocks. After uninstall you delete it yourself, or an empty anchor stays in the drawer. No pricing logic. Still a leftover.

Inside checkout is a third install. The checkout article walks through an EU VAT Validation app block in the checkout editor, including “Allow app to block checkout”, and it addresses a Shopify Plus store. Placement depends on one-page versus three-page checkout, and on physical versus digital goods. A digital-only cart has no shipping fields, so the article adds a second block near payment. The FAQ matches that limit: Plus can extend checkout. Other plans keep this form on the cart or in the drawer. “Require VAT validation before checkout” disables the checkout button until the check succeeds, and the FAQ says that works without Plus. Promising a custom field inside checkout on Basic, Grow, or Advanced contradicts that page.

The reverse charge itself is intra-EU. A domestic number is validated and tax stays. A foreign EU number is validated and tax comes off where the rule allows it. Ship from outside the EU and the exemption does not apply. The FAQ’s remedy is an EU fulfillment location.

Pick one checkout path. Standard checkout leans on Shopify Tax and Markets. Draft-order logic creates a draft after validation and has its own restrictions page. They are not the same pipe. Do not describe them as if you can run both for the same cart.

What survives a theme change

Configuration inside the app stays. You add the embed and the blocks again. The active-block check trusts the dashboard, then the live theme if the dashboard looks wrong. A block on a theme you have not published is not Product Page Active.

Uninstall removes the extension blocks and the embed. That is what the badge requires. The drawer snippet stays, because you put it there. A theme swap leaves it in the old theme. These pages do not describe a file export of every price rule. The lists live in the app. Do not call that a free export, and do not invent a hidden trap.

Listing on 5 November 2026

Built for Shopify. Listing language: English. Works with Checkout, Shopify Flow, and Shopify Admin. Launched 9 February 2024. Rating 5.0 from 34 reviews: 33 fives, one four, nothing lower. The text of that four is not among the three newest cards. Those three are positive.

PlanPriceWhat it changes technically
Free$0One custom pricing rule, one registration form with approve/reject, Flow templates. Development stores: no caps
Starter$22/month or $220/yearUnlimited custom and volume pricing, company blocks, unlimited registration, EU tax exemption with VIES and logs, tax display, login to see prices. 14-day trial
Growth$37/month or $370/yearStarter, plus bulk forms, draft checkout, repeat order, quote request, AI formulas for quotes, order limits, wholesale cart. 14-day trial

Net terms appear in the category list, not on a plan line. Do not cite them as included in Starter.

Three recent reviews, nothing invented:

  • 6 October 2026, Sensorkranenwinkel.nl. The reverse-charge option works. Support replies quickly. About two years on the app.

  • 11 June 2026, POPlab Sounds, Germany. They can rename the note field so it lands in their bookkeeping.

  • 21 April 2026, Rohleder AT, Austria. Mentions the FAQ, the chatbot, the price, and built-in translation. The card shows a very short time on the app.

No developer reply on those three. There is no one-star review in the histogram to answer. The single four-star review is still unquoted here because it was not in the newest three cards. Check the listing before you treat 5.0 as “no reservations”.

When the theme does not need the app

A domestic order that keeps tax on does not need this embed. A Plus store with a handful of companies, where native catalogs already set the price, does not need the app in order to “do B2B”. Plus still wins on catalogs, locations, and the checkout surface Shopify reserves for Plus. This app does not replace those catalogs.

Native stops being enough when a VAT number has to hit VIES, with a log, on a plan that cannot host a checkout UI extension. The cart or the drawer is the documented place, and the drawer snippet is the cost of a theme with no cart page. Native also stops being enough when each company needs a price list outside the catalog cap on Basic, Grow, or Advanced. The embed is the technical requirement, not a skin.

Sources

The fit

The app fits when the embed, the right block, and the right plan are the same sentence. OO - B2B & Wholesale writes that sentence, and it writes the stop: a drawer snippet is your Liquid, and a VAT field inside checkout is Plus. The badge covers the extension blocks. It does not cover the snippet. Put that split in the checklist and the install matches the docs.

online origins logo full

The Shopify Select partner for ambitious e-commerce businesses that want to grow!

linkedin online origins iconinstagram online origins icon

Reviews

5/5

Check on Google

Mail: info@onlineorigins.nl

Tel: 073 234 0612

KVK: 89825624

BTW: NL865123639B01

Bruistensingel 500,
5232 AH 's-Hertogenbosch
Cookies

© 2026 Online Origins