Balance of payments by country - quarterly data (BPM6)
Data - Eurostat
Info
Example
- Third quarter of 2023. EU current account surplus €85.4 bn. pdf
Data on europe
| source | dataset | Title | .html | .rData |
|---|---|---|---|---|
| eurostat | bop_gdp6_q | Main Balance of Payments and International Investment Position items as share of GDP (BPM6) | 2025-11-13 | 2025-11-13 |
| eurostat | nama_10_a10 | Gross value added and income by A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_a10_e | Employment by A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_gdp | GDP and main components (output, expenditure and income) | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_lp_ulc | Labour productivity and unit labour costs | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_a10 | Gross value added and income A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_a10_e | Employment A*10 industry breakdowns | 2025-05-24 | 2025-11-13 |
| eurostat | namq_10_gdp | GDP and main components (output, expenditure and income) | 2025-10-27 | 2025-11-13 |
| eurostat | namq_10_lp_ulc | Labour productivity and unit labour costs | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_pc | Main GDP aggregates per capita | 2025-11-14 | 2025-11-13 |
| eurostat | nasa_10_nf_tr | Non-financial transactions | 2025-11-14 | 2025-11-13 |
| eurostat | nasq_10_nf_tr | Non-financial transactions | 2025-11-14 | 2025-11-13 |
| eurostat | tipsii40 | Net international investment position - quarterly data, % of GDP | 2025-11-14 | 2025-11-13 |
Data on macro
| source | dataset | Title | .html | .rData |
|---|---|---|---|---|
| eurostat | nama_10_a10 | Gross value added and income by A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_a10_e | Employment by A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_gdp | GDP and main components (output, expenditure and income) | 2025-11-14 | 2025-11-13 |
| eurostat | nama_10_lp_ulc | Labour productivity and unit labour costs | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_a10 | Gross value added and income A*10 industry breakdowns | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_a10_e | Employment A*10 industry breakdowns | 2025-05-24 | 2025-11-13 |
| eurostat | namq_10_gdp | GDP and main components (output, expenditure and income) | 2025-10-27 | 2025-11-13 |
| eurostat | namq_10_lp_ulc | Labour productivity and unit labour costs | 2025-11-14 | 2025-11-13 |
| eurostat | namq_10_pc | Main GDP aggregates per capita | 2025-11-14 | 2025-11-13 |
| eurostat | nasa_10_nf_tr | Non-financial transactions | 2025-11-14 | 2025-11-13 |
| eurostat | nasq_10_nf_tr | Non-financial transactions | 2025-11-14 | 2025-11-13 |
| fred | gdp | Gross Domestic Product | 2025-10-09 | 2025-10-26 |
| oecd | QNA | Quarterly National Accounts | 2024-06-06 | 2025-05-24 |
| oecd | SNA_TABLE1 | Gross domestic product (GDP) | 2025-09-29 | 2025-05-24 |
| oecd | SNA_TABLE14A | Non-financial accounts by sectors | 2025-09-29 | 2024-06-30 |
| oecd | SNA_TABLE2 | Disposable income and net lending - net borrowing | 2024-07-01 | 2024-04-11 |
| oecd | SNA_TABLE6A | Value added and its components by activity, ISIC rev4 | 2024-07-01 | 2024-06-30 |
| wdi | NE.RSB.GNFS.ZS | External balance on goods and services (% of GDP) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.MKTP.CD | GDP (current USD) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.MKTP.PP.CD | GDP, PPP (current international D) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.PCAP.CD | GDP per capita (current USD) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.PCAP.KD | GDP per capita (constant 2015 USD) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.PCAP.PP.CD | GDP per capita, PPP (current international D) | 2025-11-13 | 2025-11-13 |
| wdi | NY.GDP.PCAP.PP.KD | GDP per capita, PPP (constant 2011 international D) | 2025-11-13 | 2025-11-13 |
LAST_COMPILE
| LAST_COMPILE |
|---|
| 2025-11-16 |
Last
Code
bop_c6_q %>%
group_by(time) %>%
summarise(Nobs = n()) %>%
arrange(desc(time)) %>%
head(1) %>%
print_table_conditional()| time | Nobs |
|---|---|
| 2025Q2 | 665729 |
currency
Code
bop_c6_q %>%
left_join(currency, by = "currency") %>%
group_by(currency, Currency) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional| currency | Currency | Nobs |
|---|---|---|
| MIO_EUR | Million euro | 41376145 |
| MIO_NAC | Million units of national currency | 40844582 |
bop_item
Code
bop_c6_q %>%
left_join(bop_item, by = "bop_item") %>%
group_by(bop_item, Bop_item) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditionalsector10
Code
bop_c6_q %>%
left_join(sector10, by = "sector10") %>%
group_by(sector10, Sector10) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional| sector10 | Sector10 | Nobs |
|---|---|---|
| S1 | Total economy | 36850209 |
| S13 | General Government | 8548036 |
| S1P | Other sectors than MFIs and general government | 5495039 |
| S123 | Money market funds | 4714527 |
| S121 | Central Bank | 4692192 |
| S122 | Deposit-taking corporations except the central bank | 4570617 |
| S12T | Monetary Financial Institutions (MFI) other than central bank | 4523823 |
| S12M | Financial corporations other than MFIs | 4296671 |
| S1V | Non-financial corporations, households and non-profit institutions serving households | 4287796 |
| S1W | Other sectors than General Government | 4011293 |
| S1Z | Sectors other than deposit-taking corporations and general government | 89618 |
| S12R | Other financial corporations | 73480 |
| S1X | Monetary authorities | 67426 |
sectpart
Code
bop_c6_q %>%
left_join(sectpart, by = "sectpart") %>%
group_by(sectpart, Sectpart) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional| sectpart | Sectpart | Nobs |
|---|---|---|
| S1 | Total economy | 79071725 |
| S12M | Financial corporations other than MFIs | 434246 |
| S123 | Money market funds | 422226 |
| S12T | Monetary Financial Institutions (MFI) other than central bank | 367346 |
| S1P | Other sectors than MFIs and general government | 364772 |
| S121 | Central Bank | 351398 |
| S122 | Deposit-taking corporations except the central bank | 347138 |
| S13 | General Government | 335760 |
| S1V | Non-financial corporations, households and non-profit institutions serving households | 329900 |
| S1N | Not sectorised | 184380 |
| S12K | Monetary financial institutions (MFI) | 11592 |
| S1Z | Sectors other than deposit-taking corporations and general government | 244 |
stk_flow
Code
bop_c6_q %>%
left_join(stk_flow, by = "stk_flow") %>%
group_by(stk_flow, Stk_flow) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditional| stk_flow | Stk_flow | Nobs |
|---|---|---|
| ASS | Assets | 17956678 |
| CRE | Credit | 16599775 |
| DEB | Debit | 12084387 |
| NET | Net | 12030886 |
| BAL | Balance | 11908212 |
| LIAB | Liabilities | 11630781 |
| NI | Net FDI inward | 2510 |
| NO | Net FDI outward | 2510 |
| II | Net income on inward FDI | 2494 |
| IO | Net income on outward FDI | 2494 |
partner
Code
bop_c6_q %>%
left_join(partner, by = "partner") %>%
group_by(partner, Partner) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
print_table_conditionalgeo
Code
bop_c6_q %>%
left_join(geo, by = "geo") %>%
group_by(geo, Geo) %>%
summarise(Nobs = n()) %>%
arrange(-Nobs) %>%
mutate(Geo = ifelse(geo == "DE", "Germany", Geo)) %>%
mutate(Flag = gsub(" ", "-", str_to_lower(Geo)),
Flag = paste0('<img src="../../bib/flags/vsmall/', Flag, '.png" alt="Flag">')) %>%
select(Flag, everything()) %>%
{if (is_html_output()) datatable(., filter = 'top', rownames = F, escape = F) else .}time
Code
bop_c6_q %>%
group_by(time) %>%
summarise(Nobs = n()) %>%
arrange(desc(time)) %>%
print_table_conditional()France
Goods and Services
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EA20", "EXT_EA20", "WRL_REST"),
bop_item %in% c("GS")) %>%
left_join(partner, by = "partner") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Partner)) +
theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.8),
legend.title = element_blank()) +
xlab("") + ylab("") +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
WRL_REST
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("WRL_REST"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
xlab("") + ylab("") +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
EA19
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EA19"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
EXT_EA19
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EXT_EA19"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
Germany
Goods and Services
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST"),
bop_item %in% c("GS")) %>%
left_join(partner, by = "partner") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Partner)) +
theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.25, 0.8),
legend.title = element_blank()) +
xlab("") + ylab("") +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
WRL_REST
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("WRL_REST"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
xlab("") + ylab("") +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 2),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
EA19
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EA19"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
EXT_EA19
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
currency == "MIO_EUR",
partner %in% c("EXT_EA19"),
bop_item %in% c("CA", "GS", "G")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = values / B1GQ) %>%
select(-B1GQ) %>%
ggplot + geom_line(aes(x = date, y = values, color = Bop_item)) +
theme_minimal() + xlab("") + ylab("") +
scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
labels = date_format("%Y")) +
theme(legend.position = c(0.15, 0.8),
legend.title = element_blank()) +
scale_y_continuous(breaks = 0.01*seq(-30, 30, 1),
labels = percent_format(a = 1)) +
geom_hline(yintercept = 0, linetype = "dashed", color = "black")
By Destination: Europe, ex-Europe
France
Balance (Flow)
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
print_table_conditional()Net (Stock)
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "NET",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
print_table_conditional()Germany
Balance (Flow)
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select(bop_item, Bop_item, everything()) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
print_table_conditional()Net (Stock)
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "NET",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select(bop_item, Bop_item, everything()) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
print_table_conditional()By Destination: Europe, ex-Europe
France
All
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select(bop_item, Bop_item, everything()) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
select(-sector10, -sectpart) %>%
print_table_conditional()Services
Code
bop_c6_q %>%
filter(geo == "FR",
stk_flow == "BAL",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select(bop_item, Bop_item, everything()) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(bop_item) %>%
select(-sector10, -sectpart) %>%
filter(grepl("Services", Bop_item)) %>%
mutate_at(vars(-bop_item, -Bop_item), funs(round(., 2))) %>%
print_table_conditional()Germany
Code
bop_c6_q %>%
filter(geo == "DE",
stk_flow == "BAL",
time == "2020Q4",
currency == "MIO_EUR",
partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
left_join(bop_item, by = "bop_item") %>%
quarter_to_date %>%
left_join(B1GQ, by = c("geo", "date")) %>%
mutate(values = 100*values / B1GQ) %>%
select(bop_item, Bop_item, everything()) %>%
select_if(~n_distinct(.) > 1) %>%
spread(partner, values) %>%
arrange(-`WRL_REST`) %>%
print_table_conditional()