Balance of payments by country - monthly data (BPM6) - bop_c6_m

Data - Eurostat

Info

Last observation: Monthly: 2026M05 (N = 33,959)

First observation: Monthly: 1991M01 (N = 2,490)

Last data update: 23 jul 2026, 22:42. Last compile: 24 jul 2026, 00:36

Structure

Germany, France, Italy

CA

Code
bop_c6_m %>%
  filter(geo %in% c("DE", "FR", "IT"),
         stk_flow == "BAL",
         currency == "MIO_EUR",
         partner == "WRL_REST",
         bop_item == "CA") %>%
  month_to_date %>%
  
  left_join(B1GQ, by = c("geo", "date")) %>%
  group_by(Geo) %>%
  arrange(date) %>%
  mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y,
         values = 3*values / B1GQ_i) %>%
  ggplot + geom_line(aes(x = date, y = values, color = Geo)) +
  scale_color_manual(values = c("#002395", "#000000", "#009246")) +
  theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  geom_image(data = . %>%
               filter(date == as.Date("2008-01-01")) %>%
               mutate(image = paste0("../../icon/flag/", str_to_lower(Geo), ".png")),
             aes(x = date, y = values, image = image), asp = 1.5) +
  theme(legend.position = "none") +
  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")

KA

Code
bop_c6_m %>%
  filter(geo %in% c("DE", "FR", "IT"),
         stk_flow == "BAL",
         currency == "MIO_EUR",
         partner == "WRL_REST",
         bop_item == "KA") %>%
  month_to_date %>%
  
  left_join(B1GQ, by = c("geo", "date")) %>%
  group_by(Geo) %>%
  arrange(date) %>%
  mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y,
         values = 3*values / B1GQ_i) %>%
  ggplot + geom_line(aes(x = date, y = values, color = Geo)) +
  scale_color_manual(values = c("#002395", "#000000", "#009246")) +
  theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  geom_image(data = . %>%
               filter(date == as.Date("2008-01-01")) %>%
               mutate(image = paste0("../../icon/flag/", str_to_lower(Geo), ".png")),
             aes(x = date, y = values, image = image), asp = 1.5) +
  theme(legend.position = "none") +
  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")

FA

Code
bop_c6_m %>%
  filter(geo %in% c("DE", "FR", "IT"),
         stk_flow == "NET",
         currency == "MIO_EUR",
         partner == "WRL_REST",
         bop_item == "FA") %>%
  month_to_date %>%

  left_join(B1GQ, by = c("geo", "date")) %>%
  group_by(Geo) %>%
  arrange(date) %>%
  mutate(B1GQ_i = spline(x = date, y = B1GQ, xout = date)$y,
         values = 3*values / B1GQ_i) %>%
  ggplot + geom_line(aes(x = date, y = values, color = Geo)) +
  scale_color_manual(values = c("#002395", "#000000", "#009246")) +
  theme_minimal()  +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  geom_image(data = . %>%
               filter(date == as.Date("2008-01-01")) %>%
               mutate(image = paste0("../../icon/flag/", str_to_lower(Geo), ".png")),
             aes(x = date, y = values, image = image), asp = 1.5) +
  theme(legend.position = "none") +
  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")

Current Account: Country Comparison

Latest Month, by Item

Code
latest_m <- bop_c6_m %>%
  filter(bop_item == "CA",
         stk_flow == "BAL",
         partner == "WRL_REST",
         sector10 == "S1",
         sectpart == "S1",
         currency == "MIO_EUR",
         geo %in% c("DE", "FR", "IT", "ES", "NL", "BE", "PT", "IE"),
         !is.na(values)) %>%
  summarise(m = max(time)) %>%
  pull(m)

bop_c6_m %>%
  filter(geo %in% c("DE", "FR", "IT", "ES", "NL", "BE", "PT", "IE"),
         stk_flow == "BAL",
         partner == "WRL_REST",
         sector10 == "S1",
         sectpart == "S1",
         currency == "MIO_EUR",
         bop_item %in% c("CA", "KA", "FA", "G", "S", "GS", "IN1", "IN2"),
         time == latest_m) %>%
  mutate(values = values/1000) %>%
  select(bop_item, Bop_item, Geo, values) %>%
  spread(Geo, values) %>%
  print_table_conditional()
bop_item Bop_item Belgium France Germany Ireland Italy Netherlands Portugal Spain
CA Current account 0.296 -17.818 10.368 NA 0.594 NA -0.633 NA
G Goods 1.848 -7.498 15.372 NA 5.224 NA -2.566 NA
GS Goods and services 1.310 0.372 8.159 NA 5.106 NA 0.145 NA
IN1 Primary income -0.408 -12.871 5.734 NA -4.034 NA -1.270 NA
IN2 Secondary income -0.605 -5.319 -3.526 NA -0.477 NA 0.492 NA
KA Capital account 0.003 0.921 -3.352 NA 0.054 NA 0.390 NA
S Services -0.538 7.871 -7.212 NA -0.118 NA 2.710 NA

By Destination: Europe, ex-Europe

France

Code
bop_c6_m %>%
  filter(geo == "FR",
         stk_flow == "BAL",
         time == "2021M04",
         currency == "MIO_EUR",
         partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%

  select(bop_item, Bop_item, everything()) %>%
  select_if(~n_distinct(.) > 1) %>%
  spread(partner, values) %>%
  arrange(sector10) %>%
  print_table_conditional()

Germany

Code
bop_c6_m %>%
  filter(geo == "DE",
         stk_flow == "BAL",
         time == "2021M04",
         currency == "MIO_EUR",
         partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%

  select(bop_item, Bop_item, everything()) %>%
  select_if(~n_distinct(.) > 1) %>%
  spread(partner, values) %>%
  arrange(sector10) %>%
  print_table_conditional()

By Destination: Europe, ex-Europe

France

Code
bop_c6_m %>%
  filter(geo == "FR",
         stk_flow == "BAL",
         time == "2021M04",
         currency == "MIO_EUR",
         partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
  
  select(bop_item, Bop_item, everything()) %>%
  select_if(~n_distinct(.) > 1) %>%
  spread(partner, values) %>%
  arrange(sector10) %>%
  print_table_conditional()

Germany

Code
bop_c6_m %>%
  filter(geo == "DE",
         stk_flow == "BAL",
         time == "2021M04",
         currency == "MIO_EUR",
         partner %in% c("EA19", "EXT_EA19", "WRL_REST")) %>%
  
  select(bop_item, Bop_item, everything()) %>%
  select_if(~n_distinct(.) > 1) %>%
  spread(partner, values) %>%
  arrange(sector10) %>%
  print_table_conditional()