Balance of payments by country - quarterly data (BPM6)

Data - Eurostat

Info

source dataset .html .RData
eurostat bop_c6_q 2025-08-27 2025-08-19

Example

  • Third quarter of 2023. EU current account surplus €85.4 bn. pdf

Data on europe

source dataset .html .RData
eurostat bop_gdp6_q 2025-08-27 2025-08-24
eurostat nama_10_a10 2025-08-27 2025-08-24
eurostat nama_10_a10_e 2025-08-27 2025-08-24
eurostat nama_10_gdp 2025-08-27 2025-08-24
eurostat nama_10_lp_ulc 2025-08-27 2025-08-24
eurostat namq_10_a10 2025-05-24 2025-08-24
eurostat namq_10_a10_e 2025-05-24 2025-08-24
eurostat namq_10_gdp 2025-08-27 2025-08-24
eurostat namq_10_lp_ulc 2025-08-27 2025-08-24
eurostat namq_10_pc 2025-08-27 2025-08-24
eurostat nasa_10_nf_tr 2025-08-27 2025-08-24
eurostat nasq_10_nf_tr 2025-08-27 2025-08-24
eurostat tipsii40 2025-08-27 2025-08-24

Data on macro

source dataset .html .RData
eurostat nama_10_a10 2025-08-27 2025-08-24
eurostat nama_10_a10_e 2025-08-27 2025-08-24
eurostat nama_10_gdp 2025-08-27 2025-08-24
eurostat nama_10_lp_ulc 2025-08-27 2025-08-24
eurostat namq_10_a10 2025-05-24 2025-08-24
eurostat namq_10_a10_e 2025-05-24 2025-08-24
eurostat namq_10_gdp 2025-08-27 2025-08-24
eurostat namq_10_lp_ulc 2025-08-27 2025-08-24
eurostat namq_10_pc 2025-08-27 2025-08-24
eurostat nasa_10_nf_tr 2025-08-27 2025-08-24
eurostat nasq_10_nf_tr 2025-08-27 2025-08-24
fred gdp 2025-08-25 2025-08-24
oecd QNA 2024-06-06 2025-05-24
oecd SNA_TABLE1 2025-08-25 2025-05-24
oecd SNA_TABLE14A 2025-08-25 2024-06-30
oecd SNA_TABLE2 2024-07-01 2024-04-11
oecd SNA_TABLE6A 2024-07-01 2024-06-30
wdi NE.RSB.GNFS.ZS 2025-08-25 2025-08-24
wdi NY.GDP.MKTP.CD 2025-08-25 2025-08-24
wdi NY.GDP.MKTP.PP.CD 2025-08-25 2025-08-24
wdi NY.GDP.PCAP.CD 2025-08-25 2025-08-24
wdi NY.GDP.PCAP.KD 2025-08-10 2025-08-24
wdi NY.GDP.PCAP.PP.CD 2025-08-25 2025-08-24
wdi NY.GDP.PCAP.PP.KD 2025-08-25 2025-08-24

LAST_COMPILE

LAST_COMPILE
2025-08-26

Last

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

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 41034072
MIO_NAC Million units of national currency 40513062

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 36487891
S13 General Government 8487456
S1P Other sectors than MFIs and general government 5450067
S123 Money market funds 4686106
S121 Central Bank 4663332
S122 Deposit-taking corporations except the central bank 4540760
S12T Monetary Financial Institutions (MFI) other than central bank 4492093
S12M Financial corporations other than MFIs 4267790
S1V Non-financial corporations, households and non-profit institutions serving households 4258486
S1W Other sectors than General Government 3983679
S1Z Sectors other than deposit-taking corporations and general government 89180
S12R Other financial corporations 73130
S1X Monetary authorities 67164

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 78412213
S12M Financial corporations other than MFIs 432139
S123 Money market funds 420597
S12T Monetary Financial Institutions (MFI) other than central bank 365713
S1P Other sectors than MFIs and general government 363161
S121 Central Bank 349873
S122 Deposit-taking corporations except the central bank 345605
S13 General Government 334324
S1V Non-financial corporations, households and non-profit institutions serving households 328450
S1N Not sectorised 183294
S12K Monetary financial institutions (MFI) 11523
S1Z Sectors other than deposit-taking corporations and general government 242

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 17816406
CRE Credit 16460055
DEB Debit 11977669
NET Net 11939173
BAL Balance 11804126
LIAB Liabilities 11539881
NI Net FDI inward 2464
NO Net FDI outward 2464
II Net income on inward FDI 2448
IO Net income on outward FDI 2448

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