How cityparity calculates cost of living and equivalent salary
By Skyler Bissell · Updated July 2026 · the same engine that runs the interactive calculator
cityparity's headline number is the salary you would need in city B to keep the same net cash you keep in city A. It is solved, not looked up: the tool works out your net cash at home, then searches for the gross salary abroad that lands you in the same place after taxes, childcare, healthcare, and the rest of the social safety net. This page walks through exactly how that number is computed, what goes into it, and where it stops.
The standard cost-of-living calculator tells you whether a city is cheaper or more expensive than another, based mostly on rent and groceries. That is the easy half of the question, and it is almost never what people actually want to know. The harder half is the social safety net, and nobody puts it in dollars. US childcare averages around $1,200 a month per kid; in Germany it is capped at a small fraction of that. US health insurance premiums plus deductibles plus out-of-pocket can exceed $20,000 a year for a family; in most of Europe the equivalent is functionally zero. US law sets no minimum paid vacation at all, so the statutory floor there is zero; Portugal's is 22 days. US FMLA gives 12 weeks of unpaid parental leave; Norway gives 49 weeks at full pay. Each of those is real money that an ordinary cost-of-living comparison ignores.
How the headline number is solved
The equivalent salary comes from a search, not a formula. The tool computes your net cash in the source city (take-home pay minus living costs, plus any government benefits), then finds the gross salary in the target city that produces the same net cash. It does this by bisection: guess a salary, run the full tax-and-cost stack for the target city, check whether the result overshoots or undershoots, and narrow in until the two sides match within a few hundred dollars. Everything is computed in the target city's own currency, so an exchange-rate swing does not quietly distort the comparison. We match net cash on purpose, because net cash is what actually lands in your account after the country has taken its taxes and handed back its benefits.
- Compute net cash at home. Gross salary minus income tax and payroll, minus living costs (housing, childcare net of benefits, healthcare, transit, food, travel home), plus government benefits.
- Guess a gross salary abroad. A candidate number in the target city's own currency, which the search will refine.
- Run the full target stack on the guess. Real progressive brackets and payroll, then city-median living costs and benefits, to see what net cash that guess leaves.
- Narrow in by bisection. Overshoot, lower the guess; undershoot, raise it. Repeat until target net cash equals source net cash within a few hundred dollars.
- Report the matched gross. That salary is the equivalent. It is a modeling result, not a promise that such an offer exists.
Taxes
Tax calculation uses each country's actual progressive bracket structure plus payroll contributions: Social Security and Medicare in the US, National Insurance in the UK, Trygdeavgift in Norway, Krankenversicherung in Germany, and so on. State and local tax stacks where it applies; flat-tax regimes get a simpler treatment. We do not model itemized deductions or pension contribution quirks beyond the basic retirement contribution percentage. Those move the result a few percent in either direction but do not change the headline answer. Inbound and expat tax regimes (the Netherlands 30% ruling, Spain's Beckham Law, Italy's impatriati) are modeled honestly: the ones that genuinely lower a normal salary's tax reduce the figure, and the ones that do not are flagged as not changing it.
One rate per metro, in the countries where the town hall sets it
Our figure for a city is the rate at that city's own address. In eight of the countries we cover, the municipality sets part of the income tax itself, so the rate a few kilometres outside the city line is a different rate, and someone who takes the same job and lives in the suburb pays it. This is a boundary of what we model, and it is worth stating plainly because the size of the effect surprises people.
| Country | What the municipality sets | Range across the cities we carry |
|---|---|---|
| Switzerland | Steuerfuss, a multiplier on the simple cantonal tax | The widest of any country here. See below. |
| United States | City income tax | 4 of our 27 metros charge one: New York 3.876%, Philadelphia 3.735%, Pittsburgh 3%, Detroit 2.4%. The other 23 charge nothing. |
| Sweden | Kommunalskatt | 30.55% in Stockholm to 32.85% in Uppsala |
| Denmark | Kommuneskat | 23.39% in Copenhagen to 24.52% in Aarhus |
| Belgium | Communal surcharge on the national bill | 6.9% in Ghent to 7.5% in Brussels |
| Italy | Addizionale comunale | 0.8% to 1.1% |
| Finland | Kunnallisvero | 18.5%, the same in all three cities we carry |
| Japan | Municipal inhabitant tax | 6%, uniform by national standard |
Switzerland is the sharpest case, because the cantonal and municipal layer runs about two and a half times the federal one and the multipliers sit far apart. The city of Zurich charges a combined 214%. A married household on CHF 225,000 with two children pays CHF 40,420 in income tax there. In Kilchberg, a few stops down the lake on the same S-Bahn line, the identical household pays CHF 34,097. In Schindellegi, over the cantonal border into Schwyz and still inside a 40-minute commute, it pays CHF 23,180. That is 18.0% of gross falling to 10.3% without changing job, employer or country. Those three figures come from the Swiss federal tax administration's own calculator, and our engine reproduces the Zurich one to within the CHF 48 personal tax we do not model.
New York is the same effect in a smaller frame. The city's 3.876% sits on top of the state bill, which is USD 7,752 a year on USD 200,000 of taxable income, and it is zero in Westchester or Connecticut on a commute plenty of people already make. Philadelphia and Detroit work the same way and both have untaxed suburbs adjacent to them.
So the rate on our page is one point inside a local range rather than the whole range, and the central city is not reliably the expensive end of it: Stockholm and Copenhagen are both cheaper than the smaller cities we carry in their own countries. We model the city because that is the address a job offer names, and because carrying a current rate for every commutable municipality in every metro is a different product from this one. Where the municipal spread is large enough to change a decision, which in practice means Switzerland, treat our number as the starting point for a question to ask locally.
Cost of living, childcare, and healthcare
Cost-of-living uses city-median values: rent or own (0 to 5 bedrooms), monthly grocery and dining baselines scaled by a lifestyle multiplier, transit (car-dependent or transit-only), discretionary spend, travel back to your origin city, and property tax if you own. On the transit-pass side a household buys one pass per adult, plus 0.35 of a pass for each kid aged 6 or over, because under-6s ride free with a parent almost everywhere and school-age fares are free in about half the cities we price. Car ownership stays a flat one-vehicle cost. Childcare uses city-specific monthly daycare and after-school costs scaled by kid ages, with government child allowances subtracted where they exist (Norway, Sweden, Germany, France, and the UK all have meaningful per-child benefits). Healthcare distinguishes universal-coverage countries from US-style premium-plus-deductible systems, because the cost variance matters as much as the average. A bad year in the US private system is significantly worse than a bad year on the NHS, Krankenkasse, or Forsakringskassan.
One honest caveat on consumption taxes
European city prices already have VAT baked into the sticker price: what you see on a Berlin grocery shelf or an Amsterdam menu is what you pay, tax included. US prices work the other way. The tag says $4.99, then state and local sales tax gets added at the register, anywhere from 0% in Oregon or Delaware to over 9% in parts of California. Our lifestyle spending figures (groceries, dining, discretionary, transit) are calibrated to what residents actually pay each month in each city, so the consumption tax is already folded into both sides of the comparison. We just do not break it out as its own line item the way we do for income tax.
Currency conversion
Currency conversion is live, fetched from a free exchange-rate API with a 24-hour cache and a hardcoded fallback when the API is unreachable. The rate badge at the top of the calculator shows which mode is active. Because the solve happens in the target city's currency, the exchange rate only ever converts the final answer for display, so it cannot distort the underlying comparison.
How attainability is calculated
The attainability read answers the question every equivalence number invites: where would this salary actually land there? It places your gross salary among all local earners in the destination, across every profession, and shows roughly where it sits, for example around the median, in the top quarter, or in the top 10%. It sits beside the headline for context and leaves the equivalence figure untouched.
Each country's distribution is built from public income statistics, led by the national statistics office (the US Census Bureau, the UK's HMRC and ONS, Destatis in Germany, Statistics Canada, and their counterparts) and cross-checked against the OECD earnings database for the spread between the middle and the top. For all 20 US metros we use metro-level Census earnings for the full metropolitan area, since that is the labor market a mover joins; every other city uses its national distribution. Placement happens in local currency, so the exchange rate never moves the ranking.
We hold every country to one reference point: individual gross annual earnings for a full-time worker, in local currency, which matches what you type into the calculator. Getting there took a few adjustments. A handful of countries publish take-home pay rather than gross (Chile, Egypt, Indonesia), so we gross those up by the local mandatory employee contributions. Singapore's headline folds in the employer pension contribution, which a salary offer does not, so we use the wage without it. And the US national figure is full-time year-round earnings, to line up with the metros.
Where a country's statistics office publishes measured top percentiles, we read into the top few percent; the US and the UK reach the top 1%, from Census and HMRC percentile points. Everywhere else the upper tail is modeled from a single decile ratio, so we hold the read at the top 10%, because a finer top 2% would claim more than the data supports. Where a labor market is thin, heavily informal, or split between very different groups, we show a soft read (well above typical, around typical, below typical) with no percentage, because one median describes that market poorly. The confidence tiers are rich (a measured distribution, as for the US, the UK, and Hong Kong), usable (a national median plus a decile spread, most developed economies), and thin (an average-derived median, or a market a single number cannot capture).
Two things to keep in mind. With a partner working in the destination, we place each salary on its own, never fused into one household number. And a percentile marks where a salary sits in the local range; it says nothing about any one person's odds of landing a specific role. The software-engineer comparison pages are the one exception: they read against tech pay, and are labelled that way.
What we leave out
Weather, language, time zone from family, cuisine, and visa complexity all matter, sometimes more than the financials. We do not try to price them. Use the tool for the financial picture and your own judgment for the rest.
RSU income is counted on the source side only. The default assumption is that you will leave your current employer when you relocate, which means the grant does not follow you. If you will keep the same employer, set RSU to $0 on the input or treat the comparison as directional.
A few honest caveats on the numbers themselves. For countries that tax spouses separately (Norway, Sweden, Denmark, Ireland, Finland), the tool currently runs household income through a single progressive ladder, which slightly overstates the bill for two-earner couples; that is on the fix list. Every figure is nominal, in the data's last-updated year, with no inflation adjustment. We do not price one-time moving costs (visas, shipping, the realtor on both ends) because those sit in their own budget, not your monthly run-rate. And accuracy scales with how much you tell us: five inputs gets a directional answer, sixteen or more gets a precise one. The confidence label at the top of the calculator says which you are looking at.
Sources and freshness
Every numeric input has a citation and a last-updated date. Hover any row in the Breakdown view to see them. Tax brackets come from each country's tax authority. Median rents come from local rental indices (Zillow, ImmoScout, Bostadsformedlingen, and equivalents). Vacation and parental leave figures come from each country's own labor statute, checked against the primary text. US vacation shows the federal floor of zero, sourced to the Department of Labor, and US parental leave comes from the state programs that actually pay it, such as New York PFL and Washington PFML. Childcare costs come from government reports where available, with private compilers used to fill gaps. We update annually because most of the underlying data refreshes annually. The data badge at the top of the calculator shows the year range across the active comparison; if you see a date more than a year old, treat the result as directional. When one of those values turns out to be wrong, the fix is written up in the data changelog, with the value before, the value after and the source that settled it.
Public holidays: the ones the law lists, and the ones you get
Most sites report the number of public holidays in the statute and stop there. That number is right, and it is also misleading, because it quietly assumes every holiday lands on a working day. In a country with no substitute-day rule, a holiday falling on a Saturday or Sunday is simply gone. Norway has no such rule. Neither do Sweden, Finland, Denmark, Germany, the Netherlands, France, Italy or Switzerland. The United States, Britain, Ireland, Canada, Australia, Belgium and Singapore all move a weekend holiday to a weekday and lose nothing.
So we carry two numbers. Public holidays is the nominal statutory count, the fact you can check against the statute or Wikipedia, and it is what the Breakdown view shows. Holidays you get is how many of those land on a working day, and it is what every comparison on the site actually uses: the score, the total-paid-days-off row, the time-off verdict and the dollar figures on the rankings pages.
The second number is computed, not looked up. We keep each country's holiday rule list, which for every holiday records whether it is a fixed date, an offset from Easter, an nth weekday of the month, a day the statute pins to a weekend, or a date on a lunar calendar. We then run that list over the full 400-year calendar cycle and count the landings inside the working week, adding back anything a substitute-day law rescues. Israel and the Gulf states are counted against their own working week, which is Sunday to Thursday rather than Monday to Friday. Sweden lists 13 holidays and delivers 7.3, because midsummer day and all saints' day are pinned to a Saturday by the statute itself and Easter Sunday and Whit Sunday are Sundays. The United States lists 11 and delivers all 11. A test re-runs the whole derivation on every build, so the figure cannot drift away from the rule list it came from. Both columns, for all 70 countries, are on the vacation days by country ranking.
How cityparity differs from Numbeo and other crowdsourced indices
A crowdsourced cost-of-living index, like Numbeo or Expatistan, averages prices that residents report (rent, groceries, transit, a coffee) and returns a percentage difference between two cities. It is good at that, and for a feel of daily prices it is the first place to look. cityparity answers a different question, what you keep after tax and the safety net, so it prices lines a basket never includes: statutory income tax and payroll, childcare net of subsidy, healthcare out-of-pocket, and the cash value of vacation and parental leave, all from official sources.
Here is where each input comes from, and how much of it leans on crowdsourced price data. The figures the equivalence turns on carry no crowdsourced input at all; only the commodity price lines do, and those are marked as such.
| Input line | Where cityparity sources it | Crowdsourced share |
|---|---|---|
| Income tax and payroll | Each country's tax authority (IRS, HMRC, Belastingdienst) | 0% |
| Government benefits | National child-benefit and allowance agencies | 0% |
| Local pay benchmark | National statistics offices, US Census, OECD | 0% |
| Childcare, net of subsidy | Government childcare reports, OECD Family Database | 11% |
| Healthcare out-of-pocket | KFF and actuarial data, national health systems | 2 to 8% |
| Vacation and parental leave | National statute, OECD Family Database | 2 to 8% |
| Transit | Published operator fares | 2 to 8% |
| Housing (rent or buy) | Local rental indices (Zillow Observed Rent Index, ImmoScout), part crowdsourced | 63% |
| Groceries and dining | Crowdsourced price data, marked as such | 90% |
| Discretionary spending | Crowdsourced price data, marked as such | 91% |
Read that as a policy. Every number the comparison turns on, tax, benefits, childcare, healthcare, and paid leave, comes from a statutory or official source with a date on it. The primary source for each value is named on the figure itself in the Breakdown view, among them the IRS, HMRC, and Belastingdienst for tax, KFF for US healthcare, and the US Department of Labor and each country's own labor statute for paid leave. Crowdsourced price data matters here too, on groceries, dining, and discretionary spending, and it is the same kind of data Numbeo collects well. We label those lines as crowdsourced instead of dressing them up as government figures, because surfacing the official citations while hiding the crowdsourced ones is the exact move the site was built to call out. For a feel of daily prices, a price index is the right tool. For an offer you have to say yes or no to, the lines it leaves out are usually the ones that decide it.
Data licenses, theirs and ours
Where a source publishes under an open license, here is the accounting. UK figures from HMRC and the ONS contain public sector information licensed under the Open Government Licence v3.0. Norwegian statistics from SSB are used under the Norwegian Licence for Open Government Data. World Bank, OECD and Eurostat indicators are used under CC BY 4.0; we convert currencies and derive per-household figures from them, so treat our numbers as adaptations rather than the originals. US federal data (IRS, SSA, BLS, Census, Department of Labor) is public domain. US metro rents come from the Zillow Observed Rent Index (ZORI), data provided by Zillow Group. Crowdsourced price lines are labeled in place, with a link back to the index they came from.
Our own outputs go the other way. Every figure cityparity computes, the equivalent salaries, break-evens, rankings and safety-net numbers, is published under CC BY 4.0: quote it, chart it, or republish it, commercially or not, with a link to cityparity.com as the attribution. That covers what we compute, not the third-party inputs above, which keep their own terms.
Why this exists
The original reason: somebody we knew got an offer in Oslo, a 30% pay cut on paper, and was nervous about it. Once we did the math properly, accounting for state-covered childcare, healthcare, and parental leave that the US offer was never going to match, the Oslo number came out equivalent or better depending on the family-size assumption. We wanted that math to be transparent, defensible, and not buried behind a premium tier or a signup form. If a number looks wrong, push back through the contact page and we will take another look.
Related reading
Common questions
How does cityparity calculate an equivalent salary?
It matches net cash, not gross. The tool computes the net cash you keep at home, then searches by bisection for the gross salary abroad that produces the same net cash, running the full tax-and-cost stack on each guess until the two sides match within a few hundred dollars, all in the target city's currency.
Why match net cash instead of gross salaries?
Gross is the one number that does not survive the border. Two countries tax, subsidize, and charge for daily life differently, so the same gross keeps a different share once income tax, childcare, and healthcare come out. Net cash is what lands in your account after taxes and benefits, so it is the honest thing to hold equal.
Does cityparity include taxes, childcare, and healthcare?
Yes. Income tax uses each country's real progressive brackets plus payroll contributions. Childcare uses city daycare costs minus per-child government benefits. Healthcare separates universal-coverage systems from US-style premium-plus-deductible plans. Those three lines usually decide the comparison.
How current is the data, and where does it come from?
Every input carries a source and a last-updated date, refreshed roughly annually. Tax brackets come from each country's tax authority, rents from local rental indices, vacation and leave from each country's own labor statute. Figures are nominal, in the data's last-updated year.
What does cityparity leave out?
Weather, language, distance from family, and visa complexity are not priced. One-time moving costs sit outside the monthly run-rate. RSUs are counted on the source side only. Two-earner couples in separate-filing countries currently run on the conservative side, which is being refined.
Could you actually earn the equivalent salary in the destination city?
An attainability read beside the salary places it among all local earners in the destination, across every profession, so you can see whether it sits around the middle, in the top quarter, or higher. Distributions come from national statistics offices (US Census, UK HMRC, Destatis, and peers), cross-checked against the OECD, and US destinations are read metro-wide. Where a country publishes measured top percentiles (the US and the UK) the read reaches the top 1%; elsewhere it holds at the top 10%, and thin markets show a soft read. A percentile marks where a salary sits in the local range and says nothing about any one person's odds of landing a specific role. See how attainability is calculated.
How is cityparity different from Numbeo?
Numbeo averages crowdsourced prices and returns a percentage difference between two cities, which is a good read on daily prices. cityparity computes what you keep after tax and the safety net, so it also prices income tax, childcare net of subsidy, healthcare out-of-pocket, and paid leave, from official sources. It uses crowdsourced price data only for groceries, dining, and discretionary spending, and labels those lines as such.
Figures come from cityparity's per-city engine, computed from official sources with a per-value audit trail; currency conversions use rates that drift daily. Treat any single number as a strong estimate and run your own inputs.