[
  {
    "type": "sale",
    "location": "Grenoble",
    "saleId": "2025-5070••",
    "date": "2025-12-23",
    "year": 2025,
    "price": 465000,
    "propertyType": "apartment",
    "isNewBuild": false,
    "surface": 144,
    "rooms": 6,
    "pricePerM2": 3229,
    "dwellings": 1,
    "outbuildings": 2,
    "landSurface": null,
    "address": "•• CRS BERRIAT",
    "postalCode": "38000",
    "city": "Grenoble",
    "inseeCode": "38185",
    "department": "38",
    "latitude": 45.187,
    "longitude": 5.723,
    "rentIndicatorPerM2": 12.21,
    "grossRentalYieldPct": 4.5,
    "rentIndicatorReliable": true,
    "energyRating": "D",
    "ghgRating": "D",
    "energyKwhM2Year": 202,
    "energyRatingIssuedAt": "2025-10-23",
    "energyRatingMatch": "high",
    "dpeNumber": "2538E••••••••",
    "changeType": null,
    "scrapedAt": "2026-10-03T14:38:35.081Z"
  },
  {
    "type": "sale",
    "location": "Grenoble",
    "saleId": "2025-5070••",
    "date": "2025-12-23",
    "year": 2025,
    "price": 155000,
    "propertyType": "apartment",
    "isNewBuild": false,
    "surface": 67,
    "rooms": 3,
    "pricePerM2": 2313,
    "dwellings": 1,
    "outbuildings": 2,
    "landSurface": null,
    "address": "•• AV LEON BLUM",
    "postalCode": "38100",
    "city": "Grenoble",
    "inseeCode": "38185",
    "department": "38",
    "latitude": 45.166,
    "longitude": 5.721,
    "rentIndicatorPerM2": 12.21,
    "grossRentalYieldPct": 6.3,
    "rentIndicatorReliable": true,
    "energyRating": "C",
    "ghgRating": "B",
    "energyKwhM2Year": 162,
    "energyRatingIssuedAt": "2024-04-03",
    "energyRatingMatch": "high",
    "dpeNumber": "2438E••••••••",
    "changeType": null,
    "scrapedAt": "2026-10-03T14:38:35.083Z"
  },
  {
    "type": "sale",
    "location": "Grenoble",
    "saleId": "2025-5070••",
    "date": "2025-12-30",
    "year": 2025,
    "price": 220000,
    "propertyType": "apartment",
    "isNewBuild": false,
    "surface": 105,
    "rooms": 4,
    "pricePerM2": 2095,
    "dwellings": 1,
    "outbuildings": 2,
    "landSurface": null,
    "address": "•• RUE GENERAL MANGIN",
    "postalCode": "38100",
    "city": "Grenoble",
    "inseeCode": "38185",
    "department": "38",
    "latitude": 45.18,
    "longitude": 5.719,
    "rentIndicatorPerM2": 12.21,
    "grossRentalYieldPct": 7,
    "rentIndicatorReliable": true,
    "energyRating": null,
    "ghgRating": null,
    "energyKwhM2Year": null,
    "energyRatingIssuedAt": null,
    "energyRatingMatch": null,
    "dpeNumber": null,
    "changeType": null,
    "scrapedAt": "2026-10-03T14:38:35.075Z"
  },
  {
    "type": "locationSummary",
    "location": "Grenoble",
    "salesMatching": 4791,
    "salesDelivered": 4791,
    "apartments": {
      "sales": 4791,
      "medianPrice": 131350,
      "medianPricePerM2": 2500,
      "medianSurface": 60
    },
    "houses": {
      "sales": 0,
      "medianPrice": null,
      "medianPricePerM2": null,
      "medianSurface": null
    },
    "byYear": [
      {
        "year": 2024,
        "sales": 2408,
        "apartmentMedianPricePerM2": 2522,
        "houseMedianPrice": null
      },
      {
        "year": 2025,
        "sales": 2383,
        "apartmentMedianPricePerM2": 2500,
        "houseMedianPrice": null
      }
    ],
    "newBuildShare": 1.2,
    "mostActiveStreets": [
      {
        "street": "CRS LIBERATION - GEN DE GAULLE",
        "city": "Grenoble",
        "sales": 133
      },
      {
        "street": "RUE DE STALINGRAD",
        "city": "Grenoble",
        "sales": 100
      },
      {
        "street": "CRS JEAN JAURES",
        "city": "Grenoble",
        "sales": 90
      },
      {
        "street": "CRS BERRIAT",
        "city": "Grenoble",
        "sales": 81
      },
      {
        "street": "BD JOSEPH VALLIER",
        "city": "Grenoble",
        "sales": 80
      }
    ],
    "generatedAt": "2026-10-03T14:38:36.320Z",
    "energyRatings": {
      "salesChecked": 4559,
      "salesWithRating": 2518,
      "sharePct": 55.2,
      "apartments": {
        "A": {
          "sales": 15,
          "medianPricePerM2": 3317
        },
        "B": {
          "sales": 103,
          "medianPricePerM2": 2727
        },
        "C": {
          "sales": 760,
          "medianPricePerM2": 2802
        },
        "D": {
          "sales": 1039,
          "medianPricePerM2": 2398
        },
        "E": {
          "sales": 447,
          "medianPricePerM2": 2386
        },
        "F": {
          "sales": 104,
          "medianPricePerM2": 2145
        },
        "G": {
          "sales": 50,
          "medianPricePerM2": 2173
        }
      },
      "houses": {},
      "note": "Computed on the delivered sales matched to an official energy certificate (same address, property type and surface, certificate issued in the 2 years before the sale)."
    },
    "energySource": "ADEME — DPE Logements existants (depuis juillet 2021), Licence Ouverte / Open Licence",
    "rentalYield": {
      "edition": 2025,
      "apartments": {
        "sales": 4585,
        "medianGrossYieldPct": 6.6
      },
      "apartments1to2Rooms": {
        "sales": 2084,
        "medianGrossYieldPct": 6.9
      },
      "apartments3RoomsOrMore": {
        "sales": 2498,
        "medianGrossYieldPct": 6.3
      },
      "houses": null,
      "apartmentsByCommune": [
        {
          "city": "Grenoble",
          "inseeCode": "38185",
          "sales": 4585,
          "medianPricePerM2": 2508,
          "rentIndicatorPerM2": 13.41,
          "medianGrossYieldPct": 6.6
        }
      ],
      "note": "Gross and indicative: the commune's asking-rent indicator for a typical home (unfurnished homes advertised in Q3 2025, charges included) x 12, divided by the real sale price per m2. Not the rent of the home sold; no costs, taxes or vacancy deducted.",
      "rentSource": "Carte des loyers 2025 — ANIL / Ministère chargé du logement, from leboncoin and SeLoger listings (Licence Ouverte / Open Licence)"
    }
  }
]