Methodology
AreaProfile publishes how it works. The moat is in execution, history and normalization — not in hiding the fact that a weighted score exists.
How AreaProfile works
- 1
Collect
AreaProfile gathers authoritative public datasets from the agencies that publish them, and archives every response byte for byte. One is read through an intermediary: the school data comes via the Urban Institute, which republishes the federal releases unaltered.
- 2
Normalize
Different geographic and source formats are standardized against one canonical geography, with the unit, source period and margin of error kept alongside every value.
- 3
Compare
Metrics are ranked against cohorts of the same location type — cities against cities, ZIP areas against ZIP areas — nationally, within state, and against named peer groups.
- 4
Score
Standardized Profile Scores combine those comparisons into eight signals and one Area Score, under a versioned configuration.
- 5
Interpret
Fixed rules turn the numbers into sentences. Every statement stores the values that produced it.
- 6
Update
Each source refreshes on its own release schedule, and each figure shows the period it actually covers.
How a number gets here
For what each measure can and cannot tell you, read Reading the numbers.
Every figure AreaProfile measures, compares or scores is already stored before you arrive. One thing is not: the current-conditions card beside the climate normals is read from the National Weather Service when the page opens, because “right now” cannot be served from a cache built yesterday. Nothing from it enters a score. Every other number travels the same path:
- Collect. The official release is fetched from the agency that publishes it, or in the case of the school data from the Urban Institute, which republishes the federal files without alteration. Which is which is recorded on the data sources page.
- Archive. An exact copy of the file is kept, with a fingerprint that proves it has not been altered, so any figure can be traced back to the release it came from.
- Check. Values are range-checked, codes that stand for “withheld” are never read as numbers, and if a release arrives in an unexpected format the update stops rather than damaging what is already stored.
- Resolve geography. Each source’s geography is matched to AreaProfile’s own map of places, and where one area spans two, the share of each is recorded.
- Normalize. The value is written with its unit, source period, geography vintage and margin of error.
- Snapshot. The historical series is appended to. Nothing is deleted because a newer figure arrived.
- Derive. Percentiles, signals and the Area Score are calculated, and every input is recorded so the result can be taken apart.
Geography
AreaProfile keeps its own canonical geography: 70,333 states, counties, incorporated places, metropolitan areas and ZIP Code Tabulation Areas, each with FIPS codes, an internal point and a geography vintage.
Relationships between geographies come from the Census 2020 relationship files, never from matching place names. A ZIP that spans two counties is stored as two weighted relationships, and the weight’s basis — land area, population or housing units — is stored alongside it.
ZIP codes and ZCTAs
USPS ZIP codes are mail delivery routes; they are not areas. The Census Bureau publishes statistics for ZIP Code Tabulation Areas, which approximate ZIP geography but are not identical to it. AreaProfile ZIP profiles use ZCTA statistics and say so. A handful of ZIP codes — those used only for post-office boxes or single high-volume recipients — have no ZCTA and therefore no profile.
When a figure is not published for a small geography
Labor-force and building-permit data are not published for ZIP areas. Where a ZIP profile shows those figures, it is showing the value for the city containing that ZIP, and the page states that explicitly beneath the section. AreaProfile does not silently downscale a figure to a geography its source never measured.
Percentiles and peer groups
A raw number means little without context. Every metric is ranked against locations of the same type — cities against cities, ZIP areas against ZIP areas — across three cohort families: national, within-state, and named peer groups defined by population band. A cohort with fewer than twelve members does not produce a percentile.
Where a page says “top 18% nationally”, it means among every location of that type AreaProfile has measured for that metric. The size of that cohort is shown next to the claim.
Signals
Signals convert normalized metrics into comparable 0–100 dimensions. Most inputs are converted to a national percentile before weighting. Four are not: climate is judged against absolute comfort curves, because a percentile of temperature is not meaningful; airport access, hazard loss rate and housing affordability are also judged on absolute scales; and school proficiency is ranked within its own state, since states test differently.
Opportunity
Combines the current unemployment rate, one- and three-year change in employment, median household income and the share of adults holding a four-year degree. Each input is converted to a national percentile against locations of the same type before weighting, so a city is compared with cities and a ZIP with ZIPs.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Unemployment rate | 30% | inverse percentile | yes |
| Employment change (year over year) | 20% | percentile | no |
| Employment change (3 years) | 15% | percentile | no |
| Median household income | 20% | percentile | yes |
| Bachelor's degree or higher | 15% | percentile | no |
Produced only when inputs covering at least 60% of the signal’s weight are available.
Physical resilience
Derived from the FEMA National Risk Index. 70% is the inverse of FEMA's annualized loss rate national percentile — expected loss per unit of exposed value — and 30% is the community resilience percentile. AreaProfile deliberately does not use FEMA's composite risk score here: that measure rises with the amount of exposed buildings and population, so it would rate a large city as high-hazard purely for being large. Atlanta scores 96 on FEMA's composite but sits in the 6th percentile for loss rate, and the loss rate is the figure that describes what exposure actually means for a household.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Hazard loss rate | 70% | direct | yes |
| Community resilience | 30% | percentile | no |
Produced only when inputs covering at least 70% of the signal’s weight are available.
Schools
Mathematics proficiency (45%) and reading proficiency (35%), each ranked against other places in the same state, plus students per teacher (20%) ranked nationally. Proficiency is deliberately compared within state rather than across the country: every state writes its own test and sets its own cut score, so a national ranking would measure how demanding each state’s standard is rather than how its schools are doing. Proficiency is from the 2018–19 school year, the last full year of testing before the pandemic; students per teacher is from the current 2024–25 directory. So this signal does combine two periods six years apart — four fifths of it describes how students tested before the pandemic and one fifth describes how the schools are staffed now. Each figure is labeled with its own period wherever it appears, and the two are never averaged into a single measure of a single year. Proficiency also tracks the circumstances students arrive with, not only what a school adds, which is why free and reduced-price lunch eligibility is shown alongside it and never scored.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Math proficiency | 45% | state percentile | yes |
| Reading proficiency | 35% | state percentile | no |
| Students per teacher | 20% | inverse percentile | no |
Produced only when inputs covering at least 50% of the signal’s weight are available.
Growth — Development Momentum
Built from the Census Building Permits Survey and the Population Estimates Program: permitted units per 1,000 residents over the trailing twelve months (30%), the change against the prior twelve months (20%), the change against three years earlier (15%), four-year population change (20%) and three-year employment growth (15%). Permit volume alone is not the signal — pace relative to population, direction of travel, and whether people are actually arriving all matter. Population change is taken from the annual estimates rather than from ACS five-year releases, which share four years of sample and cannot be compared year to year.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Permits per 1,000 residents | 30% | percentile | yes |
| Permit change (year over year) | 20% | percentile | no |
| Permit change (3 years) | 15% | percentile | no |
| Population change (4 years) | 20% | percentile | no |
| Employment change (3 years) | 15% | percentile | no |
Produced only when inputs covering at least 50% of the signal’s weight are available.
Climate
A documented general-purpose comfort measure: 45% the number of months whose normal average temperature falls between 55°F and 80°F, 30% a summer-heat term that begins penalizing July highs above 88°F, and 25% a winter-cold term that begins penalizing January lows below 35°F. Climate preference is personal, so Customize Your Score lets you weight warmer or cooler conditions instead.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Comfortable months | 45% | direct | yes |
| Average July high | 30% | direct | yes |
| Average January low | 25% | direct | yes |
Produced only when inputs covering at least 100% of the signal’s weight are available.
Housing affordability
Rent as a share of income (55%) and the ratio of median home value to median household income (45%), both from the same ACS release so the comparison is like for like. Each is scored against an established absolute threshold rather than against other places: 30% of income is the long-standing US definition of a cost-burdened household, and a price-to-income ratio around three is the historic benchmark for an affordable market. A percentile would mislead here, because AreaProfile publishes places above a population floor and the ZIP areas, counties and metros around them, a set that skews more expensive than the national spread of all places — measured that way the typical published profile scored 22 out of 100, which describes the sample rather than the housing. This measures housing cost against local earnings; it is not a cost-of-living index and excludes transport, groceries, healthcare, insurance and taxes.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Rent as a share of income | 55% | direct | yes |
| Home price to income | 45% | direct | no |
Produced only when inputs covering at least 50% of the signal’s weight are available.
Access
Distance to the nearest major airport (70%) and the number of major airports within 100 miles (30%), both scored on an absolute scale rather than against peers. A percentile would be misleading here: judged against other large cities, a city with an airport nine miles away looks merely average, when in absolute terms that is excellent access. Full marks at ten miles or less, falling to zero at 120 miles. "Major airport" is an AreaProfile classification derived from FAA data — a public-use civil airport with a paved runway of at least 8,000 feet — not an FAA hub designation. V1 deliberately stops there rather than inferring service quality from weak inputs.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Distance to major airport | 70% | direct | yes |
| Major airports within 100 miles | 30% | direct | yes |
Produced only when inputs covering at least 100% of the signal’s weight are available.
Economic stability
Poverty rate (40%, inverted), labor-force participation (35%) and housing vacancy rate (25%, inverted), each as a national percentile against locations of the same type.
| Input | Weight | Transform | Required |
|---|---|---|---|
| Poverty rate | 40% | inverse percentile | yes |
| Labor force participation | 35% | percentile | no |
| Vacancy rate | 25% | inverse percentile | no |
Produced only when inputs covering at least 60% of the signal’s weight are available.
Area Score
The Area Score is a weighted mean of the signals, published as area_score_v3, effective 2026-08-29. Methodology versions are stored, so a score calculated today remains reproducible after the formula changes.
| Signal | Weight |
|---|---|
| Opportunity | 22.0% |
| Physical resilience | 17.0% |
| Schools | 13.0% |
| Growth | 13.0% |
| Climate | 13.0% |
| Housing affordability | 13.0% |
| Access | 5.0% |
| Economic stability | 4.0% |
Why these weights
Opportunity carries the most weight because employment and earnings remain what people most often move for, and physical resilience follows because hazard exposure is the hardest thing to reverse once you have moved. Schools, growth, climate and housing affordability are weighted equally beneath them: each decides whether a place works for a particular household, and a standardized score has no basis for ranking one above the others. Access and stability are supporting context. A score is withheld unless opportunity, resilience, growth and climate are all present plus at least one more signal — schools is not among the required components, because the most recent nationally comparable proficiency data does not cover every place and its absence should not suppress a score six other signals can carry.
When no score is published
A score requires opportunity, resilience, growth, climate to all be available, plus at least 5 signals in total. Where that threshold is not met the profile says “Area Score unavailable” rather than scoring a location on a thin subset of its data. This is a real constraint across the geographies AreaProfile models rather than the ones it publishes: most of the seventy thousand carry too little to be scored, which is a large part of why they are not published. It also binds on 48 of the 9,533 profiles that are published — those pages carry every other measure and say plainly that the score is unavailable, rather than scoring on a subset.
Taxes
The blueprint for AreaProfile reserves a tax dimension. Property taxes are now published: the median bill owners pay and the rate it works out to against the median home value, from the American Community Survey. They are shown on the profile and in the Finder but are not part of the Area Score, because a tax figure means little without the income, sales and other taxes beside it, and no source for those has yet met the source admission test for coverage, transparent methodology and useful update cadence. The Area Score ships without a tax component. When a tax source is admitted it will arrive as a new scoring version, not as a silent change to this one.
Figures published for a wider area
Some sources publish for a county or a metropolitan area and not for a town. AreaProfile does not estimate a town’s own value from them. It shows the wider area’s figure on the town’s profile, says whose it is beside the number, and applies the same rule each time:
- Labor, reported crime and deaths come by county or police department. A city below the size a source reports for shows its county’s labor figures, and the profile names the county.
- Cost of living is published for metropolitan areas and states, and a city carries its metro’s, since people shop and rent across a metro rather than within a city limit.
- Home price change is published for states, metropolitan areas and, for the largest metros, metropolitan divisions. A city carries its metro’s figure or its division’s, and a city outside every metro carries its state’s non-metropolitan figure. The District of Columbia is read from its own series, not from the division it sits in. A place that lies across two divisions gets none, since no one division describes it.
- Migration is published by county. A city carries its county’s figures only where that county holds at least 60% of the city’s area, so a city split across counties gets none; New York City, which is exactly five counties, carries theirs combined.
A figure that belongs to a wider area is never scored as if it described the town alone without saying so, and it is counted, per source, on the coverage page.
Written statements
The sentences on a profile — the quick read, the section summaries — are generated by a fixed set of rules. A rule has an explicit numeric condition and produces a sentence built from the values that satisfied it, so nothing is asserted that cannot be traced back to a stored number. Read the editorial policy for how the statements are written.
Which profiles are published
AreaProfile models the full national geography, and gives every place an address, but publishes deliberately. Curation chooses which places are published at all, and each of those has to pass every quality check: resolved geography, at least 40 measured values across at least 7 of the ten data categories, 3 independent sources, at least 40 percentile comparisons, 2 chartable datasets, an Area Score or at least 4 signals in its place, a quick read of at least 2 observations, no open critical data anomalies and, for a state, metro area or county, at least one published profile beneath it. Those numbers are read from the same file the pipeline enforces them from.
9,533 profiles are published, and 6,406 of them are offered to search engines. ZIP profiles meet the same bar but are kept out of search engines’ results and carry no advertising, because most of what a ZIP page shows is inherited from its city or county. A place that is not published still works for a visitor who follows a link to it: the page loads, is marked noindex, carries no advertising and says which figures are missing.
Freshness
AreaProfile never displays “updated today” because a page was regenerated. Each figure shows the period its source actually covers — a 2023 ACS five-year estimate says so, and a July 2026 permit release says so. The date a profile was recalculated is shown separately and labeled as such.
Missing data
Where a value is not published for a geography, AreaProfile shows the containing geography’s figure and says so on the page — labor-force and permit statistics are not published for ZIP areas, and wage statistics are published only for metropolitan areas. Where a value is not available at all, the metric is omitted rather than estimated, and where too many inputs are missing the score itself is withheld.
No gap is papered over with prose. An absent number appears as absent.
Reported crime, and why it is published narrowly
Reported crime counts what was reported to and recorded by police, which is not the same as what happened, and it is the figure most often misread. Participation in the FBI’s collection is voluntary, so whether a department reported at all varies from year to year, and a city that draws a large daytime workforce carries incidents its residents did not generate.
AreaProfile publishes a rate only where a department submitted every month of a year. A partial year is withheld rather than scaled up to look complete, and arrest counts, calls for service and news volume are never substituted for it. Because the collection is organized by department rather than by town, the figure appears on city profiles and not on county, metro or ZIP pages. Where a department’s jurisdiction differs noticeably from the population of the city it is printed on, the profile says so beside the number.
It is shown and not scored. Uneven participation between places and between years would put noise into the Area Score that no reader could see, so the measure informs the page without moving the number at the top of it.
What AreaProfile does not measure
Two things people reasonably expect are absent (one of them only in part), and each is absent for a stated reason rather than an oversight. Two others were listed here for most of this project’s life and no longer belong. Cost of living was held back on the grounds that no source published it nationally, which was simply untrue: the Bureau of Economic Analysis has published regional price parities since 2008. Reported crime was held back on the grounds that departmental reporting is too uneven to publish honestly, which was half right — it is uneven, so AreaProfile now publishes it only for city departments that reported every month of a year, and withholds it everywhere else. Both are on the profiles they belong on, with their limits stated.
- Income and sales taxes
- No public dataset covers them nationally with a method open enough to check. Property taxes are published, from the American Community Survey, and are shown but not scored. Nothing on this site is individualized tax advice.
- A single school rating
- School data is published here — enrollment, staffing, proficiency, free-lunch share. A letter grade is not, because each state writes its own test and sets its own cut score. Proficiency is ranked within its state instead, so the comparison is against the schools a family is actually choosing between.
Score versioning
Weights, formulas, availability thresholds, the effective date and the rationale are stored against a named version. When the methodology changes it becomes a new version rather than silently altering the current one, so a score calculated today stays reproducible afterwards. Every signal and score also records its inputs, their normalized values, weights and contributions, which is what makes “why is this 84?” a question with an exact answer.
Corrections
Every profile carries a report link. Reports are checked against the archived source record before anything changes. See the corrections policy.