Mapping the Price of Weed: An Interactive Visualization of Marijuana Sales


During a recent walk through the Tenderloin in San Francisco, a man asked me if I wanted to “trade a joint for a cigarette.”

This struck me as an odd proposition. Sure, California has no shortage of marijuana—there’s an entire Wikipedia article about cannabis in California, after all—but is it so prevalent that it’s cheaper than cigarettes? A pack of 20 cigarettes costs a little under $7 in California, or around 35 cents a cigarette. Could a joint cost so little?

 Mapping the Price of Weed

For obvious reasons, collecting data on marijuana prices isn’t straightforward. Rather than relying on rigorously collected yet sparsely populated datasets like those collected through academic case studies, I instead turned to the biggest database of marijuana sales on the web: allows users to anonymously log marijuana purchases, inputting how much they bought, of what quality, at what price, and in what location. By scraping the website for all U.S. transactions from the start of 2012 through October 2, 2013, I was able to collect a dataset of nearly 130,000 individual sales. Though there are clear problems with user-inputted data—especially with regards to illegal substances—the size of the dataset likely smooths out a good bit of the noise and misreporting.

All 130,000 sales can be visualized, manipulated, and filtered in the interactive graphic below. Simply drag over selections in the bar charts to filter data, and see how average prices change by state.

Click the map to see the interactive visualization


 A Joint for a Cigarette?

As the graphic shows, by national standards, marijuana is quite cheap in California. At an average price of $229 an ounce, a joint — which typically contains about 0.5 grams, or 0.018 ounces, of marijuana — costs about $4. While that’s cheaper than the average nationwide price of $5, it’s considerably more than a 35-cent cigarette.

But I was in the Tenderloin—maybe I was being offered a lousy joint. That’s not sufficient either: Low-quality marijuana in California costs an average of $206 dollars an ounce, or $3.60 a joint. (Interestingly, unlike above, this is higher than the national average. This perhaps suggests that Californians expect higher quality marijuana than most Americans, and judge what would be considered good marijuana elsewhere as poor.)

If low-quality marijuana doesn’t explain the proposed deal, maybe I’m not giving the Tenderloin enough credit. Maybe the man purchased his joints elsewhere in the state, and was a cunning arbitrageur taking advantage of market inefficiencies.

That’s possible — among cities with at least 20 sales, 21 of the 30 cheapest are in California. This includes the cheapest city in the country — Madera, at $129 an ounce. Still, even at that price, a joint would cost about $2.30.

city prices

What if he was arbitraging low-quality marijuana? The cheapest low-quality marijuana in the country comes from Bakersfield, CA. At an average price of $75 an ounce, however, Bakersfield’s joints cost $1.35—still four times the cost of a cigarette.

But even that may not be going far enough. As a dealer, he could be getting volume discounts, if they exist. Because distributors who hold large quantities of marijuana are subject to harsher penalties, such discounts may not apply to illegal drug trade.

Despite this, it turns out that drug markets still behave more or less normally. In the 1,162 cities for which there are at least 20 transactions, average per ounce prices are about $50 cheaper for every additional eighth of an ounce purchased. Evidently, the efforts and risks required to find more buyers are more costly than the danger of holding additional inventory.

price and quantity

This leaves me with two possible conclusions. The man was either a brilliant businessman, offering me low-quality weed purchased in large quantities, and imported from Bakersfield, or it was a joint full of oregano. But wait…

 Data and Code

The data for this post was scraped from using a Python script. The data was uploaded and analyzed into a PostgreSQL database. Charts were made in Excel, and the map is powered by D3 and Crossfilter. The scraper, data, charts, visualization code, and Javascript assets can all be found in this Github folder.

I’m always looking for new datasets and cool problems to write about. If you have questions that you think could be answered with data — on topics ranging from what motivates politicians’ votes to San Francisco parking and Hyperloops—I’d love to hear new ideas. Feel free to reach out at


Now read this

Are the Playoffs Taking Forever?

We’re over ten days into this year’s NBA playoffs, and several of the opening series have made it all the way to…Game 5. The NHL playoffs, which are entering their third week but only the second round, are also in no apparent hurry. So... Continue →