Problem
The client was paying for a separate wholesale store and app, and kept two catalogues and two sets of orders. In one store, wholesale buyers needed half the retail price, a minimum order, their own pages and menu, stock from their own warehouse and Canadian dollar prices. The Faire channel can show only one stock number per item, yet US and Canadian stock must be sold separately.
Solution
Native Shopify B2B markets, catalogues, companies, locations and quantity rules. What the plan lacks is built in the theme as separate files with a prefix, each behind a theme setting and neutral by default. Stock routing is done through shipping setup: each warehouse has its own location group and zone, so checkout sells only what the buyer's country has. For Faire, each account gets a backend store linked through Syncio.
Key decisions
Chose native Shopify B2B over the wholesale app
Why It removes a separate store and a subscription, and a company draft order is built at wholesale prices with no tax and no extra button.
Chose separate theme files, each behind a setting with neutral defaults
Why Base theme files stay untouched, nothing changes on the storefront until a feature is switched on, and future theme updates stay simple.
Chose to keep the retail list price in a product metafield, not in the catalogue
Why The catalogue option cuts the compare-at price by the same percentage, so a buyer would have seen two identical numbers.
Chose to gate wholesale-only products in the theme, not by unpublishing them
Why Unpublishing hides them from the buyers who should see them.
Results
- Wholesale pricing applies automatically for every company, and draft orders build at wholesale prices with no tax.
- The retail list price now shows next to the wholesale price on hundreds of products.
- Eleven defects found in testing and fixed, four of them in my own code.
- Checkout caps an order at the stock of the buyer's country warehouse.
- A Faire test setup syncs stock in seconds and returns tracking back to the backend store.

