Skip to content

Sales Invoices

Sales invoices let you bill customers for work done. You can generate invoices from work orders or create standalone invoices. The sales invoices list shows all invoices with filters for status, type and date range. You can record payments, download PDFs, email invoices to customers, and bulk-settle multiple invoices at once.

  • You are signed in to Torqueflow.
  • You have the finance.sales.view permission to see invoices.
  • You have the finance.sales.create permission to create or edit invoices.
  • You have the finance.payments.record permission to record payments.
  1. Click Finance in the main navigation.
  2. Click Sales Invoices (or navigate to /finance/sales).
  3. The page title reads Sales Invoices with the subtitle “Invoice customers and track payment status”.
  4. The list shows up to 50 invoices per page with pagination controls at the bottom.

The table columns are:

ColumnDescription
Invoice #Auto-generated invoice number. A green cloud icon appears if synced to GoHighLevel. Sortable.
CustomerCustomer first and last name. Sortable.
WO / VehicleIf linked to a work order: shows WO reference code and vehicle registration. Otherwise shows a “Standalone” badge. Not sortable.
DateInvoice date in dd/MM/yyyy format. Sortable.
Due DatePayment due date. Shown in red if overdue. Sortable.
GrossTotal gross amount in GBP. Sortable.
OutstandingRemaining unpaid amount. Shows a dash when fully paid. Not sortable.
StatusPayment status badge: Unpaid, Part Paid, Paid, or Overdue. Sortable.
TypeInvoice type badge: Quote (green), Direct (blue), or Hybrid (purple). Not sortable.
ActionsThree-dot menu with View, Record Payment and Mark as Paid options. Both payment options open the Record Payment dialog on the invoice page.

Overdue invoices are highlighted with a light red background row.

  1. Use the Search invoices… box above the table to search by invoice number, customer name, or work order reference. Search is debounced at 300ms.
  2. Use the Status filter bar to toggle which statuses are shown. Options: Unpaid, Overdue, Part Paid, Paid. Click All to show all statuses or None to clear. Your preference is saved in your browser.
  3. Use the Type dropdown to filter by All, Work Order, or Standalone.
  4. Use the Date pickers (From and To) to filter by invoice date range.
  5. Click Reset to clear all filters, search, sort, and pagination.
  1. Click the New Invoice button in the page header (top right).
  2. You are taken to /finance/sales/new with the heading New Standalone Invoice.
  3. Select a Customer from the searchable dropdown (required).
  4. Set the Invoice Date using the date picker. The Due Date auto-calculates based on your organisation’s default payment terms. You can override the due date manually.
  5. Optionally add internal Notes.
  6. Add line items using one of three methods:
    • From Catalogue - Search your parts catalogue by name or part number. Select a part to add it as a line.
    • Labour - Pick a labour rate, set the hours, then click Add Labour.
    • Ad-hoc - Click to add a blank line. Fill in the description, quantity, unit price, and VAT rate.
  7. Each line shows description, quantity, unit price, VAT rate, and calculated totals. You can edit or remove lines.
  8. The running total is shown at the bottom right.
  9. Click Create Invoice to save. You are redirected to the new invoice’s detail page.
  1. Open a work order and click the Generate Invoice button.
  2. A dialog appears showing the work order details (reference, customer, vehicle).
  3. The invoice mode is determined automatically:
    • From Approved Quotes - Lines are generated from approved quote items. They are read-only, unless an approved item had no labour or parts breakdown. Then the lines are editable. See “Approved quote items with no price breakdown” below.
    • Direct Invoice - Lines are editable, generated from work order parts and time entries.
    • Quote + Direct (Hybrid) - Mix of both. Lines are editable.
  4. Set the Invoice Date and Due Date.
  5. In editable modes, you can add items via From Catalogue, Labour, or Ad-hoc buttons. You can also exclude lines using the checkbox on each row, apply discounts (percentage or fixed), and assign suppliers to parts lines.
  6. Click Save Draft to save your progress without generating the invoice.
  7. Click Generate Invoice to create and finalise the invoice.

Every approved quote item reaches the invoice, so a work order with approved items always has something to bill. You no longer need a standalone invoice to work around an empty, locked dialog.

Approved quote items with no price breakdown

Section titled “Approved quote items with no price breakdown”

A customer can approve a health-check item that has a price but no labour hours or parts behind it. The price they saw in the portal is the amount they agreed to. That amount now goes on the invoice.

  1. The item arrives as one line, pre-filled at the approved amount. It is ticked, carries the VAT rate its labour would have used, and shows an Approved, no breakdown badge.
  2. A notice sits directly above the lines. For example: “1 approved quote item has no labour or parts breakdown. It is pre-filled at the amount the customer approved - check the price and VAT before generating.”
  3. The invoice becomes editable. You can change the price, untick the line, add other lines and select Save Draft. The mode hint reads “Lines come from approved quote items. Items approved without a price breakdown are pre-filled at the approved amount - you can edit them before generating.”
  4. Nothing stops you generating. There is no extra confirmation for a pre-filled line at its approved amount.

A few related behaviours:

  • A changed price is marked on its row. If you change the price of any line that came from an approved quote item, the row shows “Changed from the approved £120.00” (with the real figure). It is a reminder only. It does not block Generate Invoice.
  • A £0.00 item asks for a price. If the approved amount was zero, the line is treated as never priced. You are asked to price it or untick it before the invoice is generated.
  • A pre-filled line you removed comes back on a saved draft. It returns unticked, with its badge. Tick it if you mean to bill it.
  • An item the customer no longer approves is unticked on a saved draft. When you reopen a draft, a line for an item that is no longer approved comes back unticked, labelled No longer approved. Your price edits are kept.
  • The customer changed their mind while the window was open. If an item was declined after you opened the invoice window, nothing is invoiced. The message names the item and asks you to untick or remove that line and generate again. If an item with no breakdown was approved after you opened the window, close and reopen the invoice window to check its price.

Torqueflow checks two things about labour before you generate. Both are advice. Neither one disables Generate Invoice or Save Draft, and neither asks you to confirm.

No labour on this invoice. If the job shows signs that work was done (completed tasks, logged time, a timer still running, or the job was signed off) but no included line charges labour, an amber line appears beside Generate Invoice: “No labour on this invoice.” Select Add labour to open the labour picker. The line disappears as soon as an included labour line with a quantity above zero is on the invoice. Parts-only, goodwill and fixed-price invoices can still be generated exactly as they are.

  1. A line from an approved quote item counts as labour if it is a labour line, or if it is a pre-filled item with no breakdown.
  2. Ad-hoc lines do not count as labour, even if you typed “labour” in the description.
  3. An unticked labour line, or one with a quantity of zero, does not count.

A timer is still running. If a technician’s timer is still running on the job, the amber line adds: “A timer is still running on this job and is not on this invoice. If it was left on, add the labour by hand.” Running time is never on the invoice. Add the labour by hand rather than stopping a timer that was left on for hours, because stopping it records all of that time on the job. On a read-only From Approved Quotes invoice there is no Add labour option, so only the timer sentence shows.

A timer that ran for more than a day. If a labour line was worked out from a single time session longer than 24 hours, an amber notice appears above the lines: “A labour line below was calculated from a time session longer than a day. Check the hours - the timer was probably left running.” It lists each long session with the technician’s name and its length, for example “Dave: one session of 26 hours 15 minutes”.

  1. Select Show line beside a session. Torqueflow scrolls to that labour line and puts the cursor in its quantity.
  2. Correct the hours.
  3. Once the quantity is no higher than it would be with the long session cut to one day, the row changes to “Hours changed on Dave’s line” and the amber line beside Generate Invoice goes.

Unticking or removing the labour line also clears its rows. Fixed-price labour lines are never flagged, because their price does not depend on the time logged. A timer that ran for, say, 15 hours is not caught by this check, so still glance at the hours on any long job.

When a work order was converted from a standalone quote, the invoice starts from what the customer agreed. The dialog shows a Quote row beside the work order, customer and vehicle, linking to the quote.

  1. Every quoted line is pre-filled at the quoted price, discount and VAT rate. Quoted labour is included even if the technician has not ticked the task off yet. Quoted parts are billed at the quoted unit price times the quantity actually fitted.
  2. Quoted lines carry a From quote badge. You can edit or remove them like any other line. Add anything extra the job needed in the usual way.
  3. Two rows under the totals compare the invoice with the quote. Quoted (Q-0018) shows the total the customer was sent. Difference says “matches the quote”, or how much the invoice is under or over. If only the VAT differs, it says “(tax only - net matches)”.
  4. If the invoice differs from the quote, you are asked once before it is generated. For example “This invoice is £12.00 over the quote”, with Cancel and Generate anyway. When the numbers match there is no extra step.

A few things behave differently on a quoted job.

  • Clocked time arrives unticked. The quoted labour is already billed, so time the technicians clocked is shown but not included, with the note “Unticked: this job was quoted and the quoted labour is billed. Tick to bill clocked time as well.” Tick it only if you mean to bill both. The Difference row will then read “over the quote”.
  • A part re-priced on the job still bills at the quoted price. The line shows both, for example “Price on job £55.00, quoted £50.00”. Edit the line if you mean to charge the new price.
  • A fixed discount is only applied at the quoted quantity. If a part was quoted at 2 with a £20.00 discount and 4 were fitted, the line says the discount was not applied. Add it by hand if it still applies. Percentage discounts carry over whatever the quantity.
  • A quoted line you removed comes back on a saved draft. When you reopen a draft, any quoted line missing from it returns, labelled Back from quote and unticked. Tick it if the work was done. Otherwise leave it, and the Difference row reads “under the quote”.
  • A quoted labour line keeps its quantity. A quote can hold, say, 2 x £150 on a fixed-price labour code, and the invoice bills 2 x £150 rather than forcing the quantity to 1.

The Add Labour picker on the line editor is now a searchable Labour Code combobox. Pick a code:

  • Hourly codes prompt for hours, then create a line at qty = hours × hourly rate.
  • Fixed codes add a line at qty 1 and the configured selling price (e.g. “Van Service - £129”). No hours prompt.

Each labour line has a Technician dropdown. When you generate an invoice from a work order, Torqueflow reads the work order’s time sessions and pre-fills one labour line per technician who logged time:

  • Hourly codes: each technician’s quantity is their billable time.
  • Fixed codes with multiple technicians on the same WO: the price is split evenly across the techs (the first technician absorbs any 1p rounding remainder so the total matches).
  • Manually added labour lines also have an optional Technician dropdown.

Check the labour lines if you charge a fitted or fixed price. If the job carries a fixed labour charge and technicians also logged time, the invoice can include both the fixed line and time-based lines, which charges the customer for the labour twice. Torqueflow does not warn you yet. Remove the time-based lines before you issue the invoice. A labour line built from a timer that ran for more than a day is flagged for you. See “When the invoice has no labour on it” above.

The technician name is internal-only - it is not shown on the customer-facing PDF. It is used by the Technician Commission report.

You can change or clear a labour line’s technician at any time, including on already-issued invoices via the Edit dialog.

  1. Click any invoice row in the list (or select View from the three-dot menu).
  2. The detail page shows:
    • Header - Invoice number, customer name, payment status badge, and action buttons.
    • Invoice Details card - Customer (linked), work order reference (linked, if applicable), the Quote it came from with the quoted total (linked, if the job was converted from a quote), vehicle details with mileage, invoice date, due date (with overdue badge if applicable), and notes. A voided invoice still shows its quote.
    • Amounts card - Net amount, VAT and gross total, then the lines below (each only when it is not zero), and a payment progress bar with percentage:
      • Credited: the total of the invoice’s credit notes.
      • Amount Paid: money that arrived, before any refund.
      • Refunded: money sent back by card refund.
      • Outstanding (in red if unpaid): the total, less credits, less what was paid, plus what was refunded. When the invoice is in credit, this line reads Credit Balance instead, with a reminder to check before paying it out. A credit can be an overpayment that was already refunded, or a payment entered late or twice.
      • When a manual credit note is treated as money handed back, the paid line reads Amount Paid (net) and shows the payment less that amount. See Credit notes and refunds.
    • GoHighLevel Status section (if connected) - Sync status, payment link, last synced date.
    • Line Items table - Columns: Description, Qty, Unit Price, VAT %, VAT amount, Total. A Discount column appears if any line has a discount. An eye toggle button shows or hides the Supplier column (hidden by default for privacy). Nominal code is shown beneath each line description if set.
    • Payment History table - Date, Amount, Method, Source (Manual/Portal/Bank), Reference, Recorded By.
    • Email History - List of emails sent with recipient, sender name, and timestamp.
    • Metadata - Created by, creation date, last updated date.
  1. From the invoice detail page, click Record Payment. Or from the list, use the three-dot menu and select Record Payment or Mark as Paid.
  2. The Record Payment dialog opens showing the balance, e.g. “Outstanding: £120.00 of £320.00”.
  3. Select a Payment Method from the searchable dropdown (required). The default method is pre-selected.
  4. The Amount is filled in with the outstanding balance. Change it if you are recording a part payment. Click Use full balance to put the full balance back in the box. It only fills the box. It records nothing.
  5. Set the Payment Date (defaults to today).
  6. Optionally enter a Reference (e.g. bank reference, card transaction ID).
  7. Optionally add Notes.
  8. Click Record Payment. Exactly the amount in the box is booked.

Amounts are taken exactly as typed. Trailing zeros are fine (70.100 is £70.10). More than two decimal places, or forms like “1e2”, are refused with a message rather than rounded.

If the balance changed while the dialog was open (a payment recorded elsewhere, or one deleted in Xero), nothing is booked. The dialog shows the new balance so you can check it and record again.

If Torqueflow cannot confirm whether a payment went through, it says so. Record Payment stays unavailable until the figures have been loaded again, and the amount box is left empty. Check the payment history before you enter anything, so the payment is not booked twice.

If your garage has no active payment methods for sales, the dialog says so. Staff who manage finance settings get a link to set them up. Everyone else is told who to ask.

  1. Click the Bulk Settle button above the table (requires payment recording permission).
  2. Checkboxes appear on each non-paid invoice row.
  3. Use the Select All checkbox in the header to select all settleable invoices on the current page, or select individual invoices.
  4. A badge shows the count of selected invoices.
  5. Click Settle Selected to open a confirmation dialog. It shows the total the server will settle. Pick a payment method and confirm.
  6. Click Cancel to exit bulk mode and clear the selection.

If any balance changed while the dialog was open, nothing is settled. Load the new figures and confirm again. You can settle a limited number of invoices at once. If an invoice is voided while settling, nothing is settled. The same “could not confirm” safeguard as a single payment applies.

  1. From the invoice detail page, click Download PDF to save the invoice as a PDF file.
  2. Click Print to open the invoice PDF in a new browser tab for printing.
  3. Click Email to send the invoice to the customer’s email address. The button is disabled if the customer has no email address on file.

An invoice raised from a quote prints a Quote Ref line under the due date, with the quote number and the quoted total, for example “Q-0018 (£647.24)”. It appears on both the customer and the office copy, so a customer can check the paper against the quote they accepted.

If your organisation has the dual-copy PDF toggle enabled in Settings > Finance > Invoice Settings, staff downloads and prints produce a two-page PDF: one page badged “CUSTOMER COPY” and one badged “OFFICE COPY”. The labels are configurable. Customer-facing paths (the portal, the email button) always send a single-copy PDF regardless of the staff toggle.

Disposal fees (tyre, oil, battery, refrigerant, etc.) can be configured in Settings → Finance → Disposal Fees. Once configured:

  • Auto-applied fees attach to the invoice automatically when you generate it from a work order, based on the part categories on the work order.
  • On standalone invoices, click Add disposal fee in the line editor to insert a configured fee manually.
  • Lines appear after labour on the invoice and PDF, with an optional smaller customer-facing description.

See Disposal fees and environmental levies for the full setup guide.

  1. From the invoice detail page, click Edit (only shown if no payments have been recorded).
  2. The edit dialog opens. Make your changes and save.

If a job was booked as a mobile visit and callout charging is on, the callout charge is added to the invoice for you. You do not have to remember it.

  1. The line is added automatically, and it appears even on a job with no other lines. A wasted trip can be invoiced on its own.
  2. It is editable and removable before you issue the invoice, so a callout you decide to waive can be taken off.
  3. If the customer already paid a deposit that was the callout, it is credited as normal. There is no double charge.
  4. The amount billed is the figure for the van that actually did the job, even if a different van’s higher figure was quoted at booking.

The nominal code the callout line posts to is set in Finance settings.

The invoice list has a Deposit held filter and an unreconciled-deposits panel, so money taken at booking does not go missing between the booking and the books.

A held deposit can be in one of four states, and they are four different tax positions. None of them is settled inside Torqueflow, so whoever does your books needs to look at them.

  1. Credited. The deposit came off the final bill. Nothing to do.
  2. Carried forward. The job moved, and the deposit went with it.
  3. Forfeited. The customer cancelled outside your refundable window and you kept the money.
  4. In excess of the bill. The deposit was more than the finished job came to.

That last one matters most on mobile work, because a callout deposit can easily exceed a job that turned out to be nothing. There is no automatic refund. A notice appears on the invoice telling you which case it is. You settle it manually, by refund or credit note, and the credit-note route is not always available depending on how the invoice was closed.

Torqueflow does not have a bookkeeper role. The five roles are owner, manager, service advisor, technician and kiosk, and the bookkeeper email in settings is only a recipient for the accounting digest. So these panels are reached by an owner or manager, on the bookkeeper’s behalf.

If you have connected Stripe in Settings → Billing → Accept Payments, two extra buttons appear on the invoice detail page: Pay Now (open Stripe Checkout in front of the customer) and Send Payment Link (email or SMS). Statements have equivalent Pay Total and Send Statement Payment Link buttons. See Online payments with Stripe for the full flow.

  • No payments recorded yet and you want to cancel? See Voiding an invoice. The Void action is in the overflow (⋮) menu on the invoice detail page. Voided invoices stay on file but are excluded from totals.
  • Customer has paid (in part or full) and you owe money back? See Credit notes and refunds. Click Issue Credit Note to credit specific lines or quantities and optionally trigger a Stripe refund.
  • Sales invoices are listed with correct status badges, amounts, and overdue highlighting.
  • New invoices appear in the list immediately after creation.
  • Payments update the status from Unpaid to Part Paid or Paid. The outstanding amount decreases accordingly.
  • A payment deleted in Xero no longer counts toward an invoice’s paid amount and no longer appears in its payment history.
  • PDFs download with the invoice number as the filename.
  • Emailed invoices appear in the Email History section.
ProblemCauseFix
”New Invoice” button is missingYou do not have the finance.sales.create permission.Ask an admin to assign the correct role.
”Record Payment” and “Mark as Paid” options are missingYou do not have the finance.payments.record permission.Ask an admin to assign the correct role.
”The amount is more than the £… still owed on this invoice.”The entered amount is higher than what remains unpaid.Reduce the amount to match or be less than the outstanding balance.
”Enter an amount with no more than 2 decimal places.”The amount has fractions of a penny.Enter pounds and pence only.
”The outstanding balance changed to £… while this was open, so nothing was recorded.”A payment was recorded elsewhere, or one was deleted in Xero, while the dialog was open.Check the new balance and record again.
”We could not confirm whether the payment was recorded.”Torqueflow did not get a clear answer back while saving the payment.Check the payment history first. Only record again if the payment is not there.
The Record Payment dialog shows more outstanding than the invoice pageThe invoice has a credit note. The dialog’s balance does not yet take credit notes off. The invoice page does.Record the amount the customer actually owes, as shown on the invoice page.
Edit button not shown on invoice detailThe invoice already has payments recorded.Invoices with payments cannot be edited to prevent accounting discrepancies.
Email button is disabledThe customer has no email address.Add an email address to the customer record first.
Pop-up blocked when printingBrowser blocked the new tab.Allow pop-ups for the Torqueflow site in your browser settings.
”Failed to load invoices” errorServer-side data fetch failed.Refresh the page. If the problem persists, check your internet connection or contact support.
Duplicate invoice warning when creatingThe invoice number already exists.This is a non-blocking warning. You can still save, but check whether the invoice has already been entered.
My technicians’ clocked time is missing from the invoiceThe job came from a quote, so the quoted labour is billed and clocked time arrives unticked.Tick the time lines if you mean to bill them as well as the quoted labour.
”This invoice is £… under the quote” when I generateThe invoice total differs from the quote the customer accepted.Check the Difference row. Select Generate anyway if the difference is deliberate, or Cancel and adjust the lines.
”The quote behind this job could not be read”The quote could not be loaded while the preview was built. Both Generate Invoice and Save Draft are blocked, so a wrong draft is not saved.Select Reload. If it keeps failing, choose Invoice without the quote and confirm. The invoice then uses the lines exactly as shown, and anything the quote priced that is not on them is not billed.
A quoted line came back after I removed itReopening a saved draft brings back any quoted line missing from it, labelled Back from quote.It arrives unticked. Leave it unticked if the work was not done.
”Approved, no breakdown” on an invoice lineThe customer approved a quote item that had a price but no labour hours or parts. It is pre-filled at the amount they approved.Check the price and VAT rate, then generate. Edit or untick it if the amount is wrong.
”No labour on this invoice.” beside Generate InvoiceThe job has completed tasks, logged time, a running timer or a sign-off, and no included line charges labour.If labour should be charged, select Add labour. If not (parts only, goodwill or a fixed price), generate as normal.
A labour line has far too many hoursA technician’s timer was left running, and the line was worked out from that time.Use Show line on the amber notice and correct the quantity.
”…nothing has been invoiced. Untick or remove that line and generate again.”The customer declined a quote item after you opened the invoice window.Untick or remove the named line and generate again.
There is a callout line on this invoice and I did not add itThe job was booked as a mobile visit and callout charging is on.It is correct. Remove the line before issuing if you are waiving it.
The invoice says a deposit is heldMoney was taken at booking and has not been reconciled against the final bill.Open the notice on the invoice. It says which of the four states applies and what is left to do.
A deposit was bigger than the jobCommon on mobile work when the callout deposit exceeds a small job.Nothing happens automatically. Refund it or raise a credit note.
  • Invoice numbers are auto-generated by Torqueflow.
  • Once an invoice is fully paid, customer-facing copy automatically relabels it as a Receipt: the PDF title becomes “RECEIPT”, the customer portal shows a “Receipt” badge, and the email subject reads “Receipt {number} from {your org}”. Staff lists keep saying “Invoice” because they show a mix of paid and unpaid in one table. The PDF filename does not change.
  • The Overdue status is calculated automatically. If an unpaid or part-paid invoice’s due date has passed, it shows as Overdue. The status badge does not yet take credit notes into account, so a fully credited invoice past its due date can still read Overdue.
  • The Outstanding column in the invoice list does not yet take credit notes off. The invoice page and the customer record’s Invoices tab do.
  • Status filter preferences are saved in your browser’s local storage and persist across sessions.
  • The default due date is calculated from your organisation’s payment terms setting (found in Settings > Finance).
  • How VAT is rounded. Torqueflow works out the VAT for each rate band on the net total for that band, rounds it to the penny, then sums the bands to the invoice total. So the VAT you see always equals the rate applied to the net, and net plus VAT equals gross to the penny. When a band has several lines, any rounding penny is applied to the largest line so the per-line VAT still adds up exactly to the header. Quotes and credit notes use the same method, so a quote and the invoice made from it show the same VAT, and a full credit note is the exact opposite of the invoice it reverses.
ActionRequired capability
View sales invoicesfinance.sales.view
Create or edit invoicesfinance.sales.create
Record paymentsfinance.payments.record