Google Sheets add-on

A spreadsheet that remembers every change

Version history, word-level track changes and document import and export, inside Google Sheets.

  • Google Apps Script
  • Sheets API
  • Docs API
  • Drive API
  • In use

The everyday problem

Plenty of teams write their content as formal documents but manage it as a spreadsheet: requirements, specifications, test cases, anything with rows that get reviewed and revised. Spreadsheets are good for filtering and editing. Documents are good for delivering.

The gap between the two is filled by hand. Tables are copied out of documents and pasted into sheets. Files are named “v3 final FINAL”. And when someone asks “what changed since the last release?”, nobody can answer with confidence. Where every change has to be attributable to a person and a time, that is a real risk.

What we built

An add-on that lives in a sidebar inside Google Sheets and covers the whole round trip in four steps.

Import. Point it at a document and it reads the structure the way a person would: the headings, the tables under each heading, and which tables share the same layout. You choose the tables, match their columns to the sheet's columns once, and the mapping is saved for every later document built from the same template.

Track. Choose the columns that matter and switch tracking on. From then on, every meaningful change to a row is recorded with the time, the editor and a full snapshot of the row. Tracking can be paused, resumed or stopped.

Compare. One action writes the differences back into the sheet, inside the cell: removed words in red with a strikethrough, added words in green. Reviewers see which words changed, not only that a cell changed.

Export. A drag-and-drop template designer sets the table layout, how rows are grouped under headings, and which rows to include. The add-on then builds a formatted document, with table headers that repeat across page breaks.

The hard parts

Rows are tracked by identity. History follows each row's ID, not its position. Sort the sheet, insert rows, delete rows, and the history stays attached to the right item.

Only real changes count. Each row gets a fingerprint built from the tracked columns alone, so reformatting a cell or editing an unrelated column creates no noise. Edits are held for ten seconds before they are saved, so pasting fifty rows makes one history entry and not fifty.

Several people at once. A lock orders the writes when two people edit at the same moment, so no edit is lost and the history is never scrambled.

Big sheets, short time limits. The platform stops any script after six minutes. Sheets of more than about a thousand rows are exported in batches of roughly five hundred into one shared document. Progress is saved after each batch, so an interrupted export picks up where it stopped.

Everything stays in the file. History, saved mappings, templates and the export log are stored inside the spreadsheet itself. Share or copy the file and its audit trail goes with it. The add-on asks only for the files it touches and sends nothing to outside services.

What changed

The spreadsheet becomes the single source of truth. Content comes in from documents without copy and paste, every change carries a name and a time, and the finished document comes back out formatted, grouped and filtered.