AI Skill Report Card

Analyzing Dispensary Sales

A90·Oct 4, 2026·Source: Web
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. ---
15 / 15

Given a POS sales CSV, immediately produce 5 weekly insights:

  1. Top Winners — highest revenue/unit movers this week vs. prior week
  2. Rising Trends — categories/brands/strains with fastest % growth
  3. Margin Opportunities — high-margin items that are underpromoted relative to sales potential
  4. Laggards to Discount — slow movers, aging inventory, declining velocity
  5. 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
15 / 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
18 / 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
  • 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
  • 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
0
Grade AAI Skill Framework
Scorecard
Criteria Breakdown
Quick Start
15/15
Workflow
15/15
Examples
18/20
Completeness
19/20
Format
15/15
Conciseness
14/15