Financial Markets, Interest Rates

Data - Banque de France

🇫🇷 Version française

Info

Structure

NULL

LAST_COMPILE

source dataset Title .html .rData
bdf FM Marché financier, taux 2026-08-07 2026-08-07

Last

date Nobs
2026-12-31 2

Interest Rates

ECB - Deposit facility, refinancing operations

All

Code
FM |>
  filter(grepl("FM.D.U2.EUR.4F.KR.MRR_FR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.MLFR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.DFR.LEV", variable)) |>

  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.1),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1))

2022-

Code
FM |>
  filter(grepl("FM.D.U2.EUR.4F.KR.MRR_FR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.MLFR.LEV", variable) |
           grepl("FM.D.U2.EUR.4F.KR.DFR.LEV", variable)) |>
  filter(date >= as.Date("2022-01-01")) |>

  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1))

Treasury Bonds

10-year, 5-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.7, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2018-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2020-01-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed") +
  geom_label(data = . %>% filter(date == max(date)),
             aes(x = date, y = value/100, label = percent(value/100), color = Variable))

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year, 10-year, 1-month

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC30", "FRMOYTEC10"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  #select_if(function(col) length(unique(col)) > 1) %>%
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC30"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  #select_if(function(col) length(unique(col)) > 1) %>%
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

30-year, 10-year, 5-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960,2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2020-01-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC30"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.2, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

1-year, 5-year, 10-year

All

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2018-01-01"),
          FREQ == "D") |>
  select_if(function(col) length(unique(col)) > 1) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2030, 1), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

March 2020-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2020-03-01"),
          FREQ == "D") |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2021-

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= as.Date("2021-01-01"),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.3, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .2),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

2 years

Code
FM |>

  filter(PROVIDER_FM_ID %in% c("FRMOYTEC10", "FRMOYTEC5", "FRMOYTEC1"),
         date >= Sys.Date() - years(2),
          FREQ == "D") |>
  arrange(desc(date)) |>
  ggplot() + geom_line(aes(x = date, y = value/100, color = Variable)) +

  theme_minimal() + xlab("") + ylab("Interest rate (%)") +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  theme(legend.position = c(0.25, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical",
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .5),
                labels = percent_format(accuracy = .1)) +
  geom_hline(yintercept =  0, linetype = "dashed")

For more information…

Data on interest rates

source dataset Title .html .rData
bdf MIR Taux d'intérêt - Zone euro 2026-08-07 2026-07-28
bdf FM Marché financier, taux 2026-08-07 2026-08-07
bdf MIR1 Taux d'intérêt - France 2026-08-07 2026-07-28
bis CBPOL_D Policy Rates, Daily 2026-08-07 2026-08-01
bis CBPOL_M Policy Rates, Monthly 2026-08-07 2026-07-25
ecb FM Financial market data 2026-08-07 2026-08-07
ecb MIR MFI Interest Rate Statistics 2026-08-07 2026-08-07

Data on real estate

source dataset Title .html .rData
bdf MIR Taux d'intérêt - Zone euro 2026-08-07 2026-07-28
acpr as151 Enquête annuelle du SGACPR sur le financement de l'habitat 2022 2026-08-07 2026-08-01
acpr as160 Enquête annuelle du SGACPR sur le financement de l'habitat 2023 2026-08-07 2026-08-01
acpr as174 Enquête annuelle du SGACPR sur le financement de l'habitat 2024 2026-08-07 2026-08-01
bdf BSI1 Agrégats monétaires - France 2026-08-07 2026-07-27
bdf CPP Prix immobilier commercial 2026-08-07 2026-07-24
bdf FM Marché financier, taux 2026-08-07 2026-08-07
bdf MIR1 Taux d'intérêt - France 2026-08-07 2026-07-28
bdf RPP Prix de l'immobilier 2026-08-07 2026-08-07
bdf immobilier Immobilier en France 2026-08-07 2026-08-01
cgedd nombre-vente-maison-appartement-ancien Nombre de ventes de logements anciens cumulé sur 12 mois 2026-08-07 2026-08-01
insee CONSTRUCTION-LOGEMENTS Construction de logements 2026-08-08 2026-08-07
insee ENQ-CONJ-ART-BAT Conjoncture dans l'artisanat du bâtiment 2026-08-08 2026-08-07
insee ENQ-CONJ-IND-BAT Conjoncture dans l'industrie du bâtiment - ENQ-CONJ-IND-BAT 2026-08-08 2026-08-07
insee ENQ-CONJ-PROMO-IMMO Conjoncture dans la promotion immobilière 2026-08-08 2026-08-07
insee ENQ-CONJ-TP Conjoncture dans les travaux publics 2026-08-08 2026-08-07
insee ILC-ILAT-ICC Indices pour la révision d’un bail commercial ou professionnel 2026-08-08 2026-08-07
insee INDICES_LOYERS Indices des loyers d'habitation (ILH) 2026-08-08 2026-08-07
insee IPLA-IPLNA-2015 Indices des prix des logements neufs et Indices Notaires-Insee des prix des logements anciens 2026-08-08 2026-08-07
insee IRL Indice pour la révision d’un loyer d’habitation 2026-08-08 2026-08-07
insee PARC-LOGEMENTS Estimations annuelles du parc de logements (EAPL) 2026-08-08 2026-07-23
insee SERIES_LOYERS Variation des loyers 2026-08-08 2026-08-07
insee t_dpe_val Dépenses de consommation des ménages pré-engagées 2026-08-08 2026-08-02
notaires arrdt Prix au m^2 par arrondissement - arrdt 2026-08-07 2026-08-07
notaires dep Prix au m^2 par département 2026-08-07 2026-08-07
olap loyers Loyers 2026-08-01 2026-08-01