AI Skill Report Card
Analyzing Dispensary Sales
Markdown--- name: analyzing-dispensary-sales description: Transforms cannabis dispensary POS CSV exports into weekly profitability insights, identifying top-selling products, emerging trends, and underperforming SKUs that need discounting. Use when reviewing weekly/monthly sales data, building a dashboard report, deciding what to discount or discontinue, or prepping inventory and purchasing decisions based on sales velocity. ---
Quick Start15 / 15
Given a POS sales CSV, immediately produce 5 weekly insights:
- Top Winners — highest revenue/unit movers this week vs. prior week
- Rising Trends — categories/brands/strains with fastest % growth
- Margin Opportunities — high-margin items that are underpromoted relative to sales potential
- Laggards to Discount — slow movers, aging inventory, declining velocity
- Category/Basket Insight — cross-sell patterns, time-of-day, or customer segment trend
Example output snippet:
📊 Weekly Sales Insights (Week of Mar 3–9)
1. WINNER: "Blue Dream" flower — $8,420 revenue (+22% WoW), #1 category: Flower
2. TREND: Live Resin carts up 35% WoW — demand shifting from distillate
3. MARGIN OPP: Pre-rolls have 62% margin but only 8% of sales mix — push bundling
4. DISCOUNT CANDIDATES: 3 edibles SKUs with <2 units/week sold, 45+ days on shelf
→ "Sour Gummies 100mg" — 0 units sold in 14 days, suggest 20% markdown
5. BASKET INSIGHT: Customers buying vape carts have 40% attach rate with edibles — bundle promo opportunity
Recommendation▾
Add a note on handling missing/malformed CSV data (e.g., missing cost column edge case) more explicitly as a standalone pitfall
Workflow15 / 15
Progress:
- [ ] Step 1: Ingest and clean CSV (verify columns: SKU, category, brand, strain, qty sold, revenue, cost/margin if available, date, store location if multi-site)
- [ ] Step 2: Compute week-over-week (WoW) and month-over-month (MoM) deltas by SKU, category, brand
- [ ] Step 3: Rank products by revenue, units, and velocity (units/day on shelf)
- [ ] Step 4: Flag underperformers — define thresholds (e.g., <X units/week, >Y days inventory age, declining 3-week trend)
- [ ] Step 5: Identify margin outliers — high margin + low sales mix = opportunity; low margin + high sales = review pricing
- [ ] Step 6: Surface basket/cross-sell patterns if transaction-level data available
- [ ] Step 7: Package into 5 ranked insights with specific numbers and recommended action
- [ ] Step 8: Format for dashboard tool (Genspark) — structured sections, charts-ready tables
Step 1 Detail: Data Cleaning Checklist
- Standardize category names (Flower, Vape, Edible, Concentrate, Pre-roll, Topical, Tincture, Accessory)
- Dedupe SKU name variants (e.g., "Blue Dream 3.5g" vs "Blue Dream - 3.5G")
- Parse dates into weekly buckets (Mon–Sun) for consistent WoW comparison
- If no cost data, use category-average margin benchmarks: Flower ~35-45%, Vape ~45-55%, Edibles ~50-60%, Pre-rolls ~55-65%, Concentrates ~40-50%
Step 4 Detail: Discount Candidate Criteria
Flag a SKU as a laggard if any two apply:
- Velocity < 2 units/week for 2+ consecutive weeks
- Inventory age > 45 days (or 60 for shelf-stable edibles)
- Revenue decline > 25% over trailing 3 weeks
- Zero sales in trailing 14 days
Recommend discount tier based on severity:
- Mild (1 criterion): 10-15% off
- Moderate (2 criteria): 20-30% off
- Severe (3+ criteria, near expiration): 40%+ off or bundle/clear out
Recommendation▾
Include a brief example of raw CSV input snippet to pair with the output, reinforcing the input/output contrast
Examples18 / 20
Example 1: Input: CSV with 500 line items, columns [date, sku, category, brand, qty, revenue, cost] Output:
1. WINNER: Vape category +18% WoW, led by "Pax Live Resin 1g" ($5,200, 140 units)
2. TREND: Indica flower outpacing Sativa 3 weeks running (62/38 split, was 50/50 a month ago)
3. MARGIN OPP: Tinctures at 58% margin but only 3% of revenue mix — underexposed, consider end-cap placement
4. DISCOUNT: "CBD Topical 500mg" (0 units in 21 days, 52 days on shelf) → recommend 30% markdown
"Grape Ape 1g Pre-roll" (1 unit/week, 48 days on shelf) → recommend 15% markdown
5. BASKET: Friday/Saturday edible sales 2.3x higher than weekday avg — consider weekend edible promo
Example 2: Input: Multi-location CSV with store_id column Output: Same 5-insight format, but insight #1 and #4 broken out per location if performance diverges >20% between stores (e.g., "Downtown location: gummies trending; Eastside location: gummies stagnant — investigate local demand or placement").
Recommendation▾
Consider adding a minimal schema validation step or error-handling guidance for malformed dates/categories
Best Practices
- Always compare against a baseline (prior week, prior month, same week last year if seasonal like 4/20 or holidays)
- Use dollar impact, not just percentages — "$1,200 lost to declining sales" is more actionable than "-15%"
- Tie every insight to a recommended action (discount %, reorder, promote, discontinue)
- Watch for compliance-driven anomalies (state limit changes, testing recalls) that mimic sales trends
- Track discount effectiveness in the following week's report — did markdown move the SKU?
- Keep a rolling 4-week view so one-off spikes (payday, holiday) don't trigger false laggard flags
Common Pitfalls
- Don't flag new products as laggards in their first 1-2 weeks — they need ramp-up time
- Don't discount high-margin slow movers reflexively — check if it's a loyalty/niche item (e.g., rare strain) worth keeping at full price for assortment depth
- Don't ignore inventory age in favor of pure velocity — a new SKU with low units isn't the same risk as 60-day-old stock
- Don't present insights without specific SKU/dollar numbers — vague trends aren't actionable
- Don't mix revenue rankings with unit rankings without labeling which metric drives each insight