Loadingβ¦
Loadingβ¦
How we decide what gets published, what gets ranked first, and what gets left out. These are the actual formulas running in our build pipeline β not a simplified description of them.
Every tour, restaurant and event is scored once per build. The score decides whether a page is substantial enough to publish on its own URL.
importance_score =
entity_count Γ 3
+ tag_diversity Γ 2
+ rating Γ 2
+ ln(review_count + 1) Γ 3
+ freshness_score
+ semantic_weightfootball 10, nightlife 8, fine-dining 8, italian 5, travel-transport 2).The result is rounded to one decimal place.
A step function on the item's last update, in days. Stale content loses visibility automatically rather than waiting for a manual review.
β€ 1 day β 10
β€ 7 days β 8
β€ 30 days β 5
β€ 90 days β 3
β€ 180 days β 1
> 180 days β 0
no date β 0Scoring alone does not publish a page. An item must clear the threshold below to get its own indexable URL; everything else stays inside listing and hub pages.
importance_score β₯ 25 β qualifies
content_type = event β always qualifies (time-limited)
content_type = experience β always qualifies (hand-curated)
global cap β 8,000 pagesEvents bypass the threshold because they expire on their own; an event that has passed is removed rather than kept at a low score. Experiences bypass it because they are assembled by hand.
Without a cap, one city's large inventory would crowd out the rest. Each city has a maximum number of premium pages across all content types:
| City | Max premium pages | Traffic weight |
|---|---|---|
| Manchester | 2,000 | 4.0Γ |
| London | 800 | 5.0Γ |
| Istanbul | 600 | 3.0Γ |
| Paris | 600 | 4.0Γ |
| Barcelona | 500 | 3.5Γ |
| Rome | 500 | 3.5Γ |
| New York | 500 | 4.5Γ |
| Berlin | 400 | 2.5Γ |
| Florence | 400 | 2.0Γ |
| Any other city | 200 | 1.0Γ |
The quota caps how many pages a city gets. The traffic weight affects only which ones are picked β it multiplies the sort score, so when a quota is full the higher-demand pages are the ones that survive.
Ordering within a city is a separate calculation from publishing. It blends intrinsic quality, estimated demand, and how well a page is supported by related content.
priority_score =
importance_score Γ 0.4
+ search_volume_score Γ 0.4
+ cluster_density Γ 0.2search_volume_score is modelled, not measured. We do not buy keyword data, so it is derived as base Γ city_multiplier Γ category_multiplier, where the base is 30 for tours, 25 for restaurants and 15 for events, and the category multiplier is the highest-weighted tag on the item (tours-sightseeing 3.5, food-drink 3.0, football 3.0). It is an internal ranking signal and should not be read as a traffic estimate.
cluster_density measures how many other pages share the same city and topic cluster, normalised to 0β10. A page surrounded by related coverage ranks above an isolated one.
Every number we publish as a statistic β median tour prices, typical durations, restaurant ratings, event distribution β comes from the list below. Each one is recomputed on every build from our own normalised dataset, and each sentence on the site states the sample it was measured across. Nothing here is estimated or hand-entered.
The midpoint of listed tour prices in a city: half of the tours cost less, half cost more.
median(price) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)A quarter of the tours in the city are listed at or below this price.
percentile(price, 0.25) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)Three quarters of the tours in the city are listed at or below this price.
percentile(price, 0.75) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)The midpoint of advertised tour durations in a city, in minutes.
median(durationMinutes) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)The arithmetic mean of advertised tour durations in a city, in minutes.
sum(durationMinutes) / count(sample)The share of a city's tours carrying the single most common canonical category tag. A high share means the catalogue is concentrated in one category.
max over canonical tags t of ( count(tours tagged t) / count(sample) ); tags canonicalised by engine/tags/taxonomy.cjsThe midpoint of published restaurant ratings in a city.
median(rating) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)The midpoint price band, counted as the number of currency symbols the source publishes (1 = cheapest, 4 = most expensive).
median(symbolCount(price)) over sample; linear interpolation between closest ranks (R-7 / PERCENTILE.INC)The share of a city's restaurants serving the single most common cuisine.
max over cuisines c of ( count(restaurants with cuisine c) / count(sample) )The proportion of dated events in a city that fall on a Saturday or Sunday (UTC). The remainder fall on weekdays.
count(events where UTC weekday in {Sat, Sun}) / count(sample)The weekday carrying the largest number of dated events in a city, with its share.
argmax over weekdays d of count(events on d); value = count(d) / count(sample)A metric is withheld rather than published when its sample is too small to be meaningful. Withheld figures do not appear anywhere on the site β the field is left out instead of being filled with a weak number. Source: engine/facts/fact-definitions.cjs.
Found something that does not match what you see on the site? Report a correction. See also our Data Sources and Editorial Policy.