Cannabis Data Project
Questions & method

How this site works, and how it is checked

Questions readers actually ask

Where do these numbers come from?

Every figure on this site is read from a file the jurisdiction's own regulator published — a tax bulletin, an open-data table, a dashboard export, a report. Nothing is estimated or modelled, and nothing is taken from press coverage. Each state page ends with a Where these figures come from section listing that state's sources, with links, and stating how each figure was derived from them. A few states publish no figures of their own and instead point to a private vendor's; every chart and tile carrying such a series is labelled vendor data, not state-published, because it is not the state speaking.

How often does the data update?

On each regulator's own schedule, which varies widely: some publish within days of a period closing, others a quarter or more after it, and some revise on no fixed schedule at all. Every page's masthead carries a Latest data stamp saying how current that page is, and when a source has fallen materially behind its own publication cadence, the page says so in a banner rather than leaving you to notice. There is no single site-wide refresh date, because pretending the states move together would misstate most of them.

Why did a figure change after I first saw it here?

Because the regulator changed it. States revise published figures: late filings arrive, errors are corrected, and occasionally a whole series is restated. This site re-reads each source on that source's cadence and renders what the file says now, so upstream revisions are absorbed rather than frozen at first sight. Where the regulator publishes notes about its own data, those notes are reproduced on the state page's sourcing section.

Why do some states show no dollar sales at all?

Because no dollar figure exists in what those states publish. Alaska taxes cannabis at the cultivation stage, by weight, so no agency there measures retail dollars. New York publishes sales dollars once a year, as labels on a chart, with no monthly series behind them. Where the money figure does not exist, this site shows what does exist — tax receipts, volumes, licence counts — and states why the rest is absent, instead of working a dollar figure back from a tax rate. A derived guess would look exactly like a measurement, which is why there isn't one.

Why is Florida measured in THC weight instead of dollars?

Florida's medical programme reports what its statute meters: the amount of active ingredient dispensed. The Office of Medical Marijuana Use publishes dispensation in milligrams of THC — ounces for smokable flower — and no dollar sales at all. The Florida page charts what OMMU publishes and totals it in kilograms, because that is the scale a week of statewide dispensing reaches. Converting THC weight into dollars would require a price Florida does not publish.

What does a blank cell or a “not reported” note mean — why not just show zero?

A zero is a claim: it says the market existed and sold nothing. A gap is a different claim: the regulator published nothing for that period, or suppressed it, or the channel did not exist yet. Confusing the two would put a false number on the page, so a gap on this site is rendered as a gap, with the specific reason beside it. Nothing is interpolated or smoothed to make a chart look continuous.

Two states both show monthly sales. Can I compare them directly?

Only where the compare page joins them — and where it refuses, the refusal comes with its reason. States define their figures differently: gross versus net of discounts, calendar month versus filing period, dollars measured at the till versus dollars derived from tax, price baskets that do or do not include pre-rolls and shake. Each state page declares its own basis, the compare page joins jurisdictions only on figures whose declared bases line up, and each included state's caveat is printed in full under the chart. A chart that quietly mixed those definitions would look more complete and be less true.

How we produce and check our numbers

The falsification rule

The short version: every number is derived from the regulator's own file, and every automated check that guards a number is made to fail on purpose — against a planted defect — before its passing is believed.

Derived, never typed

These pages are generated. The build tool refuses to bake a figure into a page: every number you see is written into the page from the state's data file, and that file is produced by a pipeline reading the regulator's published artifact. A sentence that quotes a statistic must trace to the data document it describes — an automated scan walks the prose of every page checking exactly that, and a figure it cannot corroborate blocks the build.

Checks that have been seen to fail

A check that has only ever passed might be checking nothing — a mistyped rule, a wrong path, a condition that can't occur will all pass forever, silently. So before a check here is trusted, it is pointed at a copy of the data or code carrying the exact defect it exists to catch, and it must catch it. Only after failing for the right reason does its pass count as evidence.

Planted defects, on purpose

The same idea, systematised: for each state's pipeline, a harness plants small deliberate defects — a shifted digit, a dropped period, a broken sum — into a scratch copy, and the state's checks must flag each one. A planted defect that sails through means a real one could too, and is treated as a failure of the checks, not a curiosity. The scratch copy is fenced so the real data is untouched.

What this cannot prove

These checks prove that the site agrees with what the regulator published; they cannot prove the regulator is right. Where a state's own publications disagree with each other, both figures are shown and the disagreement is stated — South Dakota's stub page exists precisely because the state's own two pages disagree, and Ohio's newest weeks ship with their failed sum identity disclosed rather than smoothed. And where a check's coverage has a known limit, the limit is written down next to the check rather than left to be discovered.

This method is not ours

Planting defects to prove your tests can catch them is an established software-engineering technique, not something invented for this site.

  • R. A. DeMillo, R. J. Lipton and F. G. Sayward, “Hints on Test Data Selection: Help for the Practicing Programmer”, IEEE Computer, 1978. The paper that introduced mutation testing — the plant-a-defect technique described above. Paper.
  • Goran Petrović and Marko Ivanković, “State of Mutation Testing at Google”, ICSE-SEIP 2018. The same technique run at industrial scale, applied across Google's own codebase. Paper.
  • Kent Beck, Test-Driven Development: By Example, Addison-Wesley, 2002. The red-green discipline: watch a test fail before you trust it passing.

The markets you cannot see yet

18 jurisdictions, each with its own page

Cannabis is legally sold in more US jurisdictions than this site can chart, because a market can exist without its regulator publishing a usable series about it. Those jurisdictions are not skipped silently: each has its own stub page stating the programme status, exactly what is not published, why there is no page — and, where one exists, the named event that would change the answer. The list below is that record, condensed.

Actively being worked on

Absence is not the end of the story. Where a path to the data exists, it is being pursued — in priority order:

  • Missouri — first in line. The regulator's dashboard has the data; what is missing is a fetch path sturdy enough to trust unattended, and a decision to accept the browser-automation dependency that would need. That decision is open, not refused.
  • Puerto Rico — a multi-year series exists behind a licensing clause in the regulator's material. The clause is under legal review before anything is republished; publishing first and asking afterwards is not how this site handles a licence it has not read.
  • Arkansas — the state holds the data and publishes none of it, so the path is a standing public-records request to the finance agency, which is being prepared rather than already filed.

Every other jurisdiction below is on a standing watchlist: its named trigger — a first report series, a statutory report coming due, a portal going live — is re-checked periodically, and the day a regulator starts publishing, that jurisdiction enters the same build pipeline as every full page here.

This list is generated from the stub pages' own records on every build. When a state graduates to a full page, its row leaves this list automatically — and the build refuses to keep an “actively working on” claim about a market that is no longer missing.

Publication notices

Know when a new month of figures is added — no email address, no account.

Follow the feed

Paste this address into any feed reader and a new entry appears each time a month of figures is published. Nothing is stored about you, and there is never advertising.

https://cannabisdataproject.com/feed.xml

New to feeds? A reader such as Feedly, Inoreader, NetNewsWire or Thunderbird checks the address for you and shows new entries as they appear.