How we collect, calculate and sort
Bean Index shows speciality coffee from the online shops of roasters in the UK. This page sets out where each detail comes from, how we calculate and how we sort – as the site does it today. If something is wrong, tell us with “Report an error” on the coffee or by e-mail to hello@beanindex.coffee.
Where does the data come from?
Only from the roasters' own online shops. We don't take data from retailers, marketplaces, other comparison sites or databases. Once a day a program fetches each shop's public product data: product name, description, labelled fields, variants, price, weight and availability. For Shopify and WooCommerce shops we use the shop system's public product data, not individual pages. Fixed rules apply:
- We follow each roaster's robots.txt, read with our own user agent. If it disallows the product data, we don't fetch the shop.
- Our program identifies itself as BeanIndexBot and waits at least 1.5 seconds between two requests, longer – up to 60 seconds – if the roaster's robots.txt asks for it. More about the bot: BeanIndexBot.
- We don't get past bot protection.
- If a coffee's listing lacks at least two of origin, process, variety and altitude, we also read its product page – only pairs like “Process: Washed” – at most once every 30 days and for at most 30 coffees per shop per night.
- We don't copy roasters' photos, logos or texts. We show individual details and link to the shop.
- Roasters can correct details or ask to be removed at any time: For roasters.
Bean Index currently lists 111 roasters with coffees on sale, all of them based in the UK (checked 19 Oct 2026). The UK has many more roasters, so this is a growing selection, not a complete directory. If a roaster is missing, suggest it.
What counts as coffee. Roasted whole beans and ground coffee. Not included: flavoured coffee, capsules and pods, instant coffee, coffee bags and drip bags, cascara, green (unroasted) coffee, subscriptions and coffee plans, gift cards and gift boxes, taster packs and sets of several coffees, “roaster's choice” rotations, advent calendars, courses, wholesale and catering packs, tea, chocolate, equipment and merchandise.
Variants. Many roasters sell the same coffee as a filter and an espresso roast, ground or in several sizes. We treat such variants as one coffee if they come from the same roaster, have the same name apart from grind, roast use or size, don't contradict each other on origin or process, and their prices per kg differ by a factor of no more than 1.35. The variants are listed on the coffee's page.
Where does each detail come from?
Every value carries a small label. Tap it to see the full explanation.
| Label | Meaning |
|---|---|
| Roaster | stated by the roaster in the shop, in a labelled field |
| Title | from the product name |
| Text | read from the description by our rules |
| derived | derived from the region, for example the country from “Huila” |
| AI | read by AI, not checked by people – see What AI reads |
| Shop | taken from the shop system (price, weight, availability, a shop's process tag) |
| corrected | corrected by us, see Corrections |
| confirmed | confirmed by the roaster |
Order of trust. When sources disagree, our rules use a labelled field before the product name, the product name before the description, and the description before a derivation from the region. The reason: roasters' descriptions often mention other countries or processes as comparisons. Two more rules: we read the word “Honey” as a process only in the name or a labelled field – in the description it is usually a flavour note, as is “natural sweetness”. And a grind option such as “Espresso (fine)” is a grind, not a sign of what the coffee was roasted for. A shop's own process tag (exactly one of washed, natural, honey) only fills an empty process.
Data coverage. “Data coverage 6/8” counts how many of eight details we have: origin, region, process, variety, altitude, flavour notes, brewing and price per kg. If a detail is missing we write “not stated by the roaster” and don't guess. Blends count only the four details a blend can have – flavour notes, brewing, price per kg and process (“Data coverage 3/4 · Blend”): a mix of several origins has no single country, region or altitude.
| Detail | known for |
|---|---|
| Origin | 73% |
| Region | 57% |
| Process | 72% |
| Variety | 58% |
| Altitude | 55% |
| Flavour notes | 79% |
| Brewing (according to the roaster) | 48% |
| Roast level (according to the roaster) | 25% |
| Price per kg | 91% |
Robusta share and decaf method. We show the share of arabica and robusta only when the roaster gives a number (“80% Arabica / 20% Robusta”, “100% Arabica”). The word “robusta” without a number gives no share. For decaf we name the method – Swiss Water, Mountain Water, CO₂, Sugarcane (EA) or Dichloromethane (DCM) – only if the shop names it. Otherwise it says “not stated by the roaster”; we don't assume a method.
What does AI read?
Our rules are quick and predictable but can't read prose. So a language model reads the product name and description of each coffee and may fill these fields: origin, region, process, anaerobic or infused fermentation, decaf, variety, altitude, the roaster's flavour notes and their flavour groups, type (single origin or blend), roast level and the brew methods the roaster recommends. Every value it adds or changes is labelled “AI”. If the model only repeats what our rules found, the rule's label stays – “Kenya” from the product name is “Title”, not “AI”.
- The model does not replace an origin or a process that the roaster states in a labelled field or as a shop tag.
- Price, weight, pack size and availability never come from AI.
- The model reads a description again only when it changes.
- Typical mistakes: taking a country that the text only mentions as a comparison, or reading a flavour note as a process. That is why every value shows its source, and every correction goes into the list of corrections.
Reservations against text and data mining and AI. About every 30 days we check each roaster's site for machine-readable reservations: a tdmrep.json file, a tdm-reservation meta tag or header, noai in the robots meta tag or header, Disallow: / for a named AI crawler in robots.txt, or a Content-Signal with ai-train=no or ai-input=no. A roaster with such a reservation – or whose check is not complete yet – is not passed to the model, and values the model read earlier are removed from their coffees. Our own rules still read that shop's product data as described above.
Where do delivery and freshness details come from?
Some details belong to the roaster, not to a single coffee: the order value for free delivery, the price of standard UK delivery, the carriers, letterbox delivery, delivery to Northern Ireland and the Highlands, whether the roast date is printed on the bag or only a best-before date, whether the roaster roasts to order, roasting days and despatch times. We read these from the shop's own delivery and FAQ pages about once every 7 days, with fixed search patterns and without AI. We show only what the shop itself says, with the date of our check; if the last check is more than 14 days old, we show nothing. We don't calculate a “price including delivery”: delivery costs change, and the figure in the shop applies. If a detail is wrong or missing, a short message via “Confirm details” on the roaster's page is enough.
How do we calculate the price per kg?
Price per kg is the price divided by the weight in grams, times 1,000, to two decimal places. We compare using the standard bag of 200 to 350 grams – not sample packs and not kilo bags, whose price per kg usually differs. If a roaster offers no standard bag, we show the price per kg of the bag on offer with the note “not compared with standard bags”; it is not used for the price position or any median. Kilo bags appear as “Also available” with their own price per kg. Some shops give the weight including packaging, so we round down to the usual bag size; weights in ounces and pounds are converted to grams.
- Checked is the time we last fetched the roaster's shop successfully – not the time this page was built. It appears next to every price.
- If we couldn't fetch a shop for more than 48 hours, its coffees show no price and are marked “Being checked”.
- If our last successful price check is more than 40 hours old overall, we hide the prices and price positions of all individual coffees on every page, with a notice at the top, until checks work again. Coffees then say “Check price at the roaster”. Price statistics such as medians stay visible and keep the date of the last successful check.
- Prices are the shop's prices, excluding delivery. UK roasters show final prices, and coffee beans are zero-rated for VAT (HMRC, VAT Notice 701/14), so we add nothing. We don't know delivery costs for your order.
- Other currencies. A price in another currency, for example euros, is converted to pounds at the European Central Bank's reference rate (via the euro), currently that of 19 Oct 2026. The original price is shown alongside. If the rate is more than 7 days old, coffees priced in that currency show no price and are left out of all price statistics.
- Implausible prices – a price per kg below £17 or above £850, or 60% or more below the median of its comparison group – are not shown until we have checked them in the shop. Usually a misread weight is behind it. The coffee then says “Check price at the roaster” and goes to the end of the default order. A price we have confirmed in the shop is shown again; if it changes, the check starts over.
- Coffees without a usable price – the pack size or price in the shop is not clear – say “Check price at the roaster” and are not in any statistics.
- Prices never appear in page titles, in descriptions for search engines or in preview images: there they would travel without a date and go out of date.
- Per cup we use 18 grams for espresso roasts and 15 grams for everything else: price per kg times grams, divided by 1,000.
How do we calculate the price position?
The price position compares a coffee with similar coffees. We place it in the first suitable group in this list:
- Decaf
- Blends, by roast use (espresso, filter or omni) where stated, otherwise all blends
- Gesha (Geisha)
- Robusta (Canephora)
- Country and process, for example “Washed from Colombia”
- Country
- Process
- All single origins
Decaf coffees are compared only with decaf, blends only with blends, and Gesha and robusta coffees only within their own group – a Panama Gesha would otherwise make an ordinary Panama look cheap. A group counts only if it contains at least 5 coffees on sale with a price from at least 3 roasters; variants of the same coffee count once. For the group we calculate the median and the boundaries of the lowest and highest tenth (quantiles, inclusive method). A coffee's distance is its price per kg divided by the median, minus one, times 100, rounded. Below 5% we write “around the median of the group”, otherwise “… below” or “… above the median”. We always give the median and the number of coffees and roasters in the group.
Below the median doesn't mean better, and above it doesn't mean worse. The price position places a coffee; it doesn't rate it.
How do the flavour seal and flavour axis work?
AI sorts the roasters' flavour notes into fourteen groups. We combine them into eight families, arranged clockwise from twelve o'clock on the seal. Neighbouring families are related.
| Family | Groups |
|---|---|
| Floral & tea | floral, tea, herbal |
| Citrus | citrus |
| Berries | berries |
| Tropical & winey | tropical fruit, wine |
| Dried fruit & spice | dried fruit, spice |
| Chocolate | chocolate, roasty |
| Nut & caramel | nut, caramel and sweetness |
| Stone fruit | stone fruit |
The seal. The ring shows the process in colour and pattern: washed is solid, natural dotted, honey hatched diagonally, anaerobic cross-hatched, other methods wavy. A dashed inner ring stands for infused, a dashed grey ring for an unknown process. The eight petals show the flavour families: a full petal if the family is named, a short outline if not. We don't show intensity, because no tasting note states it reliably. In the centre is the three-letter country code (for example ETH for Ethiopia). If the roaster names no flavour notes, all petals are dashed and it says “No flavour notes found”.
The flavour axis (version 1). We count how many bright and how many dark groups a coffee has:
- bright: citrus, berries, floral, tea, tropical fruit, stone fruit
- dark: chocolate, nut, roasty, spice
- neutral and not counted: caramel and sweetness, dried fruit, wine, herbal
The value is (bright minus dark) divided by (bright plus dark) and lies between minus one and plus one. From plus 0.34 we write “fruity and bright”, up to minus 0.34 “chocolatey & nutty”, in between “balanced”. Without flavour notes there is no value. The axis is derived from words, not measured. There is deliberately no acidity scale: how acidic a coffee tastes depends mostly on roast and brewing and can't be read from tasting notes.
How do we find replacements and similar coffees?
For every coffee we calculate a similarity to all coffees on sale. The weights:
| Feature | Weight |
|---|---|
| Flavour notes | 0.32 |
| Process | 0.22 |
| Origin (country, region as a bonus) | 0.16 |
| Variety | 0.12 |
| Brewing (according to the roaster) | 0.08 |
| Altitude | 0.05 |
| Price per kg | 0.05 |
Decaf coffees are compared only with decaf. A blend and a single origin keep only 0.3 of their similarity. If a coffee has fewer than two comparable details, we write “Not enough details for a fair comparison.”
We also count eight features that both coffees must share: country, region, process (including anaerobic and infused), at least one variety, flavour notes (at least two shared groups, or half of all groups named), brewing (the same, or one of them is omni), altitude (midpoints no more than 200 metres apart) and price per kg (within 30%). A feature counts only if both coffees state it.
- Shown are coffees with a similarity of at least 0.35 and at least 3 shared features.
- A replacement needs at least 0.45 and at least 4 shared features.
- Up to 2 suggestions come from the same roaster and up to 6 from others, no more than 2 per roaster.
- Order: similarity, then the closer price per kg.
- If a roaster names a successor for a sold-out coffee, its page forwards straight to the successor.
Choosing a profile. Without a starting coffee, the replacement finder uses a simple points rule: two points for the country, two for the process, one for each shared flavour family (up to three), one for brewing and one for the price band. We show coffees with three points or more, no more than 2 per roaster.
How do we choose coffees by brew method and flavour?
The brewing pages follow fixed rules (version 1). We haven't measured or tested anything; every rule rests on what the roasters say.
- Bean-to-cup: an espresso or omni roast according to the roaster, a flavour axis of zero or below (chocolatey & nutty or balanced), not anaerobic, not infused, and not a light or medium-light roast where a roast level is given. Or the roaster recommends the coffee for bean-to-cup machines.
- Espresso machine: an espresso or omni roast according to the roaster, or the roaster recommends it for espresso machines. Bright coffees carry the note “Light roast: needs a fine grinder and patience when dialling in”.
- Filter coffee: a filter or omni roast according to the roaster, or the roaster recommends it for pour-over, a filter machine, AeroPress or a French press.
- Cafetière, AeroPress and moka pot: the roaster names that device for the coffee (read by AI and labelled as such). Here the roast use doesn't have to be stated.
Coffees without a stated roast use don't appear on the bean-to-cup, espresso machine and filter pages; their number is given on each page. If the bean-to-cup selection overlaps with the espresso machine selection by 70% or more, there is no separate bean-to-cup page – it would show nothing new. The same applies between the cafetière, AeroPress and moka pot pages.
The flavour pages use the flavour axis: chocolatey & nutty from minus 0.34 down; fruity from plus 0.34 and with berries, citrus, stone fruit or tropical fruit; floral with floral notes; caramel-sweet with caramel or sweetness and an axis of zero or below. There is no page sorted by acidity, because tasting notes don't tell us how acidic a coffee is.
How do we sort?
The default order in all lists works like this:
- Coffees with better data coverage come first.
- With equal data coverage, roasters take turns so that no single roaster fills a list. The roasters are in alphabetical order, and the starting point moves on by one roaster every day.
- Within a roaster we sort by name from A to Z.
Coffees whose implausible price is waiting for a check go to the end. No paid placement. Money, affiliate programmes or future services for roasters never affect the order, the filters, the replacements or the price position. You can choose other orders yourself: price per kg low to high or high to low, altitude high to low, below group median first (only coffees with data coverage of at least 6/8 and no more than 50% from their group median), roaster A–Z, name A–Z. With a search term we sort by relevance.
Available, being checked, sold out
- Available: the coffee was in stock in the roaster's last successful shop check, and that check is no more than 48 hours old.
- Being checked: the coffee was in stock, but we haven't reached the shop for more than 48 hours. The page stays, without a price. If a shop can't be reached for more than 30 days, its coffees count as sold out.
- Sold out: the coffee is out of stock or gone from the shop. Its page stays for 90 days with replacements first and the last price we saw, marked as a past observation. After that the page is removed (HTTP 410).
- A coffee we have never seen in stock gets no page.
Which pages exist – and which don't?
- Topic pages for origin, region, process, variety, brewing, flavour and decaf exist only if at least 6 coffees on sale from at least 3 roasters belong to them and, on average, at least 70% of their key details are known (origin, process, variety, flavour notes, price per kg – not counting the detail the page is about). A region page also needs a spread of roasters: no single roaster may supply more than 50% of its coffees, unless at least three roasters supply two or more each. Of two topic pages showing almost the same coffees (70% or more), only the stronger one stays. Where a topic page could exist but doesn't today, its address forwards to the matching filter in the catalogue.
- City pages under Roasters exist for a city with at least 4 roasters that have at least one coffee on sale.
- Coffee pages are open to search engines if the coffee is on sale, has a price per kg, states at least 3 of 6 core details – origin, process, variety, altitude, flavour notes, pack weight – including origin or process, and has data coverage of at least 5/8. Blends follow their own rule: on sale, with a price, flavour notes with at least two of the roaster's notes, a stated roast use, a price-position group, and a roast level or process. All other coffee pages can be reached but are closed to search engines.
- Being checked: a coffee page stays open to search engines for the first 7 days, as before.
- Sold out: a page stays open to search engines only if at least three qualifying replacements are on sale.
- Roaster pages are open to search engines from three coffees on sale.
- There are no separate pages for combinations such as “country and process” or for altitude bands. For those, use the filters in the catalogue.
How is the price index made?
Once a month we record what speciality coffee costs in the shops of the roasters on Bean Index: the price index (the first edition is planned for early November 2026). Each edition follows these rules (version 1):
- Reference date is the last day of the month, with the prices from that night's check. If that check fails, we use the first successful one in the first 5 days of the next month and give its date. Data more than 36 hours old is never used.
- Which coffees: only coffees on sale on the reference date with a price per kg from the standard bag of 200 to 350 grams. Coffees with a hidden price (implausible, or exchange rate too old) don't count. Variants of the same coffee count once.
- Roasters in the UK only: the table counts roasters based in the UK and appears once at least 10 of them have prices. Prices are the shops' prices excluding delivery; coffee beans are zero-rated for VAT in the UK.
- Groups: single origin (one origin, without Gesha, robusta and decaf), blends (without decaf), decaf and Gesha. Within single origin also by process – washed, natural, honey, plus “anaerobic” for all anaerobically fermented coffees, which also appear in their washed or natural row – and by country of origin.
- Minimum size: a group appears with at least 20 coffees from at least 5 roasters, and no roaster supplies more than 25% of the group's coffees. Otherwise the figure would essentially be one shop's price. Figures quoted in summaries come only from groups with at least 40 coffees from 10 roasters.
- Figures: median, the boundaries of the lowest and highest tenth (p10, p90) and the middle half (p25 to p75), calculated as for the price position (quantiles, inclusive method), plus the number of coffees and roasters. On the page we round to whole pounds, in the CSV file to two decimal places.
- Not a fixed basket – and not a financial index. Which roasters and coffees are on Bean Index changes from month to month, so a difference between two editions can also come from a different selection. The price index describes coffee prices in shops; it isn't a traded or investable index.
- Frozen: a published edition doesn't change. If we find a mistake, the correction appears with its date on that edition's page.
From the prices we publish only aggregated figures each month – medians and ranges by origin and process, without names of roasters or coffees – under the CC BY 4.0 licence. A removal takes effect from the next edition; published editions stay unchanged because no roaster can be identified in them. The licence covers only these aggregated figures, not the roasters' details.
What don't we know?
- The roast date of the bag you would receive. We only report whether the shop says it prints one.
- How a coffee tastes. We don't taste or score; flavour notes are the roasters' own words, read by AI.
- Acidity or caffeine content – no roaster data tells us that reliably.
- What your order costs with delivery, discount codes or subscription prices.
- Stock levels, or whether a shop delivers to your address.
- Roasters that aren't on Bean Index yet.
Corrections
Every detail that we or a roaster changed by hand is listed here. On the coffee it carries the label “corrected”.
No corrections yet.
Versions
When we change a formula or rule, it is recorded here.
- Version 1, 20 Oct 2026: first published version for Bean Index – price per kg in pounds, plausibility check, price position, flavour axis, similarity and replacements, rules for brewing and flavour pages, default order.
- Price index, version 1, 20 Oct 2026: rules for the monthly price index, valid from the October 2026 edition.
Last updated: