The job is complete. The invoice is already built.
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.
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
Synced to Xero
From completed job to paid invoice — five stages, all tracked.
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.
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.
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.
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.
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.
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.
The manual invoice process has at least six failure points. This removes them.
| Invoice step | Manual process | HaulageOps workflow |
|---|---|---|
| Get the docket from the driver | Wait days for paper to return — sometimes it never does | POD captured at delivery and attached to job record immediately |
| Find the right rate for this client and job | Look up spreadsheet — hope it's the current version | Rate was attached at job creation from client rate card |
| Enter invoice into accounting software | Manually re-enter client, job, rate, quantity into Xero | Invoice generated from job record and pushed to Xero automatically |
| Attach the docket | Scan paper docket, attach PDF to Xero invoice manually | POD already attached to invoice from the job record |
| Send the invoice | Email PDF from Xero or accounting software | Invoice sent from HaulageOps — visible in client portal and pushed to Xero |
| Check if it has been paid | Check Xero, email accounts team, call client | Xero payment webhook updates HaulageOps and client portal status automatically |
| Client asks for a copy of the invoice | Find in Xero, export PDF, email to client | Client downloads from their portal — no one needs to send it |
| Client disputes the docket | Find paper, photograph, email back and forth | POD with photo, documents and signature is in the system — share portal access |
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.
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.