← All guides

Loss-prevention playbook

Cannabis dispensary shrink — where it actually hides, and the discipline that finds it

Industry-wide cannabis shrink is reported at 2-4% of cost of goods. At Green Life + SCC, ours runs ~0.6%. The delta isn’t mystical operator skill — it’s the discipline of knowing where shrink hides + having the surface-level controls that catch each variant. Six places shrink lives; six controls. Ranked by where the dollars actually leak.

By CannAgent6 min read

The six places shrink hides (ranked by $-impact)

  1. **Receiving short-counts (~30-40% of total shrink at most operators).** Vendor manifest says 50 units; physical count is 49. Nobody catches it at receiving; you signed off; the variance writes off as ‘found a gram somewhere.’
  2. **Manual quantity adjustments without paper trail (~20-25%).** Manager ‘corrects’ an inventory count to match what the floor shows; the gap goes into the void. No reason logged; no investigation. Repeat 200x/year.
  3. **Employee theft (~10-15%).** Direct product theft on shift; manipulated returns; ringing-without-scanning. Real and patterned; less of total shrink than operators assume but emotionally loaded.
  4. **Waste under-reporting (~10-15%).** Damaged products, sample destruction, unsalable returns — all real waste that needs to be logged per WAC 314-55-079(7). Skipping the log → variance attributed to nothing → state notices at audit.
  5. **Customer theft (~5-10%).** Lower than retail because cannabis is behind glass + budtender-handed, but exists on grab-and-runs + during distracted busy-period transactions.
  6. **Inventory-system bugs / sync errors (~5-10%).** POS rang a sale; state system didn’t receive it; physical inventory pulled correctly. Ledger shows the variance; nobody investigates; gap closes by manual adjustment (which goes to bucket #2).

Six controls that catch each one

Shrink sourceSurface-level controlWhat CannAgent does
Receiving short-countsTwo-person count at receiving against manifest line; vendor-claim filed within 48hrReceiving flow requires count entry per line + flags variance > 1% for vendor-claim queue
Manual quantity adjustments without paper trailManager-PIN required + free-text reason mandatory + pattern-detection on the audit logAdjustment requires manager-PIN; reason picker (Recount / Damage / Vendor short / Other-+-explain); auto-flag if same SKU adjusted >2x/week
Employee theftCamera + budtender-vault-access logged + shift-end variance review + random-day cycle countsAudit log links every void/return/discount to actor; per-budtender variance report; cycle-count scheduler with random-shuffle selection
Waste under-reportingSame-day waste log entry; supervisor sign-off on >$X waste; state-required disposal recordsWaste captured at point of action (in void/return/destruction flows); end-of-day waste-log gaps surface on dashboard
Customer theftBehind-glass display; budtender hands product across the counter; cameras at register + doorDisplay-product-vs-vault SKU separation; transaction-level camera-clip linking (where infra supports)
POS-state sync errorsSync-health monitoring + same-day investigationSync status on manager dashboard; red banner if stuck >4hr; investigation queue for stuck records

The shrink investigation sequence (when monthly count surfaces a gap)

  1. **Compute the variance per SKU** (not aggregate — aggregate hides patterns). Variance > 2% OR > $100 cost-basis = investigate.
  2. **Pull the receiving history for that SKU** in the variance window. Was every manifest line counted? Were there vendor-claim filings?
  3. **Pull the manual-adjustment audit log for that SKU.** How many times was it manually adjusted? By whom? With what reason?
  4. **Pull the waste log for that SKU.** Anything destroyed, sampled, or written off? Was it logged at point-of-action or reconstructed end-of-day?
  5. **Cross-reference voids + returns** in the variance window. Was the right SKU pulled physically when the system recorded the void/return?
  6. **Pull the per-budtender variance report.** Does one budtender appear on a disproportionate share of void/return/discount entries for this SKU?
  7. **If steps 1-6 don’t resolve it, pull camera footage** for the highest-volume shifts in the variance window. (This is the LAST step, not the first; cameras catch high-emotion theft, not the slow-leak issues that dominate shrink.)

Termination-grade evidence (when the investigation surfaces theft)

  • **Document the pattern, not the single incident.** Single-incident terminations get unemployment claims granted; documented patterns survive review.
  • **Audit log + camera footage + variance report bundled.** All three correlated to the SAME shifts.
  • **Manager-write-up trail.** Was the employee given a 30/60/90 review? Were prior small variances flagged + addressed in writing? See /guides/manager-writeups-that-survive-review.
  • **Wage-theft-recovery posture set BEFORE termination.** Most states have specific limits on wage withholding for theft recovery; consult your employment attorney before you act, not after.
  • **WSLCB CCB-employee-ID flagging.** When termination is for cause + the cause is theft of state-tracked product, file the appropriate WSLCB notification per WAC 314-55-077.

Takeaways

Ready to talk through your migration?

30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.