Inbound tourism trends by market

Use the interactive charts below to see how tourism to the UK from different markets has evolved over recent years, as well as explore data for overseas visits, nights and spend. 

Tourism trends by market

The International Passenger Survey (IPS) was suspended on 16 March 2020 due to the coronavirus (COVID-19) pandemic.  The ONS have made every effort to produce high-quality estimates for the periods when IPS data is not being collected but have not been able to produce a full set of results therefore no data from 2020 is available on the interactive chart below. We have provided more detailed 2020 data on our latest monthly data page and 2020 inbound page. Data from 2021 is available on the 2021 quarterly page.

Use our interactive charts below for UK data on visits, nights, and spend, as well as filter by age, gender, journey purpose (e.g. holiday, business), season, mode of transport, length of stay and whether package/independent travel. You can also download files showing:

View our dedicated sections on UK nations, regions and counties as well as towns for data on specific locations within Britain.

 

Applied filters:

{{ item.title }}
Display:

Drag to change year on charts and tables.

Touch the data points to see the values.

OVERVIEW OF UK VISITOR STATISTICS {{activeYear.name}}

Number of visits

{{totalVisits | fixUnits}}

{{ totalVisitsPerc == 'Infinity' ? '-' : totalVisitsPerc >= 0 ? '+' + totalVisitsPerc.toFixed(2) + '%' : totalVisitsPerc.toFixed(2) + '%' }}

{{item.name}} {{item.data | fixUnits}}

Total expenditure (GBP)

{{totalSpend | spendUnits}}

{{ totalSpendPerc == 'Infinity' ? '-' : totalSpendPerc >= 0 ? '+' + totalSpendPerc.toFixed(2) + '%' : totalSpendPerc.toFixed(2) + '%' }}

{{item.name}} {{item.data | spendUnits}}

Total nights spent

{{totalNights | fixUnits}}

{{ totalNightsPerc == 'Infinity' ? '-' : totalNightsPerc >= 0 ? '+' + totalNightsPerc.toFixed(2) + '%' : totalNightsPerc.toFixed(2) + '%' }}

{{item.name}} {{item.data | fixUnits}}

Average length of stay (Nights)

{{avgStay.toFixed(2)}}

{{ isNaN(avgStayPerc) ? '-' : avgStayPerc >= 0 ? '+' + avgStayPerc.toFixed(2) + '%' : avgStayPerc.toFixed(2) + '%' }}

{{item.name}} {{item.data.toFixed(2)}}

Average spend per visit (GBP)

{{avgSpend | spendUnits(0, 'hideUnit')}}

{{ isNaN(avgSpendPerc) ? '-' : avgSpendPerc >= 0 ? '+' + avgSpendPerc.toFixed(2) + '%' : avgSpendPerc.toFixed(2) + '%' }}

{{item.name}} {{item.data | spendUnits(0, 'hideUnit')}}

* Change from {{Number(activeYear.name) - 1}}

{{seasonalityBox.title}}

{{yearSeasonality | spendUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

{{yearSeasonality | fixUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

Quarter {{activeDisplay}} %
{{ item.name }} {{ item.data[0] | spendUnits }} {{ item.data[0] | fixUnits }} {{ (item.data[0] * 100 / yearSeasonality).toFixed(2) }}%
{{item}} {{ seasonalityBox.data_pie.series[index] | spendUnits }} {{ seasonalityBox.data_pie.series[index] | fixUnits }} {{ (seasonalityBox.data_pie.series[index] * 100 / yearSeasonality).toFixed(2) }}%
{{item.name}} {{ item.data[index] | spendUnits }} {{ item.data[index] | fixUnits }} {{ (item.data[index] * 100 / yearSeasonality).toFixed(2) }}%

{{journeyBox.title}}

{{yearPurpose | spendUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

{{yearPurpose | fixUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

Purpose {{activeDisplay}} %
{{ item.name }} {{ item.data[0] | spendUnits }} {{ item.data[0] | fixUnits }} {{ (item.data[0] * 100 / yearPurpose).toFixed(2) }}%
{{item}} {{ journeyBox.data_pie.series[index] | spendUnits }} {{ journeyBox.data_pie.series[index] | fixUnits }} {{ (journeyBox.data_pie.series[index] * 100 / yearPurpose).toFixed(2) }}%
{{item.name}} {{ item.data[index] | spendUnits }} {{ item.data[index] | fixUnits }} {{ (item.data[index] * 100 / yearPurpose).toFixed(2) }}%

{{durationBox.title}}

{{yearDuration | spendUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

{{yearDuration | fixUnits}} {{filteredDataWording ? '(Filtered total)' : '(Total)'}}

Duration {{activeDisplay}} %
{{ item.name }} {{ item.data[0] | spendUnits }} {{ item.data[0] | fixUnits }} {{ (item.data[0] * 100 / yearDuration).toFixed(2) }}%
{{item}} {{ durationBox.data_pie.series[index] | spendUnits }} {{ durationBox.data_pie.series[index] | fixUnits }} {{ (durationBox.data_pie.series[index] * 100 / yearDuration).toFixed(2) }}%
{{item.name}} {{ item.data[index] | spendUnits }} {{ item.data[index] | fixUnits }} {{ (item.data[index] * 100 / yearDuration).toFixed(2) }}%