Most dispensaries treat promotions like a marketing tool. They're not — they're a margin decision. And for one Arizona dispensary running 11 active promotions a week, that distinction was costing them more than $18,000 per month. Revenue was flat. Gross margin had dropped 12 points over 18 months. And the owner had a growing suspicion that all those deals were training full-price customers to wait for discounts instead of bringing in new ones. He was right — and the data showed exactly where the bleeding was.
When More Deals Means Less Profit
Desert Mesa Dispensary had a promotion for every occasion. Mondays were $5 pre-roll day. Tuesdays featured 20% off flower. Wednesdays brought happy hour discounts on concentrates. Thursdays ran mystery deals. Fridays had loyalty point multipliers. Weekends offered bundle specials.
From the outside, it looked like an active, customer-focused operation. From the inside, it was a margin compression machine.
Marcus, the owner, had been watching the numbers for months. Transaction count was holding. Revenue was flat. But gross margin had slid from 54% to 42% over 18 months — a 12-point drop that made every quarter feel harder than the last. A healthy dispensary can absorb a 2-3 point margin swing. A 12-point decline over a year and a half is a structural problem.
"I knew the promotions were part of it," Marcus said. "But every time I thought about cutting one, I worried we'd lose the traffic it was driving. I needed the data to tell me which fears were real."
Phase 1: Building a Promotion Attribution Model
The first step was building a promotion attribution model from Desert Mesa's POS export — 18 months of transaction records, customer IDs, purchase timestamps, SKUs sold, and discounts applied.
The goal wasn't to prove that deals were bad. It was to answer a more precise question: which promotions were actually changing customer behavior, and which ones were just moving margin from the store to customers who would have visited anyway?
Three questions guided the analysis:
- Incrementality: What percentage of deal-day customers had a pattern of visiting on that day regardless of promotions in prior months?
- Category elasticity: Which product categories showed meaningful volume lift when discounted — and which showed almost none?
- Demand gap fit: Which dayparts and days had genuine traffic shortfalls that discounts could actually fill?
The answers were uncomfortable in the best possible way — specific, actionable, and expensive enough that ignoring them wasn't an option.
What 18 Months of POS Data Revealed
Most deal-day traffic wasn't incremental.
When the team segmented Tuesday flower-deal customers by purchase history, they found that 63% of those customers had visited Desert Mesa on a Tuesday in at least 3 of the prior 6 months — with or without a promotion running. The Tuesday deal wasn't pulling people in. It was applying a 20% discount to customers who were already coming.
At an average flower ticket of $52, that meant roughly $10 per transaction given away unnecessarily. Across Tuesday's 200+ average transactions, that was over $2,000 per week in unnecessary discount expense — on a single promotion day.
Category elasticity varied dramatically — and not in the ways anyone expected.
The team ran elasticity comparisons across each promoted category, measuring volume lift on promotion days versus matched non-promotion days in the same seasonal window. The results:
- Pre-rolls: Volume up 38% on promotion days — strong, consistent lift
- Concentrates: Volume up 22% on promotion days — solid response
- Flower: Volume up 11% on promotion days — marginal lift on the store's highest-average-ticket category
- Edibles: Volume up 4% on promotion days — essentially no elasticity
Flower was Desert Mesa's most heavily promoted category. It also had the worst price elasticity — and the highest average transaction value — meaning every flower promotion was the most expensive margin loss in the store. The store was deeply discounting the product category where customers were least likely to change their behavior because of the discount.
Happy hour was a loyalty reward, not a traffic driver.
Friday happy hour ran 20% off from 4–7pm and had strong customer satisfaction scores. It was also costing the store disproportionately: 81% of happy hour customers were Tier 2 or Tier 3 loyalty members — people who would have visited on Friday regardless, and who the store was already rewarding through point accumulation. The discount wasn't driving new behavior. It was double-compensating the store's most consistent customers.
Phase 2: Rebuilding the Promotions Strategy
Armed with the audit data, Marcus didn't eliminate promotions. He rebuilt them around one rule: every promotion has to generate incremental business, not just subsidize existing behavior.
Three structural changes followed.
Cut promotions from 11 to 5 per week, targeting only elastic categories.
Pre-rolls and concentrates stayed on the promotional calendar. Flower discounts were eliminated entirely. Edible promotions were replaced with bundle structures — pairing edibles with pre-rolls at a slight combined discount — that increased average basket size without reducing per-unit price.
Bundling proved significantly more effective than straight discounting for edibles. The average bundle transaction came in at $68.40 versus $41.20 for a standalone promoted edible, while maintaining better margin per transaction. Customers were buying more per visit rather than buying the same amount for less.
Shift from fixed-day discounting to demand-gap targeting.
Instead of running promotions on fixed days of the week, the team built a transaction heatmap from the POS data to identify the store's genuine low-demand windows. Tuesday afternoons and Sunday mornings were the weakest dayparts by transaction count — consistent across multiple quarters.
Promotions moved to those windows. A 15% discount running Tuesday 1–5pm that brings in 25 transactions from customers who otherwise wouldn't have visited creates real value. The same discount running Saturday morning — when the store is already at full demand — just applies the discount to customers who were already on their way in.
Restructure loyalty from discount-heavy to experience-heavy.
Friday happy hour became a loyalty-member exclusive. The framing shifted from a public discount to a membership benefit — same timing, but the 20% discount rate dropped to 10%, with the difference made up in accelerated point multipliers for the session.
Customer satisfaction held. Economics improved significantly. And the store stopped double-discounting its most reliable customers.
90-Day Results
Three months after restructuring the promotional calendar, the numbers told a clear story.
| Metric | Before | After | Change |
|---|---|---|---|
| Gross margin | 42% | 54% | +12 points |
| Average basket size | $47.20 | $55.60 | +$8.40 |
| Weekly transactions | 1,840 | 1,766 | -4.0% |
| Margin per transaction | $19.80 | $30.02 | +$10.22 |
| Monthly margin contribution | $145,000 | $213,000 | +47% |
Transaction count dropped slightly — 74 fewer visits per week. But those were almost exclusively low-margin deal-driven transactions from customers the store had been subsidizing for months. The customers who remained were buying more per visit and paying closer to full price.
Monthly margin contribution grew by $68,000 — a 47% improvement from operational changes that required no new customers, no new SKUs, and no additional marketing spend.
How to Run This Audit at Your Dispensary
You don't need 18 months of data or a dedicated analyst to get started. Here's a three-step version any operator can run with standard POS reporting.
Step 1: Build a promotion register.
List every active promotion in your current rotation — name, discount type (percent off, dollar off, bundle), category, timing. If you can't complete that list in 10 minutes, that's a signal worth paying attention to. Most POS systems generate a promotion usage report. Pull it and count. More than 8 active promotions per week is usually worth scrutinizing.
Step 2: Run an incrementality spot-check on your top three deals.
For each promotion, pull the customer list of who redeemed it in the past 60 days. Then check: how many of those customers have purchase history within 2 weeks of the promotion window in prior months? If more than 50% were already regular visitors at that time of week, the promotion is probably not generating incremental traffic — it's generating incremental discount expense.
Step 3: Test one category swap.
Identify the product category you discount most often or at the deepest rate. Run one 4-week period with no promotions on that category. Compare unit volume to the prior comparable 4-week period. If volume holds within 10%, you've found an inelastic category — and uncovered margin you can recover immediately without meaningfully changing customer behavior.
Most dispensaries find at least one category in this position. Many find two or three.
The Bottom Line
Promotions feel safe because their upside is visible — busy deal days, high transaction counts, customers who seem happy. What's harder to see is the margin those deals are quietly removing from every transaction, week after week.
For Desert Mesa Dispensary, 11 promotions per week had become the store's largest single margin drain, dressed up as a marketing strategy. The data didn't say deals were bad. It said most of these specific deals weren't working — and quantified exactly what that was costing.
- Incrementality is the right question. Volume lift is easy to see; incremental lift is what actually matters.
- Category elasticity is rarely what you expect. Test before assuming your most-promoted products are your most price-sensitive.
- Demand-gap targeting turns promotions into tools. Discounts work when they fill real gaps — not when they run on a fixed schedule regardless of demand.
At Chapters Data, we help cannabis retailers and small businesses build the POS analytics infrastructure to run exactly this kind of analysis — so you can make promotional decisions based on what your data actually says, not what it feels like. If your margins are sliding and your deals feel like they're working, the data almost certainly has the answer.



