CityHero

Methodology

How we calculate prices.

Every price figure on CityHero is a median from real price lists and menus of businesses, never an estimate or an average taken from the internet. Each business counts once, mismatches are removed, and below a minimum number of businesses we publish no figure.

1,145

Businesses with a price

42

Services with Swiss median

105

Service × town with median

128

Dishes with Swiss median

Calculated live, data as of 16 October 2026.

1. Sources

Service prices come from the price lists of published businesses in 4 sectors: hairdresser, massage, beauty and driving school. The price lists are public (usually on the business’s website) or maintained by the business itself. Dish prices come from restaurant menus.

Not used: prices from ads, reviews, estimates by language models or averages from other portals. For sectors without price lists (for example garages) we publish no prices.

2. Matching to services

Every service has a list of search terms and a list of exclusions. A price-list item counts if its name contains a search term and no exclusion. The exclusions prevent surcharges, removals or partial services from counting as the price of the whole service.

Example
Men's haircut
Search terms
«herrenschnitt», «herrenhaarschnitt», «herren schnitt», «männerschnitt», «men's cut», «mens cut», «men cut»
Exclusions
«maschine», «clipper», «buzz», «damen», «women», «ladies», «student», «senior», «lernende», «kinder»

3. One price per business

A salon with twelve variants of a haircut would otherwise influence the median twelve times. So per business and service only the cheapest matching item counts, the entry price. If the list only shows a “from” price, that counts; in the tables it is marked “from”.

4. Outlier protection

From four prices, cleaning runs in two steps:

  1. Prices below 25% of the raw median are dropped. This removes side dishes, surcharges and “per strand” prices.
  2. Then prices outside the interquartile fence are dropped (lower quartile minus 1.5 × IQR to upper quartile plus 1.5 × IQR). This removes, for example, a menu for four recorded as a single portion.

If fewer than three prices remain, the list after step 1 applies. Businesses whose price lies outside the cleaned range do not count and do not appear in the price tables.

5. Median and quartiles

Median
Half of the businesses are cheaper, half more expensive. More robust than the average because single very expensive offers barely move it.
Middle half
Lower to upper quartile (25% to 75%): the range that holds half of the prices.
Range
Cheapest to most expensive counted price after cleaning.
Duration
For massages and driving lessons the duration is read from the name or description (“60 min”). A duration tier only appears from 5 businesses.
n
Number of businesses with a counted price — not the number of price items.

On the pages we round figures to whole francs; single prices and dish prices are shown to the cent. The dataset contains unrounded values.

6. Minimum sample

A median from three prices is chance: a single outlier shifts it by 20 to 30%. So these thresholds apply, counting only businesses with a cleaned price:

Service, all of Switzerland
from 8 businesses
Service in a town
from 7 businesses (English version from 14)
Sector overview in a town
from 15 businesses and at least 3 services with 7 prices each
Dish, all of Switzerland
from 5 restaurants
Row in town tables
from 3 businesses (tables only, no page of its own)

Pages below the threshold remain reachable but are not indexed by search engines and do not appear in the open dataset.

7. Comparison between towns

For a town, cleaning is recalculated with that town’s prices only, not taken from the Swiss result. The town comparison shows the median per town and the number of businesses; percentage differences refer to the cheaper town. The town is the business’s municipality, not the district; within large cities the pages also show postcodes from 3 businesses.

8. Dish prices

The same rules apply to dishes: search terms per dish, per restaurant the cheapest matching menu item, cleaning as above. A dish gets a Swiss median from 5 restaurants. A menu is often older than a price list, so the dataset states for every dish how many restaurants the median is based on.

9. Data date and updates

As the data date the pages show the most recent update date of the counted businesses. Figures are calculated continuously from the database; pages are rebuilt at most hourly. If a business changes its prices and we do not have the new list, the old price stays until the next refresh.

10. Limits

  • Figures describe businesses with a published price list, not every business in a sector.
  • Coverage is highest in German-speaking Switzerland, especially the Zurich area.
  • Services are not named the same everywhere; despite exclusions an item can be mismatched.
  • The current price list on site always prevails. All information without guarantee.

11. Report an error

A price is wrong, an item is mismatched or a business has new prices? Write to hello@cityhero.ch with the page address and the correct information. Businesses can claim their profile for free and maintain their details themselves.

12. Open data

Dataset under CC BY 4.0

The aggregated figures (median, quartiles, count per service or dish and town) are available as CSV for free use, including commercial use, with attribution “Source: CityHero (cityhero.ch)”. Individual businesses and single prices are not included.

Download CSVPrice atlas with citation helpCC BY 4.0