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
.xlsxformat. 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 asclose-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 expect | What you get |
|---|---|
| Column widths sized to the content | Default widths — long account names sit under the next cell until you widen them |
| A frozen or bold header row | A plain row of text like any other |
| Currency formatting | Plain numbers rounded to two decimals: 1234.5, never $1,234.50 |
| Thousands separators | None. A round amount reads 1000 |
| Whole-number counts | Whole numbers, with no decimals |
| Yes/no fields | TRUE where the answer is yes — and an empty cell where it is no. The word FALSE appears nowhere in the workbook |
| Zeros | An empty cell. A balance of nil is written as nothing at all |
| Date cells you can sort chronologically | Timestamps 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.00andfalse. If you sum a column it makes no difference; if you count filled cells, or filter onFALSE, 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
| # | Sheet | What it holds |
|---|---|---|
| 1 | Cover | The month, its status, the sign-off, and the close checklist |
| 2 | Income Statement | The month's revenue, direct costs and expenses, one row per account |
| 3 | Balance Sheet | Assets, liabilities and equity as at the last day of the month |
| 4 | Trial Balance | Opening balance, the month's debits and credits, and the closing balance |
| 5 | Inventory Valuation | Stock value as at the last day of the month, one row per warehouse |
| 6 | COGS | Quantities and cost of goods sold for the month, one row per sales channel |
| 7 | GINR Balance | Goods invoiced not received, as at the last day of the month |
| 8 | Reconciliation Summary | Your totals against the provider's, one row per accounting connection |
| 9 | Trial Balance Reconciliation | Your account balances against the provider's, account by account |
| 10 | Sync Category Reconciliation | Each 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:
| Row | Value |
|---|---|
| Month-End Close Pack | The title, on its own |
| Period | The month as a year and a month number, for example 2026-06 |
| Status | The month's status in the same words the screen uses: Open, In Review, Closing… or Closed |
| Generated at | When this workbook was built |
A closed month then adds its sign-off:
| Row | Value |
|---|---|
| Closed at | When the close finished |
| Closed by | The name of the person who closed it |
| Notes | The 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:
| Column | What it holds |
|---|---|
| Item | The check's name, exactly as the checklist shows it |
| Status | One word — see the table below |
| Acknowledged | Yes when the item was acknowledged at close, otherwise blank |
| Completed by | The name of the person who ticked a manual item |
| Completed at | When they ticked it |
| Status | Means |
|---|---|
| Pass | The check ran and found nothing to fix |
| Warn | The check found something, but it does not stop a close |
| Fail | A 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 |
| Pending | The check has not been run for this month yet |
| Skipped | The check does not apply to this month |
| Open | A manual item nobody has ticked |
| Done | A 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
Yesunder 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.
- The report name, with
As at closeorLivebeside it. This is the single most important cell in the pack. - Generated at, with the time the figures were produced.
- A warning row, when one applies —
PRELIMINARY,SNAPSHOT MISSING, orREPORT UNAVAILABLE. - A
Noterow, when the report has an explanation for being empty. - 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
| Row | Text in the second cell | What it tells you |
|---|---|---|
| PRELIMINARY | Period is not closed — figures may still change. | The month is still open or in review. Draft figures. |
| SNAPSHOT MISSING | No 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 UNAVAILABLE | The 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:
| Note | Appears on |
|---|---|
| No accounting connection | Reconciliation Summary, Trial Balance Reconciliation and Sync Category Reconciliation, when no accounting provider is connected |
| No inventory data | Inventory Valuation, when there is no stock to value |
| No COGS activity | COGS, 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
Totalsblock — no table at all. Don't read the missing headings as a broken export. - The
Totalsblock 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 wordTotals, thenTotal Cogswith nothing beside it. The same report on screen showsTotal Cogs 0.00; the blank in the sheet means the same thing. - An unavailable report has no
Totalsblock 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
- Close pack: columns on every report sheet — what each column on each report sheet means.
- Export the close pack — produce a pack and find the download.
- Read the month's reports — the same nine reports, on screen.
- Frozen figures, staleness and drift — why As at close and Live are different answers.