The short version: every dish gets a letter from A to E, per 100 g, and A is the better end.
Three ways, and a dish always says which one applies to it.
Some chains publish a full per-100 g table. Where they do, we use their figures directly — 1,300 dishes so far. This is the best data on the site.
Most restaurants publish nothing at all. For those, a model estimates the nutrition from the name and description. These are marked estimated everywhere they appear.
A visitor sitting in the restaurant sends in a photograph, a model reads the dishes off it, and a person checks the result before it goes on the map. Also marked estimated.
We measured one of them. The text estimator was scored against 329 dishes whose real figures were published by the restaurants themselves: it came within about 36 kcal per 100 g on average and put the dish in the right band about 60% of the time.
That was a different model from the one running today, and the photograph path has not been measured at all. So treat an estimated band as a rough guide — useful for telling a salad from a deep-fried thing, not for counting calories.
| It is per 100 g | Not per plate. A large portion of a B dish can easily beat a small portion of a D one. |
|---|---|
| Fruit and vegetables do not count | The scoring model can award points for fruit, vegetable and nut content, but almost nobody publishes that figure, so we treat it as zero for every dish. This is harsh on salads and on fruit, consistently. |
| Drinks are hidden by default | Drinks are mostly water per 100 g, which makes them score better than they deserve on a scale built for food. You can switch them on; treat what you see with suspicion. |
| A place is rated by its typical dish | The pin colour is the median of a place's dishes, not its best one. Every burger bar has a salad. |
| It is about nutrients, not quality | The score says nothing about whether the food is fresh, well made, or good. |
Brussels has 4,178 restaurants, cafés and takeaways in OpenStreetMap. 107 of them have any dish data at all.
That gap is the whole problem. Restaurants are not required to publish nutrition for food made on the premises, and almost none do voluntarily — we checked every page of sixteen Brussels chains and a sample of independents. A place missing from the map has not been judged and found wanting; it simply has not been looked at. If you are sitting in one, photograph the menu.
Bands come from nutrient_profile_score, our implementation of the FSA/Ofcom
nutrient profiling model, with our own documented A–E cut points. Energy, saturated fat,
sugars and salt count against a dish; protein and fibre count for it. The cut points were
fixed before any dish was scored and are never adjusted to make results look better.
Nobody types a band, anywhere in this system — not an operator, not a contributor, not the model that reads photographs. Every band on this site is computed by the same function from the same eight numbers, so a B means the same thing on every dish.
Restaurant names, addresses and positions come from OpenStreetMap contributors and are used under the ODbL licence. Venues added by visitors are recorded as such. Something wrong with a place itself — wrong name, wrong spot, closed down? Fix it in OpenStreetMap and it will reach us.