Resources
Methodology
The weights, the inputs, and the limits. Every score on this site is built the way this page describes — and every city page shows its own working.
The overall score (0–100)
Every city gets one composite score, built from five components. Higher is better in all five, so they can be averaged directly once each one has been put on a common 0–100 scale.
This is the only scoring model Urblytica uses. The number in the ring on a city page, the order of the rankings, and the figures in a comparison all come from this one formula — there is no second model behind the scenes. The framework in force is version 2026.10.
The five components
For each one: what it measures, which stored figures it is built from, exactly how those are converted to points, and why it weighs what it does.
- What it measures
- How safe the city is to live in, relative to every other city in the dataset.
- Built from
-
Safety score
city_metrics.safety_score - Normalization
- Published on a 0-100 scale where higher is safer, so it enters the score unchanged.
- Why this weight
- Weighted highest because readers treat it as disqualifying: no amount of cheap rent makes a dangerous city a good place to move to.
- What it measures
- What day-to-day life costs, across housing, groceries, utilities, transport and healthcare.
- Built from
-
Cost of living index (100 = national baseline)
city_metrics.cost_index - Normalization
- Inverted onto a higher-is-better scale: an index of 55 scores 100, an index of 135 scores 0, linear in between and clamped at both ends.
- Why this weight
- The second thing anyone checks, and the component with the most directly comparable underlying figures.
- What it measures
- Whether local pay actually covers local costs, and how easy it is to find work.
- Built from
-
Median household income
city_demographics.median_household_income
Income needed to live herecity_metrics.salary_needed
Unemployment ratecity_demographics.unemployment_rate - Normalization
- Two halves, averaged. Income adequacy is median household income divided by the income needed to live there: a ratio of 0.8 scores 0 and 1.6 scores 100. Unemployment is inverted, so 10% scores 0 and 2% scores 100.
- Why this weight
- A high salary in an expensive city is not an advantage, so pay is scored against local costs rather than on its own.
- What it measures
- Whether the city is gaining people and jobs or losing them.
- Built from
-
Population growth rate
city_demographics.population_growth_rate
Job growth ratecity_economy_signals.job_growth_rate - Normalization
- Averaged across whichever of the two is available. Population growth of -1%/yr scores 0 and 3%/yr scores 100; job growth of -1%/yr scores 0 and 4%/yr scores 100.
- Why this weight
- Forward-looking, and deliberately weighted below the three components describing life in the city today.
- What it measures
- How straightforward it is to start and run a business locally.
- Built from
-
Business climate assessment
city_scores.business_score - Normalization
- Used on its published 0-100 scale. This is the research model's assessment of local conditions rather than a measurement, which is why it carries the smallest weight.
- Why this weight
- Weighted lowest precisely because it is the one component without a directly comparable published figure behind it.
Where the figures come from
This is the part most methodology pages are vague about, so to be direct: Urblytica's city figures are produced by an AI research pipeline that searches the live web for each city and extracts the numbers from what it finds. They are researched estimates, not a direct feed from a statistical agency.
The research is grounded in public sources — census and statistical-office releases, labour-market reporting, published crime statistics, rental and housing indices — because those are what the search returns for a question about a city. But the figure stored against a city is the pipeline's reading of those sources, and it has not been reconciled row-by-row against the originals. We do not hold licensed data feeds, and we do not claim to.
Every city page states which research pass produced its figures, its internal quality score, and the date it was last refreshed. A city researched by a deeper pass with a high quality score is more reliable than one scraped together on a fast pass, and the page tells you which you are looking at rather than presenting both as equivalent.
For a decision that turns on an exact number — a mortgage, a relocation package, a lease — go to the primary source. Urblytica is built to tell you which cities are worth that effort, not to replace it.
Readings we throw away
A research pipeline occasionally returns something impossible: a cost-of-living index of 1633, an average salary of $0.19. Scoring those as though they were real is how a ranking stops being believable, so each input has a plausible range and anything outside it is discarded as a bad reading rather than used.
| Input | Accepted range |
|---|---|
safety_score |
0 to 100 |
cost_index |
20 to 400 |
business_score |
0 to 100 |
median_household_income |
1000 to 500,000 |
salary_needed |
1000 to 500,000 |
unemployment_rate |
0 to 40 |
population_growth_rate |
-15 to 25 |
job_growth_rate |
-25 to 25 |
A discarded reading is treated exactly like a missing one, and the city page says so on the row it affects.
Cities with missing components
Not every city has all five components. Where one is missing, the dataset average for that component is substituted and the weights stay as published.
The alternative — dropping the component and re-weighting the rest — quietly rewards thin data, because a city with nothing but a good cost index would outrank one that is merely decent at all five. Substituting the average says "we don't know" instead of "this is fine", and the breakdown on the city page labels every substituted row, so you can see how much of a score rests on real readings.
A city with no usable reading at all is left unranked rather than given an average score.
What a score does and does not mean
Each component is mapped onto 0–100 against fixed, published endpoints — a cost index of 55 scores 100, unemployment of 2% scores 100 — not against the current spread of the dataset. So a score is comparable between any two cities and stable over time: a city's number does not move because other cities were added.
It also means a score is not a percentile. 80 does not mean "better than 80% of cities"; it means the city scored 80 points against the scale above. Where a rank is shown, it is a straight position within the selected country.
Scores are recomputed nightly, and in full whenever a weight or an endpoint on this page changes.
Check any individual score
Each city page carries a How this score was calculated table: every component, the raw readings behind it, the points those produced, the weight applied, and what that contributed to the total. The rows add up to the number in the ring.
If a figure looks wrong to you, that table shows exactly which reading is driving it — and there is a report link on every city page.
Limits and disclaimers
Urblytica is an analytical resource, not personal financial, legal or relocation advice. Scores rest on aggregate, point-in-time estimates and cannot capture an individual circumstance. For a high-stakes decision, verify the figures that matter against primary sources.