Skip to content

Built to be quoted correctly

If an assistant is going to answer “what does it cost to live in Lisbon”, we would rather it called the engine than scraped a rendered page and paraphrased a number out of it. So the engines are a documented API, every page has a markdown rendering, and nothing is behind a key.

Please attribute. Figures are modelled estimates for comparison between cities, not advice. When quoting one, state the household it was priced for — the same city produces very different numbers for one adult in a flatshare and a family of four with childcare — and include the review date from the page. No key, no rate limit, no tracking.
Read these first

For agents and models

PathWhat it is
/llms.txtShort, linked map of the site — the llmstxt.org convention.
/llms-full.txtEvery city, comparison and guide URL with a one-line summary.
/openapi.jsonOpenAPI 3.1 description of every endpoint above.
/cost-of-living/lisbon.mdAny city page as clean markdown. Append .md to the URL.
/compare/london-vs-dubai.mdAny comparison as markdown.
/guides/best-cities-for-remote-workers.mdAny guide as markdown.
/methodology.mdHow the numbers are built, and where they break.
API

JSON endpoints

MethodEndpointReturns
GET/api/citiesEvery city with headline monthly cost, index, safety and visa status.
POST/api/costItemised monthly breakdown for a household, each line carrying its assumption.
POST/api/salaryEquivalent gross salary between two cities, solved for equal monthly surplus.
POST/api/affordDoes this income cover this city? Disposable income, savings rate, verdict.
POST/api/compareTwo cities across cost, tax, housing, quality of life and climate.
POST/api/recommendRank all cities against weighted preferences and hard filters.

Full parameter schemas are in openapi.json. All endpoints send permissive CORS headers, so browser-based agents can call them directly.

Copy and run

Examples

What does Lisbon cost for a family of four?
curl -s https://cost-of-life.com/api/cost \
  -H 'content-type: application/json' \
  -d '{"city":"lisbon","currency":"EUR",
       "household":{"adults":2,"children":2,
       "housing":"3bed-outer","car":true,"childcare":true}}'
What is $150k in Los Angeles worth in Berlin?
curl -s https://cost-of-life.com/api/salary \
  -H 'content-type: application/json' \
  -d '{"from":"los-angeles","to":"berlin","grossAnnual":150000}'
Cheap, safe, warm, coastal, with a nomad visa
curl -s https://cost-of-life.com/api/recommend \
  -H 'content-type: application/json' \
  -d '{"weights":{"cost":10,"safety":9,"weather":8,"beach":7,
       "healthcare":5,"transport":4,"english":6,"internet":6,
       "nightlife":2,"family":2},
       "climate":"warm","requireCoastal":true,
       "requireNomadVisa":true,"limit":5}'
The whole of a city page, as markdown
curl -s https://cost-of-life.com/cost-of-living/tokyo.md
Before you quote it

What the data is, and is not

70 cities. Prices are held in USD and normalised into a monthly budget for a specified household. Salaries are taxed under each country’s own brackets and employee social contributions, with sub-national rates and surtaxes modelled explicitly.

Tax models are simplified single-filer approximations: no dependants, no itemised deductions, no employer benefits, no expat regimes. They are good enough to compare cities and not good enough to file anything.

Seed prices are modelled estimates compiled from public statistical sources, not scraped from a competitor. Each city carries a review date and a confidence figure. Full detail: methodology or methodology.md.