← Back to map

How We Rank Restaurants

A transparent look at the Brussels Score algorithm

TL;DR

We don't just show the highest-rated restaurants. We look for places that do better than expected for their type — taking into account cuisine, location, and how many reviews they have.

The Problem with Star Ratings

Google ratings are useful but not perfect. A 4.5-star restaurant near Grand Place isn't the same as a 4.5-star spot in a quieter neighbourhood. Busy tourist areas get more reviews from visitors, while neighbourhood spots get reviews from regulars.

Our algorithm tries to answer: "How good is this restaurant compared to similar places?"

The Brussels Score

Every restaurant gets a score from 0-100 based on multiple factors. Here's how each component works:

Base Quality 35% weight

The Google rating weighted by confidence. A 4.5★ with 400 reviews often outranks a 4.9★ with 25 reviews because we can trust the data more.

Confidence weighting:
  • 50 reviews: 29% confidence
  • 200 reviews: 55% confidence
  • 500 reviews: 70% confidence
ML Undervaluation +25% max

Our machine learning model predicts what rating a restaurant "should" have based on its cuisine, price, and location. If the actual rating is higher than expected, that's a strong signal of quality. This is our key differentiator for finding hidden gems.

Example:
A Vietnamese restaurant in Ixelles has 4.6 stars. Similar restaurants in the area average 4.2. That's +0.4 stars above expected — it's doing something special.
Scarcity Bonus +12% max

Restaurants with limited hours or days often indicate a local gem. If they can survive with restricted opening times, they must be doing something right.

What earns this bonus:
  • Closes mid-afternoon (service coupé)
  • Open less than 30h/week
  • Closed multiple days
  • Late-night only spots (past 1:00 AM)
Independent Restaurant +12% max

Non-chain restaurants get a bonus. We want to surface unique local spots, not franchises you can find anywhere.

Diaspora Authenticity +8% max

Restaurants from immigrant communities get a bonus when located in their community's traditional neighborhood. A Turkish restaurant in Saint-Josse is more likely to be authentic than one near Grand Place.

Which cuisines and where:
  • Moroccan/North African: Molenbeek, Anderlecht, Saint-Gilles
  • Turkish: Saint-Josse, Schaerbeek (Chaussée de Haecht)
  • Congolese/African: Ixelles (Matongé)
  • Portuguese/Brazilian: Saint-Gilles (Porte de Hal)
Brussels Institution +5% max

Iconic Brussels establishments like Fin de Siècle, Potverdoemmeke, and other legendary spots that define the city's food culture.

Other Bonuses +3% max

Small bonuses for: "Chez [Name]" family restaurants (+2%), specific regional cuisines like "Sichuan" vs generic "Chinese" (+1%).

Guide Recognition & Reddit Informational only

We track Michelin stars, Bib Gourmand, Gault&Millau, and Reddit mentions — but they don't affect rankings. These are shown as badges in the UI for reference.

Why?
Our goal is to discover hidden gems through data analysis — not validate existing guides. If we boosted Michelin restaurants, we'd just be recreating the Michelin guide with extra steps.

Penalties

Some factors reduce a restaurant's score:

Tourist Location -15% max

Restaurants within 150m of Grand Place with mediocre ratings get penalized. Tourist traps thrive on foot traffic, not quality.

Low Confidence -15% max

A perfect 5.0★ with only 20 reviews is probably friends and family. We use Bayesian confidence weighting to discount ratings with too few reviews.

Chain Restaurant -10% max

Chains like Bavet, Exki, Pizza Hut get penalized. We want to surface unique local spots.

Over-commercialized -8% max

1500+ reviews in tourist areas suggests mass-market appeal over quality.

The Tier System

Restaurants are sorted into three tiers based on their Brussels Score, displayed with colored markers on the map:

⭐ Go There First 55%+ score

Top picks — the best Brussels has to offer. About 15% of restaurants. These are the places worth going out of your way for.

✓ Go There 48-55% score

Recommended. About 18% of restaurants. Solid spots that locals recommend.

Unranked <48% score

Not recommended. About 67% of restaurants. Tourist traps, chains, or places we can't confidently recommend yet.

What "Above Expected" Means

When you see "+0.3 stars above expected", here's what it means:

  1. Our ML model looks at similar restaurants (same cuisine, price range, area)
  2. It calculates what rating this restaurant "should" have based on those factors
  3. If the actual rating is higher, that's a positive signal
  4. The difference (+0.3) shows how much better it performs than expected

Restaurants that score above expected are doing something special compared to similar places.

Data Sources

Limitations

No ranking is perfect. Here's where ours falls short:

Open Source

The entire codebase is open source. You can see exactly how the scoring works, suggest improvements, or build your own version.

View on GitHub →

Credits

Inspiration: Lauren Leek's London Food Dashboard — using ML residuals to identify undervalued restaurants.

Questions? Open an issue or contribute to the project.