Amsterdam Coffeeshop Menus 18+

Home · Prices · About & legal

How this site works

Amsterdam Coffeeshop Menus is an archive of menu prices printed by Amsterdam coffeeshops. Every price on the site was written on a menu that carries a date, and that date travels with the price everywhere it appears.

This page explains how a menu becomes a price record, how two prices are compared, and where the data stops. It is the shortest honest description of what the archive can and cannot answer. Snapshot: 2026-11-03.

Where the data comes from

The source. The archive is built from a public menu archive on the web. Every shop has a page listing its menus, and every menu entry carries a date. A read-only crawler visits those pages and keeps the prices and the date written on the page. The date is always read from the page text, never from a file name.

From menu to price record. The menu image is read by OCR into a small table: product name, price, format, and the date of the menu. The name is then normalised (lower case, trimmed, plus a short alias list for spelling variants). A price per gram is computed only when the menu prints the weight: price ÷ grams. When the weight is not on the menu, the line stays a unit price and never enters a per-gram comparison.

What we do not publish. We do not republish the menu images, and we do not link to a shop's menu from a page that sells something. The archive is a list of dated prices, nothing more.

The date is the menu date. It is not the date of the crawl, not the date the archive was rebuilt, and not the date the product is on the shelf.

No human check. Nothing is confirmed by a visit or a phone call. A doubtful line stays in the archive with a flag instead of being silently deleted.

One price record, field by field

Two real records from the archive. Every field below is copied from the menu, and nothing is filled in when the menu does not print it.

FieldRecord ARecord B
Shop Bagheera Freedom
Date printed on the menu 2026-10-20 2026-10-21
Product name (as normalised) cbd candy runtz amnesia
Format printed on the menu 1g 1g
Price printed on the menu € 6.00 € 10.00
Price per gram (price ÷ grams) € 6.00/g € 10.00/g
Genetics not printed on the menu sativa
THC printed on the menu 0.2 % not printed on the menu

What is in the archive

251shops tracked
212shops with a dated menu
9,542price records
2007-04-17earliest menu date
Counted from the catalogue snapshot dated 2026-11-03
WhatCountHow it is counted
Shops in the directory251every shop in the shop file
Shops with a dated menu212at least one menu with a date on the menu
Shops with no menu in the archive39tracked, but no menu was found
Menus listed by the source for those shops4,369menus the source directory lists, of which the archive keeps the most recent one per shop
Shops with a menu from the last 30 days20menu date within 30 days of 2026-11-03
Shops with an older menu only192prices kept and labelled as last known
Price records9,542one row per product line read from a menu
Product series8,988product name + format, per shop
Distinct product names3,754names after normalisation (lower case, trimmed), never estimated
Shops with at least one price record185of the 212 shops with a menu, 27 have no price record in the archive
Records with a price per gram6,41467.2% of all records: only where the menu prints the weight
Records sold by piece or per joint3,128compared as unit prices, never as per-gram prices
Ranked entries4,021one entry per product and variant
Earliest menu date2007-04-17oldest dated price record in the archive
Latest menu date2026-10-28newest dated price record in the archive

How a price is compared

Per gram against per gram. For weed, hash and extracts the comparison unit is the gram, and it is used only when the menu prints the weight. Joints and edibles are compared per joint and per piece. A unit price never enters a per-gram median.

One price per shop per product. Inside a group the archive keeps the cheapest price each shop printed, so a shop that lists a 1 g and a 5 g line counts once, not twice.

Variants are not mixed. A cali product and a dutch product with the same name are two separate groups. Hash is split by method (sift, ice, import) and by origin. A product is never averaged with its variant.

Packs stay separate. A 5 g pack keeps its own line and is flagged as a pack. The price pages list single grams and packs in two blocks, so a pack price is never read as a per-gram price.

Median, not average. The median published on the price pages is the middle value of the sorted prices; with an even number of prices it is the average of the two middle values. One expensive menu cannot move it, and one cheap menu cannot either.

The median is computed on fresh menus only. Only prices written on menus from the last 30 days enter the median. Older menus keep their own entry, marked as last known, and their difference to the median is shown as indicative rather than as a current discount.

The range is printed next to the median. Lowest and highest price of the same group, so a median is never shown without its context.

A worked example

Fresh entries, per gram, with the median recomputed from the same rows. For the 379 fresh groups that publish a median, recomputing the median from the raw records reproduces the published value in 379 of 379 cases.

Best price, median and range per product group (menus from the last 30 days)
#ProductVariantBest priceShop and menu dateMedianRangeShops counted
1 amnesia standard € 6.00/g Amnesia · 2026-10-06 € 9.00 € 6.00 – € 10.00 5
2 lemon cherry gelato standard € 10.00/g 7th Heaven · 2026-10-14 € 13.50 € 10.00 – € 13.50 5
3 bluzzi standard € 14.00/g Loft · 2026-10-16 € 14.00 € 14.00 – € 14.00 4
4 candy fumez standard € 12.00/g Loft · 2026-10-16 € 12.00 € 12.00 – € 12.00 4
5 champagne sift € 11.00/g Loft · 2026-10-16 € 11.00 € 11.00 – € 11.00 4
6 donkey butter standard € 11.00/g Loft · 2026-10-16 € 11.00 € 11.00 – € 11.00 4
7 gouda berry standard € 10.00/g Loft · 2026-10-16 € 10.00 € 10.00 – € 10.00 4
8 lemon zkittlez standard € 13.00/g Loft · 2026-10-16 € 13.00 € 13.00 – € 13.00 4

The shop behind each best price and the menu date behind it are on the price pages: all prices, cheapest entries, products.

What this site does not know

  • A price is not today's price. A price is dated to the menu it was written on. The newest menu in the archive is dated 2026-10-28; the snapshot of this page is 2026-11-03. A shop may have changed its prices the day after the menu was printed.
  • Availability is not checked. Nobody calls a shop to ask whether the product is on the shelf. A menu line proves that the product was on a menu on that date, nothing more.
  • 39 of the 251 tracked shops have no menu in the archive. That is missing data, not a statement about their stock. A further 27 shops have a menu in the directory but no price record in the archive. In total, 185 shops carry price records.
  • Genetics and THC exist only where the menu prints them. 710 of 9,542 records (7.4%) carry a THC percentage and 2,133 (22.4%) carry a genetics label. The rest are unknown, not zero. A THC figure here means "printed on that menu", nothing more.
  • OCR can be wrong. 1,171 records carry at least one flag. Among them 50 are marked hard to read, 53 have an unusual format and 105 are outside the normal price range. Lines with an unusual format are kept out of the rankings; the others stay visible with the flag attached.
  • Names are not canonical. The same product can appear under more than one spelling, and 313 records are packs rather than single grams. A short alias list merges the obvious spelling variants and nothing else.
  • The site sells nothing. It is information only, 18+, and it does not arrange purchases, take orders or take payment. See the legal pages and the how to read the data note.

Price history

Every price carries the date of the menu it was written on, and the archive runs from 2007-04-17 to 2026-10-28. Nothing in it is extrapolated forward: a price from 2007-04-17 is still a price from 2007-04-17.

The archive keeps the most recent menu it found for each shop, so a year page is not a monthly index of one shop. A year page is the median of the per-gram prices printed on the menus dated in that year, across all shops, and it uses every record of that year, not only the last 30 days.

A shop that has not published a menu for years still shows its old prices, labelled as last known and never mixed into the current median. The older years are therefore built from fewer menus, and the number of records is printed next to each median.

Median per-gram price by year of the menu date
YearMedian €/g weedMedian €/g hashPer-gram recordsYear pages
2007 € 10.50 — 10 weed
2008 € 9.00 € 11.25 34 weed · hash
2009 € 8.33 € 8.00 30 weed · hash
2011 € 8.50 € 9.00 35 weed · hash
2012 € 8.33 € 7.50 18 weed · hash
2013 € 9.00 € 10.00 50 weed · hash
2014 € 9.09 € 6.94 66 weed · hash
2015 € 12.00 € 11.00 64 weed · hash
2016 € 11.36 € 9.58 84 weed · hash
2019 € 14.00 € 13.60 148 weed · hash
2020 € 11.00 € 10.00 77 weed · hash
2021 € 10.00 € 10.00 49 weed · hash
2022 € 14.00 € 11.00 143 weed · hash
2023 € 12.50 € 12.00 180 weed · hash
2024 € 12.00 € 10.00 513 weed · hash
2025 € 12.82 € 11.00 789 weed · hash
2026 € 12.50 € 12.00 3776 weed · hash

Full year list for weed: /prices/weed/2026/ · all categories: /prices/. The medians above are the ones published on the year pages: the middle value of the sorted per-gram prices of that year, taking the upper middle value when the count is even.

Questions

Are these live prices?

No. Every price on this site was written on a menu that carries a date, and that date is printed next to the price. A menu price is what a shop wrote on a specific day. It is not a live availability check, and it is not a human-verified visit.

How do you calculate the median?

Prices are grouped by product name and variant, so a cali product and a dutch product with the same name stay apart. Inside a group only one price per shop is kept, the cheapest one that shop printed. The median is the middle value of those prices, computed on menus from the last 30 days; with an even number of prices it is the average of the two middle values. The lowest and the highest price of the group are printed next to it.

Where do the menus come from?

From a public menu archive on the web that lists the dated menus of each shop. The pages are read without logging in and without buying anything. The menu images are read by OCR into prices, and the date is taken from the text of the page, never from a file name. We publish the prices and the dates, not the images. No member of the team checks a menu by hand.

How fresh is the data?

This page is a snapshot dated 2026-11-03. 20 of the 251 tracked shops have a menu from the last 30 days. 192 shops have an older menu only, and their prices are shown as last known rather than as current. 39 shops have no menu in the archive at all.

Why does the same product appear under different names?

Two reasons. Menus print the same product with different spellings and different variants, and OCR can read a name slightly wrong. A short alias list merges the obvious spelling variants and nothing else: a cali product and a dutch product with the same name are never merged into one average.

Can I use your data?

Yes, as long as you show the menu date. The read-only JSON API is documented on the API docs page, and the terms are on the legal page. Prices are indicative, they can be old, and they are not an offer by any shop. Always print the date of the menu a price came from.

Where to go next

  • Prices — median per gram by category, with ranges and menu dates.
  • Products — every product name in the archive, with its price history.
  • Cheapest — entries below the Amsterdam median, on fresh menus.
  • Shops — the 251 tracked shops and the date of their last menu.
  • Brands — makers as printed on the menus, never estimated.
  • API docs — the read-only JSON endpoints over the same records.
  • Legal — terms, privacy, and how to read the data.