Methodology

How CrispScore works

CrispScore blends nine dimensions — domain-tuned transformer reads of recent reviews, photo-quality scoring, recent health inspections, community buzz, and classic Yelp signals — into one 0–10 crunch score. Below is exactly what each dimension measures, where the data comes from, and how often it refreshes.

Review-text quality (BERT/RoBERTa)

35%

Up to 3.0 pts on the 0–10 scale · MAX_TEXT_QUALITY

Sentiment and texture cues from recent reviews — scored by a transformer model so a 4-star place full of "crispy" gets more credit than a 4-star place full of "fine."

Data sources HuggingFace Inference API (BERT/RoBERTa SST/1–5 regressor)

Last refreshed: Live (Yelp Fusion, ~4 min cache)

Photo quality (Google Cloud Vision)

25%

Up to 2.0 pts on the 0–10 scale · MAX_PHOTO_QUALITY

Crispness cues from menu photos — golden color, edge contrast, batter texture — so a place whose photos look brown and limp scores lower than one whose photos glisten.

Data sources Google Cloud Vision API

Last refreshed: Daily 03:00 UTC (refresh-photo-quality cron)

Health inspections

10%

Up to 0.8 pts on the 0–10 scale · MAX_HEALTH

Recent public health-inspection outcomes — violation counts, grades, Pass/Fail flags — weighted by recency so a current A is worth more than an A from three years ago.

Data sources NYC DOHMH LA County Public Health Chicago Food Inspections SF Food Facility Inspections

Last refreshed: Daily 04:00 UTC (refresh-health-inspections cron)

Reddit community signal

10%

Up to 1.0 pts on the 0–10 scale · MAX_REDDIT

Subreddit buzz and texture-mention volume for the spot, so an underground favourite with a thousand posts of "the crunch is unreal" shows up next to the chains.

Data sources Reddit Pushshift

Last refreshed: Daily 05:00 UTC (refresh-reddit-signal cron)

Rating

4%

Up to 8.0 pts on the 0–10 scale · MAX_GOUT

The base star rating — Yelp by default, overridden by CrispFind user ratings when available — capped so a 5-star place still has to earn the other 60% of the score.

Data sources Yelp Fusion API CrispFind user ratings

Last refreshed: Live (Yelp Fusion, ~4 min cache)

Volume (coherence)

4%

Up to 1.0 pts on the 0–10 scale · MAX_COHERENCE

How many reviews the spot has, on a log scale — a consistency signal that punishes single-review fakes without over-rewarding high-volume chain stores.

Data sources Yelp Fusion API

Last refreshed: Live (Yelp Fusion, ~4 min cache)

Texture (croustillante)

4%

Up to 1.5 pts on the 0–10 scale · MAX_CROUSTILLANTE

How many crisp-texture keywords appear in the venue's categories and recent reviews — "crispy," "crunchy," "karaage," "chicharron" and friends.

Data sources Yelp categories Yelp review text

Last refreshed: Live (Yelp Fusion + BERT review cache)

Proximity

4%

Up to 0.5 pts on the 0–10 scale · MAX_PROXIMITE

A small bonus that decays linearly over 25 miles, so anything inside your radius ranks above an identically crispy spot across town.

Data sources User location Haversine distance

Last refreshed: Per request (no cache)

Recency (freshness)

4%

Up to 0.5 pts on the 0–10 scale · MAX_FRESHNESS

How recently the spot saw a steady stream of reviews — requires 10+ reviews to activate so a single recent review can't rescue a stale spot.

Data sources Yelp last-reviewed timestamp

Last refreshed: Live (Yelp Fusion, ~4 min cache)

All nine add up to a single, capped 0–10 score.

The maximum points per dimension in lib/crisp-algorithm.js already sum to 10.0 — so the per-dimension weight on this page is the relative share at the crest, before any single dimension underperforms. Want to try it? Open the live map or read the landing page for the story behind the score.