Equipment Costs

    Is Your Equipment Actually Being Paid For? Internal Rates and the Recovery Gap

    August 18, 2026
    10 min read
    Is Your Equipment Actually Being Paid For? Internal Rates and the Recovery Gap

    If you own equipment and run projects, you're running two businesses, whether or not the org chart says so. One business builds things. The other owns iron and rents it to the first one. Every hour a dozer or an excavator works on a job, the project gets charged an internal rate for it, and that charge is supposed to pay for the machine: what it costs to own, what it costs to keep running, and what it will cost to replace.

    Here's the question almost nobody asks: is the fleet actually getting paid?

    Not "are we charging something." Everyone charges something. The question is whether the internal rate on your equipment reflects what the equipment actually costs per hour, at the hours it actually runs. Because if it doesn't, one of two things is happening. Either your projects are underpaying for your machines and the shortfall is quietly landing in company overhead, or they're overpaying and your jobs look worse than they are. Most fleets are doing some of both at once, and almost none of them can put a number on it.

    The Rental Company Inside Your Company

    Strip away the labels and an equipment division works exactly like a rental house. It buys machines. It pays the depreciation, the interest, the insurance, the taxes. It pays for every PM, every repair, every undercarriage, every part on the shelf, and every hour of mechanic time. Then it rents those machines out by the hour to the only customer it has: your own projects.

    A rental house that charged less than its costs would be out of business in a couple of years. Your equipment division can't go out of business, because the shortfall doesn't disappear. It just moves. Every dollar the fleet spends and doesn't recover through internal charges gets absorbed somewhere else in the company, usually in an overhead line that gets spread across every job as a percentage and that nobody can trace back to a specific machine.

    So the internal rate isn't a bookkeeping formality. It's the mechanism that decides whether the cost of your equipment shows up where it belongs, on the projects that used it, or gets smeared across the whole company where it can't be managed. And that mechanism only works if the rate is built from what the machine actually costs.

    Where Internal Rates Actually Come From

    Ask a contractor how the internal rate on an excavator was set, and you'll usually get one of a handful of answers, none of which involve the machine's actual cost.

    Sometimes it's last year's rate plus a few percent. Sometimes it's a percentage of the local rental rate, on the theory that owning must be cheaper than renting. Sometimes it's the estimator's number from the day the machine was bid into a job three years ago. Sometimes it's a depreciation figure the accountant pulled from the fixed asset schedule, with nothing in it for maintenance at all. And sometimes it's a number somebody set when the fleet was half its current size and nobody has looked at since.

    Every one of these misses the same thing: the rate has to recover the machine's ownership cost plus its maintenance cost, over the hours it actually runs. Ownership means depreciation, financing, insurance, and taxes. Maintenance means labor at your shop rate, parts at what you paid for them, outside repairs, wear items, and the shop's share of overhead. Add those up for the year, divide by the hours the machine really worked, and that's the floor. Fuel and the operator usually get charged straight to the job, so they stay out of it, but everything else has to come back through the rate or it doesn't come back at all.

    Utilization is where even a carefully built rate breaks. Ownership costs are fixed. They're the same whether the machine runs 1,800 hours or 1,100. A rate built on 1,800 hours a year for a machine carrying $65,000 in annual ownership cost recovers about $36 per hour for ownership. If that machine actually runs 1,300 hours, its real ownership cost is $50 per hour, and the rate is $14 short on every hour before you've spent a dollar on maintenance. Most fleets set the hours assumption once, optimistically, and never reconcile it against the meter.

    The Recovery Gap

    Put it together across a fleet and the gap gets big fast.

    Take a mixed fleet of 40 units running an average of 1,400 hours a year, so 56,000 fleet hours. Say the real average cost of ownership and maintenance across those units works out to $85 per hour. The internal rate, built from a rental percentage years ago and nudged up now and then, averages $70. That's $15 per hour of cost that isn't recovered, on 56,000 hours: $840,000 a year.

    That money doesn't show up as a loss anyone signs off on. The equipment division's books just come up short, and the shortfall rolls into company overhead. Overhead gets spread across every project as a percentage markup. So the projects that ran the iron looked $840,000 more profitable than they were, the company-level margin came in lower than the job margins added up to, and the overhead rate crept up another notch without anyone being able to say why. Next year the estimator uses the same $70 rate because it keeps bids competitive, and the cycle repeats.

    The other direction is just as expensive, only quieter. If rates get set too high, projects look thin, project managers start renting from outside because "it's cheaper than our own iron," and owned machines sit in the yard. Utilization drops, which pushes the real cost per hour up further, and now the fleet shows a paper profit on machines that aren't running. Same disease, opposite symptom: the rate isn't the cost.

    Same Machine, Two Projects

    There's a second kind of gap that hides inside the first, and it's the one that distorts decisions the most. Even when the fleet recovers its costs on average, it can charge them to the wrong jobs.

    The most common version: projects get charged a fixed ownership number plus whatever maintenance the machine happened to consume while it was on the job. Consider a $650,000 excavator whose true lifecycle cost, ownership and maintenance averaged across its whole life, works out to about $110 per hour. In its first year it goes to Project A. It's under warranty, it needs nothing but PMs, and the job gets charged about $70 per hour. Five years later the same machine goes to Project B, and now the undercarriage, the main pump, and the first round of cylinder reseals come due. Project B gets charged $145 per hour.

    Neither number is the cost of that machine. It cost $110 an hour the whole time. Project A got the cheap years and looked like a great job. Project B got the expensive years and looked like a disaster. Across 1,800 hours each, Project A under-recovered by about $72,000 and Project B overpaid by about $63,000: a $135,000 swing on one machine, feeding into decisions about which project managers were performing, which kind of work to chase, and which bids were priced right. Spread that pattern across a 40-unit fleet and the mis-allocation runs to several hundred thousand dollars a year, on top of whatever the fleet is under-recovering overall.

    The fix isn't complicated in principle: charge every project the machine's lifecycle cost per hour, and let the fleet carry the timing. The new machine's cheap years and the old machine's expensive years even out inside the equipment division, where they belong. But you can only charge a lifecycle cost per hour if you know it, per unit, from actual data.

    Why Nobody Sees It

    If the recovery gap were a line on a report, it would get fixed. It isn't. It's the difference between two numbers that live in different places and are owned by different people.

    The cost side is scattered. Depreciation sits in the fixed asset schedule. Interest sits in finance. Shop labor is a payroll total. Parts are an inventory account. Outside repairs are in accounts payable under the vendor's name. None of it is organized by unit, so nobody can say what machine 412 actually cost this year without a week of spreadsheet work. The recovery side is clean by comparison, because job cost systems are good at recording what was charged. What no one has is both sides on the same page, per machine, per hour.

    The incentives don't help. Project managers want low rates because low rates make their jobs look good. Estimators want low rates because low rates win work. The fleet manager is the only one who wants the rate to reflect reality, and without per-unit cost data, that argument is an opinion against two people with numbers. Meanwhile the shortfall shows up as overhead, and the fleet manager gets asked why the shop is so expensive.

    Closing the Gap Starts With the Real Number

    You can't set an honest internal rate, or defend one, without knowing what each machine actually costs per hour. That means every hour of shop labor at your shop rate, every part at its purchase price, and every outside invoice landing on the unit that consumed it, ownership costs sitting on the same record, and hours coming off the meter, not off a timesheet. With that in place, cost per hour is a live number for every unit in the fleet, and the internal rate becomes a check against it instead of a guess.

    Tenmil is built around this. Work orders carry labor, parts, and third-party charges to the asset as they close. Ownership costs sit alongside them. Meter hours come from readings and telematics. So each machine's real cost per hour is visible and current, along with the trend, and it can be held up against what projects are being charged for it. When the excavator class is being charged out at $70 and the units in that class are running at $110, you can see it per machine, with the work orders behind it. That's a rate review that takes an afternoon instead of a quarter, and it's an argument the fleet manager can win, because it's the machine's own numbers.

    It also changes what "recovering costs" means. Instead of a rate someone set years ago, you're charging projects what the iron actually costs to own and keep running, based on the hours it actually runs, and reviewing it as the data moves. The fleet stops leaking into overhead. The projects carry their real equipment cost. And the numbers you bid from are the numbers you actually run at.

    Pay the Fleet What It Costs

    The internal rate is the one place where your equipment's cost meets your projects' revenue. If it's right, the fleet pays for itself, project margins are true, and the equipment division can be run like the business it is. If it's wrong, the difference doesn't go away. It hides in overhead, distorts job margins, and quietly shapes every bid and every performance review built on them.

    Most fleets have never actually measured that difference. Not because it's hard to fix, but because the real cost per hour, per unit, was never sitting anywhere anyone could see it. Put that number on the table next to the rate you're charging, and the recovery gap stops being invisible. Then it's just a decision.

    Related articles