Main Balance of Payments and International Investment Position items as share of GDP (BPM6)
Data - Eurostat
Info
Last observation: Quarterly: 2026Q1 (N = 3,680) · Annual: 2025 (N = 3,978)
First observation: Quarterly: 1991Q1 (N = 142) · Annual: 1991 (N = 140)
Last data update: 23 jul 2026, 22:20. Last compile: 24 jul 2026, 00:57
Structure
France, Germany, Italy
Last
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
quarter_to_date %>%
filter(geo %in% c("FR", "DE", "IT"),
date == max(date, na.rm = T),
!(stk_flow %in% c("CRE", "DEB"))) %>%
select(-geo) %>%
spread(Geo, values) %>%
select_if(~ n_distinct(.) > 1) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}Germany, Spain, France, Italy, Netherlands, Europe
Current account Balance
All
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "CA",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Current account balance") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))
2006-
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "CA",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
filter(date >=as.Date("2006-01-01")) %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Current account balance") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))
2012-
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "CA",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
filter(date >=as.Date("2012-01-01")) %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Current account balance") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))
Net Investment Positions (FA__NENDI)
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "FA__NENDI",
s_adj == "NSA") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_5flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Net international investment positions (% of GDP)") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 10),
labels = scales::percent_format(accuracy = 1))
Goods and Services
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "GS",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Goods and Services") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))
Goods
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "G",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Goods") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))
Services
Code
bop_gdp6_q %>%
filter(freq == "Q") %>%
filter(((geo %in% c("DE", "ES", "FR", "IT", "NL", "EA20")) & partner == "WRL_REST") |
(geo == "EA20" & partner == "EXT_EA20"),
unit == "PC_GDP",
bop_item == "S",
s_adj == "NSA",
stk_flow == "BAL") %>%
select_if(~ n_distinct(.) > 1) %>%
quarter_to_date %>%
mutate(Geo = ifelse(geo == "EA20", "Europe", Geo)) %>%
left_join(colors, by = c("Geo" = "country")) %>%
mutate(values = values/100) %>%
ggplot + geom_line(aes(x = date, y = values, color = color)) + theme_minimal() +
scale_color_identity() + add_6flags +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
labels = date_format("%Y")) +
xlab("") + ylab("Services") +
scale_y_continuous(breaks = 0.01*seq(-100, 200, 2),
labels = scales::percent_format(accuracy = 1))