A full invoice engine tied to the project record. Each invoice carries a header (title, issued/due dates, terms, tax %, notes, payment instructions), a structured Bill To block, free-form line items, and live totals. It has a real lifecycle — draft, sent, viewed, partial, paid, overdue, void — and the customer sees it through a branded token link, not a PDF attachment.
Also called: invoices · billing the customer · send an invoice · construction invoicing
The line items come off the estimate you already priced
Every row can be inserted from the attached estimate or from an approved change order in one click, and each row remembers which one it came from. Type a row by hand when you need to, or tag one as an adjustment with a negative price to credit something back. The alternative is reading numbers off one screen and typing them into an accounting package, which is how the wrong figure reaches the customer.
It carries your logo and shows only the sections you want the customer to see
Logo, company name, address, phone, email, website and brand colour are set once in My Business and print on every invoice. Twenty sections switch on or off per invoice — the Bill To block, the job site address, the building specs, the full payment-schedule breakdown, payment instructions, notes — and the combination you use most saves as the default for new ones. A lender draw can carry the site address and the loan details while your everyday invoice shows neither.
The legal Bill To block fills itself from the form the customer already signed
Legal name, mailing address, cosigner, lender, loan number and source of funds come off the customer's completed intake form and land on the invoice. You expand the block to check it, not to type it. Clear it when the payer is an LLC or a lender rather than the person who filled the form, or re-pull it if their details changed.
You can see whether they opened it, and overdue is never stale
The invoice moves through draft, sent, viewed, partial and paid, and viewed is stamped the first time the customer opens their link. Overdue is not a stored flag waiting on a nightly job to flip it — it is worked out from the due date and the balance at the moment the screen draws. Chasing “sent but never opened” is a different phone call from chasing “opened and ignored”.
A change order on the invoice is not taxed a second time
A change order runs its own subtotal through markup and then tax, so its total arrives at the invoice with tax already in it. The invoice adds that figure after its own tax rather than taxing it again. The amount on the bill is the amount on the change order the customer signed, with nothing to back out by hand.
What you approve in preview is literally what the customer opens
Preview builds the customer-facing document out of the editor as it stands, unsaved, and renders it through the same viewer the customer gets — so a wrong section toggle is caught before the invoice is locked and sent. Print or save it as a PDF from the list row, from inside the invoice, or from the customer's own page, and it comes out the same each time.
One unbroken number sequence, so the books reconcile
Numbers run INV-2026-0001, INV-2026-0002 and keep counting; the year is a label, not a reset. Voiding one does not release its number for reuse. A gap in a sequence is something an accountant expects and can chase; the same number appearing twice is what makes a year unauditable.
- 1Open a project's Billing tile (or the global Invoicing nav) and hit New Invoice.
- 2The editor pre-fills tax %, terms and payment instructions from the tenant's invoice_settings, and titles the invoice from the project.
- 3Bill To auto-populates from the customer's signed intake form; line items come from the attached estimate, from approved change orders, or are typed by hand.
- 4Live totals compute with the same pure function the server uses (computeInvoiceTotals), so preview and saved row never disagree.
- 5Save Draft keeps it editable; Send to Customer locks it, stamps sent_at, and activates the portal link.
Billing meant retyping an estimate into an accounting package line by line, and the number that reached the customer was whatever survived the retype — not necessarily what they had agreed to. Nothing in the accounting package knew which project, which estimate or which approved change orders sat behind the figure, so a disputed invoice turned into a paper hunt. Invoices are now built on the job itself: line items fold in from the estimate or from approved change orders, branding comes from the same place the customer portal gets it, and the customer opens a branded document instead of a PDF attachment.
- Estimate numbers had to be manually re-entered into an accounting package to bill.
- No single place showed which invoices on a job were outstanding.
- Invoices carried no branding and no link back to the project or estimate.
See it on your own jobs
Twenty minutes, your numbers, no slide deck. We’ll build one of your real buildings in front of you and send you the estimate link at the end — yours to keep either way.
or keep browsing features →