Workbooks

Your Cash Book Should Total Itself

By CashSheet Team··7 min read
Your Cash Book Should Total Itself

The month-end ritual nobody scheduled

Ask a small business how they produce their monthly cash figures and the answer is almost always some version of the same ritual. Open the cash book. Sort by date. Select the rows that belong to March. Copy them into a new tab called March. Sum the columns. Paste the totals into an email.

Nobody decided to work this way. It accumulated. And every step of it is a place where the next month diverges from the last: a different date boundary, a row missed at the edge of the selection, a tab that someone edits after the email went out.

The deeper problem is that this ritual produces a copy. Once March exists as its own tab, there are two records of March, and they will disagree eventually. A cash book should be one list that can be looked at in different ways, never a list that gets duplicated into shapes.

This is a walkthrough of building that — the Cash Book template in CashSheet Workbooks, and specifically the three features that remove the ritual: grouping, saved views, and public links.

What a cash book is, structurally

A cash book is the generalised cash sheet: dated entries with cash in (debits) and cash out (credits), and a net position that carries forward. It sits between counting the till and formal bookkeeping, and plenty of small businesses run their whole cash picture on one. We covered how it relates to the daily cash count and the petty cash log in our explainer on the three cash sheets.

The template gives you a worksheet with typed columns doing specific jobs:

  • Date — a real date column, which is what makes month grouping possible at all.
  • Description — the primary text column naming the entry.
  • Category — a select or relation column, so the values are a closed list rather than five spellings of "supplies".
  • Debit and Credit — currency columns, stored as exact integer cents.
  • Net — a formula column: ={Debit} - {Credit}, computed per row and not typeable-over.
  • Reconciled — a checkbox, which exists purely to be filtered on.

That is the whole schema. Everything below is about looking at it.

Grouping: the monthly total, without the monthly tab

Choose Date in the Group by control and the rows cluster under a band per value. Each band carries summary chips: a row count, plus a live sum for every currency column in that group.

Read that again, because it is the whole article in one sentence. Group a cash book by month and the bands are your monthly totals. No formulas. No subtotal rows. No March tab. The totals are a property of how you are currently looking at the list, so they cannot drift from the list — there is no second copy to drift.

Grouping works on select, text, date, user and checkbox columns, so the same list regroups instantly by category, by who entered it, or by reconciled status. Group by Category and the bands become a spend breakdown. Group by Reconciled and the bands become a work queue with the outstanding amount in the chip.

Filters combine with it, and the order matters: filter first, then group what remains. "This quarter, over $500, grouped by category" is a shortlist with subtotals, assembled in about four clicks and never saved as a file.

Filters that run on the server

The filter panel takes up to five criteria — each one a column, an operator and a value, combined with AND. Operators adapt to the column type: greater-than and less-than for currency, before and after for dates, is and is-not for selects, checked and unchecked for checkboxes.

Two details are worth knowing because they change how you work rather than just what you click.

Filtering happens on the server. The grid is not fetching every row and hiding some in the browser, which is why a filter over a large worksheet stays quick — and why an API request with the same criteria returns exactly the rows you are looking at. What the screen shows and what an integration receives are the same query.

Sorting is display-only. Sorting never rewrites the stored row order, so dropping the sort returns the sheet to its manual arrangement. The trade-off is that manual drag-reordering pauses while a sort or filter is active — there is no stable place to drop a row into a computed order. That is a deliberate limit rather than a missing feature, and knowing it saves a confused minute.

Saved views: the five questions, permanently answered

A view captures the current filters, sort and grouping under a name. Switching views swaps the entire configuration at once.

Most cash books get looked at in about five ways, and they are the same five every month:

  • This month — date filter, grouped by category.
  • Unreconciled — checkbox unchecked, sorted oldest first. The work queue.
  • Over $500 — the entries that need a second pair of eyes.
  • By category, year to date — grouped, for the annual picture.
  • Everything — no filter, because sometimes you just need to look.

Views belong to the worksheet rather than to you, so a colleague opening the sheet sees the same five and does not rebuild them from memory. This is the quiet part of why the copy ritual disappears: the reason people duplicated tabs was to preserve a way of looking at the data. Once a way of looking is itself a saved object, there is nothing left to preserve by copying.

Public links and forms: getting data in and results out

Two more capabilities sit on top of views, and both remove an email from the loop.

A public view link shares a specific filtered view with someone outside the workspace. They see the rows that view shows and nothing else — not the other views, not the columns you filtered out, not the rest of the workbook. The accountant who needs March gets March.

Forms work in the other direction: a public form writes new rows into the worksheet, validated against the same column types. A staff member logging a cash payout does not need an account, a licence, or access to the sheet — they need a link and a phone. The row lands typed and categorised because the form cannot submit anything else.

And because a form submission creates a row, it fires a row-created event, which means automations react to it exactly as they would to a typed entry. That is how "log a payout" turns into "log a payout, flag it if it is over $500, and notify whoever approves those" without anyone opening the sheet.

For the operator: what changes on a Tuesday

If you are the one keeping the book rather than the one reporting on it, the practical differences are smaller and more useful.

You stop maintaining a running-balance cell that someone breaks. You stop being asked "can you send me last month" because last month is a link. And you stop being the only person who knows which tab is current, because there is one sheet and several ways of looking at it.

The month-end you are used to becomes: open the This month view, check the Unreconciled view is empty, send the link. That is not a faster ritual. It is the absence of one.

Start from a real month

The fastest way to judge any of this is to put a real month into it. Import your existing cash book from CSV — the first row is treated as headers and matched to your columns, values are validated by type on the way in, and "$1,234.56" lands as exact cents rather than a string that looks like money.

Then group by date and see whether the bands agree with the totals you emailed. Where they disagree is usually where the copy-paste ritual was quietly losing something.

The Cash Book template is in every workspace at app.cashsheet.com, and views, grouping, forms and public links are included on every plan — including Free. Plans differ in capacity, not capability.