Methodology
Readiness asks one question: are the ingredients for a revival present? It is slow-moving and graded A to F. Momentum asks a second: is anything actually happening? It is a score with three labels. This page is written so a town official can argue with either, line by line.
The dataset
Download the full dataset (CSV): one row per town with every metric, its period and suppression flag, the readiness score and grade, and the momentum score and label. Licensed CC BY 4.0; the underlying sources keep their own terms, listed on Sources. Generated 2026-11-02 with methodology version v1.
Six factors and their weights
| Factor | Weight | What it asks | Inputs |
|---|---|---|---|
| Access | 25% | How easy it is to reach the city, a regional hub and a train. | Drive to New York City, Drive to nearest regional hub, Nearest rail station |
| Building stock | 15% | Whether there is a pre-war fabric worth restoring. | Homes built before 1940, Historic district present |
| Main street | 15% | How much storefront activity already exists per resident. | Businesses per 1,000 residents |
| Price headroom | 15% | Whether prices leave room to rise without having already been found. | Median home value, Metro median home value |
| Services | 15% | Broadband, the share of residents under 18, and a hospital within reach. | Broadband subscription, Share under 18, Hospital within 20 minutes |
| Civic capacity | 15% | Whether the state has backed the downtown with a revitalization award. | Latest downtown award, Latest award year |
A factor's score is the mean of its usable inputs, each normalised to 0–1 by the curve below. Readiness is the weighted sum of factor scores, on a 0–100 scale, renormalised over the factors that have at least one usable input.
Every curve
Each input passes through one named curve. If a curve cannot be explained in a sentence it is wrong, so here is the sentence.
Access
- Drive to New York City (Routed driving time to Grand Central Terminal, off-peak (OSRM over OpenStreetMap).)
drive_min_nyc: lower is better; scores 1 at 60 min or less, falling in a straight line to 0 at 240 min. - Drive to nearest regional hub (Routed driving time to the nearest of Albany, Utica, Poughkeepsie, Kingston, Newburgh, Middletown or White Plains.)
drive_min_regional_hub: lower is better; scores 1 at 15 min or less, falling in a straight line to 0 at 90 min. - Nearest rail station (Straight-line distance to the nearest Amtrak or Metro-North station.)
miles_to_rail_station: lower is better; scores 1 at 2 mi or less, falling in a straight line to 0 at 30 mi.
Building stock
- Homes built before 1940 (Share of housing units built in 1939 or earlier (ACS 5-year, B25034).)
pre1940_share: higher is better; scores 1 at 0.6 or more, falling in a straight line to 0 at 0.1. - Historic district present (Whether a National Register historic district lies within the place.)
has_nrhp_district: 1 when a National Register historic district lies within the place, otherwise 0.
Main street
- Businesses per 1,000 residents (Mapped storefront businesses per 1,000 residents.)
osm_business_per_1k: higher is better; scores 1 at 20 per 1,000 or more, falling in a straight line to 0 at 2 per 1,000.
Price headroom
- Median home value (Median value of owner-occupied homes (ACS 5-year, B25077).)
median_home_value divided by metro_median_home_value. price ratio to the metro median: cheapest is not best: a town priced well below its metro has headroom, one priced far below it has no demand yet, and one at or above it has already been found; scores 1 at 0.6, and 0 at or below 0.25 and at or above 1.2, with straight lines between. - Metro median home value (The metro-area median where the town lies in one, otherwise the county median.)
Used as the denominator for price headroom; it has no curve of its own.
Services
- Broadband subscription (Households with a cable, fiber-optic or DSL subscription (ACS 5-year, B28002). Not a speed measure.)
broadband_subscription_share: higher is better; scores 1 at 0.9 or more, falling in a straight line to 0 at 0.5. - Share under 18 (Residents under 18 over total population (ACS 5-year, B09001 / B01003).)
under_18_share: higher is better; scores 1 at 0.25 or more, falling in a straight line to 0 at 0.12. - Hospital within 20 minutes (Whether the nearest hospital is a 20-minute drive or less.)
hospital_within_20min: 1 when a hospital is within a 20-minute drive, otherwise 0.
Civic capacity
- Latest downtown award (Amount of the most recent DRI or NY Forward award; zero when none.)
dri_award_amount: higher is better; scores 1 at 1e+07 USD or more, falling in a straight line to 0 at 0 USD. - Latest award year (Year the most recent DRI or NY Forward round was announced.)
dri_award_year: 1 when the award is at most 3 years old, fading in a straight line to 0.3 at 10 years and staying there. Only applies to towns that have won an award; its absence does not reduce coverage.
Grades
Grades are curved within population bands, because Census sample quality differs sharply between small villages and cities. Towns under 5,000 residents are ranked against each other; towns at or above it likewise. Within a band the percentile cut-offs are:
- A: 90th percentile and above
- B: 75th percentile and above
- C: 50th percentile and above
- D: 25th percentile and above
- F: everything below the D cut-off
Momentum
Momentum is a separate score, version v2, built by the same engine from changes over time. It is not curved against other towns: every input is judged against a benchmark, so a town keeping pace scores 0.5 on each curve and 50 overall. Home values and population are compared with the median New York place in the same source file, and tax-filer migration with the median New York county, so a statewide boom or drain does not read as momentum everywhere; permits are compared with the town's own rate two years earlier. Migration is a county figure, because the IRS publishes nothing finer: every town in a county carries the same one, and the page says so. Rent is shown on town pages but not scored, because Zillow publishes a rent index for few villages.
| Factor | Weight | What it asks | Inputs |
|---|---|---|---|
| Prices | 35% | Whether home values rose faster over the past year than in the typical New York place. | Home value change, one year, Typical NY place home value change |
| Building | 25% | Whether more homes are being permitted than two years ago, per resident. | Change in permit rate |
| People | 40% | Whether the population has held up better since 2020 than in the typical New York place, and whether the county gains tax filers faster than the typical New York county. | Population change since 2020, Typical NY place population change, County net migration of tax filers, Typical NY county net migration |
Prices
- Home value change, one year (Zillow home value index, latest month against the same month a year earlier.)
zhvi_change_1y minus zhvi_change_1y_ny_median. one-year home value change against the typical New York place: higher is better; scores 1 at 5 percentage points or more, falling in a straight line to 0 at -5 percentage points. - Typical NY place home value change (Median one-year change in the Zillow home value index across every New York place in the file. The momentum benchmark.)
The benchmark another input is measured against; it has no curve of its own.
Building
- Change in permit rate (The latest three-year permit rate, in units per 1,000 residents a year, minus the three-year rate ending two years earlier.)
permit_rate_change: higher is better; scores 1 at 2 units per 1,000 residents a year or more, falling in a straight line to 0 at -2 units per 1,000 residents a year.
People
- Population change since 2020 (Census population estimates, 2020 base to the latest year.)
population_change minus population_change_ny_median. population change since 2020 against the typical New York place: higher is better; scores 1 at 3 percentage points or more, falling in a straight line to 0 at -3 percentage points. - Typical NY place population change (Median change since 2020 across every New York place in the estimates file. The momentum benchmark.)
The benchmark another input is measured against; it has no curve of its own. - County net migration of tax filers (Inflow minus outflow, per 1,000 of the county's filing population the year before (non-migrants plus outflow). County level; every town in a county carries the same figure.)
county_net_migration_rate minus county_net_migration_rate_ny_median. county net migration of tax filers against the typical New York county: higher is better; scores 1 at 5 per 1,000 filers or more, falling in a straight line to 0 at -5 per 1,000 filers. - Typical NY county net migration (Median net migration rate across New York's counties in the same IRS files. The momentum benchmark.)
The benchmark another input is measured against; it has no curve of its own.
Labels
The labels are absolute cut-offs on the 0–100 momentum score, not percentiles, because momentum measures direction rather than rank:
- Rising: 60 and above
- Steady: 40 up to 60
- Fading: below 40
Below 75% coverage, which means fewer than 3 of the 4 scored inputs, the town's page shows its data and no label. Permit changes are suppressed when any of the five years involved was reported for fewer than twelve months, and Zillow does not cover every village; both count as missing, never as zero.
Coverage and missing inputs
A missing input never scores zero. It is left out of its factor, and the town's coverage (usable inputs over applicable inputs) drops. Below 60% coverage the page is published with its data and no grade, because a grade on that little evidence would be a guess.
Suppression
Any American Community Survey figure whose margin of error exceeds 40% of the estimate is kept but marked suppressed: it is shown as not available at this sample size and excluded from the score. Permit rates are suppressed when any of the three years was reported for fewer than twelve months.
A suppressed value is not the same as a missing one: the estimate exists but its margin of error is too wide to stand on. The site says "not available at this sample size" for the first and "not available" for the second, and never shows a zero for either.
Sanity bounds
Before anything is published, every metric is checked against a wide sanity range; a value outside it stops the run rather than publishing a unit or parsing mistake.
Show the ranges
| Metric | Low | High |
|---|---|---|
| Median home value | 10000 | 5000000 |
| County median home value | 10000 | 5000000 |
| Metro area median home value | 10000 | 5000000 |
| Metro median home value | 10000 | 5000000 |
| Median gross rent | 200 | 6000 |
| Median household income | 10000 | 500000 |
| Vacant housing share | 0 | 0.6 |
| Homes built before 1940 | 0 | 1 |
| Broadband subscription | 0 | 1 |
| Poverty rate | 0 | 0.8 |
| Commutes over an hour | 0 | 1 |
| K-12 enrollment | 0 | 20000 |
| Residents under 18 | 0 | 30000 |
| Population (ACS) | 500 | 60000 |
| Share under 18 | 0 | 0.7 |
| K-12 enrollment change | -0.9 | 3 |
| Under-18 population change | -0.9 | 3 |
| Population | 500 | 60000 |
| Population change since 2020 | -0.5 | 1 |
| Housing units permitted | 0 | 3000 |
| Months reported | 0 | 12 |
| Units permitted per 1,000 residents | 0 | 80 |
| Zillow home value index | 20000 | 5000000 |
| Zillow observed rent | 300 | 8000 |
| Home value change, one year | -0.5 | 1 |
| Typical NY place home value change | -0.5 | 1 |
| Rent change, one year | -0.5 | 1 |
| Typical NY place rent change | -0.5 | 1 |
| Change in permit rate | -80 | 80 |
| Typical NY place population change | -0.5 | 1 |
| County tax-filer inflow | 0 | 2000000 |
| County tax-filer outflow | 0 | 2000000 |
| County net migration of tax filers | -300 | 300 |
| Typical NY county net migration | -300 | 300 |
| Historic districts | 0 | 30 |
| Historic district present | 0 | 1 |
| Nearest rail station | 0 | 120 |
| Main street businesses | 0 | 5000 |
| Businesses per 1,000 residents | 0 | 300 |
| Drive to New York City | 15 | 420 |
| Drive to nearest regional hub | 0 | 240 |
| Drive to nearest hospital | 0 | 120 |
| Hospital within 20 minutes | 0 | 1 |
| Straight-line miles to NYC | 10 | 300 |
| Straight-line miles to nearest hub | 0 | 150 |
| State downtown awards | 0 | 5 |
| Latest downtown award | 0 | 20000000 |
| Latest award year | 2016 | 2030 |
Known limits
- Broadband is a subscription share from the Census, not a speed tier; open speed data sits behind a login we do not use.
- Drive times are off-peak routed estimates over OpenStreetMap; straight-line distances are kept as separate figures and never substituted.
- State downtown awards are read from ny.gov program pages; an amount is taken from the page only when it matches a size the programs actually pay, otherwise the program's standard award is recorded.
- Zillow does not cover every village. Where it does not, the figure is missing, not estimated.
- OpenStreetMap completeness varies by town, and the main-street factor inherits it: a town whose shops are not yet mapped scores low there until they are. Corrections belong in OpenStreetMap itself, and the next monthly refresh picks them up.
- Momentum's migration input is a county figure, the finest the IRS publishes, so it cannot tell one town in a county from another. Address-vacancy data from the USPS is released by HUD to governmental and non-profit users only, so it is not used; any future addition is a new momentum version, not a silent change to this one.