I have made 2,259 contributions to Google Maps with 6.3 million views, and my ordering strategy was always the same: open the reviews, see which dish gets mentioned the most, order that. It works until it does not.
The problem is that people also write about what they hated. A dish can rack up mentions because it is genuinely great, or because it is famous and mildly disappointing at scale. Mention count measures fame. It does not measure quality. That gap is the entire reason SF Eats exists.
Two numbers instead of one
Every spot on SF Eats gets scored on two independent signals:
- Hype: how many reviews mention the specific dish. This is the number everyone already uses.
- Love: of the reviews that mention the dish, how positively they describe it. Sentiment analysis runs on the dish sentences themselves, not the whole review, so a rant about parking does not drag down the carnitas.
When hype is high and love is low, we flag it as a hype trap. Fame without flavor.
A real example: the burrito wars
La Taqueria has 107 burrito mentions, the most in San Francisco. El Farolito has 85. El Metate has 45. Ranked by hype, El Metate does not even make the podium.
Ranked by love, it flips: El Metate 93%, La Taqueria 90%, El Farolito 82%. The least famous of the three has the happiest customers, and the 1am-line legend has a quarter of its burrito reviews carrying complaints. Both numbers are true at once. You just need to see them separately. Full ranking: the best Mission burrito in SF.
The other correction: small-sample stars
Raw star ratings have their own trap: a 4.9 from 12 reviews beats a 4.6 from 3,000 on paper and loses to it in real life. We use a Bayesian weight (roughly, every place starts with 200 phantom average reviews) so ratings only mean something once enough people have voted.
Where the data comes from
- Places and ratings: the Google Places API, restricted to San Francisco proper, permanently-closed places removed.
- Dish sentiment: reviews that name the dish, scored with a lexicon-based sentiment model with negation handling.
- A manual verification layer: for many spots I have read the reviews myself and hand-set the scores. Those entries always win over the automatic numbers.
- Community picks: visitor-submitted recommendations, moderated before they publish.
61 dishes, 300+ spots, 8 cuisines, refreshed regularly.
Explore the map →