How we score
A trip page with scores rates its month from 1 to 10 in each aspect, where 10 is best for the visitor. Every score is a fixed formula over official, dated measurements. This page states every formula, band and weight, and the site computes the scores from these same values each time it is built.
Principles
- Published formulas. Each aspect is a fixed formula over measured inputs, and this page states every formula, band and weight.
- Official, measured inputs. Inputs come from official publishers: national statistics offices, central banks, ministries and official tourism boards, airport operators and aviation authorities, national weather services and the World Meteorological Organization, and environmental agencies. Modelled or estimated data never counts, and neither does data we buy.
- No measurement, no score. When an input is missing or out of date, the aspect says "not measured". We never estimate a value, fill a gap, or borrow a value from another destination. The one exception is a competition calendar that hasn't published a month yet: it can only add uniqueness points, so the month is scored from the other calendars and marked * until it does (see Uniqueness).
- 10 is best for the visitor in every aspect: the best weather, the quietest month, the most daylight, the most dated events, the cleanest air.
- The same rules, and the same kinds of source, for every destination. Where a destination can only be measured with a different kind of series, the page names it.
- Scored from reviewed data. Scripts fetch the inputs outside the site build, a person reviews every change, and the build makes no network calls.
- No safety scores, no prices, no advice. No merchant data feeds a score, and no commission affects one.
The comfort band (70–86 °F), the deduction slopes, the overall weights, the point values, the crowd bands, the 3-year window, the Good-day rules for air and the 25-mile radius are our own rule, chosen by us. They are not measured data.
The arithmetic
round(x) = ⌊x + 0.5⌋ (round half up) clamp: to the range 1–10 score = clamp(round(x))
Scores are whole numbers. Workings show each value to two decimals (a ratio or a share to three), or more where fewer would hide which way it rounds; each aspect score is computed from the unrounded values. The overall is computed from the whole-number aspect scores shown on the page, so you can recompute it from the page.
Weather
Inputs: each month's mean daily high temperature and mean monthly precipitation, from one official set of climate normals (long-term averages). We use the national weather service's most recent standard normals where they exist, such as NOAA's 1991–2020 normals for US stations, and otherwise the World Meteorological Organization's World Weather Information Service, which republishes a national service's normals. The normals period must end in 1990 or later, and the page names the station and the period. A trip page uses one station for its weather facts and its score.
T_pen = max(0, (70 − tmax_f) / 4) + max(0, (tmax_f − 86) / 2), at most 6 R_pen = min(4, precip_mm / 50) weather = clamp(round(10 − T_pen − R_pen))
| Mean daily high | Deduction |
|---|---|
| Below 70 °F | 1 point per 4 °F below 70 °F |
| 70–86 °F (the comfort band) | None |
| Above 86 °F | 1 point per 2 °F above 86 °F |
| Largest deduction | 6 points |
| Monthly precipitation | Deduction |
|---|---|
| Each 50 mm (about 2 inches) | 1 point |
| Largest deduction | 4 points |
Why precipitation and not rain days: official sources count a rain day at different thresholds, and some publish none, so the counts aren't comparable. Millimetres of precipitation mean the same thing in every source.
Not scored: sunshine and humidity, which sources publish unevenly (where a source publishes them, the page shows them as facts), and hurricane season, which is a risk rather than comfort and stays a sourced fact.
Crowds
Input: one official monthly series for the destination. The highest-ranked series that exists is used, and the page names it (for example "based on monthly hotel guests in Barcelona, INE"). In order of preference:
| Rank | Series |
|---|---|
| 1 | Guests or nights at tourist accommodation in the destination area. |
| 2 | Visitor arrivals to the destination. |
| 3 | Passengers at the destination's main airport, all flights, from the operator or the aviation authority. This count includes residents and connecting passengers. |
| 4 | Hotel occupancy rate. |
Airport passenger counts include residents and connecting passengers, not only visitors, and no airport series includes cruise passengers. Where that leaves out a known visitor stream, as it does for Key West, the destination's page says so.
Where an official publisher republishes hotel figures that a company compiles, the page prints the attribution the record states, such as "data compiled by STR, Inc.", beside the series.
x(y,m) is the series' value for month m of year y. r(y,m) is that month's share of its own year's mean, which removes inflation and growth, and r(m) is the median of r(y,m) over the window years. With two years that's their mean, and with one it's the value itself. The median keeps one disrupted year, such as a hurricane, from deciding a month on its own.
The window is the latest calendar years for which the series has all 12 months, up to three of them. The newest must be no older than two years before the build year. With no qualifying year, the aspect is "not measured".
Series geography: we use the smallest published area that contains the destination, in this order: the city or municipality, the metro area, then the region (for example NUTS 2). A national series never qualifies, because national seasonality is a different shape: France's summer visitors crowd the coast, not Paris. The one exception is a destination that is itself the country. A region qualifies only when the city has no series of its own.
r(y,m) = x(y,m) / mean(x(y,1..12)); r(m) = median of r(y,m) over the window years crowds = clamp(round(10 − 9 × (r(m) − 0.60) / 0.80))
Labels follow the score: Quiet (8–10), Moderate (4–7), Busy (1–3).
| Score | Ratio to the year's monthly average | Label |
|---|---|---|
| 10 | 0.6444 or less | Quiet |
| 9 | more than 0.6444, up to 0.7333 | Quiet |
| 8 | more than 0.7333, up to 0.8222 | Quiet |
| 7 | more than 0.8222, up to 0.9111 | Moderate |
| 6 | more than 0.9111, up to 1.0000 | Moderate |
| 5 | more than 1.0000, up to 1.0889 | Moderate |
| 4 | more than 1.0889, up to 1.1778 | Moderate |
| 3 | more than 1.1778, up to 1.2667 | Busy |
| 2 | more than 1.2667, up to 1.3556 | Busy |
| 1 | more than 1.3556 | Busy |
The score comes from the formula, not from this table: the table lists the ratios, to four decimals, that give each score.
The score is relative to the destination's own year, so it can't be compared between destinations. The page says so: "compared with the rest of Key West's year". An occupancy rate moves less across the year than a count, so occupancy-based crowd scores bunch near the middle. The page names the measure, so the reader can see why.
Daylight
Input: the destination point, the coordinates the weather source publishes for its station, rounded to two decimals. For every day of the month, in the year the page shows, we compute sunrise and sunset with the NOAA Solar Calculator equations (from Meeus, Astronomical Algorithms), with the sun's centre at a zenith of 90.833°, which allows for refraction and the size of the sun's disc. D is the mean time from sunrise to sunset over the month, in hours.
daylight = clamp(round(1 + 1.5 × (D − 8))) D in hours
| Score | Mean daylight |
|---|---|
| 1 | less than 8 h 20 min |
| 2 | 8 h 20 min to less than 9 h 0 min |
| 3 | 9 h 0 min to less than 9 h 40 min |
| 4 | 9 h 40 min to less than 10 h 20 min |
| 5 | 10 h 20 min to less than 11 h 0 min |
| 6 | 11 h 0 min to less than 11 h 40 min |
| 7 | 11 h 40 min to less than 12 h 20 min |
| 8 | 12 h 20 min to less than 13 h 0 min |
| 9 | 13 h 0 min to less than 13 h 40 min |
| 10 | 13 h 40 min or more |
We check our code against NOAA's own Solar Calculator code (the US Naval Observatory's service didn't answer us), recorded on 2026-10-17. That confirms we copied NOAA's equations correctly; it doesn't check the equations themselves.
Uniqueness
An event counts for a month when all of these hold:
- It appears on one of the destination's discovery calendars: the official tourism board's events calendar, the city or municipal government's events calendar, or the official calendar of a competition on the major-sports list.
- An official source (the organizer, the city or the tourism board) gives its dates for that year, or states a recurring rule, which we quote.
- Its venue is within 25 miles of the destination point.
- Its dates overlap the month. An event that runs across months counts in each of them.
Not counted: standing programming (weekly markets, nightly shows, permanent exhibitions, regular-season league games other than the NFL international games on the major-sports list below), private or trade-only events, and public holidays with no official public event. An event found anywhere else, such as news, ticket sites or social media, counts only if it's also on a discovery calendar.
uniqueness = min(10, 1 + Σ points)
| Type | Definition | Points |
|---|---|---|
| Signature | Recurs every year and has its own page on the official tourism board's site | 3 |
| Major sports | A match, race or final from the major-sports list | 3 |
| Festival | Any other festival, fair, seasonal market or tournament of 2 days or more | 2 |
| Single-day | Any other dated public event: a parade, fireworks, a concert, a race or a celebration | 1 |
At most 2 events of each type count in a month. A month whose calendars were checked and list no qualifying event scores 1. Every destination is checked against the same three kinds of calendar: its own tourism board's and city's, and the official calendar of each competition below. The competition calendars are the same for every destination, so we check each one once, list every event it dates, and count for each destination the events within 25 miles of its point.
| Competition |
|---|
| Grand Slam tennis |
| Formula 1 Grand Prix |
| FIFA World Cup or continental championship matches |
| Abbott World Marathon Majors and World Athletics Platinum Label road races |
| Super Bowl |
| NFL regular-season international games |
| UEFA club competition finals |
| Olympic and Paralympic events |
A month is measured only when every calendar, the destination's own and each competition's, was checked within 180 days, and the destination's own calendars covered that month when they were checked. If the destination's calendar for next year isn't out yet, the month says "not measured"; it doesn't score 1.
A competition calendar that hasn't published the month yet can only add points, so the month is scored from the other calendars. At the cap of 10 that score is final. Below the cap it is provisional and carries a *, with the calendar still to publish named under the score.
Overall
overall = clamp(round(0.4 × weather + 0.25 × crowds + 0.1 × daylight + 0.25 × uniqueness)) one of crowds, daylight, uniqueness missing: overall* = clamp(round(Σ w × score over the other three / Σ w over the other three))
| Aspect | Weight |
|---|---|
| Weather | 40% |
| Crowds | 25% |
| Daylight | 10% |
| Uniqueness | 25% |
With all four aspects measured, the overall is the weighted mean above. When one of crowds, daylight or uniqueness isn't measured, the overall is the weighted mean of the other three, with their weights scaled to add up to 1, and it carries a *. An overall built on a provisional score also carries a *. Without weather, or with two or more aspects missing, the overall's cell shows "–" and the page names what's missing. Air quality is shown on its own and never enters the overall.
Air quality
Input: official monitoring of fine particles (PM2.5) from stations within 25 miles (about 40 km) of the destination point. Only background stations count wherever the publisher classifies station type: traffic and industrial stations are excluded. Where the publisher doesn't classify stations, all of them count. The record lists every station used.
The computation is done outside the site build and recorded per month:
- Daily value. A station-day is one monitor on one day. It is valid with at least 18 of 24 hourly values, or with one valid 24-hour sample. The day's value is the mean of the valid station-days.
- Good day. A day is Good when its value is 9.0 µg/m³ or less, the top of EPA's 2024 Good category.
- Valid month. A month is valid in a year when at least 75% of its days are valid.
- Good share. good_share(m) is the number of Good days over the number of valid days, pooled across the window years.
For EPA's data:
- Which monitors. EPA lists each monitor's monitoring objectives, not a station type, so every monitor within the radius counts, except those whose objective is source-oriented and those on a near-road network, the closest equivalents of industrial and traffic stations.
- Which measurement. Only EPA's regulatory fine-particle measurements count (parameter 88101). Other samplers EPA lists, which aren't regulatory monitors, are left out.
- The Good boundary. A day's value is cut off (not rounded) at one decimal before it is compared with 9.0, as EPA's Air Quality Index does.
- Which years. A year joins the window only once EPA's annual file for it is complete: EPA completes the previous year in its June update. The window is the latest such years, up to three, and the newest must be no older than two years before the build year. A month that isn't valid in a year is left out of that year, and the share pools the years where it is valid. If no year has the month valid, the month is "not measured".
air = clamp(round(1 + 9 × good_share(m)))
| Score | Share of measured days in the Good range |
|---|---|
| 1 | less than 5.6% |
| 2 | 5.6% to less than 16.7% |
| 3 | 16.7% to less than 27.8% |
| 4 | 27.8% to less than 38.9% |
| 5 | 38.9% to less than 50.0% |
| 6 | 50.0% to less than 61.1% |
| 7 | 61.1% to less than 72.2% |
| 8 | 72.2% to less than 83.3% |
| 9 | 83.3% to less than 94.4% |
| 10 | 94.4% or more |
The score comes from the formula, not from this table: the table's percentages are rounded to one decimal. The page shows the counts, the number of measured days in EPA's Good range for fine particles out of all measured days, not a health judgement.
Why PM2.5 only
EPA publishes a single 24-hour concentration range for its Good category. PM2.5 is also measured at every monitored destination in our coverage check where we could confirm the pollutant: Maui, Orlando, London, and the European Environment Agency's station lists. That breadth is an inference from those few checks, not a survey. Adding ozone would take a new decision record.
Why air quality stays out of the overall
Official monitoring is missing for several destinations, and an overall that folded in a health measure would read as a health verdict.
This is a summary of past measurements, not health advice. For today's air, see AirNow or the local agency. On a trip page, "the local agency" links to the agency that runs the destination's monitors.
Freshness
Every input (the destination point, the weather normals, the crowds series, the air-quality data, every calendar and every event) must have been checked within 180 days of the day the site is built. One that wasn't makes its aspect "not measured" from the next build on, until someone checks it again, and a date in the future never counts. For crowds and air quality, the newest year used must also be no older than two years before the build year. Weather normals are long-term averages by design; for them, the check confirms the source still publishes them.
The word beside each score
Each score carries a word for its band, the same three bands the meter colours show. The word describes the score, not the trip.
| Score | Overall | Weather | Crowds | Daylight | Uniqueness | Air quality |
|---|---|---|---|---|---|---|
| 8–10 | Excellent | Ideal | Quiet | Long days | Packed calendar | Mostly good air |
| 4–7 | Good | Mixed | Moderate | Average | Some events | Mixed |
| 1–3 | Weak | Harsh | Busy | Short days | Few events | Often poor air |
Reading the year at a glance
| Score | Tint |
|---|---|
| 8–10 | Mint |
| 4–7 | Pale grey |
| 1–3 | Grey |
The number is always printed, so the tint is never the only signal.
The table's columns start at the month the page was built (in UTC) and run twelve months forward, so a calendar month earlier than that shows next year's occurrence, labelled with its year.
The season label and typical weather
Above the scores, a trip page labels its month high season, shoulder season or low season. The label isn't a score and never enters the overall. It reads the same within-year ratios as crowds: each month's value in the crowds series divided by its year's monthly average, the median over the window's years.
- High season: a ratio of 1.10 or more. The busiest month of the year is the peak season.
- Low season: a ratio of 0.90 or less. The quietest month of the year says so.
- Shoulder season: anything between.
- A high-season month whose month before isn't high season is the start of high season. One whose month after isn't is the end. The year wraps, so January follows December.
The 1.10 and 0.90 cut-offs are our own rule. Where crowds isn't measured, the page shows no label. Beside it, the month's typical weather repeats the weather normals the weather score uses: the average high and low, the month's rain, and the number of days with rain where the source counts them. These are averages, not a forecast.
What we don't score
- Safety. Nothing scores crime, unrest, health risk or natural hazards. Hurricane season and travel advisories stay sourced facts.
- Prices. No price feeds a score, and no score shows one.
- Advice. Scores summarize official data. They aren't a recommendation, and any given year can differ.
- Merchants. No merchant data feeds a score, and no commission affects one.
Method version and changes
This is method version 1.5.0. Any change to a formula, band, weight or point value comes with a new decision record and a new version.
| Version | Date | Decision | Change |
|---|---|---|---|
| 1.5.0 | 2026-10-19 | ADR-0024 | Uniqueness weighs more in the overall: weather 40%, crowds 25%, daylight 10% and uniqueness 25%. |
| 1.4.0 | 2026-10-19 | ADR-0024 | A season label (high, shoulder or low season, from the crowds series; not a score) and the month's typical weather shown above the scores. |
| 1.3.0 | 2026-10-18 | ADR-0024 | Season dropped: it measured the same demand as crowds. The overall is weather 50%, crowds 25%, daylight 12.5% and uniqueness 12.5%. |
| 1.2.0 | 2026-10-18 | ADR-0024 | Uniqueness scored while a major-sports calendar hasn't published the month yet, marked * below the cap; the overall shown with * from four aspects when one other than weather isn't measured. |
| 1.1.0 | 2026-10-18 | ADR-0022 | Crowds, season and air quality scored; the overall shown where all five of its aspects are measured. |
| 1.0.0 | 2026-10-15 | ADR-0022 | First published method: weather, daylight and uniqueness, and the rule for the overall. |
Report an error
Found a number that doesn't match its source? Email support@roveport.com with the page and the number, and we'll check it against the source.