Immobilier en France

Data - BDF

Info

source dataset Title .html .rData
bdf immobilier Immobilier en France 2025-12-20 2025-12-20

variable

Code
immobilier %>%
  left_join(variable, by = "variable") %>%
  group_by(variable, Variable) %>%
  summarise(Nobs = n(),
            max_date = max(date),
            min_date = min(date)) %>%
  arrange(desc(max_date)) %>%
  print_table_conditional()
variable Variable Nobs max_date min_date
FM.D.U2.EUR.4F.KR.DFR.LEV BCE - Facilité de dépôt (données brutes) 9854 2025-12-23 1999-01-01
BSI1.M.FR.N.R.A220Z.A.1.U6.2254FR.Z01.E Crédits à l'habitat accordés aux particuliers résidents, encours 391 2025-10-31 1993-04-30
BSI1.M.FR.N.R.A26.A.1.U6.2254FR.Z01.E Crédits accordés aux particuliers résidents, encours 391 2025-10-31 1993-04-30
BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.E Crédits à l'habitat accordés aux particuliers résidents, flux mensuels, CVS 391 2025-10-31 1993-04-30
BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.V3F Crédits à l'habitat accordés aux particuliers résidents, variation d'encours (moyenne sur 3 mois glissants), CVS 391 2025-10-31 1993-04-30
MIR1.M.FR.B.A22.A.5.A.2254U6.EUR.N Crédits nouveaux à l'habitat des particuliers, flux CVS 274 2025-10-31 2003-01-31
MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N Crédits nouveaux à l'habitat des particuliers, taux d'intérêt annuel 323 2025-10-31 1998-12-31
MIR1.M.FR.B.A22HR.A.5.A.2254U6.EUR.N Crédits nouveaux à l'habitat (hors renégociations) aux particuliers résidents, flux, CVS 274 2025-10-31 2003-01-31
FM.M.U2.EUR.4F.KR.DF.LEV BCE - Facilité de dépôt - niveau fin de mois yc mois en cours 290 2023-02-28 1999-01-31
FM.M.U2.EUR.4F.KR.MLF.LEV BCE - Facilité de prêt marginal - niveau fin de mois yc mois en cours 290 2023-02-28 1999-01-31
FM.M.U2.EUR.4F.KR.MRR_FR.LEV BCE - Principales opérations de refinancement (taux fixe) 290 2023-02-28 1999-01-31

Comparer taux crédits immobilier et taux banque centrale

Tous

1 année

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable)) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.32, 0.1),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1))

2 ans

Tous

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable)) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.32, 0.1),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 0.5),
                labels = percent_format(accuracy = .1))

2020-

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2020-01-01")) %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable)) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = "3 months",
               labels = date_format("%b %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .25),
                labels = percent_format(accuracy = .01))

2021-

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2021-01-01")) %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable)) +
  #scale_color_manual(values = viridis(3)[1:2]) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = "2 months",
               labels = date_format("%b %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .25),
                labels = percent_format(accuracy = .01))

2022-

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  filter(date >= as.Date("2022-01-01")) %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable)) +
  #scale_color_manual(values = viridis(3)[1:2]) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.35, 0.9),
        legend.title = element_blank(),
        axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, .25),
                labels = percent_format(accuracy = .01))

Tous les taux

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22.A.R.A.2254U6.EUR.N" |
           variable == "FM.M.U2.EUR.4F.KR.MRR_FR.LEV" |
           variable == "FM.M.U2.EUR.4F.KR.MLF.LEV" |
           variable == "FM.D.U2.EUR.4F.KR.DFR.LEV") %>%
  left_join(variable, by = "variable") %>%
  ggplot + geom_line(aes(x = date, y = value/100, color = Variable, linetype = Variable)) +
  scale_color_manual(values = c(viridis(3)[1], viridis(3)[1], viridis(3)[1], viridis(3)[2])) +
  scale_linetype_manual(values = c("dashed", "longdash", "solid", "solid")) +
  theme_minimal() + xlab("") + ylab("Taux d'intérêt (%)") +
  theme(legend.position = c(0.32, 0.13),
        legend.title = element_blank(), 
        legend.spacing.x = unit(0.2, 'cm'),
        legend.spacing.y = unit(0.2, 'cm')) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = 0.01*seq(-10, 100, 1),
                labels = percent_format(accuracy = 1),
                limits = c(-0.02, 0.065))

Crédits à l’habitat

Encours

Linear

Code
plot_linear <- immobilier %>%
  filter(variable == "BSI1.M.FR.N.R.A26.A.1.U6.2254FR.Z01.E" |
           variable == "BSI1.M.FR.N.R.A220Z.A.1.U6.2254FR.Z01.E") %>%
  left_join(variable, by = "variable") %>%
  ggplot + theme_minimal() + xlab("") + ylab("") +
  geom_line(aes(x = date, y = value / 1000, color = Variable)) +
  
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 5), "-01-01")),
               labels = date_format("%Y")) +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank(),
        legend.direction = "vertical") +
  scale_y_continuous(breaks = seq(-10000, 10000, 100),
                labels = dollar_format(suffix = " Mds€", prefix = "",  accuracy = 1))

plot_linear

Log

Code
plot_log <- plot_linear +
  scale_y_log10(breaks = seq(-10000, 10000, 100),
                     labels = dollar_format(suffix = " Mds€", prefix = "",  accuracy = 1))

plot_log

Both

Code
library("ggpubr")
ggarrange(plot_linear + ggtitle("Linear"), plot_log + ggtitle("Log"), common.legend = T, legend = "bottom")

Montants mensuels

All

Code
immobilier %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.E") %>%
  na.omit %>%
  ggplot + geom_line(aes(x = date, y = value)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000))

2000-

Code
immobilier %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.E",
         date >= as.Date("1999-12-31")) %>%
  na.omit %>%
  ggplot + geom_line(aes(x = date, y = value)) +
  theme_minimal() + xlab("") + ylab("") +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000))

3 mois

All

Code
immobilier %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.V3F") %>%
  na.omit %>%
  ggplot + geom_line(aes(x = date, y = value)) +
  theme_minimal() + xlab("") + ylab("Crédits à l'habitat accordés aux particuliers résidents\n variation d'encours (moyenne sur 3 mois glissants)") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000),
                     labels = dollar_format(acc = 1, pre = ""))

2000-

Code
immobilier %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.V3F") %>%
  na.omit %>%
  ggplot + geom_line(aes(x = date, y = value/1000)) +
  theme_minimal() + xlab("") + ylab("Crédits à l'habitat accordés aux particuliers résidents\n variation d'encours (moyenne sur 3 mois glissants)") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000)/1000,
                     labels = dollar_format(acc = 1, pre = "", su = " Mds€"))

Last year

Code
immobilier %>%
  filter(date >= Sys.Date() - months(18)) %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.V3F") %>%
  na.omit %>%
  ggplot + geom_line(aes(x = date, y = value)) +
  theme_minimal() + xlab("") + ylab("") +
  theme(axis.text.x = element_text(angle = 45, vjust = 1, hjust = 1)) +
  scale_x_date(breaks = "1 month",
               labels = date_format("%b %Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000),
                     labels = dollar_format(acc = 1, pre = ""))

1 mois, 3 mois

Code
immobilier %>%
  filter(variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.V3F" |
           variable == "BSI1.M.FR.Y.R.A220Z.A.4.U6.2254FR.Z01.E") %>%
  left_join(variable, by = "variable") %>%
  ggplot + geom_line(aes(x = date, y = value, color = Variable)) +
  theme_minimal() + xlab("") + ylab("") +
  theme(legend.position = c(0.5, 0.9),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-10000, 10000, 1000))

Crédits nouveaux à l’habitat (hors renégociation)

All

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22HR.A.5.A.2254U6.EUR.N" |
           variable == "MIR1.M.FR.B.A22.A.5.A.2254U6.EUR.N") %>%
  left_join(variable, by = "variable") %>%
  ggplot + geom_line(aes(x = date, y = value, color = Variable)) +
  theme_minimal() + xlab("") + ylab("") +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 2), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-100, 100, 5))

Complete series

Code
immobilier %>%
  filter(variable == "MIR1.M.FR.B.A22HR.A.5.A.2254U6.EUR.N" |
           variable == "MIR1.M.FR.B.A22.A.5.A.2254U6.EUR.N") %>%
  left_join(variable, by = "variable") %>%
  group_by(date) %>%
  filter(n() == 2) %>%
  ggplot + geom_line(aes(x = date, y = value, color = Variable)) +
  theme_minimal() + xlab("") + ylab("") +
  theme(legend.position = c(0.4, 0.9),
        legend.title = element_blank()) +
  scale_x_date(breaks = as.Date(paste0(seq(1960, 2100, 1), "-01-01")),
               labels = date_format("%Y")) +
  scale_y_continuous(breaks = seq(-100, 100, 5))

Pour en savoir plus…

Données sur l’immobilier

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

Data on housing

source dataset Title .html .rData
bdf RPP Prix de l'immobilier 2025-12-20 2025-12-20
bis LONG_PP Residential property prices - detailed series 2025-10-11 2024-05-10
bis SELECTED_PP Property prices, selected series 2025-12-23 2025-12-23
ecb RPP Residential Property Price Index Statistics 2025-12-19 2025-08-29
eurostat ei_hppi_q House price index (2015 = 100) - quarterly data 2025-12-23 2025-12-23
eurostat hbs_str_t223 Mean consumption expenditure by income quintile 2025-10-11 2025-12-23
eurostat prc_hicp_midx HICP (2015 = 100) - monthly data (index) 2025-12-22 2025-12-23
eurostat prc_hpi_q House price index (2015 = 100) - quarterly data 2025-12-23 2025-12-23
fred housing House Prices 2025-12-23 2025-12-23
insee IPLA-IPLNA-2015 Indices des prix des logements neufs et Indices Notaires-Insee des prix des logements anciens 2025-12-23 2025-12-23
oecd SNA_TABLE5 Final consumption expenditure of households 2025-11-17 2023-10-19
oecd housing NA NA NA

LAST_COMPILE

LAST_COMPILE
2025-12-24

Last

Code
immobilier %>%
  group_by(date) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(date)) %>%
  head(2) %>%
  print_table_conditional()
date Nobs
2025-12-23 1
2025-12-22 1