Ranking methodology

How does this list get its order?

Every Spinach list is computed daily, not hand-curated. The same code that powers the mobile app generates these pages — one source of truth, same order on both surfaces. Here's what gets measured and how the order falls out.

What kinds of lists you'll see

  • The 15 Essential
    A city's flagship list. The places you should know about before you book a flight.
  • Signature dishes
    What this city does better than other cities. Top three dishes per hub, picked by relative strength across the network of 158 cities.
  • 14 themed categories
    Hidden Gems, Coffee Masters, Worth the Occasion, and more. Each list has its own filter and weighting; click "How we rank" on any list page for the per-category breakdown.
  • Best-of-dish lists
    For each dish — pizza, ramen, pierogi, francesinha — the venues across a city ranked by how well they make that one dish, regardless of the rest of the menu.

What signals go into the rank

Each list combines these in different proportions — the 15 Essential leans on overall rating, signature dishes lean on dish quality, Hidden Gems penalise high review volume on purpose. The list-level weighting is on each list page; the inputs below are universal.

  • Spinach rating
    Wilson-confidence-bounded average of food-quality reviews. Penalises low-volume venues so a single 5-star rating doesn't outrank a 4.6 with 200 reviews.
  • Signature dish strength
    Per-venue, per-dish quality derived from review language. Lets a place with a mediocre menu but incredible vegan ramen rank where it should.
  • Vegan Friendliness
    A → E grade computed server-side from menu labelling, vegan options, staff knowledge, and warnings. Used as a friction signal, not a quality signal.
  • Review depth
    Recency and volume. A venue rated three years ago doesn't carry the same weight as one rated last week.

Three things we don't do

No paid placement

Ranks are not for sale. No promoted slot, no "featured" toggle, no quiet boost for partners. If a venue is on a list, it earned the spot.

No manual overrides

We don't pin restaurants to the top because we like them, and we don't bury places we don't. The formula runs daily; whatever it says, ships.

No hidden divergence

Mobile and web read the same calculated columns. If you see a venue at #1 on the app, that's the same #1 you'll see here. No A/B test on the order.

Where the data comes from

Raw signals: Google Maps and HappyCow reviews, OCR'd menus, and structured venue metadata (hours, cuisine tags, price). Our pipeline extracts vegan-specific signals — vegan options, protein sources, staff knowledge, labelling — and writes them to Postgres. Score and grade are computed by a Postgres trigger; clients read the stored columns.

Refreshed daily at 4 AM UTC. The same data drives mobile, web, and any future surface — see the Vegan Friendliness page for how the A–E grade is built.