At a glance
Totals over the range selected above. The sales figures come from the State of Illinois' own public data server; the tax figure comes from the Department of Revenue and covers a much shorter window, for the reason set out further down.
Where the market is heading
Medical is sales to registered patients and runs the whole length of this chart, from November 2015. Adult-use is sales to any adult 21+ and begins in January 2020 — before that the line is a gap rather than a zero, because the channel did not exist. The state's own export prints a literal 0 for those months; publishing it would claim Illinois had adult-use shops that sold nothing.
Monthly retail sales by channel
The step down at June 2025 is a change in measurement, not in the market. Illinois moved to a new seed-to-sale system, and the Department of Financial and Professional Regulation says of it that Metrc “help[s] retailers more accurately and reliably report actual sales, including all discounts and promotions at checkout”, while a review of the old system “indicates prior months collected some pre-discount prices”. Both channels fall together at the same boundary, and every month from June 2025 to May 2026 sits below its own month a year earlier on both. Any comparison that spans this boundary is comparing two different measurements, and a year-on-year change across it is mostly this.
On adult-use, the month immediately before the boundary was above its own month a year earlier — the line turns at the boundary rather than on its way into it, which is what makes this a step and not the start of a slope.
Medical does not share that contrast: on medical, the month immediately before the boundary was below its own month a year earlier, so on that line the boundary is not where the year-on-year decline begins. Which channel a year-on-year statement is about changes the answer here, which is why each of these notes says which one it means.
The month above is measured here, not copied from the state. IDFPR dates the system go-live to the following month. This chart marks the month the shift is actually visible in the state's own published figures, which the pipeline finds by comparing each twelve months against the twelve before them; the two months are reported side by side rather than reconciled away.
What these dollars are is partly unstated. Neither the data export nor the state's own rendering of it says whether the figures include tax, and the discount question above is precisely why they cannot be called gross or net for the series as a whole. Those flags are recorded as unstated rather than guessed.
Who is buying
Illinois runs two separate programmes: the Compassionate Use medical programme, open since before this series begins, and adult-use retail since January 2020. The state publishes them as two separate measures of one chart. What it does not publish is the mechanism — nothing fetched here says whether the channel is settled per sale or per licence — so this is recorded as two programme series rather than presented as a per-transaction split.
Retail dollars by channel
What the state collects
The Department of Revenue publishes cannabis tax collections in a machine-readable workbook, split by the return they arrived on: CD-1 from dispensaries and CC-1 from cultivators. Those two lines do not add up to the total, and the gap is a third voucher type — assessments — which the workbook reports but this chart does not draw. Both of the workbook's internal identities hold exactly, so the total is taken as published rather than rebuilt from the parts.
Cannabis tax remitted to the Comptroller
Why this line is so much shorter than the sales chart. The workbook's URL contains a fiscal year, and Illinois' fiscal year starts in July; completed years move to a state tax archive whose index is built by JavaScript and exposes no file links in the page it serves. Only the current fiscal year is ingested here. The earlier months are drawn as gaps marked not ingested — they exist, on a site this pipeline cannot yet walk — rather than as absent or as zero.
This is not retail tax and it is not a sales month. The total spans the whole supply chain, cultivator privilege tax included, and the column is the month the money reached the Comptroller on returns for earlier activity. It is carried beside the sales series with its own basis label, never joined to it.
Where these figures come from
Sourcing, basis and comparabilityIllinois has run a medical cannabis programme since 2015 and opened adult-use retail to any adult 21+ at the start of 2020. Oversight is split three ways - the Department of Financial and Professional Regulation licenses adult-use, the Department of Public Health runs the medical patient programme, and the Department of Revenue administers the tax - so no single agency is 'the regulator' here, and the sales figures are published by the State's own public data server rather than by any one of them. They are NOT taken from the monthly sales PDF IDFPR publishes: that document covers adult-use only, and its rows for the middle of 2025 are printed without their resident / non-resident columns, so a line-oriented parser mis-assigns values across rows.
Basis — Monthly retail cannabis sales as published by the State of Illinois public Tableau server
- Measurement
- measured
- Money
- unstated
- Tax
- unstated
- Period
- calendar_month
- Scope
- retail_only
- Geography
- statewide
- Channels
- medical, adult_use
The regulator's own words: The publisher names the view “Illinois Monthly Retail Cannabis Sales” and labels its two measures under “Retail Category” as “Adult Use Sales” and “Medical Sales”. That title is what `scope: retail_only` rests on, and it is re-read from the rendered view on every run rather than recorded here once.
Why an axis above reads unstated: A 15-term sweep for basis language (tax, excise, gross, net, discount, exclud, includ, methodolog, note, defin, wholesale, before tax, after tax, retail price, receipt) returns 0 hits across the whole CSV export and 0 across the rendered view. Neither artifact says whether these dollars include tax or are gross of discounts, so both axes are unstated rather than assumed. `money` additionally cannot be one value for this series even in principle: Illinois' reported sales step DOWN at June 2025: the twelve months from June 2025 average 21.4% below the twelve before it on adult-use dollars, and 37.5% below on medical. Every one of the 12 months from 2025-06 to 2026-05 is below its own month a year earlier on adult-use dollars, by between 17.7% and 26.1%, where 2025-05 - the month before the boundary - was +2.4%. That is a step, not a slope, and it is a change in what the state measures rather than in what the state sold. IDFPR's own account of what changed is that Metrc “The sales tracking features in Metrc help retailers more accurately and reliably report actual sales, including all discounts and promotions at checkout.” and that a review “indicates prior months collected some pre-discount prices” - ‘some’, with no month named and no share given, which is why neither `gross` nor `net_of_discounts` describes the series and the axis stays unstated. (IDFPR, 'Illinois adult use cannabis monthly sales figures', page 1 footnote, edition dated 'Updated: July 08, 2026', fetched 2026-08-16. Quoted only; the document is not a data source here.) An undocumented basis is a gap to be labelled, never filled in with the most likely answer.
Basis — Adult-use cannabis tax collections remitted to the State Comptroller
- Measurement
- measured
- Money
- not_applicable
- Tax
- not_applicable
- Period
- filing_period
- Scope
- all_tiers
- Geography
- statewide
- Channels
- adult_use
The regulator's own words: The sheet is headed 'ADULT USE CANNABIS' and splits collections by voucher type: Assessments, CC-1 Cultivator Return and CD-1 Dispensary Return. Cultivator privilege tax is levied above retail, so the total is not a retail-only figure and the scope flag says so.
Sources 2
| Role | Source | Format | From | Last verified | Note |
|---|---|---|---|---|---|
| Canonical | State of Illinois public Tableau - CannabisSalesFigures / RetailSales (CSV export) State of Illinois | tableau | 2015-11 | 2026-08-16 | A single unauthenticated GET returning 21,270 bytes and 512 data rows in long format (Measure Names / month / Measure Values). The publisher's own name for the view, read from its PDF rendering on every run, is “Illinois Monthly Retail Cannabis Sales” with the legend “Retail Category”. |
| Cross-check | IDOR - Collections Remitted to the State Comptroller, FY2027, sheet 'Cannabis' Illinois Department of Revenue | xlsx | 2026-07 | 2026-08-16 | Never averaged with the canonical figure. Not comparable as levels at all, and not compared here: IDOR reports tax REMITTED to the Comptroller in a month, on returns for earlier activity, while the canonical view reports sales in the month they happened. The two are carried side by side with their own basis labels. |
Why each marker above says what it says
| Metric | Marker | Why |
|---|---|---|
| Retail sales | Partly comparable | Illinois' figures are measured retail dollars by calendar month, summed from the two channel measures the state publishes - the anchor construction. Two flags are unstated and stay unstated: nothing in the export or the rendered view says whether these dollars include tax or are gross of discounts. The larger caveat is that the money basis is not constant across the series. Illinois' reported sales step DOWN at June 2025: the twelve months from June 2025 average 21.4% below the twelve before it on adult-use dollars, and 37.5% below on medical. Every one of the 12 months from 2025-06 to 2026-05 is below its own month a year earlier on adult-use dollars, by between 17.7% and 26.1%, where 2025-05 - the month before the boundary - was +2.4%. That is a step, not a slope, and it is a change in what the state measures rather than in what the state sold. A comparison spanning that boundary, in either direction, is comparing two different measurements. |
| Medical / adult-use split | Partly comparable | A genuine two-channel split: the state publishes the two as separate measures of the same view, medical from 2015-11 and adult-use from 2020-01, which are Illinois' two distinct statutory programmes. What the state does NOT publish is the MECHANISM: neither the CSV export nor the rendered view says whether the channel is settled per transaction or per licence, so the split is recorded as two separately-reported programme series rather than claimed as a per-sale transaction attribute. ANCHORS 5 forbids presenting a licence attribute as a sales attribute, and the honest flag here is the one that claims neither. The 50 months before adult-use opened are gaps on that channel, not zeros, even though the source prints zeros there. |
| Price per gram | Not like-for-like | Illinois publishes no price per gram and no weight sold. Three routes were checked and all three are closed: the canonical view has two dollar measures and no quantity; the quarantined sales PDF counts ITEMS, which are packages and not grams; IDOR's workbook is money only. There is no numerator and no denominator, so nothing here is converted from a package price and no basket is claimed - including no claim that Illinois' flower is whole bud, which nothing fetched here could support. This file carries no price_meta block for the same reason: that block's `method` is required and its values all name a way of producing a price, and no method produced anything here. |
| Per capita | Partly comparable | Per-capita inherits every flag on its numerator, and Illinois' numerator has an unstated tax basis, an unstated gross/net basis, and a money basis that changes inside the series. The denominator crosses two Census vintages because the series starts in 2015: Vintage 2020 supplies 2015-2019 and Vintage 2025 supplies 2020 onward, per ANCHORS 5. |
| Patient counts | Not like-for-like | Illinois publishes a medical patient count somewhere and this pipeline cannot reach it. IDPH's medical-cannabis page points at mcpp.illinois.gov/updates.html for monthly programme data; that page was re-fetched on 2026-08-16 and its served HTML is an empty accordion shell - no figures, no month references, no file links. Recovering it needs a headless-browser render or a direct request to IDPH. This is an unreached count, not a state that does not publish one, and the distinction is kept rather than flattened. Blocked until il_patient_counts_unreached is resolved, whatever the status above says. |
| Licence counts | Not like-for-like | No licence count series is ingested. IDFPR publishes licence lookups and lists rather than a count over time, and nothing fetched here carries one. |
| Tax revenue | Partly comparable | Two caveats, and the second is the larger. First, basis: IDOR reports tax REMITTED to the Comptroller in a month, on returns covering earlier activity, and the total spans the whole supply chain - cultivator privilege tax as well as dispensary tax - so it is neither retail-only nor aligned to a sales month. Second, depth: only FY2027 is ingested here, so the series starts at 2026-07 while sales start at 2015-11. Completed fiscal years exist on a state archive whose index is JavaScript-rendered, so they are recorded as not ingested rather than as absent. |
What is checked on every run 4
| Check | Kind | Last result |
|---|---|---|
| The canonical export returns its whole body more than once. Every copy must agree with the first, cell for cell, before the duplicates are collapsed. | identity | Holds: the export's 2 copies of all 256 rows agree cell for cell. |
| IDOR's three voucher-type rows must sum to the unlabelled total row beneath them. | identity | Holds on all 1 ingested month(s); the largest residual is $0.0000 against a $0.005 tolerance. |
| Collections taken from taxpayers, less receipts into State funds, must equal the change in deposits in transit - the identity IDOR asserts itself on its 'Collections reconciled to receipts' line. | identity | Holds on all 1 ingested month(s); the largest residual is $0.0000. IDOR asserts the same identity itself on its 'Collections reconciled to receipts' line, which reads 0. |
| The headline sales series has no independent decomposition to check against. | unchecked | Not cross-checked. The canonical view publishes two channel measures and no total, no product breakdown, no county breakdown and no transaction count, so there is nothing inside it to reconcile. The only other statewide sales figure Illinois publishes is the quarantined adult-use PDF, and it is adult-use only, a different vintage, and structurally unsafe to parse. Unlike the District of Columbia, whose headline is over-determined by two independent identities in one document, Illinois' headline is checked by nothing - and the page says so rather than implying equal rigour. |
The regulator's own notes, and what is still open
The regulator's own notes
IDFPR's own account of the measurement change, quoted verbatim: “The State of Illinois went live with a new, state-of-the-art seed-to-sale, track-and-trace data system in July 2025. The sales tracking features in Metrc help retailers more accurately and reliably report actual sales, including all discounts and promotions at checkout.” and a review “indicates prior months collected some pre-discount prices”.
— IDFPR, 'Illinois adult use cannabis monthly sales figures', page 1 footnote, edition dated 'Updated: July 08, 2026', fetched 2026-08-16. Quoted only; the document is not a data source here.
The suppression registry is empty rather than speculative: on this run every one of the 512 measure values in the canonical export parsed as a number, and no fetch this pipeline has made has produced a marker. The registry being empty is what makes the unknown-marker policy bite - any non-numeric token stops the run. Two ZERO-shaped things in these sources are NOT suppression and are handled structurally: the literal 0 the export prints for adult-use before the channel opened, which becomes a channel_not_open gap; and the 0 IDOR pre-fills into every not-yet-published month column of the current fiscal year, which is excluded by reading only columns whose header cell holds a real date. — Measured over the mirrored artifacts, 2026-08-16.
The published warning about IDFPR's sales PDF was re-verified rather than trusted, and it does not hold as stated for the edition dated 'Updated: July 08, 2026': its month labels align, and across all 78 months the two sources share, the PDF's figure tracks the canonical view's same-month figure rather than the following month's. What is live is a ragged row shape in the middle of 2025, which is what makes a line-oriented parser mis-assign residency columns. The quarantine stands on that and on the adult-use-only scope; the label-shift claim is not repeated here because it did not reproduce. — Coordinate-level extraction of the mirrored PDF, 2026-08-16; dump kept at raw/poisoned/EXTRACTION-EVIDENCE.txt
Raw-source mirror, sha256 of each artifact this run read: census-NST-EST2025-POP.xlsx 20a556d397a46b48; census-nst-est2020.xlsx 6d6887ef2b398d78; idor-collections-fy2027.raw.xlsx e625e2b9347f598e; tableau-retailsales-render.raw.pdf 045bb99a1c29bf69; tableau-retailsales.raw.csv eecafa26238bc487; taxarchive-collections-index.raw.html b649dedaae2d3a26 — expansion/pipelines/il/raw/
Open questions on this data
Unresolved definitional questions that gate something. Listed because a question nobody can see is a question nobody closes.
- What is Illinois' monthly medical patient count, and on what measure - a cumulative registration total, an active stock, or a flow? Blocks: patient_counts. Closing it needs: Render mcpp.illinois.gov/updates.html with a headless browser and capture whatever data component it mounts, or request the monthly series directly from IDPH.
- Which months of Illinois' published history carry pre-discount prices, and for what share of each month? Closing it needs: Ask IDFPR for the month the seed-to-sale changeover took effect in the reported figures, and whether earlier months will be restated.
- Is Illinois' medical / adult-use split a per-transaction attribute or a licence attribute? Closing it needs: Ask IDFPR how the two measures in the CannabisSalesFigures workbook are populated from the seed-to-sale system.