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)
- **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.’
- **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.
- **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.
- **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.
- **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.
- **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 source | Surface-level control | What CannAgent does |
|---|---|---|
| Receiving short-counts | Two-person count at receiving against manifest line; vendor-claim filed within 48hr | Receiving flow requires count entry per line + flags variance > 1% for vendor-claim queue |
| Manual quantity adjustments without paper trail | Manager-PIN required + free-text reason mandatory + pattern-detection on the audit log | Adjustment requires manager-PIN; reason picker (Recount / Damage / Vendor short / Other-+-explain); auto-flag if same SKU adjusted >2x/week |
| Employee theft | Camera + budtender-vault-access logged + shift-end variance review + random-day cycle counts | Audit log links every void/return/discount to actor; per-budtender variance report; cycle-count scheduler with random-shuffle selection |
| Waste under-reporting | Same-day waste log entry; supervisor sign-off on >$X waste; state-required disposal records | Waste captured at point of action (in void/return/destruction flows); end-of-day waste-log gaps surface on dashboard |
| Customer theft | Behind-glass display; budtender hands product across the counter; cameras at register + door | Display-product-vs-vault SKU separation; transaction-level camera-clip linking (where infra supports) |
| POS-state sync errors | Sync-health monitoring + same-day investigation | Sync status on manager dashboard; red banner if stuck >4hr; investigation queue for stuck records |
The shrink investigation sequence (when monthly count surfaces a gap)
- **Compute the variance per SKU** (not aggregate — aggregate hides patterns). Variance > 2% OR > $100 cost-basis = investigate.
- **Pull the receiving history for that SKU** in the variance window. Was every manifest line counted? Were there vendor-claim filings?
- **Pull the manual-adjustment audit log for that SKU.** How many times was it manually adjusted? By whom? With what reason?
- **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?
- **Cross-reference voids + returns** in the variance window. Was the right SKU pulled physically when the system recorded the void/return?
- **Pull the per-budtender variance report.** Does one budtender appear on a disproportionate share of void/return/discount entries for this SKU?
- **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
- Six shrink sources ranked by $-impact: receiving short-counts (#1 30-40%), manual adjustments without paper trail (#2 20-25%), employee theft (#3 10-15%), waste under-reporting (#4 10-15%), customer theft (#5 5-10%), POS-state sync errors (#6 5-10%)
- Operator gut overweights employee theft + underweights receiving + adjustment discipline; #1+#2 alone are 50-65% of total shrink
- Six controls catch each source — most live in receiving + audit-log + waste-flow discipline, not in cameras
- Investigation sequence: per-SKU variance → receiving history → adjustment log → waste log → voids/returns → per-budtender pattern → cameras LAST (not first)
- Termination-grade evidence requires pattern documentation + audit-log+camera+variance correlation + prior write-up trail; wage-theft-recovery posture set BEFORE termination via attorney consult
Ready to talk through your migration?
30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.