# The A/B/C housing zoning, and housing built by commune: sources

Assembled 2026-10-16. Every value in this folder comes from a file
downloaded from the URL given below, or is derived from such files as
described. The raw downloads are not committed; each section gives the
command that rebuilds the committed extract from them, and a rebuild was
checked to give the same bytes (`cmp`).

| File | Rows | Content | Years | Geography |
|---|---|---|---|---|
| `zones.csv` | 34,875 | A bis/A/B1/B2/C zone of every commune at each revision of the zoning | 2014-2026 | COG 2025 |
| `sitadel.csv` | 289,532 | dwellings authorised and started, by kind of building | 2013-2025 | COG 2025 |
| `arretes.csv` | 107 | the tables of the arrêtés du 4 juillet 2019 and du 16 février 2022, transcribed | 2019, 2022 | as published |
| `rules.csv` | 12 | the zone rules of Pinel and of the new-build PTZ, by period, with a quote | 2014-2027 | - |
| `results.csv` | 334 | event studies and synthetic DiD (`analysis/zoning.ml`) | 2013-2025 | COG 2025 |
| `evaluations.md` | - | the study: aims, designs, results, what they exclude | - | - |

Rows exclude the header.

## The geography

Every source is carried to the **COG 2025** (34,875 communes), the vintage
of the 2026 zoning list and of `../zrr/census.csv`, through the Insee
passage table:

- URL: https://www.insee.fr/fr/statistiques/fichier/7671867/table_passage_annuelle_2026.zip
  (950,354 bytes, put online 19 March 2026, geography of 1 January 2026).
- The `COM` sheet of `table_passage_annuelle_2026.xlsx` gives, for each
  commune of 2026, its code and name in every vintage from 2003; it is read
  by `build/cog.ml`. A code of a given year is carried to the COG 2025
  commune it became; a code absent from that year's column is looked up in
  every vintage.

## zones.csv: the zoning at each revision

The zoning is the annex of the arrêté du 1er août 2014 (CCH art. D. 304-1),
amended since by the arrêtés du 30 septembre 2014, 4 juillet 2019,
16 février 2022, 2 octobre 2023, 5 juillet 2024, 5 septembre 2025 and
23 juin 2026 (the visa and notice of the arrêté du 5 juillet 2024 list the
first five). The ministry does not publish a list for each year. It
publishes the list in force and the files of the last revisions, all in the
data.gouv.fr dataset 656715871172d08f8f680063, « Liste des communes selon le
zonage ABC » (Ministère de la Transition écologique, created 2023-11-29,
last modified 2026-07-03):

| Source | URL | Bytes | Rows |
|---|---|---|---|
| List in force from 26 June 2026 | https://static.data.gouv.fr/resources/liste-des-communes-selon-le-zonage-abc/20260703-091314/liste-ensemble-des-communes-zonage-abc-en-vigueur-26-juin-2026.csv | 878,908 | 34,875 (Abis 134, A 870, B1 2,383, B2 3,162, C 28,326) |
| 468 communes reclassified on 5 September 2025, with their zone before | https://static.data.gouv.fr/resources/liste-des-communes-selon-le-zonage-abc/20250910-150536/liste-des-468-communes-reclassees-zonage-abc-5-septembre-2025-1-.csv | 20,636 | 468 |
| 19 communes declassified on 5 September 2025 | https://static.data.gouv.fr/resources/liste-des-communes-selon-le-zonage-abc/20250910-150554/liste-des-19-communes-declassees-zonage-abc-5-septembre-2025.csv | 942 | 19 |
| Arrêté du 5 juillet 2024, NOR TREL2418376A, JO 11 July 2024, texte 41 | https://static.data.gouv.fr/resources/liste-des-communes-selon-le-zonage-abc/20240722-102354/joe-20240711-0164-0041.pdf | 652,108 | 866 lines added, 698 removed |
| Arrêté du 23 juin 2026 (Alfortville) | https://static.data.gouv.fr/resources/liste-des-communes-selon-le-zonage-abc/20260626-083844/arrete-reclassement-alfortville-23-juin-2026.pdf | 140,287 | 1 commune |

The 2022 zoning comes from a third party, Kadata, « Zonage ABC des
communes - Tension du marché des logements », data.gouv.fr dataset
649ea362894adb8c5be51c81 (last modified 2023-06-30):
https://static.data.gouv.fr/resources/zonage-abc-des-communes-tension-du-marche-des-logements/20230630-094202/zonage-abc-communes-2022.csv
(809,544 bytes, 34,955 communes of the COG 2022: Abis 76, A 653, B1 1,587,
B2 3,782, C 28,857).

The tables of the arrêtés du 16 février 2022 (NOR LOGL2203825A, JO
20 February 2022, JORFTEXT000045190946) and du 4 juillet 2019 are in
`arretes.csv`. The 2022 tables were read twice on the Légifrance page of the
text on 2026-10-16, as a summarised reading rather than a saved copy of the
page: 5 communes added to table A, 52 to table B1,
46 removed from table B2, the counts the page gives. The 2019 arrêté is
known from the notice of the arrêté du 5 juillet 2024: « l’arrêté du
4 juillet 2019 a reclassé les communes de Poitiers et Angers en zone B1 ».

**Revisions.** `zone_2014` ... `zone_2026` are the zoning of each revision,
in force over the periods below. Each is the next one with a revision
undone (`build/zones.ml`):

| Column | In force | Built from |
|---|---|---|
| `zone_2026` | from 26 June 2026 | the 2026 list |
| `zone_2025` | 5 Sept 2025 to 25 June 2026 | the 2026 list with the zone "after" of the 2025 files (Alfortville A) |
| `zone_2024` | July 2024 to 4 Sept 2025 | the 2026 list with the zone "before" of the 2025 files |
| `zone_2023` | 4 Oct 2023 to July 2024 | `zone_2024` with the arrêté du 5 juillet 2024 undone |
| `zone_2022` | 21 Feb 2022 to 3 Oct 2023 | Kadata's 2022 list on the COG 2025 |
| `zone_2019` | July 2019 to 20 Feb 2022 | `zone_2022` with the arrêté du 16 février 2022 undone |
| `zone_2014` | 1 Aug 2014 to July 2019 | `zone_2019` with the arrêté du 4 juillet 2019 undone |

Undoing an arrêté: a commune it adds to a table was, before, in the table it
removes the commune from, or in C when it removes it from none. The arrêté
du 5 juillet 2024 was read from `pdftotext -layout` of the PDF above
(pdftotext 26.09.0), which gives 866 lines added (48 A bis, 142 A, 676 B1) after
anchor lines, and 698 lines removed (42 A, 145 B1, 511 B2). 34 removed lines
name communes merged since 2014 (Annecy-le-Vieux, Cherbourg-Octeville, ...).
Twenty of them belong to a merged commune the arrêté adds, and give its zone
before; the other 14 belong to five communes it does not add (Valserhône,
Dinan, Ancenis-Saint-Géréon, Cherbourg-en-Cotentin, Annecy), whose zone in
`zone_2024` the arrêté du 2 octobre 2023 had already set, and change
nothing.
Names are matched to codes within their département through the passage
table, in the geography of the arrêté's year first, letters folded without
accents; every line matched exactly one commune. The dates of entry into
force are those of `rules.csv` (4 October 2023 from the BOFiP, 26 July 2024
for PTZ offers from the arrêté's article 8).

**Checks.**

- Every commune added in 2024 is in its new table in `zone_2024`, and every
  commune added in 2022 is in its new table in Kadata's list (the extractor
  fails otherwise).
- Communes changed at each revision, against the counts the texts give:

| Revision | Changed | Text | Moves |
|---|---|---|---|
| 4 July 2019 | 2 | 2 (notice of the 2024 arrêté) | B2→B1 2 |
| 16 February 2022 | 57 | 57 (same notice) | B2→B1 40, C→B1 12, B2→A 5 |
| 2 October 2023 | 209 | « reclassement de 209 communes » (same notice) | B2→B1 127, C→B1 19, B1→A 56, B2→A 4, C→A 3 |
| 5 July 2024 | 865 | « 865 communes sont ainsi reclassées : 675 vers la zone B1, et 142 vers la zone A et 48 vers la zone A bis » | B2→B1 485, C→B1 190, B1→A 129, B2→A 10, C→A 3, A→Abis 42, B1→Abis 6 |
| 5 September 2025 | 487 | 468 + 19 files | B2→B1 150, C→B1 97, C→B2 147, B1→A 62, A→Abis 8, B1→Abis 2, C→A 2, B1→B2 13, B1→C 4, A→B1 1, Abis→A 1 |
| 23 June 2026 | 1 | 1 | A→Abis 1 (Alfortville) |

  The 2024 count is 865 because the 866th line, Saint-Vincent-de-Tyrosse
  (40284), is added to B1 without being removed from another table, while
  Kadata has it in B1 in 2022: the sources conflict, its zones before 2024
  are left blank and `flag` is `conflict_2023`. Saint-Denis (93066) merged
  with Pierrefitte-sur-Seine in 2025; in 2022 the two were in A bis and A,
  so its zones before 2023 are blank and `flag` is `mixed_2022`.

**Communes by zone** (COG 2025; the year's zoning is the one in force on
31 December):

| Years | Column | A bis | A | B1 | B2 | C | blank |
|---|---|---|---|---|---|---|---|
| 2014-2018 | `zone_2014` | 75 | 647 | 1,531 | 3,825 | 28,795 | 2 |
| 2019-2021 | `zone_2019` | 75 | 647 | 1,533 | 3,823 | 28,795 | 2 |
| 2022 | `zone_2022` | 75 | 652 | 1,585 | 3,778 | 28,783 | 2 |
| 2023 | `zone_2023` | 76 | 715 | 1,675 | 3,647 | 28,761 | 1 |
| 2024 | `zone_2024` | 124 | 815 | 2,216 | 3,152 | 28,568 | 0 |
| 2025 | `zone_2025` | 133 | 871 | 2,383 | 3,162 | 28,326 | 0 |
| 2026 | `zone_2026` | 134 | 870 | 2,383 | 3,162 | 28,326 | 0 |

The B1 and B2 counts of the 2022 list (1,587 and 3,782) are of the COG
2022; carried to the COG 2025, merged communes count once.

**Not covered.** The arrêté du 30 septembre 2014, which amended the 2014
annex within weeks, is named in the visas of the 2024 arrêté but its content
was not obtained, and is not applied: `zone_2014` may be wrong for the
communes it moved, for 2014 only. The text of the arrêté du 2 octobre 2023
was not obtained either; its 209 communes are those `zone_2023` derives. A
commune merged between 2014 and 2022 takes, for 2014-2021, the zone Kadata
gives the merged commune. The agréments that opened Pinel to some B2 and C
communes before 2018 are not published by commune.

**Columns.** `insee_code`, `dept`, `name` (COG 2025, from the 2026 list),
`zone_2014`, `zone_2019`, `zone_2022`, `zone_2023`, `zone_2024`,
`zone_2025`, `zone_2026` (`Abis`, `A`, `B1`, `B2`, `C`, blank when
unknown), `flag` (`conflict_2023`, `mixed_2022` or empty).

**Rebuild** (paths absolute; the PDF converted first with
`pdftotext -layout joe-20240711-0164-0041.pdf arrete-2024-07-05.txt`):

    dune exec data/zoning/build/zones.exe -- table_passage_annuelle_2026.zip \
      liste-ensemble-des-communes-zonage-abc-en-vigueur-26-juin-2026.csv \
      liste-des-468-communes-reclassees-zonage-abc-5-septembre-2025-1-.csv \
      liste-des-19-communes-declassees-zonage-abc-5-septembre-2025.csv \
      arrete-2024-07-05.txt zonage-abc-communes-2022.csv \
      data/zoning/arretes.csv data/zoning/zones.csv

## sitadel.csv: dwellings authorised and started, 2013-2025

- **Source:** SDES, DiDo dataset 6513ee3a3b05e5cd969c270f, « Logements
  autorisés et commencés, nombre et surfaces, séries annuelles (données non
  estimées) », datafile 9c90a880-4ba0-49b4-b99d-d7dd6c810dd0 « Données
  annuelles communales - Logements », millésime 2026-09 (published
  2026-09-29, 2,316,830 rows), one CSV a year:
  `https://data.statistiques.developpement-durable.gouv.fr/dido/api/v1/datafiles/9c90a880-4ba0-49b4-b99d-d7dd6c810dd0/csv?millesime=2026-09&withColumnName=true&withColumnDescription=false&withColumnUnit=false&ANNEE=eq:<YEAR>`,
  saved as `sitadel_<YEAR>.csv` for 2013 to 2025. The dataset description:
  « Données en date réelle » and « Ces données annuelles brutes [...] sont
  incomplètes en raison de documents non reçus ».
- **Fields read:** `ANNEE`, `COMM`, `TYPE_LGT` (Tous Logements, Individuel
  pur, Individuel groupe, Collectif, Residence), `LOG_AUT` (units
  authorised), `LOG_COM` (units started).
- **Rows** by year, summing to the datafile's 2,316,830: 2013 183,645; 2014
  183,560; 2015 183,555; 2016 183,120; 2017 179,185; 2018 177,225; 2019
  176,930; 2020 174,985; 2021 174,990; 2022 174,970; 2023 174,925; 2024
  174,870; 2025 174,870.
- **Checks** (`build/sitadel.ml`, every year): the four kinds sum to « Tous
  Logements » in every commune, for units authorised and started (0
  mismatches); the arrondissements of Paris, Lyon and Marseille sum to the
  city's row (0 mismatches), so their rows are left out. A code that became
  several COG 2025 communes is left out: 124 rows over 13 years, 852 units
  authorised in all (190 in 2013 at most). 20 rows of codes found in no
  vintage hold no unit.
- **Units** kept (authorised; of which collective; started):

| Year | Authorised | Collective | Started |
|---|---|---|---|
| 2013 | 367,312 | 177,084 | 311,087 |
| 2014 | 338,177 | 166,859 | 297,856 |
| 2015 | 366,750 | 185,735 | 303,198 |
| 2016 | 429,460 | 226,859 | 325,734 |
| 2017 | 460,006 | 242,541 | 386,637 |
| 2018 | 427,189 | 225,353 | 353,118 |
| 2019 | 418,802 | 213,335 | 337,555 |
| 2020 | 369,021 | 175,517 | 317,477 |
| 2021 | 442,418 | 201,864 | 351,138 |
| 2022 | 450,272 | 223,851 | 327,317 |
| 2023 | 354,125 | 177,458 | 246,098 |
| 2024 | 310,318 | 155,358 | 210,551 |
| 2025 | 358,902 | 181,912 | blank |

  Units started are empty in the source for 2025. Real-date counts of the
  last years rise as late declarations arrive, so 2023-2025 are
  provisional.
- **Columns:** `insee_code` (COG 2025), `year`, `aut_ip`, `aut_ig`,
  `aut_coll`, `aut_res` (units authorised in single houses, grouped houses,
  collective buildings and residences), `com_ip`, `com_ig`, `com_coll`,
  `com_res` (units started; blank for 2025). A commune-year with no unit
  authorised or started has no row: 289,532 rows of the 453,279
  commune-years.
- **Rebuild:**

      dune exec data/zoning/build/sitadel.exe -- table_passage_annuelle_2026.zip \
        SITADEL_DIR data/zoning/sitadel.csv

## rules.csv: the zone rules of Pinel and of the PTZ

Each row quotes the text it rests on, with its page. Légifrance and
budget.gouv.fr do not answer scripted requests, so the rules come from the
finance laws as adopted, the bills, ministerial answers to written questions
and amendments on the Assemblée nationale site, the Voies et moyens annex
(Assemblée nationale copy), the arrêté of 2024 and the BOFiP. Each PDF was
read with `pdftotext -layout`; each quote was checked, after collapsing
whitespace, to be a substring of its text:

- Projet de loi de finances pour 2018, n° 235:
  https://www.assemblee-nationale.fr/dyn/15/textes/l15b0235_projet-loi.pdf
- Loi de finances pour 2018, texte adopté n° 65 (texte définitif,
  21 December 2017): https://www.assemblee-nationale.fr/15/ta/tap0065.pdf
- Loi de finances pour 2024, texte adopté n° 223 (texte définitif,
  21 December 2023):
  https://www.assemblee-nationale.fr/dyn/16/textes/l16t0223_texte-adopte-seance.pdf
- Évaluation des voies et moyens, tome II, PLF 2026:
  https://www.assemblee-nationale.fr/dyn/contenu/visualisation/1087933/file/x.pdf
- Answers to written questions n° 5913, 14376, 22588, 23266, 24075 (15e
  législature) and 11255 (16e):
  `https://questions.assemblee-nationale.fr/dyn/<15|16>/questions/QANR5L<15|16>QE<n>.pdf`
- Amendments I-CF383 (PLF 2022) and I-3492 (PLF 2025), URLs in the file.
- BOFiP BOI-RES-IR-000159-20240822.

The rule for the new-build PTZ in 2021-2023 and the date of the 2025
opening in the law as enacted (loi n° 2025-127) were not read in an
Assemblée nationale text; the rows say so.

## Inputs from the tree

`analysis/zoning.ml` also reads, unchanged:

- `../zrr/census.csv`: `pop_2015`, the 2015 population of each commune
  (Insee census, COG 2025), the denominator of every rate; 4 communes have
  `NULL` and are left out.
- `../places/dvf.csv`: median price per m² of dwellings sold, 2016-2021
  (30,652 to 31,424 communes a year); `../places/dvf_etalab.csv`, the same
  from Etalab's statistics, 2021-2025 (30,254 to 31,499 a year). A median of
  fewer than five sales is left out.
- `../places/lovac.csv`: vacant private dwellings on 1 January, 2019-2025
  (34,912 communes a year).
- `../vacancy/tlv.csv`: the communes taxed on vacant dwellings since 2013
  and those added from 2024 by the decree of 25 August 2023 (see
  `../vacancy/SOURCES.md`), to compare the reclassified communes within
  their status under that tax.

## results.csv

Built by `analysis/zoning.ml` (999 bootstrap draws of départements for each
event study, seed 2018; leave-one-département-out jackknife for synthetic
DiD), rebuilt identically:

    dune exec analysis/zoning.exe -- data/zoning data/places

Columns: `design` (study and estimator: `cs-size` event study within
population bands, `cs-size-level` within population bands crossed with the
2013-2017 level of collective permits, `cs-active` among communes with a
collective permit in 2013-2017, `cs-size-from-2017` with the closure dated
2017, `cs-size-to-2024` to 2024, `cs-not-yet` and `cs-never` by comparison
group, `cs-not-yet-tlv` within vacancy-tax status as well, `sdid` synthetic
DiD), `event` (`overall` average of the post-period
cells, `att` for synthetic DiD, or an event time in years from the first
treated year; every coefficient of an event study is measured from the year
before treatment), `outcome`, `window` (years read), `estimate`, `se`,
`ci_low`, `ci_high` (2.5th and 97.5th percentiles of the draws, or
estimate ± 1.96 se for synthetic DiD), `n_treated`, `n_control`,
`pretrend_p` (bootstrap p-value of the joint Wald test that every
coefficient two years or more before treatment is zero, on `overall` rows),
`note` (what the interval excludes, as a share of the treated communes'
mean before treatment).

Outcomes: `collective_authorised`, `collective_started`,
`houses_authorised` (single and grouped houses), `all_authorised`, units per
1,000 inhabitants of 2015 a year; `price` and `price_etalab`, log of the
median price per m²; `vacant`, log of one plus the vacant private
dwellings.
