Undo and point-in-time recovery
Nothing you do to a sheet is unrecoverable. Every mutation is an effect in an append-only history, and the sheet's past versions stay frozen behind the current one. This page covers the three recovery moves: undo, restore points, and time travel.
The history records everything
Open a sheet's history and you see every effect that ever ran: who or what triggered it (a person, a schedule, an agent), what it changed, and when. The history is append-only. Recovery never rewrites the past; it copies a past state forward.
Undo a change
A destructive effect seals the sheet's current version before it applies, so the state before the change is preserved automatically. Undo copies that frozen version's rows forward into a new current version. Rows keep their stable identity across the copy, so references to a row survive an undo.
Create a restore point
Before a risky operation, create a restore point. It marks the current state as a named moment you can return to. Restore points cost nothing to create because sealing a version is the sheet's normal bookkeeping, not a data copy.
Agents and schedules can create restore points too, so "snapshot before every scheduled refresh" is one instruction, not a habit you have to keep.
Travel back
Restoring copies a chosen point's rows into a new current version and leaves the point itself immutable. You can restore, look around, and restore again to a different point. Nothing is consumed by looking.
Time travel composes with everything else in Sheets. An agent that ran a bad filter, a schedule that imported a malformed CSV, a teammate who deleted a column: each is one restore away from undone.
Concurrent edits cannot corrupt a restore. Every run records the sheet version it validated against and is refused if the sheet moved on in the meantime.