Retail · POS, Inventory & E-Commerce

The Retail Chain That Couldn't See Itself.

Five retail locations. A Shopify e-commerce store. A separate point-of-sale system at each location. And a bookkeeper spending three days every week manually reconciling sales, inventory, and cash across all six channels. The owner had no idea which location was most profitable. He just knew the whole thing was exhausting.
Specialty Retailer
Home Goods & Lifestyle · Toronto, ON
$6.4M
Annual Revenue across 6 channels
5
Locations + Shopify Store
3 Days/Week
Bookkeeper Reconciliation Time
22%
Shrinkage Rate — Undetected

Six Channels. No Unified View.

The company had grown from one store to five locations over eight years, adding Shopify during the pandemic. Each physical location used Square for POS, which was fine for a single store. As the chain grew, Square's multi-location reporting remained limited: daily sales totals came through, but inventory sync between locations was manual, inter-location transfers were tracked in a spreadsheet, and the Shopify store's inventory had drifted so far from physical stock that overselling had become a recurring customer service problem.

The bookkeeper had built an elaborate system of daily export routines — Square CSVs, Shopify exports, supplier invoices — that she stitched together in Excel every week to produce the numbers the owner needed. It worked, mostly. But it took three full days and required her to catch discrepancies manually. When she went on leave, the whole system stopped. When the owner asked which of his five locations had the best margin, the answer took a week to produce. When a shrinkage problem developed at one location, it went undetected for four months.

  1. No real-time inventory sync across 6 channels — Shopify overselling, inter-location transfers invisible. Shopify inventory was updated manually from a weekly physical count export. In the interval, items sold in-store that were also listed online created oversell events. The oversell rate averaged 3.2% of online orders — each requiring a customer refund, reorder, or substitution.
  2. 22% annual shrinkage at one location went undetected for 4 months — no cycle count system. Without automated inventory tracking tied to POS sales, shrinkage was only visible at annual stocktake. One location had a consistent discrepancy between purchased goods and recorded sales that represented approximately $84K over the four-month period before it was identified.
  3. 5 locations, 1 consolidated P&L — no way to see which stores were earning and which were subsidised. All revenue and costs consolidated into a single QBO company. The owner knew total margin. He had no idea which locations were above or below it. Two locations were running below 8% net margin while two were above 18% — the average hid the gap completely.
  4. 3 days/week of bookkeeper time spent on channel reconciliation — no capacity for anything else. The bookkeeper's time was fully consumed by the mechanical work of reconciling six channels manually. Financial analysis, vendor negotiation support, and cash flow forecasting — the higher-value work she was capable of — never happened because reconciliation left no bandwidth.

One Odoo Instance. All Six Channels. Live.

OPS implemented Odoo 17 with Point of Sale, Inventory, E-Commerce (replacing Shopify for backend inventory; Shopify retained as the storefront via connector), Accounting, and Purchase. All five locations and the Shopify channel were live simultaneously at day 55.

  1. Unified Inventory — 6 Channels. Single inventory database across all 5 locations and Shopify. Sales at any channel decrement the same stock pool. Inter-location transfers processed as Odoo internal transfer orders — no spreadsheet, full audit trail. Shopify connector (OdooShopify) syncs inventory bi-directionally in real time — overselling eliminated on day one of go-live.
  2. Odoo POS — All 5 Locations. Square retired across all five locations. Odoo POS deployed: same product catalogue, same pricing rules, same loyalty program across all locations and online. End-of-day reconciliation automated — cashier closes the session, POS journal entry posts to accounting automatically. Daily sales feed to accounting without manual intervention.
  3. Cycle Count Program. Automated cycle count schedule configured in Odoo Inventory — each location counts a rotating subset of SKUs weekly rather than a full annual stocktake. Discrepancies between counted and expected stock flagged immediately. Shrinkage at the problem location identified within 8 days of go-live; root cause addressed within 30.
  4. Location P&L — Per Store. Chart of accounts restructured with analytic accounts per location. Every sale, purchase, and expense tagged to a location at point of entry. Management reports produce a P&L by location with one click — no reconciliation, no spreadsheet assembly. Owner saw the first per-location P&L on day 3 of go-live.
  5. Bookkeeper Time Recovered. Manual reconciliation eliminated. Bookkeeper's role shifted entirely to analysis and vendor management. First month post-go-live: she identified $38K in supplier overcharges on freight invoices that had never been reviewed because there had been no time. Annual impact: estimated $160K in previously unidentified cost-saving opportunities now within scope.

Shrinkage Found. Margins Visible. Overselling Gone on Day One.

The shrinkage issue at the problem location was identified within 8 days of go-live — a cycle count discrepancy flagged automatically. The root cause was an employee process issue that was addressed within 30 days. The two below-average locations were identified immediately from the first per-location P&L; the owner made lease renegotiation decisions on one and a merchandising investment decision on the other based on real data for the first time.

He'd been running five stores for eight years and had never seen a per-location P&L. Not because he didn't want one — because his systems couldn't produce one. The first time he saw it, he sat quietly for a long moment. Then he picked up the phone and called his landlord at Location 5. OPS Engagement Director · Odoo Retail Practice
Day 1
Shopify overselling eliminated — real-time inventory sync live
8 days
Shrinkage at problem location identified via automated cycle count
3→0
Bookkeeper days/week spent on reconciliation — all recovered for analysis
2
Below-target locations identified — management action taken within 60 days
Get Started

Ready to Execute 
Your Next Move?

Let’s talk about your next milestone and how to reach it with speed, security, and full control
Schedule Your Strategy Call
Outpace Professional Services strategic business consulting team