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) 2025-10-10 2025-10-09

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

Data on macro

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

LAST_COMPILE

LAST_COMPILE
2025-10-11

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