{
  "releaseId": "2026-09-22",
  "generatedAt": "2026-09-22T04:04:30.468Z",
  "kind": "Immutable category-level aggregate release",
  "csv": "/toronto-renovation-cost-report/releases/2026-09-22.csv",
  "source": {
    "name": "City of Toronto Active Building Permits",
    "url": "https://open.toronto.ca/dataset/building-permits-active-permits/",
    "resourceId": "6d0229af-bc54-46de-9c2b-26759b01dd05",
    "inputSnapshotArchived": false,
    "ingestionTimestampAvailable": false
  },
  "analysis": {
    "asOfUtc": "2026-09-22T04:04:29.727Z",
    "rollingWindowDays": 730,
    "windowStartUtc": "2024-09-22",
    "newestIncludedPermitDate": "2026-08-19",
    "oldestIncludedPermitDate": "2024-09-23",
    "earlierWindowStartUtc": "2022-09-23",
    "lowerSampleGate": 30,
    "minimumDistinctMonths": 6,
    "percentileMethod": "Linear interpolation at index (n - 1) * p after 1.5 IQR Tukey filtering",
    "matching": "Case-insensitive WORK, DESCRIPTION and STRUCTURE_TYPE; first matching category wins",
    "dateField": "ISSUED_DATE, otherwise APPLICATION_DATE",
    "costField": "EST_CONST_COST, applicant declared at filing",
    "costObservationDeduplication": "No separate deduplication by permit reference",
    "categoryRules": [
      {
        "slug": "basement-underpinning",
        "include": [
          "/underpin/i",
          "/lower(ing)?\\s+(the\\s+)?basement/i"
        ],
        "exclude": [
          "/new\\s+(2|two|3|three)\\s*stor/i",
          "/demolish\\s+existing\\s+dwelling/i"
        ],
        "declaredValueBandCad": [
          8000,
          400000
        ]
      },
      {
        "slug": "deck-construction",
        "include": [
          "/\\bdeck\\b/i"
        ],
        "exclude": [
          "/roof\\s*deck/i",
          "/parking\\s*deck/i",
          "/new\\s+dwelling/i",
          "/\\bcondo/i"
        ],
        "declaredValueBandCad": [
          2000,
          120000
        ]
      },
      {
        "slug": "front-porch-replacement",
        "include": [
          "/\\bporch\\b/i",
          "/\\bveranda/i"
        ],
        "exclude": [
          "/new\\s+dwelling/i",
          "/demolish\\s+existing\\s+dwelling/i"
        ],
        "declaredValueBandCad": [
          2000,
          150000
        ]
      },
      {
        "slug": "rear-addition",
        "include": [
          "/rear\\s+(addition|extension)/i",
          "/two\\s*stor(e?y|ey)\\s+addition/i"
        ],
        "exclude": [
          "/new\\s+dwelling/i"
        ],
        "declaredValueBandCad": [
          20000,
          800000
        ]
      },
      {
        "slug": "garden-suite",
        "include": [
          "/garden\\s+suite/i"
        ],
        "exclude": [],
        "declaredValueBandCad": [
          50000,
          900000
        ]
      },
      {
        "slug": "laneway-suite",
        "include": [
          "/laneway\\s+(suite|house)/i"
        ],
        "exclude": [],
        "declaredValueBandCad": [
          50000,
          900000
        ]
      },
      {
        "slug": "second-suite",
        "include": [
          "/second\\s+suite/i",
          "/basement\\s+apartment/i",
          "/accessory\\s+dwelling/i"
        ],
        "exclude": [
          "/new\\s+dwelling/i",
          "/demolish\\s+existing/i"
        ],
        "declaredValueBandCad": [
          10000,
          500000
        ]
      }
    ],
    "codeSha256": {
      "scripts/ingest-toronto-permits.ts": "2cbe9c0a88d0aae7b5c0144e9227666c3af04a4d957d2cc7ddf2407baa7bbb5b",
      "lib/costs.ts": "ac8ab90535cedee6f40696315e37083ea057e7cc2707c80e050e5de1c1fd630f",
      "lib/queries.ts": "3bd46794e988f9a4b4c77e57e38b1d966e083f48d9559b876da1a980693b743b",
      "lib/report.ts": "cd8977c1d67cb4e5aea0ac9c07fda790da226e90f7dcfee0a9faa1d234bab6c2"
    }
  },
  "totals": {
    "matchedCategoryRows": 3408,
    "retainedCategoryRows": 3284,
    "distinctNonemptyPermitReferencesBeforeOutlierFiltering": 3399,
    "matchedRowsWithoutReference": 0
  },
  "categories": [
    {
      "slug": "laneway-suite",
      "name": "Laneway suite",
      "matchedRows": 261,
      "outliersRemoved": 0,
      "retainedRows": 261,
      "distinctReferencesBeforeOutlierFiltering": 261,
      "p25Cad": 150000,
      "medianCad": 300000,
      "p75Cad": 450000,
      "oldestIncludedPermitDate": "2024-09-24",
      "newestIncludedPermitDate": "2026-08-17"
    },
    {
      "slug": "garden-suite",
      "name": "Garden suite",
      "matchedRows": 630,
      "outliersRemoved": 26,
      "retainedRows": 604,
      "distinctReferencesBeforeOutlierFiltering": 629,
      "p25Cad": 100000,
      "medianCad": 200000,
      "p75Cad": 341514,
      "oldestIncludedPermitDate": "2024-09-24",
      "newestIncludedPermitDate": "2026-08-19"
    },
    {
      "slug": "rear-addition",
      "name": "Rear addition",
      "matchedRows": 392,
      "outliersRemoved": 21,
      "retainedRows": 371,
      "distinctReferencesBeforeOutlierFiltering": 391,
      "p25Cad": 75000,
      "medianCad": 150000,
      "p75Cad": 300000,
      "oldestIncludedPermitDate": "2024-09-23",
      "newestIncludedPermitDate": "2026-08-19"
    },
    {
      "slug": "basement-underpinning",
      "name": "Basement underpinning",
      "matchedRows": 807,
      "outliersRemoved": 42,
      "retainedRows": 765,
      "distinctReferencesBeforeOutlierFiltering": 802,
      "p25Cad": 40000,
      "medianCad": 65000,
      "p75Cad": 125000,
      "oldestIncludedPermitDate": "2024-09-23",
      "newestIncludedPermitDate": "2026-08-19"
    },
    {
      "slug": "second-suite",
      "name": "Second suite conversion",
      "matchedRows": 377,
      "outliersRemoved": 20,
      "retainedRows": 357,
      "distinctReferencesBeforeOutlierFiltering": 377,
      "p25Cad": 20000,
      "medianCad": 40000,
      "p75Cad": 50000,
      "oldestIncludedPermitDate": "2024-09-27",
      "newestIncludedPermitDate": "2026-08-17"
    },
    {
      "slug": "deck-construction",
      "name": "Deck construction",
      "matchedRows": 592,
      "outliersRemoved": 0,
      "retainedRows": 592,
      "distinctReferencesBeforeOutlierFiltering": 592,
      "p25Cad": 10000,
      "medianCad": 30000,
      "p75Cad": 59250,
      "oldestIncludedPermitDate": "2024-09-24",
      "newestIncludedPermitDate": "2026-08-19"
    },
    {
      "slug": "front-porch-replacement",
      "name": "Front porch replacement",
      "matchedRows": 349,
      "outliersRemoved": 15,
      "retainedRows": 334,
      "distinctReferencesBeforeOutlierFiltering": 348,
      "p25Cad": 10000,
      "medianCad": 20000,
      "p75Cad": 50000,
      "oldestIncludedPermitDate": "2024-09-24",
      "newestIncludedPermitDate": "2026-08-19"
    }
  ],
  "limitation": "This release preserves aggregate output and exact rule definitions, but not the changing City input file. Its past numbers cannot be reproduced exactly from a later download of the active-permits file."
}
