Insights

Ecommerce · 3 min read

Cannabis Ecommerce Menu Accuracy FAQ

This FAQ covers the controls I use to keep a cannabis ecommerce menu lined up with POS inventory, the stock actually on the shelf, and traceability records.

What is menu accuracy?Link to this section

Menu accuracy means every sellable product shown online can be mapped to an active POS product, an available inventory package, and a physical location that can be picked. The menu is not the source of truth. It sits downstream of the POS catalog, package inventory, room assignments, reservations, and the sync process, and it is only as correct as those inputs.

Which systems have to reconcile?Link to this section

At a minimum you compare four numbers: physical shelf count, state traceability package quantity, POS sellable quantity, and ecommerce menu quantity. If any one of them is off, you can take an online order you cannot fill cleanly.

physical_qty | traceability_qty | pos_sellable_qty | menu_qty

What causes menu drift?Link to this section

Most of the time it comes back to one of these:

  • A POS-to-menu sync job failed.
  • A package split was not mapped to the ecommerce product.
  • A room or location assignment is excluding sellable stock.
  • A return created an inventory record the menu does not recognize.
  • A reservation went stale.
  • Duplicate SKUs, or a manual product edit that broke the catalog link.

What should the sync monitor show?Link to this section

It needs the last successful sync timestamp, the failed sync timestamp, how many products were updated, how many were rejected and why, the affected location, and the affected package or product IDs. A generic "last updated" value does not prove that every product actually synced.

sync_started_at
sync_completed_at
sync_status
store_id
products_attempted
products_updated
products_failed
failure_reason
package_uid
product_id

How often should inventory be reconciled?Link to this section

Watch sync status continuously. Run POS-to-menu quantity reconciliation daily, and add a same-day exception queue for high-volume stores. Only physically count the flagged exceptions, not the whole catalog every day. Once a week, do a root-cause review to classify the recurring errors and assign the system fixes.

What does the daily reconciliation file need?Link to this section

The reconciliation file needs stable join keys and an explicit reason code for every mismatch. Package UID is the preferred join key when available. Product ID alone is weaker because one menu product can represent multiple packages, lots, or rooms.

store_id | product_id | package_uid | pos_qty | menu_qty | physical_qty | mismatch_reason | owner | resolved_at

How should mismatches be classified?Link to this section

Use a small controlled vocabulary so the exception queue can be analyzed over time. Recommended reason codes include sync_latency, sync_failure, package_split_missing_map, duplicate_sku, room_assignment_error, reserved_inventory_stale, discontinued_product, return_record_unmapped, and physical_count_variance.

What metrics should be reviewed weekly?Link to this section

Track mismatch count, mismatch rate, average age of unresolved exceptions, failed sync count, products affected by failed syncs, out-of-stock order rate, substitution rate, cancellation rate by reason, and the top recurring mismatch reasons. Reading them together tells you whether you have a catalog hygiene problem or an integration reliability problem, which usually get fixed in different places.

What is the minimum SOP?Link to this section

  1. Check sync status before the menu opens for online orders.
  2. Export POS inventory and ecommerce menu inventory daily.
  3. Join records on package UID first, product ID second.
  4. Flag every non-zero quantity mismatch.
  5. Physically count flagged items and record the physical quantity.
  6. Assign a mismatch reason code and owner.
  7. Resolve the inventory, catalog, room, reservation, or sync issue.
  8. Review recurring reason codes weekly and remove the root cause.

What is the technical rule?Link to this section

Show a product as orderable only when all of these hold: the product is active, the mapped package is sellable, the sellable quantity is greater than the reservation buffer, the location is eligible for ecommerce fulfillment, and the latest sync completed without a product-level failure.

Let’s work together

Menu, catalog, or checkout drifting?

I help teams keep online availability honest and the data behind it clean.