Ecommerce inventory management when plugins stop working
Shopify tracks inventory per location, and those quantities do not pool. A product is sellable only where it is active.
Shopify tracks inventory per location, and those quantities do not pool. A product is sellable only where it is active. Retail-only stock still counts in the total, but it is left out of the online available quantity, so the storefront can read out of stock while another location holds units. Assume 15 chairs and 8 desks for a bundle of two chairs plus one desk: chairs make 7 complete bundles with one chair left over, desks make 8, and Shopify's bundle formula uses the lower whole number, 7, from overall stock only.
Why the storefront says out of stock when units sit elsewhere
Shopify keeps each location's quantity independent. You cannot pool a warehouse with a store, or a 3PL with your own building, and treat the sum as one available number. A product is sellable only at locations where it is active. If the online fulfillment location is at zero and the retail location still has 40 units, the website follows the online location.
Retail-only locations still add into total inventory and stay out of the online available quantity. That split is how a buyer sees a sold-out message on a product your store staff can still pick up. It is also how a spreadsheet that sums total inventory argues with the storefront. The total is telling the truth about units you own. The storefront is telling the truth about units you allowed it to sell. Teams that reconcile those two numbers in a weekly export spend the week explaining cancellations.
As of February 2026, Shopify was moving all fulfillment services onto multi-location inventory, with completion expected in mid-March 2026. After that change, the same product can sit at your locations and at a fulfillment app at the same time. The quantities remain separate. A 3PL balance does not fill a hole at your warehouse inside Shopify's own math. Someone, or a later system, has to decide which location is allowed to promise the next order.
Two operating habits make this worse. The first is a master spreadsheet that reallocates units after the stores have already sold them. The second is an inventory app that copies Shopify's available number on a delay, then sends it to a marketplace. The copy can be faithful and still be late. For the gap between a receipt and the next sync, two channels can sell the same unit. Inventory accuracy and ghost stock is the same class of problem once the on-hand figure and the sellable figure diverge.
What Shopify's bundle formula does with 15 chairs and 8 desks
Shopify Bundles is a free first-party app on every plan for fixed bundles and multipacks. Mix-and-match bundles need a third-party app, or a custom build on Shopify Plus. The free app is enough for a desk set with a fixed bill of components. It is the wrong tool the moment the buyer chooses which legs, which top, and which cable kit.
The app does not track bundle inventory by location. It uses overall stock. Available bundle quantity is the lowest component after you divide each component's available quantity by the quantity that bundle requires. Untracked components, and components set to continue selling when out of stock, are ignored in that division.
Assume the company stock is 15 chairs and 8 desks, the bundle is two chairs and one desk, and both components are tracked and are not set to continue selling.
- Chairs allow 15 / 2 = 7 complete bundles.
- Desks allow 8 / 1 = 8 bundles.
- The bundle can sell 7. One desk and one chair remain, and they cannot make another bundle.
Now change one setting. Desks are set to continue selling when out of stock, so desks drop out of the formula. Chairs still limit the offer to 7 bundles (14 chairs and 7 desks). One chair and one desk remain, and desks are not oversold. Flip it: chairs are untracked, so only desks count, and the store can offer 8 bundles (16 chairs) when 15 chairs exist. The oversell is one chair on the eighth bundle, then every bundle after that if you also turn on continue selling for the remaining tracked component. With every capping component ignored, the formula has nothing left to limit the offer. That is the oversell path in the product rules, and it scales with order volume: each extra bundle order is a promise your pick face cannot keep.
Component limits on the same app, as of October 2026:
- Fixed bundle components: 30
- Dynamic bundle components: 150
- Units of one component: 2,000
- Options on the bundle: 3
- Variants: 100
- Nested bundles: Not allowed
- Bundle price when a component price changes: Does not follow
Source: Shopify Bundles, Shopify, October 2026.
Order lines list the component SKUs, not the bundle SKU. A warehouse that picks by the name the customer saw will not find that name on the pick ticket. Bundle returns follow the component products. You cannot mark the bundle itself final sale. In a split fulfillment, a return, or an exchange, each component is its own line. Bundles cannot be exchanged, including an exchange for the same bundle, and they do not work with subscriptions, pre-orders, or try-before-you-buy.
Count last quarter's bundle orders that you cancelled or refunded because a component was short. Multiply that count by the shipping you paid out, the marketplace fee on the replacement, and the rush cost of the missing component. That page is the cost signal for your catalog, and it is the number to bring to a software decision.
Routes and warehouses are the layer underneath this. Odoo Inventory routes and warehouses shows how a kit demand can pull components from a named location. Barcode scanning workflows are how the receipt that raises those component counts gets onto the shelf without a CSV.
How many locations your plan allows, and what a 3PL does to that cap
Active location caps differ by plan. App-based fulfillment is a location in the admin, and it does not consume a slot.
- Starter: 2
- Basic: 10
- Grow: 10
- Advanced: 10
- Shopify Plus: 200
Dropshipping apps, 3PL apps, and custom fulfillment apps do not count toward that cap. Source: Setting up and managing locations, Shopify, October 2026.
A Grow merchant with a warehouse, eight stores, and a returns bench is already at the cap of 10 before any pop-up. The 3PL can still be connected. The cap counts your own active locations. App locations stay outside it. Plus raises the cap to 200, at a starting price of USD 2,300 per month in the US or CAD 3,400 per month in Canada, as of October 2026. Paying for Plus to add location slots is a real option. Locations still stay independent, and bundles still use overall stock.
Continue selling when out of stock is available only when inventory tracking is on. It does not apply to Shopify POS. At the register, staff can sell at or below zero and they get a warning. A store that rings the sale anyway can drive a tracked component negative while the website is still using that component to cap bundles. The next morning the online formula and the register have told two stories.
What the current stack costs against Business Central and Odoo
Prices below are list prices as of October 2026. Shopify US figures use the yearly toggle. The comparison table on Shopify's page also shows higher month-to-month rates.
- Basic (US, billed yearly: USD 29 per month · US, month-to-month rate shown: USD 39 · Canada, billed yearly: CAD 37 per month · Canada, month-to-month rate shown: CAD 49)
- Grow (US, billed yearly: USD 79 per month · US, month-to-month rate shown: USD 105 · Canada, billed yearly: CAD 99 per month · Canada, month-to-month rate shown: CAD 132)
- Advanced (US, billed yearly: USD 299 per month · US, month-to-month rate shown: USD 399 · Canada, billed yearly: CAD 389 per month · Canada, month-to-month rate shown: CAD 517)
- Plus (US, billed yearly: from USD 2,300 per month · Canada, billed yearly: from CAD 3,400 per month)
- POS Pro (US, billed yearly: USD 89 per location per month · Canada, billed yearly: CAD 119 per location per month)
US source: Shopify Pricing. Canada source: Shopify Pricing (Canada). Both seen October 2026.
Marketplace sync sits on top of the plan. The first 50 synced marketplace orders each month are free. Above that, the fee is 1% up to USD 99 per month. The Canadian price page still writes that cap in US dollars. Once marketplace volume passes the free tier, budget the cap as USD 99.
Assume a US seller on yearly billing, Advanced at USD 299, two retail doors on POS Pro at USD 89 each (USD 178), and marketplace orders past the free 50 so the sync fee is at the USD 99 cap. Storefront software is USD 576 per month before an inventory product. Canada on the same shape, Advanced yearly at CAD 389 plus two POS Pro locations at CAD 119 (CAD 238), is CAD 627 per month plus up to USD 99 for marketplace sync.
Cin7 Core publishes a separate inventory subscription, USD and excluding tax: Standard at USD 349 per month (5 users, 2 ecommerce or app integrations, 6,000 sales orders a year), Pro at USD 599 (10 users, 4 integrations, 24,000 orders), and Advanced at USD 1,199 (15 users, 6 integrations, 120,000 orders). All three list unlimited inventory locations. Extra users, orders, and integrations are sold separately, and Omni is quoted. Those order ceilings are the limits printed on that price page. Shopify's own inventory help pages do not name a SKU count or an order count where tracking stops.
Put the US Advanced stack next to Pro for a moment: USD 576 plus USD 599 is USD 1,175 per month, USD 14,100 per year, for the Shopify pieces assumed above plus 10 inventory users and a 24,000 order yearly cap. Past that cap, the inventory bill moves again. This comparison is software list price only. It leaves out implementation, shipping apps, and the hours your team spends on CSV fixes.
Business Central list prices, paid yearly, as of October 2026:
- Essentials (United States: USD 80.00 per user per month · Canada (plus tax): CAD 108.50 per user per month)
- Premium (United States: USD 110.00 per user per month · Canada (plus tax): CAD 149.20 per user per month)
- Team Members (United States: USD 8.00 per user per month · Canada (plus tax): CAD 10.90 per user per month)
Microsoft says displayed prices may differ at checkout by currency and region. US source: Business Central pricing. Canada source: Business Central pricing (Canada).
Assume 6 people need a full user license (operations manager, buyer, controller, warehouse lead, and two customer-service leads) and 10 people need Team Members (pickers and store staff who look up stock). At US yearly Essentials list, that is 6 times USD 80.00 plus 10 times USD 8.00, which is USD 560 per month, or USD 6,720 per year. The same headcount in Canada at Essentials is 6 times CAD 108.50 plus 10 times CAD 10.90, which is CAD 760 per month plus tax, or CAD 9,120 per year plus tax. Essentials and Premium are the two full-user list prices: USD 80.00 and USD 110.00, or CAD 108.50 and CAD 149.20. Confirm on your tenant which processes Essentials does not cover before you assign those seats. The Shopify connector is not a line on this price card. It is included with Business Central online and still requires a Shopify license.
Odoo's pricing page, with Yearly selected, shows Standard as USD 24.90, USD 31.10, and USD 38.90 per user per month, and Custom as USD 49.00, USD 61.00, and USD 76.20. A footnote says the discount lasts 12 months for the initial users ordered. The page does not separate those three figures into a single post-discount rate, so a budget should carry all three until checkout shows one. A light user is listed at USD 8.90 and includes Inventory Barcode Operator among its capabilities. Light users are sold through an advisor quote. Ask Odoo for the Canadian checkout amount before you put these USD figures into a Canadian budget. One App Free is USD 0 for one app and unlimited users on Odoo Online.
Assume 6 full users on the displayed Standard figures: USD 149.40, USD 186.60, or USD 233.40 per month. The same 6 on the displayed Custom figures: USD 294.00, USD 366.00, or USD 457.20 per month. Ten light users at USD 8.90 add USD 89.00 per month if the quote matches the listed rate. Standard and Custom both include Inventory and eCommerce. One App Free covers a single app, so a team that needs inventory and a storefront is already outside that offer.
What the connector changes, and what it leaves on Shopify
Business Central's Shopify connector is included with Business Central online, is preinstalled on new environments, and is not available for on-premises. You need a Business Central license and a Shopify license. It does not work with Dynamics 365 Sales, with Supply Chain Management, or with Embed App URLs. There is no separate connector subscription on Microsoft's connector FAQ.
In that connector, Business Central is the inventory system of record. Stock is pushed to Shopify after receipts, production, and transfers. The documented quantity methods are Projected Available Balance at Today, and Free Inventory (not reserved). A job-queue note says every 15 to 30 minutes keeps Shopify current. Fifteen minutes is a short lag. It is still a lag. Set the queue, then watch one receipt: the purchase order posts, the push runs, and only then should the storefront move. If customer service promises a unit during the gap, you still oversell.
Shopify Bundles calculates availability from components and blocks quantity updates through the API. Microsoft's guidance is to map those bundle products to Business Central non-inventory items, which are excluded from inventory sync. The practical setup is: components are stocked items and sync, the bundle on Shopify stays a commercial wrapper, and you do not fight the API with a quantity write it will reject. Have that mapping shown on your own products before go-live. A bundle you also stock as a prebuilt unit is a different item, with its own on-hand, and should be demonstrated with a receipt and a sale.
If Business Central stays on 2026 release wave 1, the connector uses Shopify Admin API 2026-01, supported until 31 December 2026. Missing the later upgrade can block sync. Put that date on the same calendar as year-end close. A blocked sync during peak returns leaves the storefront on the last quantity that pushed successfully.
Odoo does not publish a first-party Shopify connector price on its pricing page. The public figure available is a third-party listing: Emipro's Shopify Odoo Connector for Odoo 18 at USD 615.10. The listing says the purchase includes 10 hours of implementation valued at USD 500 for standard workflows only, for purchases on or after 22 April 2026, if you register within 30 days. It advertises a 15-day trial. Treat that as one Odoo 18 app, not an official Odoo connector, and price any other app only after you see its own listing. Standard is Odoo Online only and cannot host custom modules. Custom is the plan that adds multi-company, Studio, and the External API. Calls that Odoo itself starts, such as payment providers and carriers, are not the External API. If you operate two companies, or you need a module installed, Standard is the wrong plan to assume. Confirm the hosting option in the quote.
Sellers writing on that app listing describe "hours of manual data entry, CSV wrangling, and inventory mismatches" and "automatically importing every order and refund". One comment on the same page opens with "We run four Shopify stores in four different countries." Those lines describe the workload on that listing. Your own shops still need a rule for which company, which warehouse, and which price list owns each one. System integration for Shopify and the ERP is where that rule gets designed, tested against a receipt, and watched after go-live.
On either platform the storefront can stay on Shopify. What moves is the quantity decision: what you bought, what you reserved, what a return put back, and what a second channel is allowed to sell. Accounting then posts from the same movements. A plugin that only mirrors available quantity never sees the vendor bill or the landed cost.
How kits, returns, and backorders behave once something owns the components
In Odoo 19 a kit is a bill of materials. Manufacturing and Inventory both have to be installed. A kit cannot be sold if a required component is out of stock. You cannot adjust stock at kit level. An internal transfer of a kit breaks it into components. On the sales order the kit is one line. On the delivery order each component is listed. Serial numbers track the components, not the kit. Source: Kits, Odoo, October 2026.
That rule answers the stocking question. Stock the components when you sell the combination and you also sell the pieces, when you ship from more than one bin, or when a return comes back as one good component and one damaged one. Stock a finished SKU when you prebuild the set, put it on a pallet, and need on-hand to mean completed sets in a named location. A kit bill will not hold that pallet together: the transfer explodes it. Prebuilt sets need their own item and their own receipt.
Use the chair example again. In Shopify Bundles, 15 chairs and 8 desks offer 7 bundles of two chairs and one desk, using overall stock, with no location split. In Odoo, the same kit refuses the sale when either component is short in the location that is supposed to ship. A return of one chair restocks a component, which immediately changes what the next kit can promise. You do not wait for a bundle app to recompute an overall number that ignored the warehouse.
Backorders follow from the same choice. Shopify can keep taking website orders at zero when tracking is on and continue selling is enabled, while POS can already go negative with a warning. Odoo's kit rule stops the sale when a component is short. If your policy is to accept the order and ship later, that is a configuration you should see on a sales order with a partial delivery, on your data, before you sign. If your policy is to stop promising, the Odoo kit behavior matches the policy with less daily policing.
Business Central will not be the quantity writer for a Shopify Bundle product if you follow Microsoft's non-inventory mapping. Component receipts still push. The bundle price on Shopify still does not inherit component price changes, so a price update remains a Shopify-side edit unless you sell the combination as a Business Central item and a normal Shopify product. Decide that product by product. A 30-component fixed bundle is inside Shopify's limit of 30. A build-to-order set with optional parts is outside the free app and is a quoting workflow, which belongs in the ERP sales order.
Returns need a home for the dollar as well as the unit. Component lines on the Shopify order mean a partial refund is natural in Shopify and easy to mis-state in a spreadsheet that stored only the bundle price. Once the ERP has the component move and the credit memo, the warehouse puts the good unit away and finance posts the credit from the same return. A return handled only in email can leave the unit and the credit in different places, so the on-hand count and the books diverge.
What a first phase costs in hours, licenses, and scope
License math above is the running cost. The project is separate, and the two platforms publish different amounts of it.
Odoo says companies under 50 employees usually implement with Success Packs, and companies over 50 usually use a partner. New-customer pack prices on the page are USD 493 for 4 hours, USD 3,060 for 25 hours, USD 5,950 for 50 hours, USD 10,625 for 100 hours, and USD 21,250 for 200 hours. Returning-customer prices are higher. The first pack is discounted 15%. The estimator quotes USD 3,060, USD 5,950, USD 10,625, and USD 21,250 and says 80% of projects in that scope go live in 200 hours or less. Source: Odoo Success Packs, Odoo, October 2026.
Read those hours as Odoo's own services for the scope printed on that page. The page does not describe a Shopify shop plus a warehouse plus kits. A 25-hour pack is 25 hours. It can cover a tight configuration workshop. It will not cover catalog cleanup, a 3PL, marketplace orders, and a month of hypercare unless your data is already clean. Ask for a written scope that names locations, kit rules, the connector, opening inventory, and who loads history. For a company over 50 people, budget a partner project and compare hours, named consultants, and references. Do not treat the pack menu as that project's price.
Microsoft's Business Central price page does not publish an ecommerce implementation fee. Implementation pricing is a partner conversation. Ask each bidder to price data migration, the connector, warehouse setup, and training as their own lines. A single blended number hides whether opening inventory was counted.
Our target for a first usable phase is 8 to 12 weeks: items, one warehouse, Shopify orders, component availability, and a return that restocks. Later phases can add another company, another marketplace, or manufacturing. Retail and ecommerce implementation is how we phase that work for US and Canadian sellers. An Odoo rollout is the matching path when Custom, kits, and the Apps Store connector are the stack you chose.
Whoever configures the connector should also hand you the job queue, the upgrade calendar for the Shopify API, and the list of products mapped to non-inventory items. If those three artifacts are missing from the proposal, the license price you compared above is not the project you will live with.
How to choose between staying on plugins and moving quantity
Stay on Shopify inventory when you have one main selling path, stock in locations you can count on two hands, fixed bundles that match the free app, and purchasing that already lives in your books. Use the location settings on purpose: online locations fulfill online orders, retail-only locations stay out of the website quantity, and continue selling stays off for any component that caps a bundle. Review the setup the week you add a marketplace. The first 50 synced marketplace orders are free, and the fee after that is small next to a bad allocation rule. The allocation rule is the part that creates refunds.
Move quantity into Business Central or Odoo when any three of these are true at the same time.
- You sell on more than one Shopify store or you pay the marketplace sync fee every month because volume stays above 50 orders.
- You are near the active location cap for your plan (10 on Basic, Grow, and Advanced) or you need kits that follow a warehouse, which Shopify Bundles does not do.
- Purchasing, returns, or stock valuation still close in spreadsheets, so the storefront number and the balance sheet number are maintained by different people.
- Bundle orders arrive as component lines, and your team rebuilds the commercial offer by hand before they can pick or refund.
- A 3PL and your own warehouse both hold the same SKU, and both can sell it during the sync gap.
Shopify's inventory help pages do not name a SKU count or an order count where tracking stops. If a proposal opens with a cutoff, ask for the Shopify page that states it. The tests you can verify in a week are named people on the project, hours tied to a phase, references from a catalog of similar shape, a phase plan that leaves Shopify up, and a written note on who owns the connector configuration after go-live.
Price Business Central Essentials at USD 80.00 per user and Premium at USD 110.00 per user against the same roster, then have the license difference demonstrated on your processes. Team Members at USD 8.00 keep lookup-only staff on a smaller seat. The Shopify connector is already part of Business Central online either way. Choose Odoo Custom when you need more than one company or a third-party module such as the Odoo 18 connector at USD 615.10. Choose Odoo Standard only after the vendor shows Shopify running on Odoo Online without a custom module, which Standard cannot host.
Either way, run a two-week parallel on a slice of the catalog: one warehouse, 50 fast movers, the chair-and-desk kit, and one return. Compare Shopify's available number to the ERP's available number at the same hour. If they diverge, fix the rule before you migrate the long tail. How we phase retail and ecommerce inventory starts from that slice, then adds channels once the count holds.
How Flectic can help
Flectic connects POS, eCommerce, inventory and finance on Dynamics 365 or Odoo for retailers of 20 to 100 people in the US and Canada that sell in store, online and on marketplaces. Our retail and e-commerce service gives every channel one live stock pool, so you stop overselling. Flectic sends a written proposal with a fixed price for each phase before work starts. Book a free discovery call with Flectic as your next step.
Sources
Understanding inventory management for multiple locations and apps, Shopify, October 2026
Setting up and managing locations, Shopify, October 2026
Selling out of stock products, Shopify, October 2026
Shopify Bundles, Shopify, October 2026
Eligibility and considerations for using product bundles, Shopify, October 2026
Shopify Pricing (United States), Shopify, October 2026
Shopify Pricing (Canada), Shopify, October 2026
Synchronize inventory with Shopify, Microsoft, October 2026
FAQ for technical details (Shopify connector), Microsoft, October 2026
Dynamics 365 Business Central pricing (US), Microsoft, October 2026
Dynamics 365 Business Central pricing (Canada), Microsoft, October 2026
Odoo Pricing, Odoo, October 2026
Odoo Success Packs, Odoo, October 2026
Shopify Odoo Connector by Emipro, Odoo Apps Store, October 2026
Kits, Odoo, October 2026
Cin7 Pricing, Cin7, October 2026
Frequently asked questions
Can I keep selling on the website when on-hand hits zero, and does that also apply at the register?
Continue selling when out of stock is available only when inventory tracking is turned on. It does not apply to Shopify POS. Register staff can still sell at or below zero, and Shopify shows them a warning. If a component of a bundle is set to continue selling, Shopify Bundles ignores that component when it calculates how many bundles you can offer.
Do 3PL and dropship apps count against Shopify's location limit?
Dropshipping, 3PL, and custom fulfillment apps are locations in Shopify, and they do not count toward the active location cap. The cap itself is 2 on Starter, 10 on Basic, Grow, and Advanced, and 200 on Shopify Plus. Your own warehouses, stores, and returns benches do count, so a 3PL connection does not free a slot you already used.
Can a customer return or exchange a Shopify bundle as one product?
Bundle return eligibility follows each component's final-sale setting, and you cannot mark the bundle itself final sale. In returns, exchanges, and split fulfillments, components show up as separate lines. Shopify Bundles cannot be exchanged, even when the exchange is for an identical bundle. A partial return is therefore a component return, and the sellable bundle quantity changes only after that component's stock changes.
Does the Business Central Shopify connector have its own subscription, and does it work on-premises?
Microsoft does not list a separate subscription for the Shopify connector. It is included with Business Central online, it is preinstalled on new environments, and it still requires a Business Central license and a Shopify license. It is not available for on-premises Business Central. It also does not work with Dynamics 365 Sales, Supply Chain Management, or Embed App URLs.
What happens to inventory sync if we do not upgrade Business Central before Shopify retires the API version?
If you stay on 2026 release wave 1, the connector uses Shopify Admin API 2026-01, which Microsoft says is supported until 31 December 2026. Missing the later upgrade can block sync. Put the upgrade on the same calendar as peak season, because a blocked push leaves Shopify showing the last quantity Business Central successfully sent.
Do we need Odoo Custom, or is Standard enough, to connect Shopify and run more than one company?
Standard and Custom both include Inventory and eCommerce. Standard is Odoo Online only and cannot host custom modules. Custom is the plan that adds multi-company, Studio, and the External API. A Shopify connector bought from the Apps Store is a module you add, so a second company or an installed connector points you to Custom. Have the vendor show the connector running on the plan named in the quote.
When should a kit be stocked as components instead of as its own SKU?
Stock components when you sell the pieces as well as the set, when you ship from more than one place, or when a return comes back as one good part and one damaged part. In Odoo 19 a kit is a bill of materials: it cannot be sold if a component is out of stock, stock cannot be adjusted at kit level, and an internal transfer breaks the kit into components. Stock a finished SKU when you prebuild the set and need on-hand to mean completed units in a location.