Real-Time Job Profitability, Automated Across Five Systems

101,000+
toll transactions allocated to trips
9,500+
fuel-card records reconciled/year
€41k
hidden cost gap surfaced by the platform
4,400
trips costed across ~450 freight jobs
The challenge: five systems, zero job-level truth
This Irish-headquartered freight operator runs loads across Ireland, Spain, France, Belgium, Italy and beyond. Like most haulage businesses, its data was scattered across systems that don't talk to each other: a transport management system holding orders and trips, fleet telematics tracking distance and fuel consumption, a fuel-and-toll card provider issuing thousands of transactions a month, ferry operators sending PDF invoices, and Sage 50 holding the books.
Nobody could say with confidence which jobs actually made money. Job costs were reconstructed by hand in Excel; the fuel-duty rebate claim — a real cash refund available across EU jurisdictions — was a fortnightly manual exercise of exports and spreadsheet formulas. Costs were posted to Sage manually. Fuel losses from faulty sensors or unassigned vehicles were invisible until someone went hunting.
The finance workload wasn't just slow — it was structurally incomplete. A single freight order can span up to six trips, and allocating a toll transaction or a ferry crossing to the right job across that chain simply wasn't feasible by hand at 100,000+ transactions.
What we built: a job-costing engine that computes profitability automatically
We built a project accounting platform that continuously ingests orders, telematics, fuel and toll data from the operator's existing systems, allocates every cost to the specific trip and job it belongs to, computes per-job profit and margin automatically, and maps every cost to Sage nominal codes — with dashboards replacing the spreadsheet reconstructions.
Scheduled jobs pull from each source system around the clock. A vehicle-and-driver master built from licence plates ties the systems together — including handling plate reuse over time. Then the matching engines run hourly:
- Toll allocation — each of 100,000+ toll transactions is matched to the exact trip leg whose stop window contains it, with country-specific logic for different toll regimes.
- Fuel reconciliation — fuel purchased (card data) is compared against fuel used (telemetry: tank levels × distance), flagging discrepancies — broken fuel sensors, unassigned vehicles, potential leakage — instead of letting them hide in a blended cost line.
- AI ferry-invoice extraction — ferry operators' PDF invoices are read by an LLM that identifies the vendor, references and charges, and matches each crossing to its trip — with an approval queue so a human confirms before anything posts.
- Fuel-duty rebate automation — the fortnightly Excel exercise became a computed report: litres and net cost per country, per-country rebate rates applied, and inconsistencies flagged — like a country with purchase volume but rebate-claiming switched off.
- Job-level P&L rollup — all allocated costs roll up per leg, per trip, per job into profit and margin, with completeness flags so a partially-costed job is never mistaken for a final number.
The Sage integration: from computed costs to the nominal ledger
Instead of OCR-ing incoming invoices and re-keying them, the platform computes the cost picture directly from source data and maps every cost type to the client's Sage nominal codes — turning manual Sage posting into a review-and-post workflow, with the physical invoice demoted to a reconciliation check.
This reframe matters. The traditional approach to logistics cost automation is document-first: scan the invoice, extract it, key it. But the operator's fuel card, toll and telematics feeds already contain the transaction-level truth — the invoice is just a summary of it. Building from source data means costs are known days before the invoice arrives, at line-item accuracy the invoice can't provide.
Every cost type carries a mapping to the Sage chart of accounts, with an explicit review queue for anything unmapped — so nothing slips into the ledger uncategorised. The team signs in with their Microsoft 365 accounts, and the platform runs on Azure with the same managed-identity, no-stored-secrets architecture we use across all our builds.
Dashboards that replaced the spreadsheet
The finance team now works from live dashboards: KPI tiles for fleet-wide cost and margin, per-country and per-route breakdowns, per-customer profitability, and drill-downs from a job's margin to the individual toll passages and refuelling stops behind it.
The platform is deliberately designed to surface anomalies rather than smooth them over. That instinct paid for itself early: it flagged a ~€41,000 cost gap from tractor assignments missing in the TMS across 13 trip legs — money that was being spent but attributed to no job — and a rebate configuration gap on €5,683 of fuel purchases in one country.
The result: job profitability as a live number, not a quarterly guess
A fortnight's fuel-duty rebate calculation — 31,000+ litres across eight countries, worth about €4,000 per fortnight in refunds — now computes on demand instead of consuming a finance afternoon. Fuel purchase-to-usage matching runs automatically across ~9,500 annual card transactions, and the match rate keeps climbing as the platform learns the fleet's patterns.
Most importantly, the question 'did that job make money?' has an answer the same week the wheels stop turning — per job, per route, per customer — built from the same numbers that flow to Sage.
Frequently Asked Questions
What is project accounting automation?
Project accounting automation means costs and revenue are attributed to individual jobs or projects automatically from source systems — fuel cards, timesheets, supplier feeds, telematics — instead of being reconstructed manually in spreadsheets. The output is per-job profitability that updates continuously, mapped to your accounting system's nominal codes.
Does this work with Sage 50, or only cloud ERPs?
It works with Sage 50. We integrate through a modern REST layer over Sage's data, covering the nominal ledger, sales, purchasing and suppliers. The same pattern applies to Sage 200, Business Central, QuickBooks, Xero and most ERPs — the job-costing engine is independent of which ledger it feeds.
Where does AI fit in a job costing platform?
Two places. First, document extraction: supplier PDFs (ferry invoices in this case) are read by an LLM and matched to the right job, with human approval before posting. Second, anomaly surfacing: the platform flags cost gaps, sensor faults and configuration issues instead of averaging them away. The core cost allocation stays deterministic and auditable — AI handles the unstructured edges.
Our operational systems don't have good APIs. Is that a dealbreaker?
No. In this build, one critical data source had no official API at all, and we automated it anyway with a resilient managed integration. Between official APIs, exports and managed automation, we've yet to meet an operational system we couldn't get data out of — the assessment stage establishes the right method for each source.
Do you know which jobs made money last month?
If project or job profitability at your company is a quarterly spreadsheet exercise, tell us what systems hold the pieces. We'll map how they connect, what can be automated, and what a live job-costing view would look like feeding your Sage or ERP.