c0mm0.com — the continuously verified register of European data

Register record·API·FR·MUNICIPALITYVERIFIED · checked 2d ago
[

[Housing Observatory] Social housing from social landlords (RPLS open data)[Observatoire habitat] Logements sociaux des bailleurs sociaux (RPLS open data)

[Observatoire habitat] Logements sociaux des bailleurs sociaux (RPLS open data)[Housing Observatory] Social housing from social landlords (RPLS open data)

APIJoinable5/7Query nowOpen workbenchSubscribe🇫🇷France

This dataset presents the RPLS (répertoire des logements locatifs des bailleurs sociaux), a register describing the overall stock of "ordinary" rental housing managed by social landlords as of 1 January of each collection year. The table published here aggregates the yearly open-data files at the municipal (commune) level, providing a synthesis of social housing counts across the territory. It is maintained by the Métropole Aix-Marseille-Provence and covers the municipalities within its jurisdiction, offering a resource for monitoring social housing supply over time and across local areas.”Le répertoire des logements locatifs des bailleurs sociaux (RPLS) a pour objectif de dresser l’état global du parc de logements locatifs « ordinaires » des bailleurs sociaux au 1er janvier de l’année de collecte. Cette table est une synthèse du fichier disponible pour chaque millésime en open dat...

54
fair

Weighted across five axes. Tap a ring for what it measures.

Data schema (59 fields)

Filterable via the API (57)
millesimepsoctotnblogsemensparcnblogqpvindcolnblog1pnblog2pnblog3pnblog4pnblog5pplplaiplus_ant77plus_ap77plspliautfinevolbrutlogservanlogservmsconsmsacqtmsacqmsacqvefalogsortanlogsorsventoccsventbailsautventsdemolsautmotagmoyparcanclg5anclg5_10anclg10_20anclg20_40anclg40_60anclgsup60logmloctxvactxmobloymoyevoloympcloymoyprlmplailmpluvlmpluplmplslmplilmaobjectidcommunecodecommcodeinseect_amp

Click a field to see example values.

FillFieldTypeDescription
100%millesimeFilterable via the APIMillésimedateReference year of the data collection (as of 1 January).Reference year of the data collection (as of 1 January).
100%psoctotFilterable via the APIEnsemble du parc social (hors parc non conventionné des SEM)intTotal social housing stock, excluding SEM non-conventioned units.Total social housing stock, excluding SEM non-conventioned units.
100%nblogsemFilterable via the APIParc non conventionné des SEM intNumber of non-conventioned dwellings owned by SEMs.Number of non-conventioned dwellings owned by SEMs.
100%ensparcFilterable via the APIEnsemble du parc locatif des bailleurs sociauxintTotal rental housing stock of social landlords.Total rental housing stock of social landlords.
76.3%nblogqpvFilterable via the APINombre de logements en QPVintNumber of dwellings located in priority urban policy areas (QPV).Number of dwellings located in priority urban policy areas (QPV).
100%indFilterable via the APILogements individuelsintNumber of individual (detached) housing units.Number of individual (detached) housing units.
100%colFilterable via the APILogements collectifsintNumber of collective (apartment) housing units.Number of collective (apartment) housing units.
100%nblog1pFilterable via the APINombre de logements d'une pièceintNumber of one-room dwellings.Number of one-room dwellings.
100%nblog2pFilterable via the APINombre de logements de 2 piècesintNumber of two-room dwellings.Number of two-room dwellings.
100%nblog3pFilterable via the APINombre de logements de 3 piècesintNumber of three-room dwellings.Number of three-room dwellings.
100%nblog4pFilterable via the APINombre de logements de 4 piècesintNumber of four-room dwellings.Number of four-room dwellings.
100%nblog5pplFilterable via the APINombre de logements sociaux de 5 pièces et plusintNumber of dwellings with five rooms or more.Number of dwellings with five rooms or more.
100%plaiFilterable via the APIintNumber of dwellings financed under the PLAI scheme (aided rental housing for low-income households).Number of dwellings financed under the PLAI scheme (aided rental housing for low-income households).
100%plus_ant77Filterable via the APIPLUS avant 1977intNumber of PLUS-financed dwellings built before 1977.Number of PLUS-financed dwellings built before 1977.
100%plus_ap77Filterable via the APIPLUS après 1977intNumber of PLUS-financed dwellings built after 1977.Number of PLUS-financed dwellings built after 1977.
100%plsFilterable via the APIintNumber of dwellings financed under the PLS scheme (social rental housing).Number of dwellings financed under the PLS scheme (social rental housing).
100%pliFilterable via the APIintNumber of dwellings financed under the PLI scheme (intermediate rental housing).Number of dwellings financed under the PLI scheme (intermediate rental housing).
16.5%autfinFilterable via the APIAutres financementsintNumber of dwellings financed through other funding schemes.Number of dwellings financed through other funding schemes.
97.8%evolFilterable via the APIEvolution du parc sur les 5 dernières annéesdoublePercentage change in the housing stock over the last 5 years.Percentage change in the housing stock over the last 5 years.
100%brutFilterable via the APIEvolution du parc sur les 5 dernières années - nombreintAbsolute change in the number of dwellings over the last 5 years.Absolute change in the number of dwellings over the last 5 years.
100%logservanFilterable via the APINombre de mises en services l'année précédenteintNumber of dwellings put into service the previous year.Number of dwellings put into service the previous year.
100%logservFilterable via the APINombre de mise en service sur les 5 dernières annéesintNumber of dwellings put into service over the last 5 years.Number of dwellings put into service over the last 5 years.
83.5%msconsFilterable via the APIMise en service en 5 ans : construit par l'organismeintDwellings put into service in 5 years that were built by the landlord.Dwellings put into service in 5 years that were built by the landlord.
83.5%msacqtFilterable via the APIMise en service en 5 ans : acquis avec travauxintDwellings put into service in 5 years that were acquired with renovation works.Dwellings put into service in 5 years that were acquired with renovation works.
83.5%msacqFilterable via the APIMise en service en 5 ans : acquis sans travauxintDwellings put into service in 5 years that were acquired without renovation works.Dwellings put into service in 5 years that were acquired without renovation works.
83.5%msacqvefaFilterable via the APIMise en service en 5 ans : acquis en VEFAintDwellings put into service in 5 years acquired through off-plan purchase (VEFA).Dwellings put into service in 5 years acquired through off-plan purchase (VEFA).
100%logsortanFilterable via the APINombre de logements sortis du parc l'année précédente intNumber of dwellings that left the stock the previous year.Number of dwellings that left the stock the previous year.
83.5%logsorFilterable via the APINombre de logements sortis du parc sur les 5 dernières annéesintNumber of dwellings that left the stock over the last 5 years.Number of dwellings that left the stock over the last 5 years.
83.3%sventoccFilterable via the APIMotif de sortie sur 5 ans : ventes à l'occupantintDwellings sold to their occupant among 5-year stock exits.Dwellings sold to their occupant among 5-year stock exits.
83.3%sventbailFilterable via the APIMotif de sortie sur 5 ans : vente autre bailleurintDwellings sold to another social landlord among 5-year stock exits.Dwellings sold to another social landlord among 5-year stock exits.
83.3%sautventFilterable via the APIMotif de sortie sur 5 ans : autre venteintDwellings sold for other reasons among 5-year stock exits.Dwellings sold for other reasons among 5-year stock exits.
83.3%sdemolFilterable via the APIMotif de sortie sur 5 ans: démolitionintDwellings demolished among 5-year stock exits.Dwellings demolished among 5-year stock exits.
83.3%sautmotFilterable via the APIMotif de sortie sur 5 ans : autre motif de sortie et sans objetintDwellings leaving the stock for other or unspecified reasons over 5 years.Dwellings leaving the stock for other or unspecified reasons over 5 years.
98%agmoyparcFilterable via the APIAge moyen du parcdoubleAverage age of the housing stock, in years.Average age of the housing stock, in years.
100%anclg5Filterable via the APIAge du logement : moins de 5 ansintNumber of dwellings less than 5 years old.Number of dwellings less than 5 years old.
100%anclg5_10Filterable via the APIAge du logement : entre 5 et 10 ansintNumber of dwellings between 5 and 10 years old.Number of dwellings between 5 and 10 years old.
100%anclg10_20Filterable via the APIAge du logement : entre 10 et 20 ansintNumber of dwellings between 10 and 20 years old.Number of dwellings between 10 and 20 years old.
100%anclg20_40Filterable via the APIAge du logement : entre 20 et 40 ansintNumber of dwellings between 20 and 40 years old.Number of dwellings between 20 and 40 years old.
100%anclg40_60Filterable via the APIAge du logement : entre 40 et 60 ansintNumber of dwellings between 40 and 60 years old.Number of dwellings between 40 and 60 years old.
100%anclgsup60Filterable via the APIAge du logement : plus de 60 ansintNumber of dwellings older than 60 years.Number of dwellings older than 60 years.
100%logmlocFilterable via the APINombre de premières mise en location sur les 5 dernières années (parc récent)intNumber of dwellings first rented out over the last 5 years, among recent stock.Number of dwellings first rented out over the last 5 years, among recent stock.
98%txvacFilterable via the APITaux de vacance supérieur à 3 moisdoubleVacancy rate for dwellings vacant more than 3 months.Vacancy rate for dwellings vacant more than 3 months.
98%txmobFilterable via the APITaux de mobilitédoubleTenant turnover (mobility) rate of the housing stock.Tenant turnover (mobility) rate of the housing stock.
95.6%loymoyFilterable via the APILoyer moyen parc completdoubleAverage rent across the full housing stock.Average rent across the full housing stock.
92.8%evoloympcFilterable via the APIEvolution du loyer moyen (parc complet - sur 5 ans)doubleChange in average rent over the last 5 years across the full stock.Change in average rent over the last 5 years across the full stock.
93.8%loymoyprFilterable via the APILoyer moyen parc récentdoubleAverage rent for the recently built housing stock.Average rent for the recently built housing stock.
95.6%lmplaiFilterable via the APILoyer moyen PLAIdoubleAverage rent for PLAI-financed dwellings.Average rent for PLAI-financed dwellings.
95.6%lmpluvFilterable via the APILoyer moyen PLUS avant 1977doubleAverage rent for PLUS-financed dwellings built before 1977.Average rent for PLUS-financed dwellings built before 1977.
95.6%lmplupFilterable via the APILoyer moyen PLUS après 1977doubleAverage rent for PLUS-financed dwellings built after 1977.Average rent for PLUS-financed dwellings built after 1977.
95.6%lmplsFilterable via the APILoyer moyen PLSdoubleAverage rent for PLS-financed dwellings.Average rent for PLS-financed dwellings.
—lmpliFilterable via the APILoyer moyen PLIdoubleAverage rent for PLI-financed dwellings.Average rent for PLI-financed dwellings.
—lmaFilterable via the APILoyer moyen autres financementsdoubleAverage rent for dwellings under other financing schemes.Average rent for dwellings under other financing schemes.
—objectidFilterable via the APIIdentifiant 2intInternal record identifier.Internal record identifier.
—communeFilterable via the APICommunetextName of the municipality (commune).Name of the municipality (commune).
—codecommFilterable via the APICode commune DGFIPtextDGFIP administrative code for the municipality.DGFIP administrative code for the municipality.
—codeinseeFilterable via the APICode commune INSEEtextINSEE administrative code for the municipality.INSEE administrative code for the municipality.
—geomgeo_shapeGeographic boundary shape of the municipality.Geographic boundary shape of the municipality.
—centroidgeo_point_2dGeographic centroid coordinates of the municipality.Geographic centroid coordinates of the municipality.
—ct_ampFilterable via the APIConseil de territoiretextTerritorial council (conseil de territoire) grouping the municipality.Territorial council (conseil de territoire) grouping the municipality.

Schema captured from opendatasoft 2 days ago.

Query the data

Pick columns and a sort, then fetch a live preview straight from the source. Choose an API-filterable column (marked ▾) under “Where” to pick from its list of values.

=

Sample data (5 records)

Record 1col: 142 · ind: 0
{
  "col": 142,
  "ind": 0,
  "lma": null,
  "pli": 0,
  "pls": 10,
  "brut": 132,
  "evol": 1320,
  "geom": "[large value omitted]",
  "plai": 3,
  "lmpli": 0,
  "lmpls": 9.42,
  "msacq": 0,
  "txmob": 14.2857,
  "txvac": 0,
  "anclg5": 11,
  "autfin": null,
  "ct_amp": "CT2",
  "lmplai": 5.67,
  "lmplup": 6.24,
  "lmpluv": 0,
  "logsor": 0,
  "loymoy": 7.43193277,
  "msacqt": 0,
  "mscons": 11,
  "sdemol": 0,
  "commune": "Saint-Paul-lès-Durance",
  "ensparc": 142,
  "logmloc": 0,
  "logserv": 11,
  "nblog1p": 120,
  "nblog2p": 8,
  "nblog3p": 9,
  "nblog4p": 5,
  "psoctot": 142,
  "sautmot": 0,
  "centroid": {
    "lat": 43.685505267,
    "lon": 5.753526555
  },
  "codecomm": "132099",
  "loymoypr": 6.13,
  "nblogqpv": 0,
  "nblogsem": 0,
  "objectid": 260,
  "sautvent": 0,
  "sventocc": 0,
  "agmoyparc": 21.82,
  "anclg5_10": 0,
  "codeinsee": "13099",
  "evoloympc": -14.78,
  "logservan": 0,
  "logsortan": 0,
  "millesime": "2022",
  "msacqvefa": 0,
  "nblog5ppl": 0,
  "plus_ap77": 129,
  "sventbail": 0,
  "anclg10_20": 10,
  "anclg20_40": 121,
  "anclg40_60": 0,
  "anclgsup60": 0,
  "plus_ant77": 0
}
Record 2col: 25 · ind: 38
{
  "col": 25,
  "ind": 38,
  "lma": 6.93,
  "pli": 0,
  "pls": 0,
  "brut": 7,
  "evol": 12.5,
  "geom": "[large value omitted]",
  "plai": 7,
  "lmpli": 0,
  "lmpls": 0,
  "msacq": null,
  "txmob": 12.5,
  "txvac": 1.59,
  "anclg5": 0,
  "autfin": 3,
  "ct_amp": "CT2",
  "lmplai": 5.47,
  "lmplup": 6.33,
  "lmpluv": 4.33,
  "logsor": null,
  "loymoy": 5.5,
  "msacqt": null,
  "mscons": null,
  "sdemol": null,
  "commune": "Rognes",
  "ensparc": 63,
  "logmloc": 7,
  "logserv": 7,
  "nblog1p": 6,
  "nblog2p": 5,
  "nblog3p": 19,
  "nblog4p": 21,
  "psoctot": 63,
  "sautmot": null,
  "centroid": {
    "lat": 43.664860999,
    "lon": 5.352064736
  },
  "codecomm": "132082",
  "loymoypr": 5.47,
  "nblogqpv": null,
  "nblogsem": 0,
  "objectid": 54,
  "sautvent": null,
  "sventocc": null,
  "agmoyparc": 36.44,
  "anclg5_10": 18,
  "codeinsee": "13082",
  "evoloympc": 1.93,
  "logservan": 7,
  "logsortan": 0,
  "millesime": "2020",
  "msacqvefa": null,
  "nblog5ppl": 12,
  "plus_ap77": 33,
  "sventbail": null,
  "anclg10_20": 15,
  "anclg20_40": 0,
  "anclg40_60": 20,
  "anclgsup60": 10,
  "plus_ant77": 20
}
Record 3col: 2519 · ind: 310
{
  "col": 2519,
  "ind": 310,
  "lma": null,
  "pli": 12,
  "pls": 20,
  "brut": -79,
  "evol": -2.72,
  "geom": "[large value omitted]",
  "plai": 315,
  "lmpli": 8.04,
  "lmpls": 10.13,
  "msacq": 12,
  "txmob": 4.6382,
  "txvac": 0.8902,
  "anclg5": 4,
  "autfin": null,
  "ct_amp": "CT1",
  "lmplai": 6.7,
  "lmplup": 7.15,
  "lmpluv": 5.51,
  "logsor": 111,
  "loymoy": 6.10063,
  "msacqt": 0,
  "mscons": 36,
  "sdemol": 90,
  "commune": "Marseille 16e Arrondissement",
  "ensparc": 2856,
  "logmloc": 16,
  "logserv": 48,
  "nblog1p": 94,
  "nblog2p": 254,
  "nblog3p": 844,
  "nblog4p": 1231,
  "psoctot": 2829,
  "sautmot": 0,
  "centroid": {
    "lat": 43.365354094,
    "lon": 5.313224654
  },
  "codecomm": "131216",
  "loymoypr": 9.02,
  "nblogqpv": 2392,
  "nblogsem": 4,
  "objectid": 888,
  "sautvent": 8,
  "sventocc": 7,
  "agmoyparc": 45.53,
  "anclg5_10": 51,
  "codeinsee": "13216",
  "evoloympc": 11.95,
  "logservan": 1,
  "logsortan": 4,
  "millesime": "2025",
  "msacqvefa": 0,
  "nblog5ppl": 406,
  "plus_ap77": 797,
  "sventbail": 6,
  "anclg10_20": 48,
  "anclg20_40": 735,
  "anclg40_60": 1940,
  "anclgsup60": 51,
  "plus_ant77": 1685
}
Record 4col: 1782 · ind: 1
{
  "col": 1782,
  "ind": 1,
  "lma": null,
  "pli": 84,
  "pls": 164,
  "brut": -95,
  "evol": -5.06,
  "geom": {
    "type": "Feature",
    "geometry": {
      "type": "MultiPolygon",
      "coordinates": [
        [
          [
            [
              5.408749306,
              43.295649197
            ],
            [
              5.415598743,
              43.293472254
            ],
            [
              5.415592738,
              43.292652504
            ],
            [
              5.414967156,
              43.292542288
            ],
            [
              5.414918218,
              43.291697399
            ],
            [
              5.410216673,
              43.291549468
            ],
            [
              5.410228973,
              43.291165802
            ],
            [
              5.408778915,
              43.291108137
            ],
            [
              5.407810811,
              43.290908317
            ],
            [
              5.40718457,
              43.291430756
            ],
            [
              5.406632263,
              43.291127166
            ],
            [
              5.406791624,
              43.290015744
            ],
            [
              5.405986344,
              43.290381068
            ],
            [
              5.406372351,
              43.287644644
            ],
            [
              5.403042047,
              43.28657309
            ],
            [
              5.402363308,
              43.286958971
            ],
            [
              5.398954088,
              43.286830419
            ],
            [
              5.398677989,
              43.285968075
            ],
            [
              5.39619919,
              43.285697284
            ],
            [
              5.396331693,
              43.285031967
            ],
            [
              5.39254341,
              43.284730728
            ],
            [
              5.391945742,
              43.28475566
            ],
            [
              5.390717695,
              43.284878235
            ],
            [
              5.391372708,
              43.286295591
            ],
            [
              5.390363776,
              43.286712101
            ],
            [
              5.390437023,
              43.286874275
            ],
            [
              5.389725519,
              43.288284966
            ],
            [
              5.389152402,
              43.288130244
            ],
            [
              5.389052291,
              43.293177699
            ],
            [
              5.387237599,
              43.293806383
            ],
            [
              5.385559858,
              43.294291618
            ],
            [
              5.386363439,
              43.295994626
            ],
            [
              5.386728038,
              43.296021674
            ],
            [
              5.388754669,
              43.300209488
            ],
            [
              5.389079188,
              43.300309413
            ],
            [
              5.389051693,
              43.298902455
            ],
            [
              5.391180473,
              43.298802279
            ],
            [
              5.391982942,
              43.298987917
            ],
            [
              5.395432576,
              43.299420003
            ],
            [
              5.395474812,
              43.298894379
            ],
            [
              5.396210379,
              43.298685477
            ],
            [
              5.397307968,
              43.298293045
            ],
            [
              5.398435861,
              43.298155523
            ],
            [
              5.398471541,
              43.297976535
            ],
            [
              5.399900349,
              43.297756721
            ],
            [
              5.400338977,
              43.297519285
            ],
            [
              5.400819081,
              43.297508621
            ],
            [
              5.400358255,
              43.296946469
            ],
            [
              5.4002169,
              43.296599517
            ],
            [
              5.400314372,
              43.29580357
            ],
            [
              5.405618682,
              43.296097821
            ],
            [
              5.406208443,
              43.296234988
            ],
            [
              5.406741175,
              43.295507641
            ],
            [
              5.407808909,
              43.295967147
            ],
            [
              5.408749306,
              43.295649197
            ]
          ]
        ]
      ]
    },
    "properties": {}
  },
  "plai": 192,
  "lmpli": 9.06,
  "lmpls": 9.61,
  "msacq": 0,
  "txmob": 5.41,
  "txvac": 0.63,
  "anclg5": 52,
  "autfin": null,
  "ct_amp": "CT1",
  "lmplai": 7.52,
  "lmplup": 7.51,
  "lmpluv": 5.28,
  "logsor": 170,
  "loymoy": 6.94,
  "msacqt": 0,
  "mscons": 14,
  "sdemol": 0,
  "commune": "Marseille 5e Arrondissement",
  "ensparc": 1928,
  "logmloc": 14,
  "logserv": 14,
  "nblog1p": 110,
  "nblog2p": 397,
  "nblog3p": 793,
  "nblog4p": 436,
  "psoctot": 1783,
  "sautmot": 17,
  "centroid": {
    "lat": 43.292388629,
    "lon": 5.398198756
  },
  "codecomm": "131205",
  "loymoypr": 7.79,
  "nblogqpv": 0,
  "nblogsem": 145,
  "objectid": 678,
  "sautvent": 68,
  "sventocc": 24,
  "agmoyparc": 44.15,
  "anclg5_10": 145,
  "codeinsee": "13205",
  "evoloympc": 5.84,
  "logservan": 14,
  "logsortan": 17,
  "millesime": "2023",
  "msacqvefa": 0,
  "nblog5ppl": 47,
  "plus_ap77": 561,
  "sventbail": 61,
  "anclg10_20": 214,
  "anclg20_40": 542,
  "anclg40_60": 2,
  "anclgsup60": 828,
  "plus_ant77": 782
}
Record 5col: 403 · ind: 79
{
  "col": 403,
  "ind": 79,
  "lma": null,
  "pli": 66,
  "pls": 56,
  "brut": 171,
  "evol": 54.98,
  "geom": "[large value omitted]",
  "plai": 76,
  "lmpli": 6.37,
  "lmpls": 9.31,
  "msacq": 0,
  "txmob": 5.6034,
  "txvac": 1.046,
  "anclg5": 171,
  "autfin": null,
  "ct_amp": "CT2",
  "lmplai": 5.94,
  "lmplup": 6.75,
  "lmpluv": 5.1,
  "logsor": 0,
  "loymoy": 6.514891,
  "msacqt": 0,
  "mscons": 40,
  "sdemol": 0,
  "commune": "Le Puy-Sainte-Réparade",
  "ensparc": 523,
  "logmloc": 171,
  "logserv": 171,
  "nblog1p": 2,
  "nblog2p": 138,
  "nblog3p": 239,
  "nblog4p": 94,
  "psoctot": 482,
  "sautmot": 0,
  "centroid": {
    "lat": 43.651614011,
    "lon": 5.439714957
  },
  "codecomm": "132080",
  "loymoypr": 6.96,
  "nblogqpv": 0,
  "nblogsem": 41,
  "objectid": 745,
  "sautvent": 0,
  "sventocc": 0,
  "agmoyparc": 24.45,
  "anclg5_10": 76,
  "codeinsee": "13080",
  "evoloympc": 15.05,
  "logservan": 139,
  "logsortan": 0,
  "millesime": "2024",
  "msacqvefa": 131,
  "nblog5ppl": 9,
  "plus_ap77": 175,
  "sventbail": 0,
  "anclg10_20": 25,
  "anclg20_40": 48,
  "anclg40_60": 161,
  "anclgsup60": 1,
  "plus_ant77": 109
}

Live sample captured at profiling time — values may have changed upstream.

Verification Status

Using the API

Configuration

Base URL
https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/logements-sociaux-rpls-agrege-a-la-commune

License

  • ✓ Redistributable
  • ✓ Attribution required

Query examples

curl -s 'https://data.ampmetropole.fr/api/explore/v2.1/catalog/datasets/logements-sociaux-rpls-agrege-a-la-commune/records?limit=20' -H 'Accept: application/json'

First 20 records of the dataset as JSON.

Uses the Opendatasoft Explore v2.1 syntax — supports select, where, group_by and order_by.

Full API documentation ↗

Rate limits

5 000 req/day
per ipmeasured
observed 2 days ago

Dataset

Volume & freshness

Records
594
Last upstream update
22 days ago
2026-10-01

License

No license declared upstream.

○ Documentation○ Data dictionary○ Versioning

Source: opendatasoft

Machine-readable & source

[Observatoire habitat] Logements sociaux des bailleurs sociaux (RPLS open data) — live verification badge

Embed this badge in a README or wiki — it always shows the latest verification state and quality tier.