Built for bulk haulage operators. Not adapted from something else.
High volume, short cycles, demanding clients — and a paper trail that doesn't keep up
Bulk haulage is not route freight. The same truck might run eight loads in a day — quarry to site, back again, different material, same client or a different one. Each load generates a docket. Each docket needs to be captured, attached to the right job, and eventually turned into an invoice line. At volume, this process breaks with paper and spreadsheets.
Common job types include quarry-to-site aggregate delivery, spoil removal from excavation sites, fill placement for earthworks contractors, road base supply to construction projects, and bulk material transport between stockpile and processing. The work is high-frequency, often short-cycle, and billing usually tracks quantity rather than distance.
Most bulk haulage operators use a mix of owned trucks and subcontractors. Own trucks are the core capacity; subs fill demand when excavation accelerates or when multiple clients want trucks on the same day. Managing that mix — dispatching to both, getting visibility from both, and billing correctly from both — is where WhatsApp and spreadsheets start failing.
Typical operational parties in a bulk haulage job
- Dispatcher — creates job, sets rate, assigns owned driver or delegates to sub
- Own driver — runs the loads, captures docket or signature at site
- Subcontractor — receives delegated job via their own portal, updates progress independently
- Site foreman — receives delivery, signs off on load or quantity
- Client project manager — expects real-time visibility without calling the dispatcher
- Accounts — needs completed dockets attached before raising invoice
Charging models
- Per tonne — most common for aggregate and fill; billing tracks actual tonnes delivered
- Per load — common where weighbridge tickets are not available; fixed rate per truck movement
- Hourly — used for slower or waiting-time work; billed against driver time records
- Fixed-fee project — less common; used for defined-scope contracts
The six points where WhatsApp, paper and Excel stop working
Dispatch via WhatsApp
Job instructions sent by message mean no audit trail, no confirmation loop, and no way to track whether the driver or sub actually picked up the job. When a load is missed or delivered to the wrong site, there is no record of who was told what.
Paper dockets in the cab
Drivers bring dockets back at the end of the week — or they don't. Dockets get wet, torn or left in a different truck. Accounts can't invoice until dockets arrive, and quantity disputes with clients have no digital evidence to resolve them.
Rate sheets separate from invoicing
When the rate card lives in Excel and the invoice is raised in Xero manually, rate errors creep in. When a rate changes mid-contract, some invoices go out at the old rate. When a client queries a charge, the rate history doesn't exist.
Subcontractor visibility lost at delegation
Once a job is handed to a sub by phone or message, the dispatcher has no live status. The client calls asking where the truck is. The dispatcher calls the sub. The sub calls the driver. None of this appears in any record.
No client self-service
Clients tracking project progress call the dispatcher for delivery confirmation. High-demand clients may call multiple times per day. This absorbs dispatcher time that should be spent on coordination, not answering status queries.
CoR obligations with no audit trail
Chain of responsibility obligations apply to the operator and to the clients directing the work. Paper records and WhatsApp threads don't produce the timestamped, attributed action log that an audit or incident investigation requires.
The dispatch-to-invoice workflow, built for high-volume short-cycle operations
Create job with tonne rate
Dispatcher creates the job in the Admin Panel. Sets material type, delivery point, per-tonne rate from the client rate card, and scheduled date. The rate card is stored against the client — no manual lookup in Excel.
Dispatch to own driver or delegate to sub
Assign to an owned driver (push notification via Firebase FCM to the driver app) or delegate to a subcontractor (the sub sees the job in their portal and accepts or declines). Both appear on the same dispatch board.
Driver or sub updates progress
Own driver updates via the mobile app — en route, loaded, at site, delivered. GPS position is tracked. Sub drivers update via their own portal. The dispatcher sees live status for both on one board without calling anyone.
Digital docket and signature captured
At delivery, the driver photographs the docket and captures a customer signature in the app. Both are stored in Azure and attached to the job record. The docket is already there when accounts go to invoice.
Invoice from job, sync to Xero
Billing pulls quantity and rate from the completed job. Draft invoice is created in HaulageOps and synced to Xero via OAuth2. No re-entry. The client can see the invoice in their portal.
Client portal for self-service visibility
Client project managers log into their portal to see job status, delivery history, POD documents and invoices. They get the visibility they need without calling the dispatcher. Your rate card with that client is visible to them — not to other clients.
Screenshot: Admin Panel dispatch board showing multiple active bulk haulage jobs. Left panel shows job list with material type (roadbase, fill, aggregate), client name, tonne rate, and status (dispatched, en route, delivered). Right panel shows map with driver GPS positions. Own trucks shown in blue; subcontractor trucks in orange. One job expanded showing driver name, truck rego, load count for the day, and docket thumbnail attached.
Platform features that apply directly to bulk haulage operations
Dispatch Management
Real-time dispatch board for owned trucks and subcontractors. Assign jobs, track status, see GPS positions. Both own and sub trucks on one view — no switching between systems.
- Live status updates from driver app and sub portal
- Socket.io real-time board — no manual refresh
- Filter by driver, vehicle, client or job status
Rate Management
Store per-tonne, per-load and hourly rate cards against each client. Set separate charge rates (what you bill the client) and pay rates (what you pay the sub). Effective dating so rate changes don't break historical invoices.
- Per-tonne, per-load, hourly, fixed-fee rate types
- Client-specific rate cards with version history
- Separate client charge and subcontractor pay rates
Subcontractor Portal
Subcontractors get their own login — no second HaulageOps subscription required. They see their job queue, accept or decline, track with Mapbox maps, and update progress. You see their status without calling them.
- Dedicated login for each subcontractor company
- Accept/decline with reason — visible to dispatcher
- Job history and documentation per sub
Digital Dockets
Driver photographs the paper docket or captures a digital docket at site. Customer signs on the driver's phone. Both go to Azure storage, attached to the job. Accounts see the docket before they raise the invoice — not a week later.
- Photo docket capture in driver app
- Customer signature on mobile at point of delivery
- Stored in Azure, attached to job and invoice
Billing & Invoicing
Invoice is generated from the completed job — quantity and rate already there. Xero sync via OAuth2. Invoice lifecycle: draft, sent, paid, overdue, voided. Client can see invoice in their portal.
- Job-to-invoice in one action — no re-entry
- Xero native sync with 6-hourly cron and real-time payment webhooks
- Client portal invoice visibility
Haulage Dispatch Solution
The complete dispatch workflow — from job creation through assignment, tracking and completion — built for operators who manage both owned capacity and subcontractor overflow simultaneously.
- One board for owned and subcontracted jobs
- Job templates and recurring jobs for repeat work
- Firebase push notifications for assignments
Bulk haulage questions about HaulageOps
How does per-tonne billing work in HaulageOps?
Each client has a rate card stored in the system. When you create a job for that client, you select the material and rate type — per tonne, per load, or hourly. The rate is pulled from the card automatically. When the driver completes the job and records the quantity delivered (or you enter it from the weighbridge ticket), the invoice line calculates from quantity times rate. The invoice is then created in HaulageOps and synced to Xero. No manual lookup, no risk of using the wrong rate.
How do I handle multiple loads per day from the same driver?
Each load is recorded as a job completion event in the driver app. The driver marks the load delivered, captures the docket and signature, and the job resets for the next run if it is a recurring or multi-load job. At the end of the day, you have a complete record of how many loads each driver or truck completed, with dockets attached to each. Invoicing is calculated from total tonnes or loads across all events — not from a manual count at the end of the week.
Can I track tonnes delivered versus tonnes contracted?
Yes. Jobs are created with a target quantity. As deliveries are completed and quantities recorded, the system tracks delivered against the contract quantity. Management reporting shows this at job level and client level. This is useful when you have a supply contract for a defined volume of material and need to track progress against it without counting paper dockets manually.
What happens if I use subcontractors for overflow capacity?
Subcontractors access their own portal — they do not need a HaulageOps licence. You delegate the job from the dispatch board to a sub company. The sub sees the job, accepts it, and their driver updates progress through the sub portal. You see their status alongside your own trucks on the same dispatch board. Their completed job data feeds into your invoicing and reporting. The client does not see that work was subcontracted unless you choose to show it.
Can clients see delivery status without calling the office?
Yes. Each client has login access to the Client Portal. They can see the status of their current jobs, delivery history, POD documents and dockets, and their invoices. The portal shows their specific rate card. It does not show other clients' data, your internal costs, or your subcontractor details. Most clients use this to confirm deliveries on active construction sites without tying up your dispatcher on status calls.
Does the driver app work without mobile signal at site?
Yes, the driver app is offline-capable. If signal drops at a delivery site or quarry face, the driver can still complete job updates, capture photos and record signatures. The data queues locally and synchronises when connectivity returns. This is confirmed behaviour — not a roadmap item.
Is HaulageOps built for bulk haulage or is it a general TMS?
HaulageOps is purpose-built for bulk haulage and construction logistics operators managing between 15 and 80 vehicles, with a mix of owned trucks and subcontractors. It is not designed for parcel delivery, 3PL warehousing, or freight forwarding. That narrowness is deliberate — the per-tonne billing model, subcontractor portal, client portal with rate cards, and digital docket workflow are all built around how bulk haulage operations actually run, not adapted from a generic TMS.
More on managing bulk haulage with HaulageOps
Dispatch Management
The real-time dispatch board for owned trucks and subcontractors — one view, live status, no phone calls for updates.
Learn moreSubcontractor Portal
Dedicated portal for your subcontractor network. They accept jobs, update status and access documents — no HaulageOps licence required on their side.
Learn moreRate Management
Per-tonne, per-load and hourly rate cards per client with effective dating. The rate is already on the job when you invoice.
Learn moreHaulage Dispatch Solution
The complete job-creation-to-completion workflow for bulk haulage dispatch — owned capacity and sub overflow in one operation.
Learn more