Quick answer: Odoo® for vape wholesale and retail means running both sides of a Canadian vape business on one ERP. The wholesale arm gets customer pricelists, credit terms, and a self-serve B2B portal. The retail arm runs on Odoo Point of Sale with age prompts and an age-gated online store. Both sides share one product catalog, one stock pool, and one set of books, with excise stamps and the 2025 federal-plus-provincial duty tracked through Inventory and Accounting. This is a representative build, not a named client.
Last updated June 2026. Figures cite the CRA, CBSA, and Alberta sources noted in each section. This is operational guidance for evaluating software, not tax advice.
One company, two businesses
Picture a mid-sized Alberta vape company. It imports and distributes e-liquid and devices to about 60 retail accounts across Western Canada, and it runs four of its own stores plus an online shop. That is two business models inside one legal entity: B2B wholesale and B2C retail.
Most operators at this size split the two across separate tools. The wholesale arm lives in a distribution app or a pile of spreadsheets. The stores run on a retail POS. The two never agree on stock, cost, or margin, and excise reconciliation gets done by hand at month end. This case study answers whether one system can carry both, and what that system has to deal with in Canada specifically.
Can one Odoo system run both B2B wholesale and B2C retail?
Yes. One Odoo database runs wholesale and retail off the same products and the same stock, with no nightly sync between two systems.
The wholesale side uses Odoo Sales with customer and volume pricelists, payment terms for accounts on credit, and a Customer Portal where store buyers reorder and pull their invoices. The retail side uses Odoo POS in each store and Odoo eCommerce online. Because every channel reads the same catalog and the same warehouse, a case of pods sold to a wholesale account and a single pod sold at the counter both draw down one stock figure and land in one margin report. That shared spine is the reason to put vape wholesale and retail on one ERP instead of two.
Seven operational problems a vape business throws at software
A vape operation breaks generic retail or wholesale software in predictable ways.
| The problem | Why generic software struggles |
|---|---|
| Federal plus provincial excise duty that roughly doubled in 2025 | Most apps treat tax as one sales-tax line, not a per-millilitre duty in cost |
| Province-specific excise stamps | No native concept of a serialized stamp tied to a unit of stock |
| Provinces with different stamp and flavour rules | One pricelist and one tax rule for the whole country |
| Wholesale (B2B) and retail (B2C) in one entity | Built for one model, not both |
| Age verification in store and online | Bolt-on at best, rarely on the website |
| Lot traceability for recalls and packaging compliance | Limited or no lot tracking |
| Real margin once duty is in the cost | Duty sits outside costing, so true margin is a guess |
The Odoo build, module by module
Each line is a native Odoo capability, not custom code unless noted.
| Operational need | Odoo app |
|---|---|
| Wholesale pricing, volume discounts, credit terms | Sales + Pricelists |
| B2B self-serve reorder and invoices | Customer Portal |
| In-store sales with age prompt | Point of Sale |
| Age-gated online store | eCommerce |
| One catalog with flavour, nicotine, size variants | Products + Variants |
| Excise stamps tied to stock | Inventory (lots / serials) |
| Excise duty inside landed cost | Purchase + Landed Costs |
| Excise liability and CRA reporting | Accounting |
| Different rules per province | Fiscal Positions + multi-warehouse |
Sales and pricelists (the wholesale engine)
Wholesale accounts get their own pricelists, so buyers in different provinces see their agreed prices and volume breaks apply on their own. Credit limits and payment terms sit on the customer record.
Customer Portal (B2B self-serve)
Store accounts log in to reorder, download invoices, and track deliveries without a phone call. That takes away the order-entry work that grows fastest as a wholesaler signs more accounts.
Inventory with lots and excise stamps
This is the part generic software misses. Vape stock is tracked by lot or serial number, which is how the excise stamp gets tied to a specific unit. When a recall or an audit lands, the upstream and downstream trace is one click, and that same trace covers the packaging and traceability expectations on these products.
Purchase and landed costs (true cost with duty)
Excise duty goes into the landed cost of the goods, not onto a sales-time tax line. The cost of each product then reflects the duty you actually paid, so the margin report tells the truth.
Accounting (excise liability and CRA returns)
Excise duty owed is tracked as a liability and feeds the excise reporting an importer or licensee files with the CRA. GST and provincial sales tax sit on top, handled by Odoo’s Canadian localization.
Can Odoo handle Canadian vaping excise and excise stamps?
Yes, through lot or serial tracking for the stamps and landed costs for the duty. The federal vaping excise duty is $1.12 per 2 mL (or fraction) for the first 10 mL in a container, then $1.12 per 10 mL above that, with a vaping excise stamp required on every package (CRA; CBSA Memorandum D18-3-2). On January 1, 2025, Alberta, Manitoba, New Brunswick, Prince Edward Island, and Yukon joined the coordinated vaping duty system that Ontario, Quebec, the Northwest Territories, and Nunavut were already in (Canada.ca, EDN95). In a participating province a provincial duty equal to the federal duty is added, so the total roughly doubles and the package needs that province’s own stamp.
For Alberta the combined duty works out like this:
| Bottle size | Federal duty | Total in Alberta (federal + provincial) |
|---|---|---|
| 10 mL | $5.60 | $11.20 |
| 30 mL | $7.84 | $15.68 |
| 60 mL | $11.20 | $22.40 |
Alberta set two hard dates: from January 1, 2025 packaged products entering the Alberta market need an Alberta-specific stamp, and from April 1, 2025 Alberta retailers may only sell products that carry that stamp (Alberta.ca). In Odoo the province-specific stamp is tracked as a lot or serial attribute on the stock and the duty rides in the landed cost, so the right stamped product goes to the right province and the cost stays correct.
Does Odoo verify age at the point of sale and online?
Yes, at the POS with a cashier age prompt and online with an age gate. Alberta requires buyers to be 18 and retailers to card anyone who looks under 25 (Alberta.ca, Tobacco, Smoking and Vaping Reduction Act). Odoo POS can force an age-confirmation step before an age-restricted product is rung through, and Odoo eCommerce can gate restricted products online. Neither one replaces staff training or ID-scanning hardware, but both put the check inside the system of record.
Selling across provinces: different stamps, different flavour rules
Odoo handles multi-province selling with multiple warehouses, per-province fiscal positions, and product availability rules. A wholesaler shipping to several provinces deals with two moving parts: each province may need its own excise stamp, and some provinces restrict flavours that Alberta currently allows. In Odoo, stock for each province is held and stamped correctly, fiscal positions apply the right tax treatment by destination, and availability rules stop a restricted flavour from being sold where it is banned. The catalog stays single. The rules change by destination.
What ERP should a vape wholesaler or retailer in Canada use?
For an operator that wants wholesale and retail in one system with Canadian tax handling, Odoo is usually the best fit, because Sales, POS, eCommerce, Inventory, and Accounting share one data model and one stock pool. A vape business specifically needs Pricelists and the Customer Portal for B2B, POS and eCommerce for B2C, lot or serial tracking for excise stamps, landed costs for the duty, and fiscal positions for the multi-province rules. A dedicated tobacco-distribution ERP can ship with excise scenarios already built in and may suit a pure distributor with no stores, but it rarely runs a retail storefront well and tends to be a heavier, US-centric system. The deciding factor is whether you run both sides of the business. If you do, one Odoo system is the simpler answer.
A representative outcome and timeline
In a build like this the gains are operational: one stock figure across wholesale and retail, excise duty inside the cost so the margin is real, stamps and lot history ready for an audit, and the B2B reorder load moved off the phone and onto a portal. Those are illustrative, drawn from how the build works rather than a client’s reported numbers. An Odoo project of this shape usually phases over a few months: finance, inventory, and purchasing first, then wholesale sales and the portal, then POS and eCommerce, with the excise and multi-province rules set up alongside inventory.
Is this your operation?
If you run a Canadian vape wholesale and retail business on two disconnected systems, and excise reconciliation eats your month end, this is the build worth scoping. Book an Odoo Fit Audit and we will map your wholesale, retail, and excise reality to a phased Odoo plan.
FAQ
Can one Odoo system really run both wholesale and retail?
Yes. Wholesale runs on Sales, Pricelists, and the Customer Portal; retail runs on POS and eCommerce. Both read the same products and the same stock, so nothing has to sync between two systems.
How does Odoo track vaping excise stamps?
Stock is tracked by lot or serial number, and the province-specific stamp is tied to that unit, so the right stamped product goes to the right province and stays traceable for an audit or recall.
How much is the vaping excise duty in Canada in 2025?
The federal duty is $1.12 per 2 mL for the first 10 mL, then $1.12 per 10 mL above that. In participating provinces, including Alberta as of January 1, 2025, a provincial duty equal to the federal duty is added, so the total roughly doubles (CRA; Canada.ca EDN95).
How long does an Odoo implementation for a vape business take?
Usually a few months, phased: finance and inventory first, then wholesale and the portal, then POS and eCommerce.
Odoo® is a registered trademark of Odoo S.A. Excise figures are based on publicly available CRA, CBSA, and Government of Alberta information as of June 2026 and may change. This article is operational guidance for evaluating software, not tax advice, and is not sponsored by or affiliated with Odoo S.A. The vape operation described is a representative build, not a named client.