PlacesFrom New York ▾

Method & data

Every conclusion on this site comes from the rules below. There is no hidden 0–100 score.

Three different claims

  1. Cheap: a low number. We don't use this on its own.
  2. Unusually cheap: at or below the 10th percentile and at least 15% below the median of comparable fares.
  3. Good opportunity: unusually cheap, and the trip holds up on length, routing, weather and crowds.

Comparable fares

Same route, observed over the last 12 months with at least 7 days' lead. We prefer the same departure date's own history and widen only when data is thin (±0, ±1, ±2, ±3, ±5, ±7, ±10, ±14, ±21 days), because nearby dates differ structurally: a Tuesday is always cheaper than the Saturday next to it, and early January is always cheaper than Christmas. Comparing across them would flag ordinary structure as an anomaly. Fewer than 20 comparable fares → “not enough data”, never a deal.

We scan ~85 date windows per destination, and the best of many noisy prices will look cheap by chance. That's why both anomaly conditions must hold and at most two windows per destination reach the feed.

Verdicts

Unusually good windowUnusually cheap, no dealbreakers, no concerns.
Strong value, with tradeoffsUnusually cheap, but weather or crowds are a concern. The tradeoff is spelled out.
Good timing, normal priceNot unusual (≤40th percentile), but favorable weather and nothing against it.
Cheap, but flawedUnusually cheap with a dealbreaker: far too short for the distance, or poor routing (overnight/10h+ connection, airport change).
WaitEverything else. Book/Wait status is descriptive (where the fare sits in history), never a forecast.

Feed order: verdict tier first, then % below the typical fare for those dates. That's a sort key, not a quality score.

Trip length and usable days

One-way travelMinimum sensible nights
≤ 4 h2
≤ 6 h3
≤ 9 h5
≤ 12 h6
≤ 17 h8
≤ ∞ h11

Usable days = full days on the ground + partial credit for the arrival and departure days (by local clock time) − a jet-lag cost that grows with the time shift beyond 3 hours (eastward costs more).

Weather

We count how often a day in the trip window was historically pleasant, then compare with the destination's own year. Favorable ≥ 50% pleasant days, Mixed ≥ 30%, otherwise Unfavorable. A high-severity hazard at its peak (hurricanes) is always a concern.

  • city: high 14–29 °C, <2 mm rain, not muggy
  • tropical-city: high 24–35 °C, <2 mm rain
  • beach: high 25–33 °C, <2 mm rain, 5 h+ sunshine
  • nature: high 8–25 °C, <2 mm rain

“Below the going rate” (while history builds)

No free source of historical international fares exists (US government fare data covers domestic routes only; OAG, Cirium and ATPCO are enterprise contracts; Google's price history isn't available without scraping). So until a trip's own history can judge it, the engine compares a fare with the fares on sale right now for similar trips on the same route.

To avoid calling ordinary structure a deal, every fare is first adjusted for departure weekday, return weekday, trip length and stops, using factors learned from the whole current market (e.g. Friday departures run about 6% higher); holiday-week fares are only compared with holiday-week fares. A fare counts as below the going rate when it is in the cheapest 5% of at least 12 comparable fares and at least 20% under their median: stricter than the history rule, because comparing across dates is noisier. It says the fare is cheap for the trip right now, not that it is low for the season; the label says which basis was used.

How good are the estimates?

For date combinations with no cached round-trip fare, search estimates one: α × (outbound one-way + return one-way), with α fit per route on cells where both exist (default 0.9 and ±25% until a route has 5+ pairs). A missing day borrows the nearest one-way within 2 days, with a wider range. Estimates are labelled ≈, never called deals, and every time a real round-trip fare appears for an estimated cell, the error is recorded here (α fit without that cell).

EstimatesChecksTypical errorWithin 10%Within 20%Bias
All3,946±8.4%56.3%83.4%-0.9%
One-ways from the exact days2,523±7.8%59.6%84.9%-0.2%
Borrowed from nearby days1,423±9.9%50.6%80.8%-2.2%
NYC → Istanbul832±6.3%70.9%90.3%-0.5%
NYC → Miami688±12.7%41.3%71.7%-1.6%
NYC → Los Angeles530±6.6%65.7%93.8%+0.1%
NYC → Tokyo184±8.6%55.4%90.2%+0.6%
NYC → London172±11.3%44.2%71.5%+0.4%
NYC → Paris166±7.7%60.2%89.8%-0.4%
NYC → Dubai114±10%50%88.6%-4.8%
NYC → Orlando108±17%32.4%67.6%+1.2%

Bias above zero means estimates run high. Checks compare against cached fares, which can themselves be a few days old; live checks (Duffel) will add a second reference.

Do the calls hold up? (backtest)

For past dates, we judge trip windows using only the history available then, and check what the same trip cost afterwards (up to a week before departure). A good “Book window” call is one where waiting would usually have cost more. Run npm run backtest; with real fares recorded, -- --source observed.

No backtest run yet.

Data sources

AreaStatusProviderLast refresh
Airfare (live + history)
No free, licensable source of live and historical international fares exists. Model: seasonal curve × lead time × day of week × weekly market random walk × date noise. Swap for Duffel (live) + accumulated observations / Travelpayouts (cached history).
SimulatedSimulatedFlights2026-09-27 21:29
Climate
Daily high/low, rain, humidity, sunshine, daylight, 2015–2024, per city. Free tier is non-commercial; paid plan needed at launch. CC-BY 4.0.
RealOpen-Meteo Historical API (ERA5)2026-09-28 23:22
Exchange rates
Daily series, last ~13 months. Drives the “currency is weak” note in Why Now.
RealFrankfurter (ECB reference rates)2026-09-28 23:46
Public holidays
National holidays for 2025–2027. Thailand isn't covered; Songkran is in the curated moments.
RealNager.Date2026-09-28 23:46
Crowds / seasonality
1–5 demand level by month, plus moments and holiday overlap.
Curateddestinations.ts—
Events / moments
Typical windows (cherry blossom, Día de Muertos…). Candidates: PredictHQ (paid), Ticketmaster Discovery (free key, concerts/sports).
CuratedCuratedEvents—

More

Worked examples (how the engine tells cheap from good, on simulated fixtures) · Map · Tracked deals feed · Home city