California lawn-replacement rebate data
Every lawn-replacement program Turf Check has on file, one row per program, with the day each row was last read on the agency’s own page. Use it, share it and build on it under CC BY 4.0. Credit “Lekua Turf Check, https://lekua.design/turf/data”.
What is in it today
Snapshot of October 28, 2026: 166 programs from 160 water agencies. 140 were read on the agency’s page in the last 60 days, and 132 of those are open and carry their terms.
7 were last read more than 60 days ago, so their status is “unknown”, and 19 have not been read on the agency’s page yet, so they are “unconfirmed”. Those rows keep the program’s name and links but carry no rate, cap or status.
The files are rebuilt every day, so a row drops its figures the day its last read turns 61 days old. How each row is checked.
The fields
| Field | Type | Meaning |
|---|---|---|
| agency_id | text | Turf Check’s id for the water agency. Stable across snapshots. |
| agency_name | text | The agency’s name. |
| agency_type | text | “retail” sells water to homes and businesses; “wholesale” sells it to other agencies. |
| counties | list | Counties the agency serves. In the CSV, separated by “; ”. |
| program_name | text | The program’s name as the agency writes it. |
| status | text | active, waitlist, seasonal, suspended, closed or expired when the row was read within 60 days (or, for a row read from a dated terms document, within that document's stated period). “unknown” when the last read is older than that. “unconfirmed” when the row has never been read on the agency’s page. |
| audiences | list | Who the program lists: residential, multifamily, commercial, institutional, public. In the CSV, separated by “; ”. |
| terms_audience | text | The audience the rate and caps are read for: the first of residential, multifamily, commercial, institutional, public that the program lists. |
| rate_usd_per_sqft | number | Dollars per square foot of lawn replaced, at the program’s highest standard option (bonuses not included). Empty when the program does not pay by the square foot, when no single rate is on file (each member agency sets its own), or when the row is not current. |
| max_sqft | number | The most square feet that count. Empty when no area cap is on file (none published, or not read), or when the row is not current. |
| max_usd | number | The dollar cap. Empty when no dollar cap is on file (none published, or not read), or when the row is not current. |
| min_sqft | number | The smallest project the program accepts, in square feet. Empty for none, or when the row is not current. |
| last_verified_at | date | The day the row was last read on the agency’s own page (YYYY-MM-DD). Empty when it never has been. |
| source_url | url | The agency page the row was read from. |
| terms_url | url | The program’s terms, when the agency publishes them on a separate page. |
| application_url | url | Where the agency takes applications. You apply to the agency yourself; Lekua does not apply for you. |
| snapshot_date | date | The day the 60-day rule was applied to produce this file. |
What is left out
No addresses and nothing about anyone’s search. No research notes, and nothing about who read a row. Plant, irrigation and other requirements are not in the files; they are on each program’s own page, at source_url.
Programs change and pause, and funding runs out. Confirm the terms with the agency before you apply, and get approval before you remove any lawn. You apply to the agency yourself: Lekua does not take or submit applications, and no agency endorses this dataset.
License: Creative Commons Attribution 4.0 International (CC BY 4.0). To cite it: Lekua Turf Check, “California lawn-replacement rebate programs”, snapshot of October 28, 2026, https://lekua.design/turf/data.