Billing & Invoicing

The job is complete. The invoice is already built.

Invoice generated from the completed job record — rate, POD and job detail already attached. Full invoice lifecycle in HaulageOps. Xero sync via OAuth2. Client sees invoice status in their portal. No re-entering data. No chasing dockets.

Built from completed jobFull lifecycle: draft → paidXero sync + payment webhooksPOD attached at completionClient portal invoice access
Auto-builtfrom completed job record
5-stageinvoice lifecycle
Xero OAuth26-hourly + webhooks
POD attachedno chasing dockets
Client portalinvoice + payment status
No re-entryrate & job detail carry through
Where Invoices Come From

Manual invoice processes fail because they start with a blank page. HaulageOps starts from the job.

The typical haulage invoicing process goes like this: wait for the docket to return from the driver, find the rate for that client and job type, re-enter the job details into your accounting software, attach the docket manually, send it, then follow up for payment. Each step introduces delay. Dockets get lost. Rates get applied incorrectly. Data gets re-entered with errors.

In HaulageOps, the invoice does not start from a blank page. It starts from the completed job record — which already contains the client, the service, the rate, the date, the quantity, and the proof of delivery captured by the driver at the moment of completion. Finance teams do not reconstruct a job from paper; they review a job record and generate an invoice from it.

What is already on the invoice when a job completes

  • Client name and billing details from the client record
  • Job date, material type, pickup and delivery site
  • Rate applied (per-tonne, per-load, hourly or fixed-fee) from the client rate card
  • Quantity — tonnes, loads, or hours as applicable to the rate type
  • Calculated invoice value
  • Proof of delivery: photos, documents, customer signature — already attached at job completion
  • Job reference and job ID for the client's records

Finance reviews the record, confirms the details, and the invoice is generated. No data entry. No rate lookup. No docket hunting.

HaulageOps — Invoice Generated from Job
INV-2026-0847Sent

Client: "Laing O'Rourke Civil"

Job date: 28 Jul 2026

Material: Type 1 Crushed Limestone

Pickup: Breedon Quarry

Delivery: M25 Junction 10 Project

Rate: $18.50 per tonne

Quantity: 22.4 tonnes

Total: $414.40

POD Photo Scale Docket – 28 Jul

Synced to Xero

Send to ClientMark PaidVoid
Invoice Lifecycle

From completed job to paid invoice — five stages, all tracked.

01

Draft

Invoice is generated from the completed job record. Finance can review the details, confirm the rate, check the attached POD, and make any adjustments before sending. The invoice is not visible to the client at this stage.

02

Sent

Invoice is sent to the client. It appears in the client portal with "Sent" status. The invoice is simultaneously pushed to Xero as an approved invoice awaiting payment. The client can download the PDF from their portal.

03

Paid

When payment is recorded in Xero, the Xero payment webhook fires and updates the invoice status in HaulageOps to Paid. The client portal shows the invoice as paid. Finance can see payment confirmed without checking Xero separately.

04

Overdue

If a payment due date passes without a payment event from Xero, the invoice status moves to Overdue. Finance can see all overdue invoices in the billing dashboard and prioritise follow-up. The client portal also reflects the overdue status.

05

Voided

If an invoice needs to be cancelled — disputed, duplicated, or raised in error — it can be voided. Voided invoices are retained in the system for audit purposes with the void reason recorded. The job record is not deleted — only the invoice is voided.

Xero Integration

OAuth2 connection. Invoices push to Xero. Payments come back via webhook.

HaulageOps connects to Xero via a secure OAuth2 integration. You authorise the connection once from your HaulageOps account settings — no API keys to manage, no manual exports. From that point, the invoice data flows between the two systems automatically.

What flows from HaulageOps to Xero

  • Invoice creation: client, line items, rate, quantity, job reference, due date
  • Invoice status updates (sent, voided)
  • Sync runs every 6 hours via a scheduled cron job
  • Real-time push available when invoice is sent — does not wait for next cron cycle

Invoices appear in Xero as approved invoices under the correct client contact. Your Xero chart of accounts and tax codes can be mapped during implementation to ensure invoices land in the correct categories.

What flows from Xero back to HaulageOps

  • Payment events: when a payment is recorded against an invoice in Xero, a webhook fires back to HaulageOps
  • Invoice status in HaulageOps updates to Paid when the webhook is received
  • Client portal invoice status updates to Paid
  • Finance dashboard in HaulageOps reflects the payment without a manual step

This bidirectional flow means HaulageOps and Xero stay in sync without anyone manually updating both systems. Payment confirmation is automatic when Xero receives the payment — whether recorded by your accounts team in Xero directly or received through a connected bank feed.

Full details: Xero Integration — setup, sync behaviour, field mapping and payment webhook configuration.

What This Replaces

The manual invoice process has at least six failure points. This removes them.

Invoice stepManual processHaulageOps workflow
Get the docket from the driverWait days for paper to return — sometimes it never doesPOD captured at delivery and attached to job record immediately
Find the right rate for this client and jobLook up spreadsheet — hope it's the current versionRate was attached at job creation from client rate card
Enter invoice into accounting softwareManually re-enter client, job, rate, quantity into XeroInvoice generated from job record and pushed to Xero automatically
Attach the docketScan paper docket, attach PDF to Xero invoice manuallyPOD already attached to invoice from the job record
Send the invoiceEmail PDF from Xero or accounting softwareInvoice sent from HaulageOps — visible in client portal and pushed to Xero
Check if it has been paidCheck Xero, email accounts team, call clientXero payment webhook updates HaulageOps and client portal status automatically
Client asks for a copy of the invoiceFind in Xero, export PDF, email to clientClient downloads from their portal — no one needs to send it
Client disputes the docketFind paper, photograph, email back and forthPOD with photo, documents and signature is in the system — share portal access
Related Platform Features

Billing and invoicing connects to these platform areas.

Xero Integration

OAuth2 connection, 6-hourly cron sync, real-time payment webhooks. Invoices flow from HaulageOps to Xero. Payment confirmations flow from Xero back to HaulageOps. No manual export step. No double-entry.

Rate Management

The rate on every invoice comes from the rate management module — client rate card, rate type, effective date. Rate integrity from rate card to invoice to Xero means no rate discrepancies and no manual rate lookup at invoice time.

Client Portal

Every invoice sent from HaulageOps is visible to the relevant client in their portal. Clients can see invoice status (sent, paid, overdue) and download PDF invoices without calling your office. Payment status updates when Xero confirms the payment.

Also see: Job to Invoice — the full operational picture of how a job moves from dispatch through to a paid invoice without any manual data re-entry.

Common Questions

Frequently asked about HaulageOps billing and invoicing.

How does the Xero sync work exactly?

HaulageOps connects to Xero via OAuth2 — you authorise the connection from within your HaulageOps account settings, and Xero grants a secure token. Once connected, invoices generated in HaulageOps are pushed to Xero as approved invoices. The sync runs on a 6-hourly cron schedule, but invoices are also pushed in real time when marked as Sent. Payment events from Xero arrive via webhook: when a payment is recorded against an invoice in Xero (manually entered or via a connected bank feed), Xero sends a webhook to HaulageOps and the invoice status is updated to Paid immediately. This keeps both systems in sync without anyone manually updating either.

What if an invoice is disputed by the client?

If a client disputes an invoice — questioning the rate, the quantity, or the delivery evidence — you have everything needed to respond without searching filing cabinets. The job record attached to the invoice contains the rate applied (from the rate card), the POD captured by the driver (photo, documents, customer signature), and the audit trail showing who created and approved the job. You can share portal access so the client can view the POD themselves. If the dispute results in a credit or correction, the invoice can be voided and a new invoice raised. The voided invoice is retained in the system for the audit trail.

Can a client see an invoice before it has been sent?

No. An invoice in Draft status is not visible in the client portal. The invoice only appears in the client's portal once it reaches Sent status. This gives your finance team the opportunity to review and correct the invoice before the client sees it. Once sent, the invoice is visible to the client in their portal with a Sent status, and they can download it as a PDF.

Can I batch multiple jobs into a single invoice?

HaulageOps generates invoices from job records. The standard workflow is one invoice per job or a grouped invoice for multiple jobs for the same client over a billing period. The specific batching configuration depends on your billing cadence — weekly billing, project-based billing, or per-job. This is something configured during implementation to match your existing billing approach. Book a demo to discuss how your current billing structure would map to the HaulageOps invoicing workflow.

Does HaulageOps connect to MYOB?

Xero is the standard accounting integration. A MYOB integration is available as an add-on subject to scope — it is not included as standard. If MYOB is your primary accounting system, raise this in your demo conversation and we can discuss the options available for your situation.

What happens to an invoice if the associated job is amended after the invoice is raised?

Once an invoice is in Sent status, the job record and invoice are treated as finalised for billing purposes. If a job needs to be corrected after invoicing — for example, a quantity discrepancy is identified after the invoice is sent — the standard process is to void the original invoice and raise a new one from the corrected job record. Both the void action and the new invoice are recorded in the audit trail. The original job record is not deleted.

See the job-to-invoice workflow in a live demo.

Book a 20-minute session and walk through how a completed job becomes a Xero-synced invoice — with the docket already attached and the rate already applied.