Sheets — the complete guide
Sheets are your own spreadsheets, kept inside the project they belong to. A payment run for your subbies, the wages of your own crew, the costs of buying a section, a variations register, a priced schedule that arrived as an Excel file — anything you would otherwise keep in a spreadsheet on your desktop.
What makes them worth having here rather than in Excel: a line can point at a real record in the project — a payment on the Money page, a contract, an SOQ job, a schedule task — and then shows that record's live status and amount. A connected AI assistant can read and write them over MCP. And the sheet suggests its own next step, which you either accept or ignore.
This page covers everything: how a sheet is built, every column type, formulas, importing, exporting, linking, suggestions, the New Zealand / Australia / United Kingdom styles, how Sheets meets the SOQ, and the full list of MCP tools for AI assistants.
The one rule that never bends: a sheet only RECORDS. Marking a line paid in a sheet does not move money, pay anybody, send a tender, accept a bid or issue a contract. Linking a line to a payment does not change that payment. Nothing on this page can spend a dollar.
Where Sheets sit
Sidebar → Sheets. Sheets belong to a project, so pick the project first; the sidebar entry shows that project's sheets.
The shape is Excel's, so there is nothing new to learn:
| Level | What it is |
|---|---|
| Folder | Optional. Groups sheets — "Subbies", "2026", "Land purchase". Folders can sit inside folders, up to 5 deep. |
| Sheet | The file. The thing you name: "Payment tracker", "Priced schedule". |
| Tab | A worksheet inside the Sheet, along the top. An Excel workbook with four worksheets imports as one Sheet with four tabs. |
| Line | A row. Either a data line (cells you fill in) or a heading (a section title that subtotals the lines under it). |
| Column | Left to right, each with a type (text, money, date, formula, link…). |
The list of sheets on the left folds away with the button beside the sheet's name, so a wide sheet gets the whole window. Your choice is remembered on that device.
Who can see a sheet
Every sheet has a sharing setting, shown as a button at the top. Writing is always the project owner and its managers, whatever the setting.
| Setting | Who can read it |
|---|---|
| Private (default) | You and the project's managers. |
| People who see the money | Adds anyone who can open the project's Money page — investors, for example. |
| Whole project team | Everyone on the project. This includes people invited to tender, so do not use it for margin workings. |
Money is masked per person, not per sheet: someone who may not see the project's money sees a linked contract's name but not its value, in the cells, in the totals and in the picker.
How many you get
Free plans get 3 sheets per project. Paid plans are unlimited. The counter under the list says "2 of 3" before you hit the wall. Deleting a sheet frees a slot — it goes to Deleted (see History and Deleted), and restoring it takes the slot back.
Starting a sheet
New sheet offers a starting point. Every one of them is only a set of columns: rename, delete or add to them the moment it opens. Nothing here is fixed.
| Starting point | What it is for |
|---|---|
| Blank sheet | Nothing. Add your own columns, or paste straight from Excel. |
| Payments to people | Subbies, suppliers, anyone you pay: who, what for, invoice no., amount, due date — with a Payments link column and a Paid mark that follows it. |
| Staff & wages | Your own crew: hours, rate, gross, and (in New Zealand) KiwiSaver at 3% and holiday pay at 8% worked out for you. |
| Expenses | Receipts and running costs by category, with the GST inside each amount worked out. |
| Buying a property | Land or a house: every cost and step from offer to settlement — who, by when, budget against actual. |
| Variations register | Every change to the job: who asked, what it costs, approved or not. |
| Priced schedule | A job priced line by line under the local trade sections — 24 of them in New Zealand, from Preliminaries & General to Contingency & Margin. |
| Payment claims | Progress claims: claimed to date, less previously claimed, less retention, plus GST, and when the payment schedule is due. |
| Estimate vs actual | One line per SOQ job — what you allowed, what is committed, what has been paid. Filled in from the project itself. |
You can also start from a file: Import (see Importing), or drag a spreadsheet anywhere onto the Sheets page.
Style — New Zealand by default
QSME is built for New Zealand, so every sheet is New Zealand style unless you say otherwise. The style is shown beside the sheet's name and can be changed there.
| Style | Tax | Currency | Measured to | Progress payments |
|---|---|---|---|---|
| New Zealand (default) | GST 15% | $ | NZS 4202 / ANZSMM | Payment claims and payment schedules under the Construction Contracts Act 2002 |
| Australia | GST 10% | $ | ANZSMM | Progress claims under the state Security of Payment Acts |
| United Kingdom | VAT 20% | £ | RICS NRM2 | Payment applications, payment notices and pay-less notices under the Construction Act |
The style decides what new things start as: the tax a "plus GST" column uses, the percentage a formula starts at, the currency sign, the trade sections and units a priced schedule opens with, the on-costs on a wages sheet, and what the AI suggester is told about local practice. It is set per sheet, so a job you are pricing for a client in Sydney can be Australian while everything else stays New Zealand.
Changing the style never changes a figure or a formula already in the sheet. It only changes what happens next.
Columns
Columns at the top right opens the panel. Add as many as you need — up to 100 per tab. Each column has a name and a type, and the type decides what a cell accepts and how it is shown.
Every column type
| Type | Holds | Notes |
|---|---|---|
| Text | Any words | The safe choice. A code like 0412 keeps its leading zero. |
| Number | A figure | Set the decimal places if you want them fixed. |
| Money | An amount | Shown with the style's currency sign. A negative reads -$1,200, never $-1,200. |
| Percent | A percentage | 15 means 15%. In a formula, divide by 100 (the sentence builder does this for you). |
| Date | A day | Day first in New Zealand. Typed as 14/03/2026, 14 Mar 2026 or 2026-03-14. |
| Dropdown | One of a list | You set the options. |
| Paid mark (status) | One of a list, in colour | Each option carries a colour; can tint the whole line. Can follow the real payments — see below. |
| Tick box | Yes or nothing | Space toggles it. |
| Formula | Worked out | From the other columns of the same line. See Formulas. |
| Link to… | A real record in the project | An SOQ job, tender, contract, payment or schedule task. See Linking. |
What you can set on a column
- Name — used by formulas as
[Name], so it can have spaces and a%in it. - Decimal places — money, numbers, percentages and formulas.
- Width — drag the right edge of the heading, or set it in the panel.
- Alignment — left, centre or right; figures sit right unless you say otherwise.
- Wrap text — long descriptions run onto more lines instead of being cut short. The line grows as tall as it needs.
- Bottom row — sum, average, count, smallest, largest, or nothing. Money and numbers add up by default; percentages do not, because adding percentages is almost always wrong.
- Colour the whole line (paid marks) — an unpaid line tints red across the sheet.
- Several per line (links) — one cell holds several records and their amounts add up.
- Follows the payments in… (paid marks) — see below.
Quick add
The panel also offers ready-made groups, in the sheet's style: Paid / Unpaid, Amount + GST + Total, Estimate vs actual, Supplier + Invoice no., Due date.
Lines
Click a cell and type. Enter moves down, Tab moves across, arrows move about, Esc cancels, Delete empties a cell. Typing over a cell replaces what is in it, the way a spreadsheet does.
Press the number at the left of any line for its menu:
- Add a line above / below, Add a heading above / below
- Make a copy below — cells, highlight and all
- Move up / Move down
- Turn into a heading — and back again. A line turned into a heading keeps its cells, unseen; turning it back brings them straight back.
- Highlight this line — seven colours, or none
- Make the line bold
- Delete
Every row is numbered, headings included, the way a spreadsheet numbers them.
Headings and subtotals
A heading is a section title. Every money and number column subtotals the lines under it, on the heading row itself. Headings never count as lines, so nothing is ever counted twice.
How it looks
The strip above the sheet changes the cell you are on: highlight it (or the whole line), bold it, align the column, wrap the column. Colours are a fixed set of seven so they stay readable in dark mode, and they survive export to Excel and PDF and re-import.
Highlights mean whatever you want them to mean — "still to price", "in dispute", "check this". Nothing is worked out from them.
Notes above the sheet
Above the grid, Add notes above this sheet keeps the things that belong with the sheet but are not lines in it: the project, the address, who prepared it, "rates exclude GST". An imported file's title block lands here automatically. Notes print on the PDF and go out with the Excel file.
The bottom row
The foot of the sheet adds up every column that asked for it, and — when the sheet has both a money column and a paid mark — says how much sits behind each status: "Amount by paid?: Paid $9,200 (1) · Unpaid $2,154 (1)".
Paste from Excel
Copy a block in Excel, click the top-left cell here, and paste. Existing lines are filled, and new lines are added for the rest. A value that does not fit its column's type is skipped and counted, never forced in.
Formulas
A formula column works itself out on every line, from the other columns of the same line.
The plain-words way
The formula box opens with a question — What should this column work out? — and a list of answers:
| Sentence | Example |
|---|---|
| Multiply two columns | Qty × Rate, Hours × Hourly rate |
| Add two columns | Labour + Materials |
| Take one column from another | Estimate − Actual |
| What is still owing | Amount − Paid, never below zero |
| A percentage of a column | GST: 15% of Amount |
| A column plus a percentage on top | Amount plus GST, plus a margin, plus waste |
| A column less a percentage | Amount less 5% retention, less a discount |
| Divide one column by another | Cost per m², share of the total |
Fill the blanks from the lists and the formula writes itself. It cannot come out broken. Only columns that hold a number are offered, because a text column reads as 0 in a sum.
Writing one by hand
Underneath, Build it by hand opens the typed formula and the buttons that insert into it. A function arrives with its closing bracket and the cursor inside it; two columns clicked in a row get a × between them.
- Refer to a column by its name in square brackets:
[Qty] * [Rate]. - Percentages:
15%means 0.15, so[Amount] * 15%is the GST. A percent column holds 15 for 15%, so divide it:[Amount] * [Waste %] / 100. - Operators:
+ - * / ^ ( )and, insideIF,> < >= <= = <>. - Functions:
ROUND ROUNDUP ROUNDDOWN CEILING FLOOR ABS SQRT POW MIN MAX SUM AVERAGE IF AND OR NOT.
ROUND([Amount] * (1 - [Retention %] / 100), 2)
IF([Paid] >= [Amount], 0, [Amount] - [Paid])
MAX([Claimed to date] - [Previously claimed], 0)A formula is checked as you type, and what is wrong is said in words — "3 brackets are still open — add ))) at the end", "there is no column called Gst" — with a worked example of what it produces.
When a formula cannot work
| Shows | Means |
|---|---|
#NAME? | It names a column that is not in this tab. |
#DIV/0! | It divided by zero or by an empty cell. |
#CYCLE | Two formulas depend on each other. |
#SYNTAX | It does not read as a calculation. |
#VALUE! | The answer is not a number. |
One broken line never stops the rest of the sheet.
Totals and formulas
The bottom row adds up the lines. It never re-runs a formula on a subtotal, so a "% complete" column at the foot shows the sum of the lines' percentages only if you asked it to — which is why percentages default to no total at all.
Linking a line to a real record
This is what a sheet in QSME can do that a spreadsheet cannot.
Add a column of type Link to… and choose what it points at: an SOQ job, a tender, a contract, a payment (Money page) or a schedule task. An empty cell then reads "Link to a payment…". Click it and a picker lists every record of that kind in the project, searchable.
What a link gives you
- The cell shows the record live: its name, and its status and amount as they are now.
- A removed record says "Removed" rather than quietly disappearing.
- Formulas can use its numbers. For a column named
Contract:
| Reference | The number |
|---|---|
[Contract] | Its amount. |
[Contract.amount] | The same — clearer to read. |
[Contract.paid] | How much of it has actually been paid (payments). |
[Contract.count] | How many records the cell holds. |
- Several per line: switch it on and one cell holds several records; the amounts add up. A line paid in three instalments points at all three.
- A link never changes the record. It is a read.
- A record from another project is refused.
Payments: the one people ask about
To track what you have really paid:
- Add a link column pointing at a payment (Money page), and switch on several per line — most lines end up with more than one.
- On each line, link the Money entries that paid it.
- Add a paid mark column and set Follows the payments in "Payments".
The paid mark now works itself out and changes when the payments do:
| It says | When |
|---|---|
| Paid | Every linked entry has been paid. |
| Part-paid | Some have. |
| Unpaid | None have. |
A line with nothing linked keeps whatever you typed, so you can mark things by hand and let the linked ones look after themselves. Switch on colour the whole line and an unpaid line tints red across the sheet.
Then [Payments.paid] is what you have actually paid, and MAX([Amount] - [Payments.paid], 0) is what is still owing. The foot of the sheet says how much sits in each state.
The Payments starting point does all of this for you.
If the picker says there is nothing to link to, that is not a fault: the project has no records of that kind yet. It offers a button to the page where they are made — the Money page for payments, Contracts for contracts. Until then the line works perfectly well without a link: type the amount and set the paid mark by hand.
Suggestions
Suggest at the top of a sheet offers the next sensible step. It is worked out from this sheet, the real records in this project, and the way you lay out your other sheets — never from anybody else's.
Every suggestion is a proposal. It says exactly what it would change; you press Apply or Not for this sheet. A "no" is remembered on that sheet. Applying one goes through the ordinary save, so it lands in the history and can be undone like anything else.
What it offers, free and instantly
| Suggestion | When |
|---|---|
| Link these lines to real records | Lines read like a payment, contract, SOQ job, task or tender that already exists. Each line is tickable on its own; a match on words and amount is marked sure, words alone says "check". Two records that fit equally well are never guessed between. |
| A paid mark that follows the payments | There is a payments column and the mark is still typed by hand. |
| Qty × Rate | There is a quantity and a rate and nothing multiplying them — or an amount column that already equals the product on every line. |
| This column is text but holds dates / money / numbers | Then it can be added up, sorted and used in a formula. Codes and references are never touched. |
| Stop adding up this column | A bold total under a rate or a running number is a figure nobody can use. |
| Your usual column | A column you keep in your other sheets laid out like this one — in your wording. |
More ideas from the AI
The button at the foot of the panel asks the model. It costs one AI credit, refunded if the model cannot be reached; the free suggestions above are unaffected.
What it is allowed to do is enforced in code, not asked of it politely:
- It may only propose columns — add one, change one's type, write a formula. It has no way to write a value into a line, so it cannot invent a rate, a quantity or an amount.
- Every formula it writes is parsed and run by the real engine before you see it. One that names a column that is not there is dropped, not shown.
- What it is told is this sheet's columns, a sample of its lines, your own headings, and the local practice of the sheet's style. Nothing about any other person's work.
Importing a spreadsheet
Import, or drag a file anywhere onto the Sheets page. .xlsx, .xlsm or .csv, up to 12 MB. Old .xls files are not supported — open them in Excel and use Save As → Excel Workbook.
Every worksheet becomes a tab and every column is kept. Nothing is written until you press Import.
What comes across
| The headings | The widest row of words near the top — not blindly the first row. A title and a block of "Project: … / Location: …" above the headings is recognised for what it is. |
| The title block | Those lines above the headings are kept as the tab's notes, not lost and not mistaken for data. Footnotes under the table join them. |
| Column types | Worked out from the values: dates (day first in New Zealand, unless the column proves itself American), money, percentages, Yes/No, and a handful of repeated words under a "Status" heading becomes a paid mark. |
| Formulas | A column that is one formula filled down — Amount = Qty × Rate — arrives as a working formula, not frozen numbers. See below. |
| Colours, bold, alignment, wrapping, widths, decimal places | Kept. Fills land on the seven-colour palette so they read in dark mode. |
| Merged cells | A pocket or trade named once and merged down a block is filled down. |
| Totals rows | Dropped, with a note — the sheet adds up for itself. A heading that carries its own subtotal stays a heading. |
Formulas, and why you can trust them
A translated formula is proved before it is kept: it is run through the real engine on every line and must land on the figure Excel itself stored. One line out — a figure someone typed over the formula, a lookup into another sheet, a running balance — and the column stays as the numbers it was.
An import never changes a figure. The preview says which columns kept their formulas, and one dropdown keeps the figures instead.
A file written by a program or an AI, which holds formulas but no worked-out values, is calculated on the way in rather than arriving empty.
Checking it before it lands
The preview shows every tab and column, what type each was read as, and sample values. You can:
- switch a tab off,
- rename the sheet and its tabs,
- correct "Headings are on row N", which re-reads the file,
- change any column's type, or leave it out.
Limits
100 columns and 10,000 lines per tab, 30 tabs per Sheet, 12 MB per file. Anything past that is left out and said so plainly.
No file handy?
The Import box links two examples you can download and import: a priced schedule (title block, headings with subtotals, formulas, a highlighted line) and a payments tracker.
Exporting
Export offers three:
| Format | What you get |
|---|---|
| Excel (.xlsx) | Every tab. Formula columns go out as real Excel formulas with their figures beside them, so the file recalculates in Excel — and imports straight back here as formulas. Highlights, bold, alignment, widths and the notes all travel. |
| CSV | The open tab, plain rows. Text that starts with = + - @ is defused so a spreadsheet cannot run it. |
| The open tab, printable. Widens from A4 to A3 to A2 to fit your columns; prints the notes, the highlights and the status breakdown. |
The Excel file round-trips: take it out, work on it, bring it back through Import and it comes back as it left — including the "Total" row, which is recognised and dropped rather than imported as a line.
Sheets and the SOQ
The SOQ (Schedule of Quantities) is the project's estimate, and it is what the rest of QSME runs on: tenders are cut from it, the schedule is seeded from it, contracts point at its jobs. The SOQ is the place to build an SOQ — start it there, from a template, from your drawings, or by importing a file.
Sheets meet it in three places:
1. Link a sheet line to an SOQ job
A link column pointing at SOQ jobs puts the job's live estimate on the line, and [Job.amount] into your formulas. This is how a free-form sheet compares itself with the estimate.
2. Estimate vs actual
One click builds a sheet with a line per SOQ job: Estimate live from the SOQ, Committed from the contracts that cover that job, Paid from the Money entries you link, and the variance by formula, section per pocket. It is one of the starting points under New sheet.
3. Build SOQ — for a priced schedule that arrived as a spreadsheet
Build SOQ on a tab re-says that tab in the SOQ's words and hands it to the SOQ's own import: the Sheet's name becomes a pocket, every heading becomes a job, and every priced line becomes an item with its unit, quantity and rate. An amount with no quantity is treated as one item at that price. The tab's other columns are offered as extra columns.
It goes through the SOQ import you already know — you see the preview, choose which extra columns to keep, and your plan limits apply. The sheet itself is not changed.
This exists for one situation: your priced schedule came to you as an Excel file, it is now a sheet, and you want to tender it. If you are building an estimate from scratch, start in the SOQ instead.
History, Deleted, and getting things back
History on a sheet lists every change: what happened, when, who did it, and which door it came through — the web app, an import, or a connected AI app. It is append-only: it can be read, never edited.
Deleting a sheet is a soft delete. Deleted under the list brings it back, whole. Deleting a line is not: the line's contents are kept in the history entry, which is the only copy.
A sheet open on your screen picks up what someone else — or a connected AI app — wrote to it within about half a minute, without losing what you are typing.
For AI assistants (MCP)
QSME is an MCP server: connect Claude, ChatGPT, Claude Code, Codex or Cursor at qsme.co.nz/connect. An assistant works as you, sees only what you can see, and is bound by the same rules.
What an assistant can never do: move money, publish a tender, accept a bid, award work, or issue a contract. Those doors are not wired to MCP at all. Marking a line paid in a sheet records nothing but the mark.
The Sheets tools
Read (scope read):
| Tool | What it returns |
|---|---|
list_sheets | The project's folders, sheets and tabs, with ids and row counts. {project_id} |
get_sheet | A tab: its columns and its lines, worked out — formulas evaluated, links resolved — keyed by column name and id. Paged. {project_id, tab_id} |
get_sheet_summary | The bottom line without reading every row: each column's total, and the money broken down by status ("how much is still unpaid?"). {project_id, tab_id} |
get_sheet_suggestions | The platform's own suggestions for a tab — proposals only, nothing changed. {project_id, tab_id} |
find_sheet_rows | Lines whose cells contain every word of a query, with their ids. {project_id, tab_id, query} |
list_link_targets | Every record a line could link to, by kind. {project_id, kind} — soq_job, tender, contract, payment, schedule_item |
Write (scope write):
| Tool | What it does |
|---|---|
create_sheet | A new sheet, with tabs, columns and optional first lines. {project_id, name, folder_id?, tabs?, rows?} |
import_sheet_csv | A whole sheet from CSV text — far cheaper than sending a rows array. {project_id, name, csv, folder_id?} |
add_sheet_tab | Another tab. {project_id, sheet_id, name, columns?} |
add_sheet_rows | Lines, in order, at the end or after a given line. Cells are keyed by column heading. {project_id, tab_id, rows, after_row_id?} |
update_sheet_rows | Changes to existing lines by id — cells, heading text, highlight, bold. {project_id, tab_id, rows} |
set_sheet_columns | Replaces the tab's columns. Takes the rev from get_sheet; a stale one is refused with what to do next. {project_id, tab_id, columns, rev} |
create_estimate_vs_actual | Builds the estimate-against-actual sheet from the project. {project_id, folder_id?} |
delete_sheet_rows | Deletes lines by id. {project_id, tab_id, row_ids} |
delete_sheet | Soft-deletes a sheet; it goes to Deleted. {project_id, sheet_id} |
Sheets also appear in the general search and fetch tools as sheet:<project>/<sheet>.
Notes for whoever is writing the prompt
- Cells are keyed by column heading or by column id. A heading that is not in the tab is refused by name, so the assistant learns rather than silently writing nothing.
- Values are coerced, not guessed. "1,250.00" into a money column is 1250; a word into a money column is refused with the reason.
get_sheetreturns worked-out values — the formula engine runs on the server, so an assistant never has to evaluate anything itself.- A highlight is readable and writable (
highlight,bold), because "the yellow ones are still to price" is real information. Changing one leaves the rest of the line's look alone. - Ask before applying a suggestion.
get_sheet_suggestionsreturns proposals with a note saying so. - A public project does not leak its sheets. Sheets are never readable just because a project is public.
- Deep link a person straight to a sheet:
https://www.qsme.co.nz/sheets?project=<project id>&sheet=<sheet id>.
Limits, at a glance
| Sheets per project | 3 on a free plan, unlimited on paid |
| Tabs per sheet | 30 |
| Columns per tab | 100 |
| Lines per tab | 10,000 |
| Lines per write | 1,000 |
| Characters in a cell | 2,000 |
| Import file | 12 MB |
| Folder depth | 5 |
Words used on this page
| Word | Meaning |
|---|---|
| Sheet | One spreadsheet file inside a project. |
| Tab | One worksheet inside a Sheet. |
| Line | A row of data. |
| Heading | A section title that subtotals the lines under it. |
| Link | A cell pointing at a real record in the project — always "link to a payment", never a web address. |
| Paid mark | A coloured status column; can follow the real payments. |
| SOQ | Schedule of Quantities — the project's estimate, and what tenders are cut from. |
| BOQ | The actuals: what the work really cost, from the Money ledger. |
| Money entry | A payment recorded on the project's Money page. |
| Style | The local conventions a sheet follows: New Zealand, Australia or United Kingdom. |
| MCP | The connection an AI assistant uses to read and write QSME on your behalf. |
If something looks wrong
| What you see | What it means |
|---|---|
| "Nothing has been recorded on this project's Money page yet" | There is nothing of that kind to link to. The button in the box goes to the page where they are made. |
| A column came in as text and you wanted numbers | Change its type in the Columns panel, or accept the suggestion that offers it. Values that do not fit are left empty, never mangled. |
| An imported date looks a month out | The column proved itself month-first (an American file). Open Columns and check; the import warns when it had to decide. |
| "Someone changed this sheet while you were editing" | Two people (or an AI app) changed the columns at once. Their version is loaded — check it and make your change again. |
A formula shows #NAME? | It names a column that is not in this tab — often one that was renamed or deleted. |
The bottom row shows a * | Some lines in that column could not be worked out, so the total is of the rest. |
Still stuck? hello@qsme.co.nz, or +64 27 338 8500.