{
  "profile": "data-package",
  "name": "tektolo-deposit-rules",
  "id": "https://tektolo.com/data/deposit-rules/",
  "title": "Security deposit rules by US state and city",
  "description": "The security deposit rules for all 50 US states and the District of Columbia, plus 9 city ordinances, as open data under CC BY 4.0: the deadline to return a deposit and what starts it, the itemized statement and documentation duties, the deductions each statute allows, interest, penalties, forfeiture and deposit caps. Every row cites the statute or ordinance, quotes the text and links to the official source with the date it was last read. Generated from the ruleset the Tektolo deposit settlement tool runs on.",
  "version": "sd-2026.11.20",
  "homepage": "https://tektolo.com/data/deposit-rules/",
  "licenses": [
    {
      "name": "CC-BY-4.0",
      "path": "https://creativecommons.org/licenses/by/4.0/",
      "title": "Creative Commons Attribution 4.0 International"
    }
  ],
  "contributors": [
    {
      "title": "Tektolo",
      "path": "https://tektolo.com/",
      "role": "publisher"
    }
  ],
  "keywords": [
    "security deposit law",
    "security deposit return deadline",
    "landlord tenant law",
    "security deposit interest",
    "security deposit deductions",
    "open data"
  ],
  "ruleset_hash": "sha256:4d2df5171e876ddc04b0a2b1a11c2792dcee800bcf29ddafb365924d060721dc",
  "citation": "Tektolo. Security deposit rules by US state and city, version sd-2026.11.20. https://tektolo.com/data/deposit-rules/. Licensed under CC BY 4.0.",
  "resources": [
    {
      "name": "deposit-rules",
      "path": "deposit-rules.csv",
      "title": "CSV, one row per state and city",
      "format": "csv",
      "mediatype": "text/csv",
      "encoding": "utf-8",
      "bytes": 165293,
      "profile": "tabular-data-resource",
      "schema": {
        "fields": [
          {
            "name": "id",
            "type": "string",
            "description": "Two-letter state code (TX), or the city's id (chicago) for a city row."
          },
          {
            "name": "jurisdiction_type",
            "type": "string",
            "description": "state (the 50 states and DC) or city (a city ordinance layered on the state rule)."
          },
          {
            "name": "state",
            "type": "string",
            "description": "Two-letter state code."
          },
          {
            "name": "state_name",
            "type": "string",
            "description": "State name."
          },
          {
            "name": "city",
            "type": "string",
            "description": "City name on a city row; empty on a state row."
          },
          {
            "name": "summary",
            "type": "string",
            "description": "The rule in one paragraph, as the Tektolo rules operation states it: deadline, other deadlines, interest, penalty and forfeiture, with the statute."
          },
          {
            "name": "statute",
            "type": "string",
            "description": "The state statute the rule comes from."
          },
          {
            "name": "city_ordinance",
            "type": "string",
            "description": "The city ordinance layered on the state rule (city rows)."
          },
          {
            "name": "deadline_citation",
            "type": "string",
            "description": "The section that sets the return deadline."
          },
          {
            "name": "deadline_quote",
            "type": "string",
            "description": "That section's text, quoted or summarized (see deadline_quote_verbatim)."
          },
          {
            "name": "deadline_quote_verbatim",
            "type": "boolean",
            "description": "true: deadline_quote is the statute's own words; false: it is a summary."
          },
          {
            "name": "source_title",
            "type": "string",
            "description": "The official source the deadline section was read at."
          },
          {
            "name": "source_url",
            "type": "string",
            "description": "Address of that official source."
          },
          {
            "name": "source_checked_on",
            "type": "date",
            "description": "The day the source was last read."
          },
          {
            "name": "city_ordinance_url",
            "type": "string",
            "description": "Address of the city ordinance's official source (city rows)."
          },
          {
            "name": "verified",
            "type": "boolean",
            "description": "true: the main rule text was read word for word at the official source; false: read at a secondary copy or summarized."
          },
          {
            "name": "return_days",
            "type": "integer",
            "description": "Days to return the deposit (or send the itemized statement and any balance). Empty when the period is in months or there is no deadline."
          },
          {
            "name": "return_months",
            "type": "integer",
            "description": "Months to return the deposit, where the statute counts months."
          },
          {
            "name": "return_counting",
            "type": "string",
            "description": "calendar or business days."
          },
          {
            "name": "return_starts",
            "type": "string",
            "description": "The event the period runs from (a key: vacate, termination, forwarding_address, demand, ...)."
          },
          {
            "name": "return_starts_text",
            "type": "string",
            "description": "The same event in words."
          },
          {
            "name": "no_statutory_deadline",
            "type": "boolean",
            "description": "true: the statute sets no deadline to return the deposit."
          },
          {
            "name": "needs_forwarding_address",
            "type": "boolean",
            "description": "true: the duty starts only once the tenant gives a written forwarding address."
          },
          {
            "name": "last_day_rolls_forward",
            "type": "boolean",
            "description": "true: a last day on a weekend or legal holiday moves to the next business day under the state's time-computation statute."
          },
          {
            "name": "deadline_text",
            "type": "string",
            "description": "The return deadline in one sentence."
          },
          {
            "name": "other_deadlines",
            "type": "string",
            "description": "Other deadlines the statute sets in some cases, each with its condition in words. A list in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "statement_required",
            "type": "boolean",
            "description": "true: an itemized statement of deductions is required."
          },
          {
            "name": "statement_with_refund",
            "type": "boolean",
            "description": "true: the statement goes with the refund, by the same deadline; false: it has its own deadline (statement_days or statement_months)."
          },
          {
            "name": "statement_days",
            "type": "integer",
            "description": "Days to send the itemized statement, when it has its own deadline."
          },
          {
            "name": "statement_months",
            "type": "integer",
            "description": "Months to send the itemized statement, when it has its own deadline in months."
          },
          {
            "name": "receipts_required",
            "type": "boolean",
            "description": "true: receipts or invoices must back the deductions."
          },
          {
            "name": "receipts_over_usd",
            "type": "number",
            "description": "The receipts duty applies above this repair and cleaning total (US dollars)."
          },
          {
            "name": "photos_required",
            "type": "boolean",
            "description": "true: dated photos must back the deductions."
          },
          {
            "name": "photos_required_from",
            "type": "date",
            "description": "The photo duty applies to move-outs on or after this day."
          },
          {
            "name": "move_in_checklist_section",
            "type": "string",
            "description": "The section that ties deductions to a written move-in condition statement, where there is one."
          },
          {
            "name": "allowed_deductions",
            "type": "string",
            "description": "What the statute lets the landlord deduct (keys: unpaid_rent, damage_beyond_wear, ...). A list in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "allowed_deductions_text",
            "type": "string",
            "description": "The same list in words."
          },
          {
            "name": "normal_wear_excluded",
            "type": "boolean",
            "description": "true: normal wear and tear cannot be deducted."
          },
          {
            "name": "depreciation",
            "type": "string",
            "description": "required (the statute prorates by age), guidance (an official guide does) or silent (no formula in the statute)."
          },
          {
            "name": "interest_required",
            "type": "string",
            "description": "yes, no or conditional: whether the landlord must pay interest on the deposit."
          },
          {
            "name": "interest_condition",
            "type": "string",
            "description": "When interest is owed, for a conditional rule."
          },
          {
            "name": "interest_rate_percent",
            "type": "number",
            "description": "The interest rate in percent a year (the current rate when it is published yearly)."
          },
          {
            "name": "interest_rate_kind",
            "type": "string",
            "description": "fixed_percent, statutory_index (published each year) or bank_rate (what the account earns)."
          },
          {
            "name": "interest_rate_year",
            "type": "integer",
            "description": "The year interest_rate_percent is for, for a published rate."
          },
          {
            "name": "interest_payable",
            "type": "string",
            "description": "annually or at_end (with the deposit)."
          },
          {
            "name": "interest_note",
            "type": "string",
            "description": "The interest rule in words."
          },
          {
            "name": "penalty_kind",
            "type": "string",
            "description": "multiple (a multiple of an amount), fixed (a set amount), forfeiture_only or actual_only (actual damages)."
          },
          {
            "name": "penalty_multiple",
            "type": "number",
            "description": "The multiple, for a multiple penalty."
          },
          {
            "name": "penalty_basis",
            "type": "string",
            "description": "What the multiple is taken of: deposit, amount_withheld or monthly_rent."
          },
          {
            "name": "penalty_fixed_usd",
            "type": "number",
            "description": "A set amount (US dollars): the penalty itself, or added to the multiple."
          },
          {
            "name": "penalty_minimum_usd",
            "type": "number",
            "description": "The penalty is at least this (US dollars)."
          },
          {
            "name": "penalty_condition",
            "type": "string",
            "description": "When the penalty applies (a key: bad_faith, any_late, willful, ...)."
          },
          {
            "name": "penalty_applies_if",
            "type": "string",
            "description": "The same condition in words."
          },
          {
            "name": "penalty_text",
            "type": "string",
            "description": "The penalty in words."
          },
          {
            "name": "penalty_attorney_fees",
            "type": "boolean",
            "description": "true: the statute also awards attorney fees."
          },
          {
            "name": "penalty_discretionary",
            "type": "boolean",
            "description": "true: a court may award the penalty but need not."
          },
          {
            "name": "penalty_note",
            "type": "string",
            "description": "The penalty rule in words, from the statute."
          },
          {
            "name": "city_additional_penalty",
            "type": "string",
            "description": "A city penalty in addition to the state's (city rows)."
          },
          {
            "name": "forfeiture",
            "type": "string",
            "description": "What the landlord loses by missing a deadline, in words. A list in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "deposit_cap_months_rent",
            "type": "number",
            "description": "The most the deposit may be, in months of rent. Empty when the statute sets no cap."
          },
          {
            "name": "deposit_cap_text",
            "type": "string",
            "description": "The deposit cap in words."
          },
          {
            "name": "deposit_cap_note",
            "type": "string",
            "description": "Details and exceptions of the cap."
          },
          {
            "name": "applicability",
            "type": "string",
            "description": "Who the rule covers, where the statute limits it."
          },
          {
            "name": "recent_changes",
            "type": "string",
            "description": "Recent amendments, each with its effective date. A list in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "notes",
            "type": "string",
            "description": "Notes on the rule for landlords and tenants. A list in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "official_guides",
            "type": "string",
            "description": "Official plain-language guides (government publishers). A list of addresses in JSON; joined with ' | ' in the CSV."
          },
          {
            "name": "page_url",
            "type": "string",
            "description": "The rule's page on tektolo.com, with a worked example and the tool."
          },
          {
            "name": "ruleset_version",
            "type": "string",
            "description": "The Tektolo ruleset version this row is from."
          },
          {
            "name": "ruleset_hash",
            "type": "string",
            "description": "SHA-256 of the whole ruleset: it changes whenever any rule changes."
          }
        ],
        "missingValues": [
          ""
        ],
        "primaryKey": "id"
      }
    },
    {
      "name": "deposit-rules-json",
      "path": "deposit-rules.json",
      "title": "JSON, the same rows with every citation",
      "format": "json",
      "mediatype": "application/json",
      "encoding": "utf-8",
      "bytes": 429134
    }
  ],
  "created": "2026-10-15",
  "jurisdictions": {
    "states": 51,
    "cities": 9
  }
}
