Taxes on goods and services (% of revenue)

Source: worldbank.org, 07.12.2025

Year: 2023

Flag Country Value Value change, % Rank
Bosnia & Herzegovina Bosnia & Herzegovina 41.4 -4.3% 5
Belarus Belarus 27.8 -4.27% 14
Brazil Brazil 18.1 +11.4% 16
Canada Canada 13.6 -3.2% 17
Ethiopia Ethiopia 29.7 -1.67% 13
United Kingdom United Kingdom 31.6 -1.54% 10
Iceland Iceland 35.2 -0.394% 8
Kazakhstan Kazakhstan 30 +23.8% 12
Kenya Kenya 33.5 +0.189% 9
Kyrgyzstan Kyrgyzstan 42.7 +10.1% 3
Kiribati Kiribati 11.8 -21.2% 18
Sri Lanka Sri Lanka 46.1 +6.25% 2
Mexico Mexico 30.3 +15.2% 11
Mauritius Mauritius 53 +3.67% 1
Philippines Philippines 24.2 -6.31% 15
Senegal Senegal 40.5 -0.673% 6
El Salvador El Salvador 38.8 +4.56% 7
Thailand Thailand 42.3 -3.61% 4
United States United States 1.91 +4.62% 19

Taxes on goods and services, expressed as a percentage of total revenue, are a critical aspect of government fiscal policies across the globe. This indicator provides insights into how much revenue governments are generating from the taxation of goods and services, which typically encompass sales taxes, value-added taxes (VAT), and excise duties. Understanding this metric is key to assessing the efficiency of tax collection systems, the extent to which individuals and businesses contribute to public finances, and the sustainability of government budgets.

The importance of this indicator cannot be overstated. A higher percentage typically signifies a greater reliance on indirect taxation as a revenue source, which can influence consumer behavior and economic activities. It also impacts how governments plan their budgets, allocate resources, and undertake public investment initiatives. Conversely, low tax rates on goods and services may suggest a greater reliance on direct taxation or other revenue sources, which can provide insights into broader economic policies and priorities. Therefore, the performance of this indicator reflects vital economic and societal factors, including equitable wealth distribution and social welfare funding.

Examining the 2023 values reveals a global median of 31.56%. This figure highlights that more than a third of total government revenue is derived from taxing goods and services, underscoring their importance in public finance. The top five regions show significant variances in this indicator. Mauritius leads with an impressive 53.02%, implying a heavy reliance on consumption taxes, which likely affects consumer spending and economic behaviors. This high percentage might be used to support extensive public services or infrastructure projects, indicating a government strategy that places a priority on public funding through indirect taxation.

Following Mauritius, Sri Lanka at 46.08% and Kyrgyzstan at 42.67% similarly exhibit high levels of revenue generation from goods and services. Thailand and Bosnia & Herzegovina complete this list with 42.26% and 41.42%, respectively. These figures suggest an overarching trend wherein countries may prefer consumption taxes for their simplicity and reduced administrative burden compared to income taxes. However, it can also reflect the structural context of each economy, indicating potential challenges related to income inequality and the burden on lower-income populations, who typically spend a higher fraction of their income on consumption.

On the flip side, the bottom five areas present starkly lower percentages of 1.91% in the United States, 11.75% in Kiribati, 13.62% in Canada, 18.05% in Brazil, and 24.23% in the Philippines. The United States, with its considerably low reliance on consumption taxes compared to its counterparts, often employs a more extensive income tax structure combined with other forms of revenue collection, leading to notable disparities in how different economies harness tax revenue. This can lead to discussions surrounding fiscal sustainability, social equity, and the ability of governments to fund essential services in a way that resonates with their economic philosophies.

This variation in the taxation of goods and services is influenced by several factors, including economic structure, social welfare policies, consumer behavior, and even political ideology. For example, countries with larger informal economies might struggle with tax collection from goods and services due to the volume of unrecorded transactions. Additionally, cultural aspects play a role in shaping tax sentiment among citizens. In regions where tax evasion or avoidance is culturally accepted, the revenue generated from such taxes will inherently face challenges, leading to inconsistencies in governmental revenue streams.

Adopting effective strategies to enhance tax revenue from goods and services can bolster public finance. Solutions may include broadening the tax base by regulating and including informal economic sectors within the taxation framework. Education and awareness campaigns can help improve voluntary compliance. Implementing advanced tax collection technologies could simplify processes, making compliance easier for consumers and businesses. Policymakers can also consider progressive tax models that do not disproportionately impact lower-income individuals while maintaining stable revenue generation. Among these strategies, enhancing the efficiency and transparency of tax collection mechanisms tends to foster greater public trust and participation in the system.

However, flaws exist in heavily relying on taxes on goods and services. Such systems can disproportionately affect low-income households, as those in lower income brackets typically consume a higher percentage of their earnings on taxed goods and services. This regressiveness can exacerbate income inequality and lead to social discontent, especially if adequate social safety nets are not provided. Moreover, overly burdensome taxation can dampen economic growth by discouraging consumption, thus creating a paradox wherein the aim to enhance revenue could result in diminished economic activity.

When looking at historical data ranging from 1998 to 2022, there are fluctuations and patterns discernable in global trends regarding taxes on goods and services. The data indicates that the world median value has broadly hovered around the 32% to 34% mark, suggesting relative stability in how nations have approached this aspect of taxation over decades. Notably, the values show a slight decline leading up to 2022, which might reflect ongoing global shifts in economic models and responses to emerging challenges, including globalization, technological advancements, and changing consumer behaviors.

As we analyze the indicator of taxes on goods and services as a percentage of revenue, it is clear that it serves a pivotal role in shaping the fiscal landscape of nations worldwide. Policymakers must carefully navigate the complexities of this metric, weighing economic needs against social equity, to craft systems that sustain public welfare without compromising growth and fairness.

                    
# Install missing packages
import sys
import subprocess

def install(package):
subprocess.check_call([sys.executable, "-m", "pip", "install", package])

# Required packages
for package in ['wbdata', 'country_converter']:
try:
__import__(package)
except ImportError:
install(package)

# Import libraries
import wbdata
import country_converter as coco
from datetime import datetime

# Define World Bank indicator code
dataset_code = 'GC.TAX.GSRV.RV.ZS'

# Download data from World Bank API
data = wbdata.get_dataframe({dataset_code: 'value'},
date=(datetime(1960, 1, 1), datetime.today()),
parse_dates=True,
keep_levels=True).reset_index()

# Extract year
data['year'] = data['date'].dt.year

# Convert country names to ISO codes using country_converter
cc = coco.CountryConverter()
data['iso2c'] = cc.convert(names=data['country'], to='ISO2', not_found=None)
data['iso3c'] = cc.convert(names=data['country'], to='ISO3', not_found=None)

# Filter out rows where ISO codes could not be matched — likely not real countries
data = data[data['iso2c'].notna() & data['iso3c'].notna()]

# Sort for calculation
data = data.sort_values(['iso3c', 'year'])

# Calculate YoY absolute and percent change
data['value_change'] = data.groupby('iso3c')['value'].diff()
data['value_change_percent'] = data.groupby('iso3c')['value'].pct_change() * 100

# Calculate ranks (higher GDP per capita = better rank)
data['rank'] = data.groupby('year')['value'].rank(ascending=False, method='dense')

# Calculate rank change from previous year
data['rank_change'] = data.groupby('iso3c')['rank'].diff()

# Select desired columns
final_df = data[['country', 'iso2c', 'iso3c', 'year', 'value',
'value_change', 'value_change_percent', 'rank', 'rank_change']].copy()

# Optional: Add labels as metadata (could be useful for export or UI)
column_labels = {
'country': 'Country name',
'iso2c': 'ISO 2-letter country code',
'iso3c': 'ISO 3-letter country code',
'year': 'Year',
'value': 'GDP per capita (current US$)',
'value_change': 'Year-over-Year change in value',
'value_change_percent': 'Year-over-Year percent change in value',
'rank': 'Country rank by GDP per capita (higher = richer)',
'rank_change': 'Change in rank from previous year'
}

# Display first few rows
print(final_df.head(10))

# Optional: Save to CSV
#final_df.to_csv("gdp_per_capita_cleaned.csv", index=False)
                    
                
                    
# Check and install required packages
required_packages <- c("WDI", "countrycode", "dplyr")

for (pkg in required_packages) {
  if (!requireNamespace(pkg, quietly = TRUE)) {
    install.packages(pkg)
  }
}

# Load the necessary libraries
library(WDI)
library(dplyr)
library(countrycode)

# Define the dataset code (World Bank indicator code)
dataset_code <- 'GC.TAX.GSRV.RV.ZS'

# Download data using WDI package
dat <- WDI(indicator = dataset_code)

# Filter only countries using 'is_country' from countrycode
# This uses iso2c to identify whether the entry is a recognized country
dat <- dat %>%
  filter(countrycode(iso2c, origin = 'iso2c', destination = 'country.name', warn = FALSE) %in%
           countrycode::codelist$country.name.en)

# Ensure dataset is ordered by country and year
dat <- dat %>%
  arrange(iso3c, year)

# Rename the dataset_code column to "value" for easier manipulation
dat <- dat %>%
  rename(value = !!dataset_code)

# Calculate year-over-year (YoY) change and percentage change
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(
    value_change = value - lag(value),                              # Absolute change from previous year
    value_change_percent = 100 * (value - lag(value)) / lag(value) # Percent change from previous year
  ) %>%
  ungroup()

# Calculate rank by year (higher value => higher rank)
dat <- dat %>%
  group_by(year) %>%
  mutate(rank = dense_rank(desc(value))) %>% # Rank countries by descending value
  ungroup()

# Calculate rank change (positive = moved up, negative = moved down)
dat <- dat %>%
  group_by(iso3c) %>%
  mutate(rank_change = rank - lag(rank)) %>% # Change in rank compared to previous year
  ungroup()

# Select and reorder final columns
final_data <- dat %>%
  select(
    country,
    iso2c,
    iso3c,
    year,
    value,
    value_change,
    value_change_percent,
    rank,
    rank_change
  )

# Add labels (variable descriptions)
attr(final_data$country, "label") <- "Country name"
attr(final_data$iso2c, "label") <- "ISO 2-letter country code"
attr(final_data$iso3c, "label") <- "ISO 3-letter country code"
attr(final_data$year, "label") <- "Year"
attr(final_data$value, "label") <- "GDP per capita (current US$)"
attr(final_data$value_change, "label") <- "Year-over-Year change in value"
attr(final_data$value_change_percent, "label") <- "Year-over-Year percent change in value"
attr(final_data$rank, "label") <- "Country rank by GDP per capita (higher = richer)"
attr(final_data$rank_change, "label") <- "Change in rank from previous year"

# Print the first few rows of the final dataset
print(head(final_data, 10))