Every D2C brand that opens a physical door — a flagship, a pop-up, a shop-in-shop — eventually runs into the same question: does the number on the website match the number on the shelf. Most brands find out the answer is no, usually after someone sells a unit twice. Shopify's answer to this is Shopify POS, and to Shopify's credit, it is not a bolted-on integration — locations, inventory, and orders are first-class objects in the same database whether the sale happens on a browser or a countertop reader. That's a genuinely different starting point than stitching a separate retail system into Shopify through an app. But "unified" doesn't mean "instant and infallible," and the gap between those two ideas is where most omnichannel projects either go smoothly or turn into a six-month headache. This guide covers what Shopify POS actually does, what it costs, where the sync has real limits, and when it's the right tool versus when you're better off treating retail as a separate system with an integration layer.
Why "just add a store" breaks inventory truth
The instinct when a Shopify brand opens a physical location is to treat it as an extension of the existing store — same products, same backend, just another till. In practice, a second sales channel exposes every assumption that was baked into single-channel inventory management. A website that oversells by a unit or two during a flash sale is an annoyance you email an apology for. A physical customer standing at a register who's told the item they're holding isn't actually available is a different kind of failure, and it happens more often than brands expect once online and in-store draw from the same stock pool.
The root problem is that "inventory" stops being one number the moment there are two places that can decrement it independently and simultaneously. A website checkout, a POS register, a wholesale order, and a return processed at a different location than the sale are all writes to the same underlying count, arriving through different code paths, at different speeds, with different tolerance for delay. Shopify's model handles this better than most platforms because it was built with multi-location inventory as a core object rather than an afterthought, but "better than most" still leaves real edge cases that a brand needs to plan around rather than assume away.
Shopify POS Lite vs Shopify POS Pro: what actually changes
Shopify ships POS Lite free with every Shopify plan — it's not a separate purchase, it's the default in-person selling mode available the moment you install the Shopify POS app. Lite covers basic checkout, product lookup, discounts applied manually, and payment processing through Shopify Payments or a supported card reader. For a single till at a pop-up, a market stall, or a founder doing weekend markets, Lite is genuinely sufficient — there's no functional reason to pay more if that's the whole operation.
Shopify POS Pro is the paid upgrade, commonly cited around $89 per month per location on standard month-to-month billing, or roughly $79 per month per location if paid annually — verify current numbers against Shopify's pricing page before budgeting, since retail pricing shifts more often than core plan pricing. Shopify Plus merchants get POS Pro included at no extra per-location charge, which matters for the cost math on larger rollouts. What Pro actually unlocks is the retail-operations layer Lite doesn't have: custom staff roles and permissions (controlling who can apply discounts, process refunds, or view reports, enforced per PIN rather than trusting everyone with full access), register and shift management with cash-tracking and end-of-day reconciliation, POS-specific sales and staff-performance reporting, saved carts, and the multi-location fulfillment workflows — local delivery, in-store pickup handling, and ship-from-store — that a brand with more than one register genuinely needs. Lite, by contrast, keeps staff access basic and doesn't give you the granular permission or shift-reporting tooling. The honest framing: Lite is "can I take a payment," Pro is "can I run a retail operation with employees, shifts, and more than one location." If you have paid staff and more than one register, the Pro fee is close to a rounding error next to what ungoverned PIN access or unreconciled cash drawers cost in shrinkage.
How unified inventory actually works under the hood
Shopify treats every place inventory can physically sit — a warehouse, a retail store, a 3PL, a pop-up — as a Location object, and each product variant carries an InventoryLevel per location rather than one global count. Your online store draws from whichever locations you've assigned as fulfillment-eligible for online orders, and each POS register is tied to a specific physical location. Because these are all locations inside the same Shopify store (not separate stores stitched together), a sale at any location — POS or online — writes to the same inventory ledger the rest of the business reads from. This is a meaningfully different architecture than syncing two separate Shopify stores or bolting a legacy retail POS onto Shopify through a connector app, which is where a lot of the "real-time sync" horror stories in the wider ecommerce world actually come from — those are integration problems between two different systems, not a Shopify POS problem.
Within a single store, an online sale, a POS sale, a return, and a manual stock adjustment are all just writes to the same InventoryLevel record, and under normal connectivity they resolve in close to real time — typically a matter of seconds, not the batch-sync delays you'd see with a CSV-based or nightly-sync integration. That's the genuine strength of the native setup: there is no separate "retail inventory" to reconcile against "web inventory" because there was never a second ledger to begin with.
Where the sync actually lags — and when overselling still happens
The place this breaks down is connectivity and concurrency, not architecture. Shopify POS is designed to keep selling when a register loses internet — offline checkout caches the last-synced stock count locally, keeps taking sales, and queues those transactions to upload once the connection returns. That's the right design for a retail floor where you cannot tell a customer "sorry, try again when the wifi is back," but it means that during an outage, the register is working off a snapshot that's stale by definition. If the same SKU sells out online while a store is offline, or if two offline registers at different locations both sell the last two units of a low-stock item before either syncs, you get a real oversell that Shopify reconciles only after the fact — usually surfaced as a negative available count or an order Shopify flags for manual resolution, not silently absorbed.
Even fully online, there's a narrower version of the same risk during genuinely high-velocity moments: a limited drop, a single-unit rare item, a flash sale timed to a physical launch event. The write-and-read cycle is fast, but it isn't instantaneous, and two near-simultaneous checkouts — one from a phone at the register, one from a customer's phone half a mile away — can both get to the payment step believing the item is available. Shopify's inventory reservation system (which holds stock for a set window once a checkout begins) narrows this window considerably compared to platforms without checkout-level reservations, but it doesn't eliminate it, particularly for single-unit inventory or vintage/one-of-one items where any oversell is visible and embarrassing rather than a rounding error. The practical mitigation most experienced Shopify retailers use is a small safety buffer on low-stock, high-demand SKUs rather than trusting the count to the last unit, plus a clear staff process for what happens when an oversold order does occur.
Hardware: what you're actually buying
Shopify's own retail hardware line covers the essentials, and current supported gear includes the Shopify Tap & Chip card reader (roughly $49, Bluetooth-paired to an iPhone or Android device, handling tap, chip, and contactless payments including Apple Pay and Google Pay), along with bundled POS Go handheld terminals for mobile checkout on a retail floor without a fixed counter. For fixed registers, Shopify officially supports a specific list of third-party receipt printers rather than "any printer" — Star Micronics' TSP143III series and Epson's TM-M30II are the commonly cited supported models, generally in the $250–$370 range, available in Bluetooth, Wi-Fi, and wired/USB variants. Cash drawers run roughly $130–$140 and connect through the receipt printer's RJ11 port, opening automatically on a cash transaction rather than needing a separate trigger.
The practical guidance: don't assume a printer or scanner you already own will work — check Shopify's current supported-hardware list before buying, because unsupported peripherals either won't pair reliably or won't trigger the cash-drawer-open and receipt-print events correctly. For a brand running more than one or two registers at a single location, Shopify's newer POS Hub approach (a wired hub connecting card reader, printer, and drawer through one connection rather than pairing each over Bluetooth independently) is worth planning for from the start — Bluetooth dropout on a busy retail floor with multiple registers and multiple staff devices nearby is a real, recurring complaint, not a hypothetical one.
BOPIS and ship-from-store: native versus app-dependent
Buy-online-pickup-in-store is genuinely native to Shopify, not an app requirement. Pickup is configured per location under Settings > Locations, in that location's fulfillment options, at no extra cost on any plan — a customer chooses "pickup" at checkout, the order routes to that location, staff mark it ready and then picked up from the POS or admin order screen, and the customer gets automatic notifications at each stage. For a brand with a small number of locations and no need for scheduling precision, this native flow covers the whole use case without a third-party dependency.
Where native BOPIS runs out of road is scheduling granularity — Shopify's built-in pickup flow doesn't let customers pick a specific pickup time slot or date, it's closer to "ready sometime today" than a reservation system. Brands that need timed pickup windows (grocery, high-volume flagship stores managing floor traffic, curbside operations) typically add an app like Zapiet or a comparable pickup/delivery app specifically for the scheduling layer, not to replace the core pickup mechanism. Ship-from-store is similarly native: retail staff with the right POS permissions can fulfill an online order assigned to their location directly from the POS app, and Shopify's order routing settings let you rank locations, route to whichever location is closest to the delivery address, minimize split shipments across locations, or stay within a specific market — configured natively, no app required for the core routing logic. Where brands do reach for apps here is more sophisticated routing logic than Shopify's native rules cover — cost-based carrier selection combined with location routing, or routing tied to real-time staff capacity at a given store — which native Shopify doesn't attempt to solve on its own.
Staff, PINs, and shift management across locations
This is the area where the Lite-to-Pro gap is most consequential for any brand with actual retail employees rather than a single founder behind the counter. POS Lite gives every staff member a basic PIN and broadly the same level of access — there's no meaningful way to say "this person can process a sale but not issue a refund" or "this person can view today's sales but not last month's." For a two-person pop-up that's a non-issue. For a store with rotating part-time staff, it's a shrinkage and accountability problem waiting to happen.
POS Pro's custom roles let you define exactly what each PIN can do — apply discounts up to a threshold, process refunds, view or export reports, open the cash drawer without a sale, adjust inventory counts on the floor — and because every action is tied to an individual PIN, you get a real audit trail of who did what, at which register, at which location. Layer that with Pro's shift and register management — clocking in and out, declared cash counts at open and close, automatic variance flagging when the drawer doesn't match expected cash — and you have the actual operational backbone a multi-location retailer needs, not just a payment terminal. It's worth being honest that this is still simpler than a purpose-built enterprise workforce-management system: there's no native scheduling, no labor-cost forecasting, no complex approval hierarchies for a large regional manager structure. For a handful of stores with straightforward staff structures, Shopify's role and shift tooling is enough. For a chain with layered store-manager/district-manager/regional hierarchies and heavy compliance requirements around cash handling, it starts to feel thin, and brands in that bracket often pair Shopify POS with a dedicated workforce-management tool rather than expecting Shopify to cover it natively.
What it actually costs to run this for real
The realistic total cost of ownership has four components, and brands consistently underbudget the second and third. First, the underlying Shopify plan itself — commonly cited starting points are around $39/month for Basic, roughly $105/month for the Grow tier, and around $399/month for Advanced, with Shopify Plus starting near $2,000/month for larger operations; these shift periodically, so confirm against Shopify's current pricing page rather than treating any of these as fixed. Second, POS Pro at roughly $89/month per location (around $79/month annually), which is free within Plus's included location allotment but an additional per-location line item on lower plans — a five-store rollout on a non-Plus plan is close to $450/month in POS Pro fees alone before anything else. Third, hardware: a basic single-register setup (card reader, printer, cash drawer, tablet stand) commonly runs somewhere in the $400–$700 range per register once you're buying supported hardware rather than repurposing whatever was lying around, and that multiplies per register, not per location. Fourth, transaction fees — Shopify Payments in-person rates are commonly cited around 2.6% + $0.10 on Basic, roughly 2.5% + $0.10 on Grow and Advanced, and lower still on Plus; these in-person rates are consistently cheaper than Shopify's online transaction rates, which is one of the more underappreciated economics of moving volume through POS rather than treating retail as a website with a register bolted on.
None of this is expensive relative to what a dedicated enterprise retail platform costs to license and integrate, but it's also not "free because it's built in," which is how it sometimes gets pitched internally. A five-location, fifteen-register rollout is a real five-figure annual line item before payroll, rent, or inventory itself enters the picture, and it deserves the same budgeting rigor as any other platform decision.
When Shopify POS is the right call — and when it isn't
Shopify POS is a strong, honestly-built fit for a specific and fairly wide band of retailers: a single-brand D2C company opening its first one to a handful of physical doors, a brand running seasonal pop-ups or market stalls, a wholesale-plus-retail hybrid that needs one inventory truth across a website and a few showrooms, or a Plus merchant who wants retail folded into the same admin, reporting, and app ecosystem they already run online. In that band, the native locations model, the real-time-within-one-store inventory sync, and the fact that POS staff, orders, and customers all live in the same Shopify data as the website is a genuine advantage over running two systems and building a sync layer between them — fewer moving parts, one source of truth, one team that has to learn one admin.
The strain shows up at a different kind of scale: large multi-location chains with deep staff hierarchies, heavy compliance and audit requirements around cash and inventory, tightly regulated loss-prevention processes, or retail operations that need scheduling, labor forecasting, and approval workflows Shopify's POS roles were never built to carry. It also shows up when a brand's omnichannel ambitions outrun what native routing and native pickup can do — true reserved time-slot pickup, complex carrier- and cost-aware ship-from-store logic, or inventory sync against a separate ERP or warehouse management system that Shopify's own Locations model doesn't natively understand. None of that means abandoning Shopify — it usually means Shopify POS handles the transaction and inventory layer while a custom integration or a carefully chosen app handles the specific piece that's outgrown the native tooling, rather than forcing the whole operation into a workaround or ripping Shopify out entirely.
Getting the engineering right before you flip the switch
Most of the failure modes above aren't Shopify POS being broken — they're brands turning it on without deciding, in advance, how location routing, safety-stock buffers, staff permission structures, and pickup or ship-from-store rules should actually behave for their specific retail footprint. That's a scoping and engineering problem as much as a retail-ops one, and it's exactly the kind of work that goes sideways when it's treated as a checkbox during a broader Shopify build rather than its own deliberate phase.
This is the layer Carryup's Shopify Deep Engineering work is built around — getting the Locations and inventory architecture right before the first register goes live, wiring order-routing rules and pickup/ship-from-store logic to match how a specific brand's stores and warehouses actually operate, and building the custom integration work (ERP connections, workforce tools, loss-prevention systems) that native Shopify doesn't try to solve on its own. Allbirds' own omnichannel Shopify POS rollout is a useful real-world reference for how deliberately this gets planned at scale, not bolted on as an afterthought. And because omnichannel retail doesn't stay static — new locations open, staff structures change, sync edge cases surface under real Black Friday-level load that never showed up in testing — our Care & Support engagements keep that system maintained and tuned rather than left to degrade quietly until a customer at a register finds out the item they're holding isn't actually there. If you're a Shopify brand about to add physical retail to an online business, or you're already running POS and hitting exactly the sync and staffing friction described above, that's the conversation worth having before, not after, you've committed to a hardware order.
If any of this sounds like your situation, talk to us. We'll tell you exactly where your revenue is leaking and what it would take to fix it. Explore Strategy & Consulting →

