CMMS for third-party maintenance companies
How a service company manages maintenance contracts: the sold plan, work orders signed in the field, the client portal, and profitability per contract.
Updated on 6 min read
- Third-party maintenance
- Work orders
- Costs
- SLA
For a company that does maintenance for other businesses, the management system isn’t an internal tool: it’s the infrastructure the service is delivered and billed on. There are three differences from an in-house maintenance department, and all three change how you need to set it up.
The preventive plan is the contract. If it says four visits a year and only three get done, that’s a contractual problem before it’s an operational one.
Every job has to be justifiable to someone who wasn’t there.
Profitability gets decided per contract, not on the company’s overall numbers, and it’s almost never known which one is losing money.
The plan is what was sold
That’s why preventive maintenance is the heart of the system, not an add-on. The checklist template is linked to the client’s asset, its model, or an entire family, the frequency set by the contract gets defined, and the work orders generate on their own, with technician and date assigned, checking beforehand whether the day is a public holiday and whether that person is available.
A single asset can have several periods at once: the monthly visit is one thing and the annual inspection with report is another, and neither replaces the other.
The signed work order, which is what backs up the invoice
The most valuable thing the operation produces isn’t the work itself: it’s the proof that it was done.
In the technician app the operator logs time with a stopwatch inside the work order itself, consumes materials against the warehouse — including the van, if you set it up as its own warehouse — fills in the checklist, attaches photos, and captures the client’s signature on screen, with geolocation if you enable it.
It works without coverage and syncs when a signal comes back; if an action fails, it doesn’t disappear: it stays flagged with its reason. It matters because client sites are basements, rooftops, and machine rooms, and because a work record reconstructed from memory at seven in the evening always has fewer hours than it actually took.
Committed deadlines
If there are agreed response times, they have to be visible before they get missed.
Incidents carry their type and subtype, their priority, the client, the location, and the affected equipment, and statuses can carry a maximum time. There’s also an SLA entity with its name, its priority, and its limit, and incident timings get logged.
The result is that whatever has gone past deadline shows up on a list instead of getting discovered when the client complains. And it lets you later measure two different things that tend to get mixed up: how long it takes to respond and how long to resolve.
Alerts can come in through the backend, through the client’s own access, or through a mailbox the system converts into incidents.
The client portal, which takes work off your plate
A good chunk of the calls a maintenance company receives aren’t requests: they’re asking how things are going.
With their own access, the client opens incidents with photos, follows the status of their work orders, downloads the report from each visit, and checks their assets. And there’s something valued more than you’d expect: they see their upcoming preventive visits on a calendar, so they arrange site access without anyone having to call them.
If you grant that permission, they can sign off on the work order from their own access, useful when the person in charge wasn’t on site the day of the visit.
Two honest caveats. The client cannot change a work order’s status: it’s disabled on purpose. And their app doesn’t work offline; full offline mode belongs to the technician app.
Since licenses are unlimited across all three plans, giving access to your entire client base isn’t an economic decision. Under a per-user model it would be, and it would end with several people sharing an account and a history that doesn’t hold up as proof.
Subcontractors
Almost no service company does everything with its own resources. Vendors get set up with their warehouses and receive the work orders that correspond to them, logging time, materials, and signature just like your own staff.
There’s also a connector between GMAO Cloud sites, working both ways — from client to subcontractor and back — so work passes from one system to the other with no intermediate file, keeping its traceability as it crosses the boundary between the two companies.
Quotes and extra work
In third-party maintenance, anything outside the contract has to be quoted, and that’s where time and jobs get lost.
The quote manager closes that loop: a quote can originate from a work order and generate another one once accepted, with its client, reference, payment method, and PDF/email templates. Nothing needs to be rewritten, and there’s a record of what was offered and when.
The question almost no one can answer
Which of your contracts actually makes money.
With measured time and logged materials, the reports give you hours by client, time entries, cost per piece of equipment, travel, and the deviation between estimated and actual time.
That last one is the one that surprises people the most the first time: there’s almost always one type of contract selling below its cost, and it’s been that way for years because nobody had the data. Without field-level logging, profitability per contract is a guess.
Billing without typing it twice
Closed work orders with their hours and consumption are exactly what an ERP needs. The integrations catalog shows the scope of each connector, and it’s not the same for all of them: worth checking before assuming the data flows through on its own.
A warning about rollout
There’s a tempting move in a service company that turns out expensive: loading the entire client base in the first month. It’s more work than it looks like, because each client brings its own asset inventory, checklists, and frequencies, and the team gets worn out entering data before seeing any results.
What works is the opposite. One complete contract, with its assets properly set up and its plan generating itself, produces something worth showing in two weeks: signed work orders, real hours, and a client who no longer calls to ask. With that, convincing the rest of the team — and the next clients — stops being an act of faith.
The old history can wait, and most of it isn’t worth migrating anyway: what actually matters is that next year’s visits are all set up properly.
Where to start
With one representative contract: its assets, its checklists, its frequencies, and its deadlines. Within days there’s preventive maintenance generating itself and work orders closing with real data, and you see what needed adjusting before loading the entire client base.
If you want to see it with one of your own contracts, you can request a demo.