At a glance
Where the market is heading
Adult-use is sales to any adult 21+. Medical is sales to registered patients. Adult-use retail opened 20 November 2018, the first on the East Coast; medical dispensing began three years earlier, but the Commission's data starts with the adult-use launch, so the medical line here is where the records begin and not where the programme did.
Monthly sales by channel
April 2020 is real. Adult-use retail was closed for the COVID shutdown and took $2,768 across the whole month, against $50.3m in March. Medical was allowed to stay open and took $22.8m. The dip is drawn rather than smoothed, because it is what the Commission published and because it is the single clearest thing in this chart about how the two channels differ.
The latest month shown is always a complete calendar month. The Commission refreshes its file most days, so the month in progress is deliberately held back rather than drawn as a collapse.
Who is buying
Massachusetts publishes its two channels as two separate extracts carrying an industry flag set per transaction, so this is a genuine measured split rather than an inference from what kind of licence a shop holds.
Retail dollars by channel
What is selling
Adult-use, by product type
Medical, by product type
What a gram of bud costs
Massachusetts reports dollars and grams side by side for each product category, so a price per gram can be worked out from the state's own figures. Buds is the Commission's own category and it is bud alone — shake, trim and both kinds of pre-roll are counted separately — which is what makes this line comparable with DC's and Maryland's.
Average price per gram
Three lines, and the third is a check on the first. The Commission publishes its own average retail price per gram. We derive ours by summing the underlying rows, the way we do for every state, and show theirs beside it. Across all 93 months the two agree to within six cents and ours is always the lower; the Commission publishes no methodology, so the difference is reported rather than explained away.
Prices are for bud sold by weight. The tax basis is not stated anywhere in the Commission's data, so whether these figures include the 10.75% excise and 6.25% sales tax is unknown and is not guessed at.
Questions about this data
Why does June 2026 not show a record month?
Because it was not one. The Commission's file labels each row with the extract batch it arrived in rather than with a sales period, and on two June dates the same day arrived twice — once in a batch that counts every transaction's dollars twice over. Summed naively, June 2026 comes to $156.4 million and reads as an all-time high; several outlets published that figure. De-duplicated it is $139.8 million, which is $4.66 million a day and sits smoothly between May's $4.65 million and July's $4.82 million.
How do you know which copy of those days is the right one?
The two copies disagree in a specific way. Dollars and grams are sums and they come out at almost exactly two to one; receipts are a count of distinct sales and they come out equal. That is what happens when the same transactions are counted twice, and it is not what happens when two genuinely different sets of sales are added together. The copy we keep also shows an average basket of $34.89, in line with the days either side; the copy we drop shows $69.80.
Does this match the Commission's own published totals?
Every one we could find. The Commission announced passing $9 billion in cumulative adult-use sales on 4 February 2026, with $151 million so far that year; it reported $1.65 billion for calendar 2025 and $1.57 billion cumulative medical. All four agree with the figures on this page, and the $9 billion threshold is crossed on exactly the day the Commission named. None of them reaches June 2026, which is why the de-duplication above rests on the structure of the rows instead.
Why is there no patient count?
Massachusetts does not publish one. The Commission's data catalogue lists fifteen datasets — sales, licences, applications, agent demographics and testing — and none is patient-related. Seven likely endpoint names were also tried directly and each returned a genuine 404 in a run where a known-good file downloaded normally. So it is not published here, rather than published somewhere we did not look hard enough.
Are these figures before or after tax?
Not stated. Massachusetts charges a 10.75% excise plus 6.25% sales tax on adult-use and exempts medical, but the Commission's data platform carries no data dictionary and no methodology note — a full-text search of both of its open-data pages returns nothing for tax, excise, gross, net, discount or definition. Reasoning from the tax code to an answer would be a guess, so the basis is recorded as unstated.
How many shops are open?
This page counts licences, not open storefronts, and the two are not the same: a licence can be active without the business trading. There are 949 active licences across every type, of which 457 are retailers. The Commission's licence files carry business email addresses, phone numbers and tax identification numbers, so they are aggregated to counts and never republished.
Dispensaries and licences in Massachusetts — 948 active, of 963 licence records, from Massachusetts Cannabis Control Commission.
Where these figures come from
Sourcing, basis and comparabilityMedical dispensing began in 2015 under the Department of Public Health; adult-use retail opened on 20 November 2018, the first on the East Coast. The Cannabis Control Commission now regulates both and publishes them in one schema, so the medical/adult-use split is a genuine per-transaction industry flag rather than a licence attribute. The CCC's open data begins 2018-11, three years after medical sales started, so this page's medical line is a data floor and not a start date.
Basis — CCC daily sales extract, summed to calendar months
- Measurement
- measured
- Money
- unstated
- Tax
- unstated
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
The regulator's own words: The word 'gross' appears only in the CCC's own filenames -- a_sales_au_gross.csv and a_sales_mtc_gross.csv -- and in press-release prose ('gross adult-use sales', '$1.57 billion in gross patient sales'). The data-catalog page that links those files titles them 'Marijuana Establishment Facility Sales and Statistics' and 'Medical Treatment Centers - Facility Sales', without the word. Nothing anywhere defines what it excludes.
Why an axis above reads unstated: Checked negative, re-run on every build and reproducible by anyone: `python pipeline.py --offline` re-searches the mirrored corpus under raw/basis/ and regenerates this sentence from the counts, so the claim cannot drift from its evidence. Run date is sources.canonical.verified_on. Corpus: both CCC open-data pages (data-catalog.html, 128,081 bytes, open-data.html, 123,468 bytes) plus all 5 processing scripts the data-catalog page links under '2025 Industry Report'. Needles: 'tax', 'excise', 'gross', 'net of', 'discount', 'exclud', 'methodolog', 'definition', 'data dictionary'. ZERO hits for 'excise', 'net of', 'discount', 'exclud', 'methodolog', 'definition', 'data dictionary' across every artifact. NOT zero, and stated rather than rounded down to zero: 'tax' x1 in adultMedical_MEs_processing.Rmd; 'tax' x1 in facilitySales_processing.Rmd; 'tax' x1 in monthlyPrice_processing.Rmd; 'tax' x1 in testing_processing.Rmd; 'gross' x4 in data-catalog.html; 'tax' x1 in open-data.html. Every one of those hits is plumbing, not a definition: the 'gross' hits are the dataset download URLs a_sales_au_gross.csv/.json and a_sales_mtc_gross.csv/.json, the page 'tax' hit is the sentence 'This safely regulated industry will contribute through economic development, job growth, and tax revenue', and every script 'tax' hit is the substring inside the filename 'Data_syntax.Rproj'. So the platform is NOT silent -- it publishes 5 processing scripts, and saying otherwise was the round-1 error -- but those scripts define date parsing and category rollups over a column set that only partly overlaps the live extract. Measured against the CURRENT header on every run, not recalled: 4 of the 12 live columns are spelled identically in those scripts (SaleDate, Industry, ProductCategoryName, UnitOfMeasureName). The naming is therefore NOT wholesale superseded -- the 2026-08-18 re-casing moved the live spelling TOWARDS the scripts, and a sentence written before it claimed a mismatch that no longer exists. What the scripts compute money and counts from is the real gap: CountBasedTotal, DollarCountBasedTotal, DollarWeightBasedTotal, WeightBasedTotal occur in the scripts and in no live column, and the live money and count columns (Quantity, Units, TOTAL_$, Receipts) occur in no script. So the scripts cannot be read as a dictionary for the extract's value columns, and -- the point the flags rest on -- not one of them says whether a dollar figure is gross of discounts or whether it carries tax. What IS still absent, and is what the flags rest on: no artifact in this corpus is a data dictionary or links to one, and the 7 needles listed above as ZERO -- which include 'data dictionary', 'methodolog', 'net of', 'discount' and 'excise' -- do not occur anywhere in it. Massachusetts levies a 10.75% excise plus 6.25% sales tax on adult-use and exempts medical, but reasoning from that to a flag value is exactly what ANCHORS 6 forbids -- so money and tax both stay unstated. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Basis — Bud price per gram, derived from paired CCC dollars and grams
- Measurement
- derived
- Money
- unstated
- Tax
- unstated
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- adult_use
The regulator's own words: SOURCED. The CCC's own processing script medical_market_data_processing.Rmd -- published on the data-catalog page under '2025 Industry Report' as one of the 'corresponding processing scripts', mirrored at raw/basis/methodology/ -- sets out the Commission's category taxonomy verbatim. In its 'clean up product categories' chunk 'Buds' maps to itself: `ProductCategoryName == "Buds" ~ "Buds"`, while `"Shake/Trim"` and `"Shake/Trim (by strain)"` are grouped separately as 'Shake/Trim' and `"Raw Pre-Rolls"` and `"Infused Pre-Rolls"` each keep their own label. Its next chunk, 'create broader categories', then rolls Buds, Shake/Trim and Fresh Frozen Flower up into a BROADER category the CCC calls 'Flower', and sends Raw Pre-Rolls and Infused Pre-Rolls to a separate broad category 'Pre-Rolls'. So the regulator itself distinguishes whole bud from the wider flower grouping, and this page's basket is the narrow one -- which is precisely the DC / Maryland distinction ANCHORS 5 records as the price_flower_g trap, stated by the source rather than inferred by us.
Why an axis above reads unstated: money and tax only; inherited from ccc_daily and the same checked negative applies. The BASKET axis is no longer unstated -- see source_statement. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Derivation. sum(TOTAL_$) / sum(Quantity) over ProductCategoryName='Buds' and UnitOfMeasureName='g' Error: No unit conversion and no assumed constant: the source already reports these rows in grams. The only judgement is the basket, and the basket is the CCC's own category label..
Basis — The CCC's published average retail price per gram
- Measurement
- measured
- Money
- unstated
- Tax
- unstated
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- adult_use
The regulator's own words: The data-catalog page titles this file 'Average Monthly Price per OUNCE for Adult-Use Cannabis' while the file's own column is AVERAGERETAILPRICEPERGM and its UNIT column reads 'Grams' on all 93 rows. The file wins -- the values track a per-GRAM series to $0.061 max against our own derivation, and are two orders of magnitude away from a per-ounce figure -- but the catalog title is wrong, and a reader who took it at face value would be out by 28.35x. Recorded because it is the same class of source mislabel as ABCA's Feb-2025 report titled JANUARY 2025.
Why an axis above reads unstated: Inherited from ccc_daily; the same checked negative applies. An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Basis — CCC licence register, counted
- Measurement
- measured
- Money
- not_applicable
- Tax
- not_applicable
- Period
- point_in_time
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
Sources 2
| Role | Source | Format | From | Last verified | Note |
|---|---|---|---|---|---|
| Canonical | CCC Open Data - gross sales extracts (adult-use and medical) Massachusetts Cannabis Control Commission | csv | 2018-11 | 2026-08-23 | Two files, one dataset: a_sales_au_gross.csv (Industry='Adult-Use') and a_sales_mtc_gross.csv (Industry='Medical'), identical 12-column schema. a_sales_au_deliveries.csv is a strict SUBSET of the adult-use file -- all 33,994 of its rows are the delivery-typed rows already present -- and is deliberately NOT ingested, because adding it would double every delivery dollar. |
| Cross-check | CCC Open Data - Adult-Use Average Retail Price per Gram Massachusetts Cannabis Control Commission | csv | 2018-11 | 2026-08-23 | Never averaged with the canonical figure. Max |diff| $0.0610 at 2022-09, mean |diff| $0.0308, across all 93 months. Signed, it runs $-0.0029 to $0.0610 with a mean of $0.0307, and it is NOT one-signed: the published figure is the higher in 92 of 93 months and the lower in 1 (2020-04, worst $-0.0029 at 2020-04). Unexplained -- the CCC's published scripts never state how it is computed -- so it is reported, not fitted away. |
Why each marker above says what it says
| Metric | Marker | Why |
|---|---|---|
| Retail sales | Partly comparable | Massachusetts reports measured daily transactions summed to calendar months, which is the closest of any state to the anchor definition. But the Commission's published methodology covers date parsing and category rollups only and never says whether a dollar figure is gross of discounts or whether it carries the 10.75% excise and 6.25% sales tax, so both are unstated -- the same silence DC's report has, and two silences are not a match. |
| Medical / adult-use split | Partly comparable | A genuine split: the two channels are two separate extracts carrying an Industry flag set per transaction, not a licence attribute. The caveat is the floor, not the split -- medical dispensing began in 2015 and the Commission's data begins in November 2018, so the medical line here is three years shorter than the programme and its early share cannot be compared with a state whose medical history is complete. |
| Price per gram | Like-for-like | Bud-only and matched to DC and Maryland on basket, not on field name, and the Commission's own published processing script says so rather than us inferring it: medical_market_data_processing.Rmd keeps Buds as an atomic category, groups Shake/Trim separately, leaves Raw Pre-Rolls and Infused Pre-Rolls with their own labels, and rolls Buds + Shake/Trim + Fresh Frozen Flower up into a BROADER category it calls Flower while sending pre-rolls to a separate one. The basket therefore excludes what Maryland's flower TYPE wrongly includes, on the regulator's authority. The tax basis is unstated, unlike Maryland's ex-tax figure. Held off the cross-state chart by an open question, not by a data problem: DECISIONS Q7 excludes Massachusetts as all-product, and that premise is falsified above. Blocked until ma_q7_basket_reclassification is resolved, whatever the status above says. |
| Per capita | Partly comparable | Per-resident figures inherit every flag on the numerator, so the unstated money and tax basis travels with them. Two population vintages are spliced because this series predates Vintage 2025's first year: 2018 and 2019 come from Vintage 2020. |
| Patient counts | Not like-for-like | Massachusetts publishes no patient or registry dataset. The Commission's catalog enumerates fifteen endpoints -- five sales, four licence and application, two agent demographic, two testing -- and none is patient-related; seven plausible endpoint names were probed directly and each returned an honest 404 in a run where a known-good control file returned 200. That is a checked negative, so treat it as not found rather than proven not to exist. |
| Licence counts | Partly comparable | Counts only. The Commission's licence extracts carry BUSINESS_EMAIL, BUSINESS_PHONE and EIN_TIN on every row, so they are aggregated in memory and never mirrored. The count is of licences, not of open storefronts: the register includes provisional and final licences across every type. |
| Tax revenue | Not like-for-like | The Commission publishes no tax dataset. Massachusetts Department of Revenue reports a marijuana excise line in its monthly collections, and this file does NOT ingest it: no DOR artifact is fetched, mirrored or declared as a source here, so no figure from it is quoted and no reconciliation against it is claimed. What this parse can say is what the statutory 10.75% would imply from the sales it does hold - $15.5M from 2025-07 adult-use and $14.7M from 2025-06 - and that DOR's line is a different base on a different accrual. Adopting it without establishing what it measures would be exactly the unsourced conversion this project forbids. |
What is checked on every run 4
| Check | Kind | Last result |
|---|---|---|
| Every figure the CCC has published about its own sales data, against this parse. | cross source reconciliation | cum_9b=pass (computed $9,001,042,180.50); ytd_2026=pass (computed $151,075,098.72); cy2025=pass (computed $1,651,850,578.77); cum_mtc=pass (computed $1,567,134,969.97) |
| Derived bud $/g against the CCC's own published price-per-gram file. | cross source reconciliation | pass |
| After de-duplication, no date's average basket may exceed 1.40x the median of its surrounding 15 days. | shape assertion | pass |
| The medical/adult-use split has no independent decomposition to check against. | unchecked | Not cross-checked. The split is structural: the two industries are two separate files, so their totals cannot fail to sum to the total by construction. Nothing in the CCC's data reconciles the split against an outside measure, and unlike DC's headline this one is not over-determined. Saying so is the point. |
The regulator's own notes, and what is still open
The regulator's own notes
Massachusetts publishes daily rows labelled with the extract batch they arrived in, not with a sales period. Two dates in June 2026 arrived twice, and one of the two copies counts every transaction's dollars and grams twice over while counting its receipts once. This page keeps, for each date, the batch with the most receipts -- the measure that does not inflate when a transaction set is duplicated -- and drops the other. Without that step June 2026 reads as a $156.4M record month; with it, it reads as $139.8M, which is the figure that fits the days either side of it. — This site's method note
The parse is checked against every sales figure the Commission has itself published: $9 billion cumulative adult-use and $151 million year-to-date, both as of 4 February 2026, $1.65 billion for calendar 2025, and $1.57 billion cumulative medical. All four agree, and the $9 billion threshold is crossed on exactly the day the Commission named. None of them reaches June 2026, which is why the de-duplication above rests on the structure of the rows rather than on a published total. — Cannabis Control Commission press releases, 2026-01 and 2026-02
Open questions on this data
Unresolved definitional questions that gate something. Listed because a question nobody can see is a question nobody closes.
- DECISIONS Q7 excludes Massachusetts from the cross-state price chart on the ground that its price series is all-product. Is that ground still standing? Blocks: price_per_gram. Closing it needs: Chris reopens Q7, or confirms the exclusion on some other ground. This file declares the honest flags and gates itself out of the chart meanwhile; it does not overrule a binding decision.
- What does the Receipts column count -- transactions, or receipt-lines within a product category? Closing it needs: Ask the CCC. There is no data dictionary on the platform.
- Are the CCC's 'gross sales' figures gross of discounts, and do they include the 10.75% excise and 6.25% sales tax? Closing it needs: Ask the CCC, or find a basis statement outside the open-data platform. The five processing scripts the platform DOES publish were read and are silent on it.