At a glance
Where the market is heading
Adult-use is sales to any adult 21+. Medical is sales to registered patients and caregivers. Recreational sales began July 2023; before that the market was medical-only.
Monthly sales by channel
Medical sales are untaxed and have declined as patients migrated to the adult-use channel. That is a real behavioural shift, not a collection fault, which is why the pipeline records it as a notice and not an error.
Who is buying
Maryland reports each sale's channel: adult-use (any adult 21+ with ID) or medical (registered patients and their caregivers, who pay no cannabis tax). It is a per-transaction flag on the sales row, not a licence attribute, so it is a genuine measured split.
Retail dollars by channel
What is selling
Adult-use, by product type
Medical, by product type
The medical program
Maryland's medical program predates adult-use. These are levels, shown for the latest reporting month in the range — never summed, because the same patient recurs every month.
What a gram cost, before and after legalization
Maryland publishes quantities alongside sales, so a price per gram can be worked out from the state's own figures. Adult-use sales began 1 July 2023; everything before that month is the medical-only market.
Average price per gram
Two lines, deliberately. Bud only is the line that joins the cross-state chart, because DC's Flower/Bud row is bud alone. Maryland's Flower type also contains Raw Pre-Roll and Shake/Trim, so the two are about two per cent apart and are not synonyms.
The derived price cannot be split by channel: MCA reports quantities and customer type in separate tables with no way to join them, so every month from July 2023 blends both. Prices exclude sales tax, which adult-use purchases carry and medical ones do not.
Arrests before & after legalization
Annual figures · not affected by the date filterHow cannabis enforcement changed around legalization.
Arrests by year
Dispensaries and licences in Maryland — 123 licence records listed, from Maryland Cannabis Administration.
Where these figures come from
Sourcing, basis and comparabilityA medical programme since 2017 and adult-use retail since 1 July 2023, sold through the same dispensaries. The split is a per-transaction customer-type flag on each sales row, not a licence attribute, so it is a genuine measured split. Medical purchases are untaxed and adult-use purchases are taxed, which is a behavioural driver of the split and not only an accounting one.
Basis — Retail sales summed from row-level Market Sales Data
- Measurement
- measured
- Money
- unstated
- Tax
- excl
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
The regulator's own words: Medical purchases are untaxed; adult-use purchases carry sales tax, which MCA's figures exclude.
Why an axis above reads unstated: The workbook's Notes sheet is MCA's revision log, not a methodology statement, and no sheet says whether the Total Price column is gross or net of discounts. gross-vs-net is therefore unstated; tax treatment is not. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Basis — Total dispensary sales, recovered from chart geometry
- Measurement
- chart_derived
- Money
- unstated
- Tax
- unstated
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical
Why an axis above reads unstated: The chart PDFs carry a title and an axis and nothing else — no methodology, no tax note, no gross/net statement anywhere in either file. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Derivation. value[month] = the rotated dollar label whose x-centre is nearest that month's axis label Error: None introduced: the labels are exact printed dollar figures. The risk is mis-JOINING a label to the wrong month, which the 30pt x-position assertion and a contiguity check on the extracted months guard against — a failure raises rather than mis-sequences..
Basis — Bud price per gram, derived from MCA's Volume Data sheet
- Measurement
- derived
- Money
- unstated
- Tax
- excl
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
Why an axis above reads unstated: Same as mca_rows: gross-vs-net is not stated anywhere in the workbook. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Derivation. price_buds_g = sum(Total Price) / sum(Quantity Sold) over Volume Data rows with Unit of Measure = g, Product Type = Flower and Product Category in {Flower, Buds} Error: Eight flower rows across the whole series are filed in lb or oz and fall out of the basket entirely — $6,512.31 in total, against a flower channel worth $56.3M in 2026-06 alone. They drop from numerator and denominator together, so the price stays internally consistent; only the basket composition wobbles..
Basis — Programme counts, monthly
- Measurement
- measured
- Money
- not_applicable
- Tax
- not_applicable
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
Sources 2
| Role | Source | Format | From | Last verified | Note |
|---|---|---|---|---|---|
| Canonical | MCA Dashboard Data Download (monthly xlsx, 16 sheets) Maryland Cannabis Administration | xlsx | 2023-01 | 2026-08-15 | Every edition contains the FULL history back to 2023-01, so each run rebuilds the whole series and absorbs MCA's own revisions for free. No rolling window. |
| Cross-check | MMCC archived 'Dispensary monthly sales' chart PDFs Maryland Medical Cannabis Commission (MCA's predecessor) | 2020-12 | 2026-08-15 | Never averaged with the canonical figure. Nothing to reconcile: this is the PREDECESSOR-ERA SPINE, not a check on the canonical. It supplies 2020-12 … 2022-12, a window the workbook does not reach, and the two never overlap. It is recorded here because the schema has no 'predecessor' source role and the alternative was leaving 25 published months with no declared source. Extracted annual totals ($550,556,738 for 2021 and $510,559,356 for 2022) match independent industry reporting. |
Why each marker above says what it says
| Metric | Marker | Why |
|---|---|---|
| Retail sales | Partly comparable | Maryland's figures exclude sales tax and are summed from row-level sales data. DC's report states no basis at all, so the two lines are not guaranteed to be measuring the same dollar even though both are licensed retail by calendar month. |
| Medical / adult-use split | Partly comparable | A genuine split, taken from a per-transaction customer-type flag rather than a licence attribute. But it is a split of a two-channel market against DC's single-channel one: Maryland's medical programme is shrinking as adult-use absorbs the same customers, so a medical-to-medical comparison answers a slightly different question each year. Adult-use is a declared gap, never a zero, before 1 July 2023. |
| Price per gram | Like-for-like | Matched to DC on BASKET, not on field name: price_buds_g, narrowed to the Flower and Buds categories, because Maryland's whole Flower product type also contains Raw Pre-Roll and Shake/Trim while DC's Flower/Bud row does not. Using the wider basket moves the Maryland line about 2%. Maryland's price excludes sales tax; DC's tax basis is unstated. |
| Per capita | Partly comparable | Maryland has roughly nine times DC's population, so every dollar figure is divided by each jurisdiction's own residents before being set side by side. Unlike DC, Maryland's buyers are overwhelmingly its own residents, so the two per-resident figures are not distorted in the same direction. |
| Patient counts | Not like-for-like | Maryland publishes a current registered stock that falls as patients migrate to adult-use; DC publishes a cumulative registration count that only rises. Different measures, no shared axis — shown as a labelled pair instead. |
| Licence counts | Not like-for-like | Maryland's licence figures are a point-in-time snapshot by licence type, not a monthly series, so there is nothing to chart against DC's eight months of retailer counts. |
| Tax revenue | Not like-for-like | The MCA workbook carries no tax revenue figure. Maryland's adult-use excise is reported by the Comptroller, which is a different source on a different basis and is not ingested here. |
What is checked on every run 3
| Check | Kind | Last result |
|---|---|---|
| Product-type sales sum to the channel total, per channel, per month. | identity | pass |
| MCA's own Year to Date Market Sales against our summed months. | cross source reconciliation | 6 notices: 2025-03 and 2025-08 … 2025-12, the cumulative-since-launch window. |
| The 2020-12 … 2022-12 months have no independent decomposition to check against. | unchecked | Not cross-checked. The MMCC source is a chart with one bar per month and no breakdown of any kind, so there is nothing in the artifact to reconcile a month against. The only checks available are structural — label counts match, each label is within 30pt of its column, the months are contiguous — plus the annual totals agreeing with independent industry reporting. |
The regulator's own notes, and what is still open
The regulator's own notes
Maryland's figures exclude sales tax; DC's reports do not say either way, so neither line is necessarily what changed hands at the register.
— dccannabisdata.com compare page
Open questions on this data
Unresolved definitional questions that gate something. Listed because a question nobody can see is a question nobody closes.
- Is MCA's Total Price column gross, or net of discounts? Closing it needs: Ask MCA, or find a methodology statement outside the workbook. The Notes sheet is a revision log and says nothing about it.