Working with spreadsheets
Keep the spreadsheet. Put a gate in front of it.
Your workbook stays where it is. What changes is what happens at the door: the file is checked, mapped and stored as evidence, each figure keeps the file, sheet and row it came from, and an export carries those rows back out so you can edit in Excel and re-import without creating duplicates. This page is the mechanics of that, including the layouts it will refuse.
The short version of the argument
Two sentences, then the mechanics.
A spreadsheet is usually fine at the arithmetic and poor at the three things an assurance provider asks about it: who changed this figure, what it was before, and what evidence sits behind it. Rather than replace the workbook, the product takes it as an input and records those three things around it — and if you want that case argued properly rather than asserted, it is set out in why a spreadsheet is not a control.
Everything below is what the import actually does, taken from the running code, not described in the abstract.
At the door
What the file has to satisfy.
The import accepts .xlsx, .xls and .csv up to 25 MB. A password-protected workbook is refused with that specific reason, not a generic failure, because the difference between "unreadable" and "locked" is the difference between a bug and a thing you can fix in thirty seconds.
Two columns are required: a
metric or description, and a value. Everything else
— unit, period, scope, entity, emission factor, factor source, method note, your
own reference — is optional, and a row missing a required column is blocked
rather than guessed at. Values are parsed the way finance people actually type them, so
1,234.5 and (89) both read correctly, the second as a
negative.
Periods are kept exactly as written.
FY2025, Q1 2025 and 2025-01-01 to 2025-12-31 all
survive as the string you used. Nothing is normalised behind your back, which means
your period labels stay yours and also means the product will not silently merge two
spellings of the same period.
Why the id column is visible
A hidden column would have been tidier and wrong.
There are two exports. The working file is for carrying on in Excel.
The round-trip file is the same rows plus an auditably_id column, and that
id is how an edited row is matched back to the figure it came from — so
re-importing records changes against existing figures, keeping the previous value,
instead of creating a second copy of everything.
The id column is deliberately visible and named rather than hidden. A hidden column does not survive being copied into a fresh sheet, and nobody discovers it was load-bearing until the re-import duplicates the entire cycle. An ugly column you can see is better than a tidy one that fails quietly. Neither file contains macros, and both open in any spreadsheet tool.
Values, not formulas
What gets read out of a cell.
The import reads computed values, not the formulas that produced
them. A cell containing =SUM(B2:B40)*0.4233 imports as the number it
currently evaluates to. This is the right behaviour for a disclosure record — the
figure you disclosed is the figure that was on screen — but it has a consequence
worth being explicit about.
The calculation logic stays in the workbook, and the workbook is stored as supporting documentation with a SHA-256 digest, so the formula can be inspected later by opening the file that was actually imported. What the product does not do is read, check or track your formulas. If your emission factor is hard-coded inside a formula instead of sitting in a factor column, it is evidence inside a file, not a field anyone can query.
One thing you have to choose
Which disclosure the figures land under.
The disclosure is selected explicitly on every import, and it is the one thing the product refuses to infer. Nothing in a spreadsheet column tells anyone which paragraph of IFRS S2 a figure belongs to, so a guess would file figures under the wrong disclosure without saying it had guessed — the failure mode being one you only find during assurance.
Column mapping is guessed, because there it is safe: a mis-mapped column is visible in the preview before anything is written. Mappings can be saved and named, so the second cycle from the same report is a matter of picking the mapping you used last time rather than rebuilding it.
Before anything is written
Five outcomes, shown first.
Every import is previewed. Each row is classified before you commit, and nothing is written until you do.
To add
A new figure. Nothing matching it exists in the cycle.
To change
An existing figure whose value differs. The previous value is kept when the change is written.
Unchanged
Matched and identical. Skipped, so re-importing the same file twice does not manufacture activity.
Warnings
Imported as they are, but you have to tick an acknowledgement before the import proceeds. A warning you can click past without reading is not a warning.
Blocked
Listed individually with the reason. You can fix the sheet and upload again, or import everything else and leave the blocked rows out.
What survives the import
Provenance travels in both directions.
The workbook is stored as supporting documentation and hashed with SHA-256, the digest is shown to you at the time, and the import itself is written to the activity log. Every figure that came out of the file keeps a reference to the file, the sheet and the row it came from.
That reference is not only visible in the app. The export carries from sheet, from row and from cells as columns, so provenance comes back out into the spreadsheet rather than being trapped in a system. If you want the guarantee underneath the hashing, that is a separate page: why the log cannot be edited.
The limits
Layouts it will not handle.
One sheet at a time. You choose which sheet, and the workbook's other sheets are recorded but not read, so a file holding twelve monthly tabs is twelve imports, not one. The heading row is guessed and then confirmed by clicking it, and everything above it is discarded — which covers title blocks and merged banner rows, but a genuine two-level header, or a table with the metric names running across the top instead of down the side, needs flattening in Excel first.
Some more, plainly. 25 MB is a real ceiling. Password protection has to come off before upload. Formula logic is preserved only in the sense that the file is kept — nothing reads or validates it. And to be unambiguous about a thing this product is sometimes assumed to do: it does not tie your climate figures back to the financial statements. It records what you disclosed, where it came from and who approved it.
Column mapping wants a wide screen. It is a table with one row per column of your file, and on a phone it is genuinely unpleasant.
Questions
Three about the file itself.
Do I have to stop using Excel?
No, and the round-trip file exists specifically so you do not have to. The workbook stays the place you calculate; the product is the place the result is evidenced, reviewed and approved.
What if I re-import the same file by mistake?
Rows that match exactly come back as unchanged and are skipped. If the file carries
auditably_id values, edited rows are recorded as changes against the
existing figures rather than added again.
Can I get my data back out if I leave?
Yes. Figures export to a spreadsheet, the activity log exports as PDF and CSV, and the assurance archive contains every supporting document with a manifest of SHA-256 digests. No format is proprietary and nothing needs our software to read.
Next
See it in context.
Where the import sits in a reporting cycle, what the export contains, and the disclosure coverage it feeds.
Related: one standard, not a platform · evaluating without a sales call