
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.
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.
The module map is the page that stops a guess.
| Module | Where it sits in the theme | Plan |
|---|---|---|
| Custom pricing | Shared app embed | Free: one active list. Starter removes the cap |
| Volume pricing | Same embed | Starter |
| Tax display | Same embed | Starter |
| Login to see prices | Same embed | Starter |
| Order limits | Same embed | Growth |
| Tax Exempt | Embed, plus a cart block or a drawer snippet | Starter |
| Bulk forms | Block on the product template or on a page | Growth |
| Quote request | Theme block | Growth |
| Wholesale cart | Block on the cart template | Growth |
| Registration forms | Theme block | Free: 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.
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.
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.
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.
| Plan | Price | What it changes technically |
|---|---|---|
| Free | $0 | One custom pricing rule, one registration form with approve/reject, Flow templates. Development stores: no caps |
| Starter | $22/month or $220/year | Unlimited 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/year | Starter, 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”.
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.
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.
Services
Reviews
5/5
Mail: info@onlineorigins.nl
Tel: 073 234 0612
KVK: 89825624
BTW: NL865123639B01
Bruistensingel 500,© 2026 Online Origins