How Strainline calculates cannabis prices
Strainline is a cannabis price index built from licensed-dispensary menus. Every figure on the site is an observed price, dated, and ranked cheapest first with zero paid placement. This page explains exactly how the numbers are produced.
Where the data comes from
We collect in-stock product prices directly from the public menus of licensed cannabis dispensaries across California and Oregon, refreshed daily. Each observation is a real listed price for a real product at a real store, captured with a timestamp. We do not model, estimate, or impute prices, and we never accept payment to change a price or a rank.
Median, not average
The headline figure for any market, category, or strain is the median price, the middle value once every observed price is sorted. Cannabis prices have a long upper tail (a few boutique products cost many times the typical price), which pulls a simple average upward and misrepresents what most shoppers actually pay. The median is the price a typical buyer sees.
Alongside the median we publish the typical range (25th to 75th percentile), the band that the middle half of prices fall within, plus the lowest and highest observed prices. The band is what keeps the median honest: it shows how tightly or widely prices are spread, so a single number is never mistaken for the only price.
Normalized prices, familiar units
To compare prices fairly across products of different sizes, we normalize to a common basis: per gram for flower, pre-rolls, and concentrates, and per mg of THC for edibles. Ranking and trend math always run on the normalized basis, so a bulk ounce and a single gram are compared on equal terms.
Where it helps a shopper, we also show the price in the unit people actually buy, such as the median price of an eighth (3.5g) of flower. We never compare an eighth in one place to an ounce in another on raw package price.
How we measure price movement
Trends compare rolling 30-day and 90-day windows of observed prices, grouped by day. We describe only what already happened (for example, prices down 4% over the past 30 days) and never predict future prices. Historical figures are frozen as they were observed: a store closing or a product selling out later does not rewrite the past.
When we hold back a number
A statistic is only as trustworthy as the sample behind it. When a place or product has too few observations or too few distinct dispensaries in a window, we suppress the precise median, the percentile band, and any trend, and either show a clearly labeled limited-data note or roll the answer up to the broader geography (city to region to state). We would rather show fewer numbers than a confident-looking figure built on a handful of listings.
Every stat is accompanied by its sample size, the number of price observations and the number of distinct dispensaries behind it, so you can judge the figure for yourself.
Freshness
Menus are scraped at least daily per dispensary, and the price index is recomputed daily. Every price-index page carries an “updated” date derived from the data itself, the most recent verification behind the figures shown, never the moment the page happened to render. See the freshness policy for the exact promise.
Honest coverage
Strainline reports the market it can observe, the licensed dispensaries whose menus we track, not a claim to cover every store in a state. As more dispensaries come online they fold into the index automatically. We say what we track and how many, and let the sample sizes speak.
Independence
Rankings are computed only from price, product tier, weight, and cultivation method. No dispensary or brand can pay to rank higher or to change a displayed price. Any sponsored placement, if ever shown, is labeled and kept entirely separate from the cheapest-first results.