Balance of payments by country - quarterly data (BPM6)

Data - Eurostat

Info

source dataset Title .html .rData
eurostat bop_c6_q Balance of payments by country - quarterly data (BPM6) 2026-01-29 2026-01-27

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) 2026-01-29 2026-01-29
eurostat nama_10_a10 Gross value added and income by A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat nama_10_a10_e Employment by A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat nama_10_gdp GDP and main components (output, expenditure and income) 2026-01-29 2026-01-29
eurostat nama_10_lp_ulc Labour productivity and unit labour costs 2026-01-29 2026-01-29
eurostat namq_10_a10 Gross value added and income A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat namq_10_a10_e Employment A*10 industry breakdowns 2025-05-24 2026-01-29
eurostat namq_10_gdp GDP and main components (output, expenditure and income) 2025-10-27 2026-01-29
eurostat namq_10_lp_ulc Labour productivity and unit labour costs 2026-01-29 2026-01-29
eurostat namq_10_pc Main GDP aggregates per capita 2026-01-29 2026-01-29
eurostat nasa_10_nf_tr Non-financial transactions 2026-01-29 2026-01-29
eurostat nasq_10_nf_tr Non-financial transactions 2026-01-29 2026-01-29
eurostat tipsii40 Net international investment position - quarterly data, % of GDP 2026-01-29 2026-01-29

Data on macro

source dataset Title .html .rData
eurostat nama_10_a10 Gross value added and income by A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat nama_10_a10_e Employment by A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat nama_10_gdp GDP and main components (output, expenditure and income) 2026-01-29 2026-01-29
eurostat nama_10_lp_ulc Labour productivity and unit labour costs 2026-01-29 2026-01-29
eurostat namq_10_a10 Gross value added and income A*10 industry breakdowns 2026-01-29 2026-01-29
eurostat namq_10_a10_e Employment A*10 industry breakdowns 2025-05-24 2026-01-29
eurostat namq_10_gdp GDP and main components (output, expenditure and income) 2025-10-27 2026-01-29
eurostat namq_10_lp_ulc Labour productivity and unit labour costs 2026-01-29 2026-01-29
eurostat namq_10_pc Main GDP aggregates per capita 2026-01-29 2026-01-29
eurostat nasa_10_nf_tr Non-financial transactions 2026-01-29 2026-01-29
eurostat nasq_10_nf_tr Non-financial transactions 2026-01-29 2026-01-29
fred gdp Gross Domestic Product 2026-01-29 2026-01-29
oecd QNA Quarterly National Accounts 2024-06-06 2025-05-24
oecd SNA_TABLE1 Gross domestic product (GDP) 2026-01-16 2025-05-24
oecd SNA_TABLE14A Non-financial accounts by sectors 2026-01-16 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) 2026-01-29 2026-01-29
wdi NY.GDP.MKTP.CD GDP (current USD) 2026-01-29 2026-01-29
wdi NY.GDP.MKTP.PP.CD GDP, PPP (current international D) 2026-01-29 2026-01-29
wdi NY.GDP.PCAP.CD GDP per capita (current USD) 2026-01-29 2026-01-29
wdi NY.GDP.PCAP.KD GDP per capita (constant 2015 USD) 2026-01-29 2026-01-29
wdi NY.GDP.PCAP.PP.CD GDP per capita, PPP (current international D) 2026-01-29 2026-01-29
wdi NY.GDP.PCAP.PP.KD GDP per capita, PPP (constant 2011 international D) 2026-01-29 2026-01-29

LAST_COMPILE

LAST_COMPILE
2026-01-31

Last

Code
bop_c6_q %>%
  group_by(time) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(time)) %>%
  head(1) %>%
  print_table_conditional()
time Nobs
2025Q3 658125

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 41725475
MIO_NAC Million units of national currency 41184161

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_conditional

sector10

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 37217540
S13 General Government 8610688
S1P Other sectors than MFIs and general government 5540233
S123 Money market funds 4742828
S121 Central Bank 4723154
S122 Deposit-taking corporations except the central bank 4602063
S12T Monetary Financial Institutions (MFI) other than central bank 4557965
S12M Financial corporations other than MFIs 4325840
S1V Non-financial corporations, households and non-profit institutions serving households 4317813
S1W Other sectors than General Government 4040098
S1Z Sectors other than deposit-taking corporations and general government 89985
S12R Other financial corporations 73767
S1X Monetary authorities 67662

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 79746330
S12M Financial corporations other than MFIs 436403
S123 Money market funds 423883
S12T Monetary Financial Institutions (MFI) other than central bank 369029
S1P Other sectors than MFIs and general government 366433
S121 Central Bank 352928
S122 Deposit-taking corporations except the central bank 348666
S13 General Government 337250
S1V Non-financial corporations, households and non-profit institutions serving households 331350
S1N Not sectorised 185462
S12K Monetary financial institutions (MFI) 11656
S1Z Sectors other than deposit-taking corporations and general government 246

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 18100221
CRE Credit 16742081
DEB Debit 12193404
NET Net 12126230
BAL Balance 12014571
LIAB Liabilities 11722937
NI Net FDI inward 2556
NO Net FDI outward 2556
II Net income on inward FDI 2540
IO Net income on outward FDI 2540

partner

Code
bop_c6_q %>%
  left_join(partner, by = "partner") %>%
  group_by(partner, Partner) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  print_table_conditional

geo

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()