← All guides

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.

By CannAgent7 min read

The 4 demand patterns ranked by predictive power

  1. 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.’
  2. 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.
  3. 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.
  4. 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 WA-market weekly multipliers, applied 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.

DayMultiplier (×)Why
Friday2.0-2.4Pre-weekend purchase, payday-bound
Saturday1.6-1.9Weekend leisure
Sunday1.1-1.3Pickup hangover + day-off
Thursday1.0-1.2Pre-weekend prep
Monday0.7-0.9Recovery from weekend
Wednesday0.7-0.9Mid-week valley shoulder
Tuesday0.5-0.7Lowest 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.

  1. Baseline = trailing-30-day daily mean (excludes the spikes — a clean baseline against which multipliers apply). Compute weekly so it adapts to slow drift.
  2. Weekly multiplier from the table above — apply per day-of-week.
  3. 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).
  4. 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.
  5. 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.
  6. 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

  • A 14-day demand forecast by category, with the multiplier breakdown shown so the operator can see what drives each number; a manager can adjust any multiplier with a one-line reason that is kept.
  • The reorder math applies the day-of-week, monthly, seasonal and known-event multipliers automatically, with the unscaled and scaled numbers side by side.
  • A weather feed applies the cold-snap or snow-day multiplier; the operator can override it.
  • A local-event calendar the manager maintains — concert, festival, conference — drives the event multiplier on those dates.
  • A quarterly recalibration report compares actual to predicted multipliers for the prior quarter and flags drift over 10%; the manager signs off and the updated multipliers feed back in.
  • Every stockout is categorized — vendor failed, forecast under-called, customer spike — per /guides/cannabis-vendor-diligence-fire-or-keep, and the under-calls flow back into 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: a 14-day forecast with the multipliers shown + multipliers applied in the reorder math + weather feed + local-event calendar + quarterly recalibration report + stockout post-mortems feeding the 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

Ready to talk through your migration?

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