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 directly from the agencies that publish them, and archives every response byte for byte.
- 2
Normalize
Different geographic and source formats are standardized against one canonical location model, 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 six signals and one Area Score, under a versioned configuration.
- 5
Interpret
A deterministic rules engine turns 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.
The pipeline
Every number on the site comes from AreaProfile’s own database. Visitors never trigger a request to a government API. Data moves through the same path every time:
- Collect. A dedicated collector per provider fetches the official file or endpoint.
- Archive. The raw response is stored byte-for-byte with its SHA-256 hash, so any figure can be reproduced later.
- Validate. Values are range-checked, suppression sentinels are removed, and unexpected schema changes stop the run rather than corrupting the store.
- Resolve geography. Source geography is mapped to AreaProfile’s canonical location model through weighted crosswalks.
- 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 location model: 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; climate is judged against absolute comfort curves instead, because a percentile of temperature is not meaningful.
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.
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 penalising July highs above 88°F, and 25% a winter-cold term that begins penalising 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.
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), labour-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_v1, effective 2026-08-29. Methodology versions are stored, so a score calculated today remains reproducible after the formula changes.
| Signal | Weight |
|---|---|
| Opportunity | 27.8% |
| Physical resilience | 22.2% |
| Growth | 16.7% |
| Climate | 16.7% |
| Access | 11.1% |
| Economic stability | 5.5% |
Why these weights
Opportunity carries the most weight because employment and earnings are the factors people most often relocate for. Physical resilience follows because hazard exposure is difficult to reverse once you have moved. Growth and climate are weighted equally as quality-of-life and trajectory signals. Access and stability are supporting context. A score is withheld unless opportunity, resilience, growth and climate are all available plus at least one more signal, so a score never stands on a thin subset of the data.
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. Of the profiles AreaProfile publishes, this is the single most common reason a page is held back from search engines.
Taxes
The blueprint for AreaProfile reserves a tax dimension. No tax dataset has yet met the source admission test for coverage, transparent methodology and useful update cadence, so V1 ships without one and the remaining weights are scaled proportionally. When a tax source is admitted it will arrive as a new scoring version, not as a silent change to this one.
Written statements
The sentences on a profile — the quick read, the section summaries — are generated by a deterministic rules engine. A rule has an explicit numeric condition and emits a sentence built from the values that satisfied it. No language model writes a factual claim on AreaProfile, and nothing is asserted that is not traceable to a stored number. Read the editorial policy for where AI is and is not used.
Which profiles are published
AreaProfile loads the full national geography but publishes deliberately. A profile is offered to search engines only when it passes every quality check: resolved geography, at least twelve measured values across four or more categories, three independent sources, comparative context, two chartable datasets, an Area Score or equivalent, a quick read, and no open critical data anomalies.
1,001 profiles currently meet that bar. Profiles that do not still work for a visitor who lands on them — they are simply marked noindex, follow.
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 labelled 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.
Nothing on this site is filled in by a language model, and no gap is papered over with prose. An absent number appears as absent.
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.