Pricing the job

Sheets — the complete guide

20 min read

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:

LevelWhat it is
FolderOptional. Groups sheets — "Subbies", "2026", "Land purchase". Folders can sit inside folders, up to 5 deep.
SheetThe file. The thing you name: "Payment tracker", "Priced schedule".
TabA worksheet inside the Sheet, along the top. An Excel workbook with four worksheets imports as one Sheet with four tabs.
LineA row. Either a data line (cells you fill in) or a heading (a section title that subtotals the lines under it).
ColumnLeft 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.

SettingWho can read it
Private (default)You and the project's managers.
People who see the moneyAdds anyone who can open the project's Money page — investors, for example.
Whole project teamEveryone 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 pointWhat it is for
Blank sheetNothing. Add your own columns, or paste straight from Excel.
Payments to peopleSubbies, 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 & wagesYour own crew: hours, rate, gross, and (in New Zealand) KiwiSaver at 3% and holiday pay at 8% worked out for you.
ExpensesReceipts and running costs by category, with the GST inside each amount worked out.
Buying a propertyLand or a house: every cost and step from offer to settlement — who, by when, budget against actual.
Variations registerEvery change to the job: who asked, what it costs, approved or not.
Priced scheduleA job priced line by line under the local trade sections — 24 of them in New Zealand, from Preliminaries & General to Contingency & Margin.
Payment claimsProgress claims: claimed to date, less previously claimed, less retention, plus GST, and when the payment schedule is due.
Estimate vs actualOne 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.

StyleTaxCurrencyMeasured toProgress payments
New Zealand (default)GST 15%$NZS 4202 / ANZSMMPayment claims and payment schedules under the Construction Contracts Act 2002
AustraliaGST 10%$ANZSMMProgress claims under the state Security of Payment Acts
United KingdomVAT 20%£RICS NRM2Payment 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

TypeHoldsNotes
TextAny wordsThe safe choice. A code like 0412 keeps its leading zero.
NumberA figureSet the decimal places if you want them fixed.
MoneyAn amountShown with the style's currency sign. A negative reads -$1,200, never $-1,200.
PercentA percentage15 means 15%. In a formula, divide by 100 (the sentence builder does this for you).
DateA dayDay first in New Zealand. Typed as 14/03/2026, 14 Mar 2026 or 2026-03-14.
DropdownOne of a listYou set the options.
Paid mark (status)One of a list, in colourEach option carries a colour; can tint the whole line. Can follow the real payments — see below.
Tick boxYes or nothingSpace toggles it.
FormulaWorked outFrom the other columns of the same line. See Formulas.
Link to…A real record in the projectAn 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:

SentenceExample
Multiply two columnsQty × Rate, Hours × Hourly rate
Add two columnsLabour + Materials
Take one column from anotherEstimate − Actual
What is still owingAmount − Paid, never below zero
A percentage of a columnGST: 15% of Amount
A column plus a percentage on topAmount plus GST, plus a margin, plus waste
A column less a percentageAmount less 5% retention, less a discount
Divide one column by anotherCost 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, inside IF, > < >= <= = <>.
  • 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

ShowsMeans
#NAME?It names a column that is not in this tab.
#DIV/0!It divided by zero or by an empty cell.
#CYCLETwo formulas depend on each other.
#SYNTAXIt 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.

  • 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:
ReferenceThe 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:

  1. Add a link column pointing at a payment (Money page), and switch on several per line — most lines end up with more than one.
  2. On each line, link the Money entries that paid it.
  3. 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 saysWhen
PaidEvery linked entry has been paid.
Part-paidSome have.
UnpaidNone 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

SuggestionWhen
Link these lines to real recordsLines 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 paymentsThere is a payments column and the mark is still typed by hand.
Qty × RateThere 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 / numbersThen it can be added up, sorted and used in a formula. Codes and references are never touched.
Stop adding up this columnA bold total under a rate or a running number is a figure nobody can use.
Your usual columnA 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 headingsThe 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 blockThose 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 typesWorked 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.
FormulasA 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 placesKept. Fills land on the seven-colour palette so they read in dark mode.
Merged cellsA pocket or trade named once and merged down a block is filled down.
Totals rowsDropped, 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:

FormatWhat 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.
CSVThe open tab, plain rows. Text that starts with = + - @ is defused so a spreadsheet cannot run it.
PDFThe 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:

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):

ToolWhat it returns
list_sheetsThe project's folders, sheets and tabs, with ids and row counts. {project_id}
get_sheetA 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_summaryThe 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_suggestionsThe platform's own suggestions for a tab — proposals only, nothing changed. {project_id, tab_id}
find_sheet_rowsLines whose cells contain every word of a query, with their ids. {project_id, tab_id, query}
list_link_targetsEvery record a line could link to, by kind. {project_id, kind} — soq_job, tender, contract, payment, schedule_item

Write (scope write):

ToolWhat it does
create_sheetA new sheet, with tabs, columns and optional first lines. {project_id, name, folder_id?, tabs?, rows?}
import_sheet_csvA whole sheet from CSV text — far cheaper than sending a rows array. {project_id, name, csv, folder_id?}
add_sheet_tabAnother tab. {project_id, sheet_id, name, columns?}
add_sheet_rowsLines, 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_rowsChanges to existing lines by id — cells, heading text, highlight, bold. {project_id, tab_id, rows}
set_sheet_columnsReplaces 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_actualBuilds the estimate-against-actual sheet from the project. {project_id, folder_id?}
delete_sheet_rowsDeletes lines by id. {project_id, tab_id, row_ids}
delete_sheetSoft-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_sheet returns 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_suggestions returns 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 project3 on a free plan, unlimited on paid
Tabs per sheet30
Columns per tab100
Lines per tab10,000
Lines per write1,000
Characters in a cell2,000
Import file12 MB
Folder depth5

Words used on this page

WordMeaning
SheetOne spreadsheet file inside a project.
TabOne worksheet inside a Sheet.
LineA row of data.
HeadingA section title that subtotals the lines under it.
LinkA cell pointing at a real record in the project — always "link to a payment", never a web address.
Paid markA coloured status column; can follow the real payments.
SOQSchedule of Quantities — the project's estimate, and what tenders are cut from.
BOQThe actuals: what the work really cost, from the Money ledger.
Money entryA payment recorded on the project's Money page.
StyleThe local conventions a sheet follows: New Zealand, Australia or United Kingdom.
MCPThe connection an AI assistant uses to read and write QSME on your behalf.

If something looks wrong

What you seeWhat 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 numbersChange 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 outThe 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.