Impôt sur la Fortune Immobilière (IFI), 2018-2025

Données - DGFIP

Code
source(here::here("_rinit.R"))
invisible(Sys.setlocale("LC_TIME", "fr_FR.UTF-8"))
# cd ~/iCloud/website/data/dgfip; /usr/local/bin/R -e 'quarto::quarto_render("ifi.qmd")'
# cd ~/iCloud/website/data; sh _status/run_all_silent.sh --only dgfip

knitr::opts_chunk$set(echo = TRUE, message = FALSE, warning = FALSE,
                       fig.width = 9, fig.height = 5.5, dpi = 150)

communes_path <- here::here("data", "dgfip", "ifi_communes.parquet")
communes <- arrow::read_parquet(communes_path)

periode      <- range(communes$Annee)
derniere_an  <- max(communes$Annee)

theme_ifi <- theme_minimal(base_size = 12) +
  theme(plot.title = element_text(face = "bold"),
        plot.subtitle = element_text(colour = "grey35"),
        panel.grid.minor = element_blank())

L’Impôt sur la Fortune Immobilière (IFI) a remplacé l’ISF à partir de 2018, en recentrant l’assiette sur le seul patrimoine immobilier net des ménages (hors valeurs mobilières, liquidités, etc.), avec un seuil d’entrée inchangé de 1,3 M€. Les données ci-dessous, publiées par la DGFIP, détaillent chaque année le nombre de redevables et le patrimoine immobilier moyen déclaré par commune, pour les villes de plus de 20 000 habitants comptant plus de 50 redevables à l’IFI, de 2018 à 2025.

Évolution nationale (communes couvertes)

Code
synth <- communes |>
  dplyr::group_by(Annee) |>
  dplyr::summarise(
    `Communes couvertes`          = dplyr::n(),
    `Redevables (communes >20k)`  = sum(Nombre_redevables),
    `Patrimoine moyen (€)`        = weighted.mean(Patrimoine_moyen, Nombre_redevables),
    `Impôt moyen (€)`             = weighted.mean(Impot_moyen, Nombre_redevables),
    .groups = "drop")

synth |>
  gt::gt() |>
  gt::fmt_number(columns = -Annee, decimals = 0, sep_mark = " ") |>
  gt::tab_header(title = "Redevables IFI et patrimoine immobilier moyen",
                  subtitle = "Villes de plus de 20 000 hab. avec plus de 50 redevables à l'IFI") |>
  gt::tab_options(table.width = "100%")
Redevables IFI et patrimoine immobilier moyen
Villes de plus de 20 000 hab. avec plus de 50 redevables à l'IFI
Annee Communes couvertes Redevables (communes >20k) Patrimoine moyen (€) Impôt moyen (€)
2018 182 74 266 2 386 703 9 898
2019 189 78 552 2 440 332 10 883
2020 190 81 227 2 472 398 10 916
2021 203 87 091 2 484 169 10 895
2022 210 92 958 2 498 277 11 011
2023 228 99 886 2 508 276 11 083
2024 234 103 449 2 531 661 11 354
2025 237 106 230 2 559 643 11 664
Code
synth |>
  ggplot(aes(Annee, `Redevables (communes >20k)`)) +
  geom_col(fill = "#3b6f8a") +
  scale_y_continuous(labels = scales::label_number(big.mark = " ")) +
  scale_x_continuous(breaks = scales::breaks_pretty(8)) +
  labs(title = "Redevables IFI dans les communes >20 000 hab. (>50 redevables)",
       subtitle = sprintf("Somme sur les %d communes couvertes chaque année", dplyr::n_distinct(communes$Code_commune)),
       x = NULL, y = NULL) +
  theme_ifi
Figure 1
Code
synth |>
  ggplot(aes(Annee, `Patrimoine moyen (€)` / 1e6)) +
  geom_line(colour = "#c0392b", linewidth = 0.9) +
  geom_point(colour = "#c0392b", size = 2) +
  scale_y_continuous(labels = scales::label_number(big.mark = " ")) +
  scale_x_continuous(breaks = scales::breaks_pretty(8)) +
  labs(title = "Patrimoine immobilier net moyen déclaré",
       subtitle = "Moyenne pondérée par le nombre de redevables, en millions d'euros",
       x = NULL, y = "M€") +
  theme_ifi
Figure 2

Le nombre de communes couvertes (seuil de plus de 50 redevables) varie légèrement d’une année à l’autre ; les comparaisons doivent donc être lues à champ non strictement constant.

Communes par redevables et par patrimoine, 2025

Code
communes |>
  dplyr::filter(Annee == derniere_an) |>
  dplyr::slice_max(Nombre_redevables, n = 15) |>
  dplyr::mutate(Commune = forcats::fct_reorder(Commune, Nombre_redevables)) |>
  ggplot(aes(Nombre_redevables, Commune)) +
  geom_col(fill = "#3b6f8a") +
  scale_x_continuous(labels = scales::label_number(big.mark = " ")) +
  labs(title = sprintf("Communes ayant le plus de redevables à l'IFI en %d", derniere_an),
       x = "Nombre de redevables", y = NULL) +
  theme_ifi
Figure 3
Code
communes |>
  dplyr::filter(Annee == derniere_an) |>
  dplyr::slice_max(Patrimoine_moyen, n = 15) |>
  dplyr::mutate(Commune = forcats::fct_reorder(Commune, Patrimoine_moyen)) |>
  ggplot(aes(Patrimoine_moyen / 1e6, Commune)) +
  geom_col(fill = "#c0392b") +
  scale_x_continuous(labels = scales::label_number(big.mark = " ")) +
  labs(title = sprintf("Communes au patrimoine immobilier moyen le plus élevé en %d", derniere_an),
       x = "Patrimoine moyen (M€)", y = NULL) +
  theme_ifi
Figure 4

Grandes villes : évolution 2018-2025

Code
grandes_villes <- c("Paris 7e", "Paris 16e", "Neuilly sur Seine", "Neuilly-sur-Seine",
                     "Lyon", "Marseille", "Nice")

communes |>
  dplyr::filter(toupper(Commune) %in% toupper(grandes_villes)) |>
  dplyr::mutate(Ville = dplyr::recode(Commune,
    "Neuilly sur Seine" = "Neuilly-sur-Seine",
    "NEUILLY SUR SEINE" = "Neuilly-sur-Seine",
    "LYON" = "Lyon", "MARSEILLE" = "Marseille", "NICE" = "Nice")) |>
  dplyr::group_by(Annee, Ville) |>
  dplyr::summarise(Patrimoine_moyen = mean(Patrimoine_moyen), .groups = "drop") |>
  ggplot(aes(Annee, Patrimoine_moyen / 1e6, colour = Ville)) +
  geom_line(linewidth = 0.9) +
  geom_point(size = 1.8) +
  scale_y_continuous(labels = scales::label_number(big.mark = " ")) +
  scale_x_continuous(breaks = scales::breaks_pretty(8)) +
  scale_colour_brewer(palette = "Dark2", name = NULL) +
  labs(title = "Patrimoine immobilier moyen déclaré — quelques villes emblématiques",
       x = NULL, y = "M€") +
  theme_ifi +
  theme(legend.position = "bottom")
Figure 5

Table complète

Code
communes |>
  dplyr::arrange(Annee, dplyr::desc(Nombre_redevables)) |>
  reactable::reactable(
    searchable = TRUE, filterable = TRUE, pagination = TRUE,
    defaultPageSize = 20, compact = TRUE, resizable = TRUE, highlight = TRUE, wrap = TRUE,
    defaultColDef = reactable::colDef(
      align = "left", headerStyle = list(fontWeight = "bold"),
      style = list(whiteSpace = "normal", wordBreak = "break-word")),
    columns = list(
      Annee              = reactable::colDef(name = "Année", minWidth = 70, maxWidth = 90),
      Region             = reactable::colDef(name = "Région", minWidth = 150),
      Departement        = reactable::colDef(name = "Département", minWidth = 140),
      Code_commune       = reactable::colDef(name = "Code INSEE", minWidth = 90, maxWidth = 110),
      Commune            = reactable::colDef(minWidth = 160),
      Nombre_redevables  = reactable::colDef(name = "Redevables", minWidth = 100, align = "right",
                                              format = reactable::colFormat(separators = TRUE)),
      Patrimoine_moyen   = reactable::colDef(name = "Patrimoine moyen (€)", minWidth = 140, align = "right",
                                              format = reactable::colFormat(separators = TRUE, digits = 0)),
      Impot_moyen        = reactable::colDef(name = "Impôt moyen (€)", minWidth = 120, align = "right",
                                              format = reactable::colFormat(separators = TRUE, digits = 0)))
  )

Source & données

Code
tibble::tibble(
  ` ` = c("Jeu de données", "Producteur", "Licence", "Fichier", "Mise à jour", "Observations"),
  `  ` = c(
    "Fichiers communaux des redevables IFI (« ificom »), un fichier par année — [impots.gouv.fr](https://www.impots.gouv.fr/) / [data.gouv.fr](https://www.data.gouv.fr/)",
    "Direction générale des Finances publiques (DGFIP)",
    "Licence Ouverte / Open Licence 2.0 (Etalab)",
    sprintf("`data/dgfip/ifi_communes.parquet` (%s ko)", round(file.size(communes_path) / 1024)),
    format(as.Date(file.mtime(communes_path)), "%d %B %Y"),
    sprintf("%d communes sur %d-%d (villes >20 000 hab., >50 redevables à l'IFI)",
            dplyr::n_distinct(communes$Code_commune), periode[1], periode[2])
  )
) |>
  gt::gt() |> gt::fmt_markdown(columns = `  `) |>
  gt::tab_options(table.width = "100%", column_labels.hidden = TRUE)
Jeu de données Fichiers communaux des redevables IFI (« ificom »), un fichier par année — impots.gouv.fr / data.gouv.fr
Producteur Direction générale des Finances publiques (DGFIP)
Licence Licence Ouverte / Open Licence 2.0 (Etalab)
Fichier data/dgfip/ifi_communes.parquet (34 ko)
Mise à jour 22 septembre 2026
Observations 241 communes sur 2018-2025 (villes >20 000 hab., >50 redevables à l’IFI)