# Inventory audit trail for Google Sheets

> See who changed stock, what changed, when and why. Every movement is recorded, reversible and protected by a tamper-evident chain.

Source: https://www.lightinventory.com/features/audit-trail · Last updated: 2026-10-28

LightInventory records every stock movement and every item change with who made it, what changed, when it happened and why. The history lives in a protected tab of your own Google Sheet, a keyed chain shows if anyone alters it, and edits made directly in the sheet are caught and recorded too.

## What the spreadsheet alone can tell you

Google Sheets already keeps some history, and it is useful. It is worth being precise about what it gives you.

- **Version history** shows earlier versions of the file, who edited them and what changed. You need edit access to see it, and Google notes that "the revisions for your file may occasionally be merged." Owners of personal Google Accounts can also delete version history ([Google: Find what's changed in a file](https://support.google.com/docs/answer/190843)).
- **Cell edit history** (right-click a cell, then **Show edit history**) shows who changed a single cell and its earlier values. Google lists changes that might not show up, including added or deleted rows and columns, changes to the cell's format, changes made by formulas, and changes made before a past version was restored (same page).

That is a good record of edits to a document. It is not an inventory ledger:

- **Stock is often a formula.** If a total recalculates, the cell's history may not show it, because Google lists changes made by formulas among those that might not appear.
- **There is no "why".** Neither view records a reason, a reference number or an approval.
- **Deleted rows are hard to trace.** Row deletions do not appear in cell history, so a vanished line can only be found by comparing whole versions.
- **Everyone with edit access is equal.** Anyone who can edit the file can change any unprotected cell, and the history only records it afterward.

## What LightInventory records

Every change made through the app becomes an entry in a protected `Log` tab in your spreadsheet. It is written in the same Google update as the change, so a change and its history entry are saved together or not at all.

| Question | Where the answer comes from |
|---|---|
| Who | The team member who made the change, and their name at that time |
| What | The item, location or movement, the field, and the value before and after |
| When | The time it happened and the time it was recorded, in UTC, shown in your time zone |
| Why | The movement's reference (for example a purchase order) and note, plus the approval request and the reviewer's comment when approval applies |
| How | Whether it came from the app, a revert, the system, or an edit made directly in the sheet |

Stock is never stored as a number someone can overwrite. Each receipt, issue, transfer or count correction is a row in an append-only `Movements` tab, and stock on hand is calculated from those rows. Each item also shows when it last changed and by whom.

You can read the history three ways: for one item, for one team member, or as a feed for the whole organization. When a spreadsheet grows large, older movements and history move into archive spreadsheets in your Google account, and the chain continues across them without a break.

## Approvals

Approvals are optional and set per organization. When they are on, changes such as price and cost edits or stock adjustments wait for review, while everyday receipts, issues and transfers go straight through. You can change which actions need approval.

- The proposed change is written to a protected `Requests` tab in your spreadsheet, so the proposed values stay in Google.
- An Approver, Admin or Owner approves or rejects it. Nobody can approve their own request.
- Both outcomes are recorded in the history, and a rejection keeps the reviewer's comment.
- If the proposal in the sheet is altered after it was submitted, approval fails.

## Revert without losing history

A revert never deletes anything. It adds a new entry that cancels the old one, so the history shows both the mistake and the correction.

- **One entry:** an Owner, Admin or Approver can revert any entry. Editors can revert their own entries for 24 hours.
- **Field changes:** a field goes back to its earlier value only if nobody has changed it since. If someone has, the app shows the conflict and lets you skip it, force it, or edit the value.
- **Bulk revert:** an Owner or Admin can undo everything one person did between two times. The app shows a preview with any conflicts first and asks for a fresh second factor before it runs.

## Tamper-evident history

Tamper-evident means that changing or removing a past entry shows up when the history is verified. It does not stop the change from happening; it makes it impossible to hide.

1. Each entry gets a code computed from its contents and the previous entry's code (HMAC-SHA256 with a secret key for your organization that only LightInventory holds). Changing one entry breaks every code after it, and without the key nobody can recompute them.
2. We keep a copy of those codes, with no values, in a table that rejects updates and deletes.
3. Once a day, a fingerprint of the chain is written to Google Cloud Storage under a 7-year locked retention policy, outside our database.
4. Every night, and whenever the owner asks, the app recomputes the chain from your `Log` tab and compares it with the copy and the latest daily anchor. If anything differs, every member sees an integrity warning, and Owners and Admins get an email.

The owner of a Google file can always edit, copy or delete it, and no app can prevent that. What the chain gives you is proof of which entries LightInventory wrote and that they are unchanged. Read more on the [security](/security) page.

## Try it: break the chain

The demo below is a sample ledger: edit any row and watch verification fail from that row on. It runs entirely in your browser and sends nothing anywhere.

_(Interactive demo: edit a row of a sample ledger and watch the hash chain fail. Available on the web page.)_

The demo uses a plain hash so you can see the idea. The real chain uses a secret key and daily anchors, as described above.

## Edits made directly in the sheet

Your managed tabs are protected, and an optional strict lock keeps the file read-only in Google until the owner unlocks it. The owner can still edit, so LightInventory checks as well:

- Every time the app reads your sheet, it compares each row with a keyed fingerprint stored when the app last wrote it.
- For organizations nobody is viewing, a background check runs on a schedule.
- A change found this way is recorded as an edit made outside the app, with the Google account Google's revision data points to. When several people could have made it, the app names all of them instead of guessing.

Your organization chooses what happens next: block the change until an Owner or Admin adopts or restores it, accept and log it, or hold it for approval. Edits to past movements or history entries are always flagged, under every setting. To check who changed a cell in Google Sheets itself, see [Google Sheets help](/help/google-sheets).

## Export

Permitted roles can export history and stock as CSV, XLSX or PDF. Exports ask for a fresh second factor, and values that start like a formula (`=`, `+`, `-`, `@`) are escaped so the file is safe to open in a spreadsheet. Because the history already sits in your own Google Sheet, it stays yours even if you stop using LightInventory.

## On every plan

The full history, reverts and integrity verification are included on every plan, including Free. Nothing in your history expires because of the plan you are on. See [pricing](/pricing), or read the guide to [inventory management in Google Sheets](/guides/inventory-management-google-sheets).
