Skip to main content

The close pack workbook

Export pack on Accounting → Close produces one spreadsheet workbook: a cover sheet describing the month and its checklist, then one sheet for each of the nine month-end reports. This page describes the file itself — what it is called, what is on each sheet, and how to read the few lines at the top of every report sheet. For the columns inside those sheets, see close pack: columns on every report sheet.

To produce a pack in the first place, see export the close pack.

What the downloaded file is

  • One spreadsheet workbook, in .xlsx format. It opens in Excel, Numbers and Google Sheets. There is no PDF version, no CSV version, and no way to download a single report on its own — if a client wants only the balance sheet, copy that sheet out of the workbook yourself.
  • The name carries the month and the moment it was built, in the form close-pack-<month>-<date and time>.xlsx. A June 2026 pack built on the afternoon of 12 September 2026 downloads as close-pack-2026-06-2026-09-12-13-57-23.xlsx. The first date is the month the pack describes, written as a year and a month number; the rest is when the file was produced, down to the second.
  • Every export writes its own file. Exporting the same month twice gives you two workbooks, and the second never overwrites the first. That is deliberate: a pack you sent to a client stays exactly as you sent it.

The file name tells you only which month the pack covers and when it was built. Everything else — the month's status, who signed it off and what the checklist said — is on the cover sheet inside.

The workbook has no formatting at all

Treat the pack as data to build on, not as a finished document to print. Nothing in it is styled:

What you might expectWhat you get
Column widths sized to the contentDefault widths — long account names sit under the next cell until you widen them
A frozen or bold header rowA plain row of text like any other
Currency formattingPlain numbers rounded to two decimals: 1234.5, never $1,234.50
Thousands separatorsNone. A round amount reads 1000
Whole-number countsWhole numbers, with no decimals
Yes/no fieldsTRUE where the answer is yes — and an empty cell where it is no. The word FALSE appears nowhere in the workbook
ZerosAn empty cell. A balance of nil is written as nothing at all
Date cells you can sort chronologicallyTimestamps written as text

Three consequences worth planning for:

  • An empty cell is not the same as missing data. Zero and "no" both come out blank, so an amount column can look half-filled when in fact every figure is present and the gaps are nil. This is the one difference that catches people out when they compare a sheet against the same report on screen, where the same cells read 0.00 and false. If you sum a column it makes no difference; if you count filled cells, or filter on FALSE, it does.
  • Sorting by a timestamp sorts it as text. The format used (year first, then month, day and time) does sort correctly by luck, but a spreadsheet still treats it as a word — convert the column if you need real date arithmetic.
  • Totals are given as values, not formulas. Nothing recalculates if you delete a row. Every figure in the pack is the figure SKU.io produced when the export ran.

The ten sheets, in order

#SheetWhat it holds
1CoverThe month, its status, the sign-off, and the close checklist
2Income StatementThe month's revenue, direct costs and expenses, one row per account
3Balance SheetAssets, liabilities and equity as at the last day of the month
4Trial BalanceOpening balance, the month's debits and credits, and the closing balance
5Inventory ValuationStock value as at the last day of the month, one row per warehouse
6COGSQuantities and cost of goods sold for the month, one row per sales channel
7GINR BalanceGoods invoiced not received, as at the last day of the month
8Reconciliation SummaryYour totals against the provider's, one row per accounting connection
9Trial Balance ReconciliationYour account balances against the provider's, account by account
10Sync Category ReconciliationEach transaction category's total, split by what reached the provider

Three rules hold every time:

  • All ten sheets are always present. A report with nothing to show still gets its sheet, carrying its heading block, its note and its (nil) totals, but no table. You never have to work out whether a sheet is missing or the month is empty.
  • The order never changes, and it does not depend on which report you had open on screen, or which ones you looked at before exporting.
  • Each sheet is named after its report card on the Report pack — the same words, in the same case.

Spreadsheets cap a sheet name at 31 characters and reject \ / : * ? [ and ], so a name longer than that is trimmed and any of those characters becomes a hyphen. None of today's ten names is affected — the two longest, Trial Balance Reconciliation and Sync Category Reconciliation, are 28 characters each — but the rule is what governs if a report is ever renamed.

The Cover sheet

The cover is a list of labels in the first cell of each row and their values in the second. Reading down:

RowValue
Month-End Close PackThe title, on its own
PeriodThe month as a year and a month number, for example 2026-06
StatusThe month's status in the same words the screen uses: Open, In Review, Closing… or Closed
Generated atWhen this workbook was built

A closed month then adds its sign-off:

RowValue
Closed atWhen the close finished
Closed byThe name of the person who closed it
NotesThe close notes typed into the Close dialog, or blank if none were typed

A month that is not closed carries a single warning row in place of those three:

PRELIMINARY — Period is not closed — figures may still change.

That one row is the difference between a draft pack and the month's numbers of record. Anyone reading the workbook without the story behind it should be able to tell which they are holding from the cover alone. See frozen figures, staleness and drift.

The checklist block

Below a blank row comes a Checklist heading and a table of every item on the month's close checklist, in the order they appear on screen:

ColumnWhat it holds
ItemThe check's name, exactly as the checklist shows it
StatusOne word — see the table below
AcknowledgedYes when the item was acknowledged at close, otherwise blank
Completed byThe name of the person who ticked a manual item
Completed atWhen they ticked it
StatusMeans
PassThe check ran and found nothing to fix
WarnThe check found something, but it does not stop a close
FailA blocking check found something. Three of the four blocking checks have to be fixed before the month can close; only Inventory debt settled can be closed over, and only with the permission for it and a written reason — see blocking checks and warnings
PendingThe check has not been run for this month yet
SkippedThe check does not apply to this month
OpenA manual item nobody has ticked
DoneA manual item somebody ticked

Five things about this block catch people out:

  • The five categories are not in the workbook. On screen the checklist is grouped under Data completeness, Sync & reconciliation, Review, Sign-off and Custom. The workbook lists the items in that same order but writes no category headings, so the groups are implied rather than labelled.
  • Neither is the severity chip. The Blocking chip beside a check on screen has no column of its own here — a blocking check that failed shows as Fail, and a warning-level one shows as Warn.
  • Closing over a check is not the same as acknowledging one, and the workbook only records the second. A Warn or an unticked manual item that somebody ticked in the close dialog reads Yes under Acknowledged. Inventory debt settled closed over with a written reason stays Fail with Acknowledged blank, because a blocking failure is never acknowledged — it is overridden, and the reason is kept in the audit trail rather than in the pack. Don't read that blank as nobody having signed for it.
  • Completed by and Completed at are only ever filled for manual items. Automated checks leave both blank however they came out, because nobody ticked them. Unticking a manual item clears both again.
  • A month nobody has started a close on has no checklist block at all. Exporting such a month records the month so the pack has something to describe, but it does not start the close, so no checklist has been saved yet — the cover ends after the PRELIMINARY row. The live preview you can see on screen is not carried into the file. To get the checklist into the pack, start the close first.

The heading block on every report sheet

Each of the nine report sheets opens with a short block before any data. The first two rows are always there; the rest appear only when they apply.

  1. The report name, with As at close or Live beside it. This is the single most important cell in the pack.
  2. Generated at, with the time the figures were produced.
  3. A warning row, when one applies — PRELIMINARY, SNAPSHOT MISSING, or REPORT UNAVAILABLE.
  4. A Note row, when the report has an explanation for being empty.
  5. A blank spacer row.

Then the table: a row of column headings, one row per line of the report, a blank row, the word Totals, and the report's headline figures as label-and-value pairs.

As at close versus Live

Explain this one line before you hand a pack to anybody.

  • As at close means the figure was frozen at the moment the month was closed. It is the month's number of record, and re-exporting the same closed month tomorrow gives you the same figure.
  • Live means the figure was calculated when the export ran. It is honest about the books as they stood at that instant, and it can be different the next time you export.

Every sheet in a pack for an open month reads Live. Every sheet in a pack for a cleanly closed month reads As at close. A mixture is possible and is worth looking into — it means a closed month is missing one of its saved reports.

A reopened month is back to Live on every sheet, and its cover carries the PRELIMINARY row again. The snapshots taken at the earlier close are kept, and the report cards on screen mark them Superseded, but the pack does not export them — what you get is the books as they stand now. Close the month again to make a pack the month's numbers of record.

The warning rows

RowText in the second cellWhat it tells you
PRELIMINARYPeriod is not closed — figures may still change.The month is still open or in review. Draft figures.
SNAPSHOT MISSINGNo saved close snapshot — these are live figures, NOT the authoritative close numbers.The month is closed but this report was not saved with it. The numbers below are a fresh calculation, not what was signed off.
REPORT UNAVAILABLEThe reason SKU.io recorded at the time.This report could not be produced, so the sheet holds no figures.

SNAPSHOT MISSING is an integrity gap, not a formatting quirk — you can no longer prove what that report said when the month was signed off. The same condition shows on screen and in Verify. The way back to a complete pack is to reopen the month and close it again; see reopen a closed month.

REPORT UNAVAILABLE means a report depended on setup that was not in place. One unavailable report never stops the other eight, and never stops a close — the reason travels with the sheet so you can act on it.

The Note row

A report that is legitimately empty says why, in a Note row:

NoteAppears on
No accounting connectionReconciliation Summary, Trial Balance Reconciliation and Sync Category Reconciliation, when no accounting provider is connected
No inventory dataInventory Valuation, when there is no stock to value
No COGS activityCOGS, when the month has no sales

These are answers, not failures. A business that does not use SKU.io for inventory gets an empty Inventory Valuation every month, and that is correct.

The note is a workbook-only line. Open the same empty report on screen and it says No rows for this period — the wording that tells you why it is empty exists in the exported file and nowhere else. So the workbook is the better artefact to send to someone who was not part of the close, and if you are talking a colleague through an empty report on screen, the explanation has to come from you.

What an empty sheet looks like

  • With no rows, no column headings are written either. The headings come from the data, so a report with nothing in it has a heading block, possibly a note, and then the Totals block — no table at all. Don't read the missing headings as a broken export.
  • The Totals block usually survives an empty table, but its figures are nil and a nil is written as an empty cell. An empty COGS sheet ends with the word Totals, then Total Cogs with nothing beside it. The same report on screen shows Total Cogs 0.00; the blank in the sheet means the same thing.
  • An unavailable report has no Totals block either, because it produced no figures at all. Its sheet is the heading block and the reason, and nothing else.

How timestamps are written

Every time in the workbook is written the same way — the cover's Generated at, Closed at and Completed at, and the Generated at at the top of each report sheet. Each is the date and time in your app's timezone, followed by the name of that timezone, so whoever opens the file next can tell what the clock refers to:

2026-09-12 18:40:20 UTC

On a business whose app timezone is America/New_York, that last word is America/New_York instead. Read the suffix rather than assuming — a bare 18:40:20 in a file that has travelled by email is exactly the ambiguity the label is there to remove.

Because they are already converted, the times match what the close screen showed you — the screen writes the same moments in your own date format, so 09/12/2026, 13:57:23 on the Closed by line and 2026-09-12 13:57:23 UTC on the cover are the same instant written two ways. They are text rather than date cells, so convert the column before doing date arithmetic with them. For why the timezone matters to a month's figures rather than only to its timestamps, see month boundaries and timezones.

Text that begins with an unusual character

Open the workbook and you may find a value that looks left-padded by one space. It is, and it is meant to be.

Any text cell whose first character is =, +, -, @, a tab or a carriage return gets a single leading space added. Spreadsheet applications treat all of those as the start of a live formula, and the pack carries text you named yourself — account names, warehouse names, sales-channel names, connection names, checklist titles and your close notes. A warehouse called -Overflow would otherwise be evaluated instead of displayed the moment somebody opened the file.

What this means in practice:

  • The space is invisible in Excel, Numbers and Google Sheets. You will not see it unless you look at the cell contents.
  • Numbers are untouched. A negative amount is written as a number, not as text, so it keeps its minus sign and stays a number you can sum.
  • Match on trimmed text. If you use a lookup or a comparison against a name you typed elsewhere, trim the cell first — otherwise a padded name will not match.

Next steps

Last verified: