Numbeo Cost of Living Scraper
Pricing
from $3.50 / 1,000 results
Numbeo Cost of Living Scraper
Scrape cost of living prices, indices and city rankings from Numbeo. Extracts 55+ price items per city across 9 categories: food, rent, transport, utilities, salaries and more. Supports cities, countries and global rankings.
Numbeo Cost of Living Scraper — City Prices, Rent, Salaries & Rankings to JSON & CSV

Scrape real-world cost of living data, rental prices, salaries, quality-of-life scores and city rankings from Numbeo.com, the world's largest crowdsourced database of city prices. This Numbeo scraper extracts 55+ price items per city — each with low / average / high ranges — plus global city rankings and country-level averages. No API key, no login — just list the cities or countries you want and export Numbeo data to JSON, CSV or Excel.
Numbeo is the go-to reference for comparing cost of living between cities and countries, used by expats, remote workers, HR teams, researchers and real-estate investors. This Actor turns those public pages into clean, flat, spreadsheet-ready rows.
✨ What this Actor does / Key features
- 🏙️ 55+ price items per city — restaurants, groceries, transport, utilities, sports & leisure, childcare, clothing, rent and apartment purchase prices, salaries and mortgage rates.
- 📊 Global city rankings — Cost of Living Index, Rent Index, Groceries Index, Restaurant Price Index, Local Purchasing Power Index and more, ranked across hundreds of cities.
- 🌐 Country-level averages — nationwide average prices for high-level country comparisons.
- 🔬 Seven data categories —
cost-of-living,quality-of-life,crime,health-care,pollution,trafficandproperty-investment. - 📈 Low / average / high ranges — every price item includes the reported spread, not just a single number.
- 📋 Flat, one-row-per-item output — no nested arrays, so the data drops straight into Excel, Google Sheets, BigQuery or any database.
- 🛡️ Residential proxy support — Numbeo rate-limits datacenter IPs, so residential proxy is strongly recommended for reliable runs.
- ⚙️ Polite by design — lightweight static HTML parsing with limited concurrency and randomized delays.
🔍 Input
| Field | Type | Description |
|---|---|---|
cities | array of strings | City names to scrape, exactly as they appear on Numbeo. For US cities include the state, e.g. New York, NY. International examples: Istanbul, London, Berlin, Tokyo. Each city generates one request per selected category. |
countries | array of strings | Country names for national average price data (same 55+ items, averaged country-wide). Use the English country name as shown on Numbeo. |
scrapeRankings | boolean | When enabled, scrapes the global city rankings table for each selected category. Default true. |
scrapeCategories | array of strings | Numbeo sections to scrape: cost-of-living, quality-of-life, crime, health-care, pollution, traffic, property-investment. Default ["cost-of-living"]. |
maxCities | integer | Maximum number of cities to include from the global rankings pages. 0 = all available cities. Default 500. |
proxyConfiguration | object | Proxy settings. Residential proxy (RESIDENTIAL group) is strongly recommended — Numbeo aggressively rate-limits datacenter IPs. |
🚀 Example input
{"cities": ["Istanbul", "London", "New York, NY", "Berlin", "Tokyo"],"countries": ["Turkey", "Germany", "Japan"],"scrapeRankings": true,"scrapeCategories": ["cost-of-living", "quality-of-life", "crime"],"maxCities": 500,"proxyConfiguration": {"useApifyProxy": true,"apifyProxyGroups": ["RESIDENTIAL"]}}
📦 Output
Each record is a flat row — one per price item or ranking entry — exportable to CSV, Excel, JSON or XML, or accessible via the Apify API. The type field tells you what each row is: city_price, country_price or ranking.
| Field | Description |
|---|---|
type | Row type: city_price, country_price or ranking |
city | City name / page title (city and ranking rows) |
country | Country name (country rows) |
category | Numbeo category (e.g. cost-of-living, crime) |
currency | Local currency the price is displayed in |
itemName | Name of the price item (e.g. "1 Bedroom Apartment in City Centre") |
avgPrice | Average reported price |
lowestPrice | Bottom of the reported range |
highestPrice | Top of the reported range |
categoryGroup | Group the item belongs to (e.g. "Rent Per Month", "Markets") |
rank | Position in the global rankings table (ranking rows) |
url | Source Numbeo URL |
scrapedAt | ISO-8601 scrape timestamp |
Ranking rows additionally carry the composite index columns (Cost of Living Index, Rent Index, Groceries Index, Restaurant Price Index, Local Purchasing Power Index, etc.).
Sample city price row
{"type": "city_price","city": "Cost of Living in London","category": "cost-of-living","currency": "GBP","itemName": "1 Bedroom Apartment in City Centre","avgPrice": 2367.24,"lowestPrice": 1700,"highestPrice": 3150,"categoryGroup": "Rent Per Month","url": "https://www.numbeo.com/cost-of-living/in/London","scrapedAt": "2026-03-14T14:21:51.404Z"}
💡 Use cases
- Relocation & expat planning — compare real rent, groceries, transport and utility costs across potential destinations.
- HR & salary benchmarking — adjust compensation for remote workers and international hires using local purchasing power.
- Real estate & investment research — track apartment prices per m² and rental costs across global markets over time.
- Market research & pricing strategy — calibrate product pricing for different regional markets by affordability.
- Academic & economic research — feed cost-of-living data into purchasing power parity (PPP) and inequality studies.
- Journalism & data visualization — power cost-of-living comparison articles, maps and "most affordable city" rankings.
❓ Frequently Asked Questions
Is scraping Numbeo legal? The Actor reads only publicly visible Numbeo web pages. Use the data responsibly, respect Numbeo's terms, and attribute the source where appropriate. You are responsible for how you use the output.
Do I need a Numbeo API key or account? No. Unlike Numbeo's paid official API (which requires a subscription and an API key), this Actor works from the public website with no authentication.
Why is a proxy recommended?
Numbeo aggressively rate-limits datacenter IPs and can return upstream errors. Using Apify Proxy with the RESIDENTIAL group significantly improves reliability, especially when scraping more than a few cities.
How do I format city names?
Use the city name as it appears on Numbeo. For US cities include the state (e.g. New York, NY). If a city isn't found, check its exact spelling in the Numbeo URL.
How much data will I get?
Roughly 55 items per city for cost-of-living, so 100 cities produces about 5,500 rows; global rankings add around 600–700 rows. Selecting more categories adds one request and more rows per city.
Is the data current or historical? Numbeo prices are crowdsourced and updated continuously by contributors. Each run captures a snapshot of current prices — schedule the Actor to build your own history over time.
What output formats are supported? Every run produces a structured dataset you can export to JSON, CSV, Excel or XML, or access through the Apify API.
⏰ Scheduling & integration
Schedule this Actor on Apify to refresh cost-of-living data weekly or monthly and build a historical price archive. Export results to JSON, CSV or Excel, or use the Apify API and webhooks to push data into Google Sheets, BigQuery, a database or a BI dashboard.
Changelog
- 2026-05-20 — Maintenance pass: reviewed the input schema and default values for a smooth one-click start, and rebuilt the Actor on the latest base image.
Last reviewed: 2026-05-20.