How FoodMedals Rankings Work
The scoring formula, vote limits, yearly reset, and moderation rules that produce every leaderboard on the site.
The core idea
Most review sites let you write unlimited five-star reviews. That flood of positive opinions is easy to produce and hard to rank. FoodMedals takes the opposite approach. Each user gets a small, fixed number of votes in each food category, so picking a restaurant costs you something. You cannot give every burger place a Gold. You have to pick one.
The result is a leaderboard built from deliberate choices rather than casual clicks. When you see a Gold on a restaurant, a real person put it there knowing they could not also give Gold to anywhere else in that category this year.
Vote limits
Every signed-in user can hold, per food category, per calendar year:
- One Gold medal. Your single favorite restaurant in that category this year.
- One Silver medal. Your second favorite.
- One Bronze medal. Your third favorite.
You cannot give two medals in the same metal to different restaurants in the same category. You also cannot stack multiple medals on the same restaurant in the same category. These constraints are enforced at the database level with a unique index on (user_id, food_category_id, medal_type, year).
You can reassign your medals at any time. If you discover a new favorite burger place, awarding it Gold automatically moves your Gold away from your previous pick. No admin approval required.
The scoring formula
Every medal contributes points to a restaurant’s total score for that category and year:
- Gold medal: 3 points
- Silver medal: 2 points
- Bronze medal: 1 point
Restaurants are ranked by total score, descending. Ties are broken by Gold count, descending (so a restaurant with 10 Golds and 0 Silvers ranks above a restaurant with 8 Golds and 6 Silvers when both have 30 points). The exact SQL behind the leaderboard is:
SELECT restaurant_id, COUNT(*) FILTER (WHERE medal_type = 'gold') AS gold_count, COUNT(*) FILTER (WHERE medal_type = 'silver') AS silver_count, COUNT(*) FILTER (WHERE medal_type = 'bronze') AS bronze_count, (COUNT(*) FILTER (WHERE medal_type = 'gold') * 3 + COUNT(*) FILTER (WHERE medal_type = 'silver') * 2 + COUNT(*) FILTER (WHERE medal_type = 'bronze') * 1) AS total_score FROM medals WHERE food_category_id = $1 AND year = $2 GROUP BY restaurant_id ORDER BY total_score DESC, gold_count DESC
Why yearly resets
On January 1, every leaderboard resets for the new year. Last year’s rankings are archived to the Hall of Fame, and the new year begins with every restaurant at zero.
This matters for two reasons. First, rankings stay fresh. A restaurant that was great in 2020 but has declined does not coast on five years of old votes. Second, new entrants get a fair shot. Opening a restaurant in September is not a disadvantage because everyone is competing on the same current-year leaderboard.
If you want to see a longer view of who has consistently been great, the Hall of Fame preserves past-year Gold winners in every category.
Who can vote
Anyone with a FoodMedals account can award medals. Accounts are free. We accept email sign-up as well as sign-in through Google and X (Twitter). Every vote counts the same regardless of how you signed up.
A small number of accounts are tagged as seed users (marked isSeed: true in the database, with emails at @seed.foodmedals.com). Seed accounts bootstrap new cities, because a category with zero votes is not a useful leaderboard. Seed users are specialized by food type, so dessert lovers populate dessert categories, BBQ lovers populate BBQ, and so on. Their votes carry the same weight as any other vote and are quickly outweighed once real users arrive in a city.
Data sources
Restaurant data has two sources. Most entries are hand-imported from Google Maps listings by an admin, with addresses geocoded via OpenCage and descriptions written to surface specific dishes, techniques, and neighborhood context. User-submitted restaurants come in through /suggest/restaurant and enter a moderation queue before going live.
Medal data comes entirely from users. There is no algorithmic scoring, no paid placement, and no editorial thumb on the scale. If a restaurant is at the top of a leaderboard, it is because people voted for it.
Moderation policy
An admin reviews suggested restaurants and categories before they go live, processes reports of permanently closed restaurants, and can deactivate accounts that violate the terms. Users can report an incorrect address or a closure on any restaurant page. Duplicate reports from the same user are prevented.
FoodMedals does not accept paid placement, sponsored listings, or advertising. Accepting them would break the premise of the site.
Near Me filtering
Category pages support a “Near Me” toggle that filters the leaderboard to a radius (5, 10, 25, or 50 miles) around your current location. This uses the browser Geolocation API and runs client-side. Your coordinates are never sent to the FoodMedals servers. The default server-rendered view shows the full statewide or nationwide leaderboard so search engines can index every category.
Coverage
FoodMedals started in Utah and has expanded to Los Angeles, Anaheim, San Diego, Orlando, Tampa, New York, Chicago, Atlanta, Houston, Seattle, Portland, Pittsburgh, Washington DC, Baltimore, Cincinnati, and many other cities nationwide. Coverage in each city depends on how many restaurants have been imported and how many local users are voting. If your city is underrepresented, the fastest path to better coverage is to sign up and start awarding medals yourself.
Questions
More common questions are answered in the FAQ. For anything not covered there, use the contact link in the footer.