Operations + analytics deep-dive
Cannabis demand forecasting — the patterns that beat guessing
Most cannabis dispensary demand forecasting is ‘look at last week, order the same.’ That works in steady-state — but cannabis demand is anything but steady-state. Demand follows 4 distinct patterns: weekly cycle (Friday peak ~2.2x average, Tuesday valley ~0.6x), monthly cycle (paycheck-bound, 1st-of-month + 15th-of-month spikes), seasonal cycle (summer-trending Sativa + outdoor-friendly products, winter Indica + edibles), and event-driven (rush days per /guides/cannabis-holiday-rush-operations + weather + local events). Forecasting against ALL of these instead of just the trailing-week average cuts stockouts by ~60% + reduces aging-inventory by ~40% at typical operator scale. The pattern math worth running, what to ignore, and how to update the model when reality drifts.
The 4 demand patterns ranked by predictive power
- Weekly cycle (highest predictive power, narrowest window). Friday is the peak — typically 2.0-2.4x daily average for the WA market. Saturday is second peak ~1.6-1.9x. Sunday is ‘Sunday-pickup-hangover’ ~1.1-1.3x. Tuesday is the valley ~0.5-0.7x. The weekly multiplier is the SINGLE biggest forecasting signal an operator has — and most ignore it because they rationalize the variance as ‘every week is different.’
- Monthly cycle (high predictive power, paycheck-driven). First-of-month + 15th-of-month see a 1.3-1.6x spike compared to mid-month days. Direct deposits + government-benefit payments time to those dates; cannabis-customer disposable income spikes accordingly. Some operators see a smaller end-of-month dip as customers wait for the 1st.
- Seasonal cycle (moderate predictive power, slow-moving). Summer (May-Sept) tilts toward Sativa-leaning + outdoor-friendly product (pre-rolls, beverages, lighter edibles). Winter (Nov-March) tilts Indica-heavy + edibles + concentrates. Holiday weeks (Thanksgiving / Christmas / NYE) shift further toward edibles + gift-able product. The shift isn’t huge but compounds on aging-inventory if ordered against the wrong season.
- Event-driven (high predictive power, narrow window, hard to plan). 4/20 + Greenwednesday + 7/10 + holiday weekends per /guides/cannabis-holiday-rush-operations. Plus weather events (cold snaps drive 1.2-1.4x indoor consumption + edibles), local events (concerts / sports / festivals nearby), and one-off WSLCB or competitor closures (a competitor outage routes their customers to you for 2-7 days).
The weekly multiplier table
These are the WA-market weekly multipliers we run against the trailing-30-day-mean as the baseline. Multipliers are dispensary-specific within ~10% — pull your own from your transaction data within the first 90 days of operation per /guides/cannabis-dispensary-opening-day-first-30-days.
| Day | Multiplier (×) | Why |
|---|---|---|
| Friday | 2.0-2.4 | Pre-weekend purchase, payday-bound |
| Saturday | 1.6-1.9 | Weekend leisure |
| Sunday | 1.1-1.3 | Pickup hangover + day-off |
| Thursday | 1.0-1.2 | Pre-weekend prep |
| Monday | 0.7-0.9 | Recovery from weekend |
| Wednesday | 0.7-0.9 | Mid-week valley shoulder |
| Tuesday | 0.5-0.7 | Lowest day |
Sum across the week: ~7.0 day-multiplier units. Match that to projected weekly revenue when ordering. Example: $100K projected week → Friday alone is ~$28-34K. Inventory has to cover Friday peak independently of Tuesday valley availability — Friday stockouts cost 4x more than Tuesday stockouts at the unit level.
Combining the patterns
Demand forecast = baseline × weekly-multiplier × monthly-multiplier × seasonal-multiplier × event-multiplier. The multiplicative-not-additive structure matters. A Friday + 1st-of-month + summer + 4/20 = 2.2 × 1.5 × 1.1 × 4.0 = ~14.5x daily baseline. That’s the day every operator under-orders for and stocks out by 2pm.
- Baseline = trailing-30-day daily mean (excludes the spikes — a clean baseline against which multipliers apply). Compute weekly so it adapts to slow drift.
- Weekly multiplier from the table above — apply per day-of-week.
- Monthly multiplier 1.3-1.6 on 1st + 15th, ~1.0 mid-month, ~0.85-0.9 last 3 days of month (paycheck-bound dip).
- Seasonal multiplier per category — summer +5-15% Sativa, +5-10% pre-rolls + beverages; winter +5-15% Indica + edibles + concentrates. Apply to category-level reorder math, not aggregate.
- Event multiplier from /guides/cannabis-holiday-rush-operations — 4/20 = 4.0-5.0x, Greenwednesday = 2.5-3.5x, 7/10 = 1.5-2.0x, NYE = 1.5-2.0x, weather events 1.2-1.4x.
- Round UP, not down. Stockouts cost more than aging-inventory at the margin most operators run. Per /guides/vendor-reliability-and-the-math-of-reorder, the aggressive-reorder-on-velocity-spikes math fits here.
Where the model needs constant updating
- New competitor opens within 5 miles. Demand-forecast baseline shifts down 8-15% for 60-90 days as customers try the new shop, then partially recovers. Adjust baseline + monitor weekly.
- Existing competitor closes (temporarily or permanently). Their customers route to you. 5-15% baseline lift for 2-7 days (temporary outage) or permanent (closure). Monitor inventory tightness DURING the spike — don’t ride it down to stockouts.
- Local event nearby. Concert, festival, conference, sports playoff in your neighborhood = 1.2-1.5x daily for the event days + the day after. Calendar-feed integration helps; manual log otherwise.
- Weather extremes. Snow days drop foot traffic 30-50% (winter); heatwaves push customers to evening hours + cold-product purchases. Adjust both forecast + product mix.
- Marketing-campaign send. Per /guides/cannabis-customer-sms-deliverability-discipline, an opt-in SMS blast lifts the next-3-days demand by 5-15% for the campaign-targeted segment. Smaller than the patterns above but real.
- WSLCB regulatory changes. New age-verification requirement, packaging change, advertising-rule update — typically 2-4 week adjustment period as customers + staff adapt. Monitor the variance during these windows.
What CannAgent does to make this stick
- Demand-forecast surface at /admin/operations/forecast — renders next-14-days projected daily demand by category, with the multiplier breakdown shown so the operator can see what’s driving each prediction. Manager edits any multiplier with a 1-line explanation that logs to audit.
- Auto-applied multipliers in /admin/reorder — baseline reorder math (trailing-30-day mean) auto-multiplied by the upcoming day-of-week + monthly + seasonal + known-event multipliers. Operator sees the unscaled + scaled numbers side-by-side.
- Weather feed integration — weather forecasts pulled from a free API; auto-applies 1.2-1.4x cold-snap or 0.7-0.8x snow-day multiplier. Operator can override.
- Local-event calendar — manager-maintained calendar entries (concert / festival / conference) drive a 1.2-1.5x event-multiplier on those dates. Renders on /admin/operations/forecast for transparency.
- Quarterly recalibration report — every 90 days, a report at /admin/operations/forecast-recalibration computes actual vs. predicted multipliers for the prior quarter + flags any pattern drift > 10%. Manager reviews + signs off; updated multipliers feed back into the forecast model.
- Stockout post-mortem ↔ forecast model — every stockout per /guides/cannabis-vendor-diligence-fire-or-keep gets a category: vendor-failed / forecast-undercalled / customer-spike. The forecast-undercalled ones flow back into multiplier calibration.
Takeaways
- Demand follows 4 patterns most operators ignore: weekly cycle (Friday 2.0-2.4x peak / Tuesday 0.5-0.7x valley), monthly cycle (1st + 15th paycheck-bound 1.3-1.6x spikes), seasonal (summer Sativa / winter Indica), event-driven (rush days + weather + local events + competitor changes)
- Forecast = baseline × weekly × monthly × seasonal × event multipliers — multiplicative not additive. Friday + 1st + summer + 4/20 = ~14.5x baseline. The day operators consistently under-order for + stock out by 2pm
- Round UP not down — Friday stockouts cost ~4x more than Tuesday stockouts at the unit level; aging-inventory cost is asymmetric to stockout cost at most operator margins
- Update the model when: competitor opens/closes within 5 miles (8-15% shift), local event nearby, weather extremes (snow drops 30-50%, heatwave shifts to evening cold-product), WSLCB regulatory changes (2-4 week adjustment)
- 90-day recalibration loop — pull actual transactions, compute actual vs. predicted multipliers per pattern, flag drift > 10%. Most operators never run this loop + drift gets to 30-40% over 18 months without correction
- CannAgent: /admin/operations/forecast surface with multiplier-breakdown transparency + auto-applied multipliers in reorder math + weather-feed integration + local-event calendar + quarterly recalibration report + stockout post-mortem feedback into model
Frequently asked
- Which day of the week should I stock hardest for, and how much bigger is it than a slow day?
- Friday is the peak, typically 2.0-2.4x the daily average for the WA market, while Tuesday is the valley at about 0.5-0.7x. The weekly cycle is the single biggest forecasting signal you have, and most operators ignore it by rationalizing the variance as every week being different. Because Friday stockouts cost about 4x more than Tuesday stockouts at the unit level, your inventory has to cover the Friday peak independently of the Tuesday valley.
- How do I combine the weekly, monthly, seasonal, and event patterns into one number?
- Multiply them, do not add them: demand forecast = baseline x weekly-multiplier x monthly-multiplier x seasonal-multiplier x event-multiplier. The baseline is your trailing-30-day daily mean, computed weekly so it adapts to slow drift. Stacked, a Friday on the 1st of the month in summer on 4/20 works out to about 2.2 x 1.5 x 1.1 x 4.0, roughly 14.5x the daily baseline, which is the day operators consistently under-order for and stock out by 2pm.
- When do I need to change my forecast because the market around my store shifted?
- Update the model when a new competitor opens within 5 miles, which shifts your baseline down 8-15% for 60-90 days before partial recovery, or when a competitor closes and routes their customers to you for a 5-15% lift. Also adjust for local events nearby, weather extremes where snow can drop foot traffic 30-50%, and WSLCB regulatory changes that typically bring a 2-4 week adjustment period. Beyond those triggers, run a 90-day recalibration loop each quarter comparing actual versus predicted multipliers, since forecasts that never get this loop tend to drift far from reality over time.
Related guides
Operations deep-dive
Cannabis customer SMS — what carriers actually filter, what gets you blocked
6 min read
Operations deep-dive
Cannabis pricing — when to discount, when to hold, when to feature
6 min read
Operations deep-dive
Cash discipline at a cannabis dispensary: variance, escalation, audit
7 min read
Ready to talk through your migration?
30-minute demo. We end by quoting the cutover from your current setup — fixed scope, no hourly games.