Indices des loyers - Base 2019

Data - INSEE

Info

source dataset Title .html .rData
insee INDICES_LOYERS Indices des loyers - Base 2019 2025-10-10 2025-10-09

Données sur l’inflation en France

source dataset Title .html .rData
insee ILC-ILAT-ICC Indices pour la révision d’un bail commercial ou professionnel 2025-10-10 2025-10-09
insee INDICES_LOYERS Indices des loyers - Base 2019 2025-10-10 2025-10-09
insee IPC-1970-1980 Indice des prix à la consommation - Base 1970, 1980 2025-10-10 2025-10-09
insee IPC-1990 Indices des prix à la consommation - Base 1990 2025-10-10 2025-10-09
insee IPC-2015 Indice des prix à la consommation - Base 2015 2025-10-10 2025-10-10
insee IPC-PM-2015 Prix moyens de vente de détail 2025-10-10 2025-10-09
insee IPCH-2015 Indices des prix à la consommation harmonisés 2025-10-10 2025-10-09
insee IPCH-IPC-2015-ensemble Indices des prix à la consommation harmonisés 2025-10-10 2025-10-10
insee IPGD-2015 Indice des prix dans la grande distribution 2025-10-10 2025-05-24
insee IPLA-IPLNA-2015 Indices des prix des logements neufs et Indices Notaires-Insee des prix des logements anciens 2025-10-10 2025-10-09
insee IPPI-2015 Indices de prix de production et d'importation dans l'industrie 2025-10-10 2025-10-10
insee IRL Indice pour la révision d’un loyer d’habitation 2025-10-10 2025-10-09
insee SERIES_LOYERS Variation des loyers 2025-10-10 2025-10-10
insee T_CONSO_EFF_FONCTION Consommation effective des ménages par fonction 2025-10-10 2024-07-18
insee bdf2017 Budget de famille 2017 2025-10-10 2023-11-21
insee echantillon-agglomerations-IPC-2024 Échantillon d’agglomérations enquêtées de l’IPC en 2024 2025-10-10 2025-04-02
insee liste-varietes-IPC-2024 Liste des variétés pour la mesure de l'IPC en 2024 2025-10-10 2025-04-02
insee ponderations-elementaires-IPC-2024 Pondérations élémentaires 2024 intervenant dans le calcul de l’IPC 2025-10-10 2025-04-02

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-08-28 2025-08-24
bdf CPP Prix immobilier commercial 2025-08-28 2024-07-01
bdf FM Marché financier, taux 2025-08-28 2025-08-28
bdf MIR Taux d'intérêt - Zone euro 2025-08-28 2025-08-04
bdf MIR1 Taux d'intérêt - France 2025-08-28 2025-08-04
bdf RPP Prix de l'immobilier 2025-08-28 2025-08-24
bdf immobilier Immobilier en France 2025-08-28 2025-08-28
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-10-10 2025-10-09
insee ENQ-CONJ-ART-BAT Conjoncture dans l'artisanat du bâtiment 2025-10-10 2025-10-09
insee ENQ-CONJ-IND-BAT Conjoncture dans l'industrie du bâtiment - ENQ-CONJ-IND-BAT 2025-10-10 2025-10-09
insee ENQ-CONJ-PROMO-IMMO Conjoncture dans la promotion immobilière 2025-10-10 2025-10-09
insee ENQ-CONJ-TP Conjoncture dans les travaux publics 2025-10-10 2025-10-09
insee ILC-ILAT-ICC Indices pour la révision d’un bail commercial ou professionnel 2025-10-10 2025-10-09
insee INDICES_LOYERS Indices des loyers - Base 2019 2025-10-10 2025-10-09
insee IPLA-IPLNA-2015 Indices des prix des logements neufs et Indices Notaires-Insee des prix des logements anciens 2025-10-10 2025-10-09
insee IRL Indice pour la révision d’un loyer d’habitation 2025-10-10 2025-10-09
insee PARC-LOGEMENTS Estimations annuelles du parc de logements (EAPL) 2025-10-10 2023-12-03
insee SERIES_LOYERS Variation des loyers 2025-10-10 2025-10-10
insee t_dpe_val Dépenses de consommation des ménages pré-engagées 2025-10-10 2025-08-29
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

Info

  • Indices des loyers d’habitation (ILH). html

  • Enquête Loyers et charges. html

  • Questionnaire de l’enquête. pdf

  • Qualité de l’enquête relative à l’exercice 2018. pdf

Les données sont calculées à partir des résultats de l’enquête Loyers et charges et de celle sur les loyers auprès des bailleurs sociaux (ELBS). Le champ recouvre l’ensemble des résidences principales, louées vides, dont l’usage principal est l’habitation. L’indice est calculé selon la formule de Laspeyres appliquée à des loyers au mètre carré. On mesure une évolution à qualité constante, en rapportant les loyers du parc observés au trimestre T aux loyers du parc observés au trimestre T-1. Ces indices sont ensuite chaînés, du 1er mois d’un trimestre au 1er mois du trimestre précédent.

Ces données diffèrent de l’indice de référence des loyers (IRL), qui constitue la référence pour la révision des loyers en cours de bail dans le parc locatif privé, car l’évolution des loyers présentée ici est celle effectivement constatée. Si la variation réelle des loyers est corrélée à l’évolution de l’IRL, les deux indices ne sont cependant pas identiques.

LAST_UPDATE

  • LAST_UPDATE
Code
`INDICES_LOYERS` %>%
  group_by(LAST_UPDATE) %>%
  summarise(Nobs = n()) %>%
  arrange(desc(LAST_UPDATE)) %>%
  print_table_conditional()
LAST_UPDATE Nobs
2025-09-16 5248

SECTEURS_LOYERS

Code
INDICES_LOYERS %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  group_by(SECTEURS_LOYERS, Secteurs_loyers) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
SECTEURS_LOYERS Secteurs_loyers Nobs
TOUS_SECTEURS Tous secteurs 1797
SECTEUR_SOCIAL Secteur social 1730
SECTEUR_LIBRE Secteur libre 1721

NATURE

Code
INDICES_LOYERS %>%
  left_join(NATURE, by = "NATURE") %>%
  group_by(NATURE, Nature) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
NATURE Nature Nobs
INDICE Indice 1773
GLISSEMENT_TRIMESTRIEL Glissement trimestriel 1763
GLISSEMENT_ANNUEL Glissement annuel 1712

REF_AREA

Code
INDICES_LOYERS %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  group_by(REF_AREA, Ref_area) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
REF_AREA Ref_area Nobs
FM France métropolitaine 1383
AGGLO_PARIS Agglomération parisienne 1287
PR Reste de la France métropolitaine 1287
D971 Guadeloupe 522
D972 Martinique 231
D974 La Réunion 231
FR-D976 France (hors Mayotte) 231
D973 Guyane 76

OBS_STATUS

Code
INDICES_LOYERS %>%
  left_join(OBS_STATUS, by = "OBS_STATUS") %>%
  group_by(OBS_STATUS, Obs_status) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) print_table(.) else .}
OBS_STATUS Obs_status Nobs
A Valeur normale 4888
U Valeur atypique 360

TITLE_FR

Code
INDICES_LOYERS %>%
  group_by(IDBANK, TITLE_FR) %>%
  summarise(Nobs = n()) %>%
  arrange(-Nobs) %>%
  {if (is_html_output()) datatable(., filter = 'top', rownames = F) else .}

Par Type

Tous Secteurs

Code
INDICES_LOYERS %>%
  filter(SECTEURS_LOYERS == "TOUS_SECTEURS",
         NATURE == "INDICE",
         REF_AREA %in% c("FM", "AGGLO_PARIS", "PR")) %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Ref_area)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Secteur libre

Code
INDICES_LOYERS %>%
  filter(SECTEURS_LOYERS == "SECTEUR_LIBRE",
         NATURE == "INDICE",
         REF_AREA %in% c("FM", "AGGLO_PARIS", "PR")) %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Ref_area)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Secteur social

Code
INDICES_LOYERS %>%
  filter(SECTEURS_LOYERS == "SECTEUR_SOCIAL",
         NATURE == "INDICE",
         REF_AREA %in% c("FM", "AGGLO_PARIS", "PR")) %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  left_join(REF_AREA, by = "REF_AREA") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Ref_area)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Par région

Liste

Code
INDICES_LOYERS %>%
  filter(TIME_PERIOD == "2020-Q2",
         NATURE == "INDICE",
         SECTEURS_LOYERS == "TOUS_SECTEURS") %>%
  select(REF_AREA, TITLE_FR, OBS_VALUE) %>%
  mutate(TITLE_FR = gsub("Indice des loyers – Tous secteurs – ", "", TITLE_FR),
         TITLE_FR = gsub(" – Base 100 en janvier 2019", "", TITLE_FR)) %>%
  {if (is_html_output()) print_table(.) else .}
REF_AREA TITLE_FR OBS_VALUE
FM France métropolitaine 100.6
AGGLO_PARIS Agglomération parisienne 100.8
PR Reste de la France métropolitaine 100.5
D971 Guadeloupe 101.1
D972 Martinique 101.2
D973 Guyane 101.0
D974 La Réunion 101.1
FR-D976 France (hors Mayotte) 100.6

France

All

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FM",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1990-

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FM",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1990-01-01")) %>%
  group_by(SECTEURS_LOYERS) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

1992-

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FM",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  filter(date >= as.Date("1992-01-01")) %>%
  group_by(SECTEURS_LOYERS) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 2) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2000-

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FM",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2000-01-01")) %>%
  group_by(SECTEURS_LOYERS) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

2017-

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FM",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  filter(date >= as.Date("2017-01-01")) %>%
  group_by(SECTEURS_LOYERS) %>%
  arrange(date) %>%
  mutate(OBS_VALUE = 100*OBS_VALUE/OBS_VALUE[1]) %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 1),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Agglomération Parisienne

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "AGGLO_PARIS",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

Province

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "PR",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 5) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 10),
                     labels = dollar_format(accuracy = 1, prefix = ""))

France (hors Mayotte)

Code
INDICES_LOYERS %>%
  filter(REF_AREA == "FR-D976",
         NATURE == "INDICE") %>%
  left_join(SECTEURS_LOYERS, by = "SECTEURS_LOYERS") %>%
  quarter_to_date %>%
  ggplot() + ylab("Indice des loyers") + xlab("") + theme_minimal() +
  geom_line(aes(x = date, y = OBS_VALUE, color = Secteurs_loyers)) +
  
  scale_x_date(breaks = seq(1920, 2100, 1) %>% paste0("-01-01") %>% as.Date,
               labels = date_format("%Y")) +
  theme(legend.position = c(0.75, 0.3),
        legend.title = element_blank()) +
  scale_y_log10(breaks = seq(0, 400, 1),
                     labels = dollar_format(accuracy = 1, prefix = ""))