What it is
Contractors own, lease, and rent equipment. Owned equipment has a cost whether it works or not. Rented equipment is billed by the day, week, or month.
Utilization compares the hours a machine is used with the hours it was available.
Why operators track it
- Rentals. Low utilization on a rental is money spent on idle time.
- Fleet decisions. Persistently low utilization on owned equipment suggests selling it; high utilization on rentals suggests buying.
- Job cost. Equipment is charged to jobs, often at internal rates. Utilization explains whether those rates recover the cost.
- Maintenance. Hours drive service intervals.
How it is calculated
Utilization = hours used ÷ hours available
- Hours used from telematics engine hours or from equipment time on timecards.
- Hours available = working days × shift hours, minus time in the shop if you choose.
- Report by unit, then by class (excavators, loaders) and by job.
Worked example
In October, with 176 available hours each, the excavator ran 132 hours (75%), the loader 88 (50%), the skid steer 150 (85%), and a rented crane 40 (23%).
How to read it
- Engine hours and billed hours differ. Telematics counts idling; timecards count what was charged to the job.
- Look at rentals first. Idle rental days are the easiest saving.
- Seasonality matters. Compare to the same month last year, not just last month.
- Target utilization depends on equipment type and business, so we do not publish a benchmark.
Definitional choices and common pitfalls
- Hours used source. Telematics engine hours, idle excluded, or timecard hours. Say which.
- Available hours. Calendar, working days, or scheduled shifts. Shop time in or out.
- Unit of time. Hours or days used. Days is simpler for rentals.
- Owned vs rented. Show separately. The cost of idle time is different.
How different roles use it
| Role | How they use it |
|---|---|
| Equipment manager | Reviews utilization by unit and class to decide on rentals, purchases, and sales. |
| Operations / superintendent | Returns idle rentals and moves equipment between jobs. |
| CFO / controller | Checks whether internal equipment rates cover ownership cost. |
| Project manager | Sees equipment cost on their jobs. |
Questions it answers
- Which rentals should be returned?
- Which owned units are idle most of the month?
- Should we buy instead of renting this class?
- Are internal rates recovering cost?
How to present it in a report
- A table of units with job, owned or rented, hours used, available, and utilization.
- Rentals sorted by lowest utilization.
- Utilization by equipment class over time.
| Unit | Class | Owned / rented | Job | Used | Available | Utilization |
|---|---|---|---|---|---|---|
| C-02 | Crane | Rented | 2417 | 40 | 176 | 23% |
| L-03 | Loader | Owned | 2431 | 88 | 176 | 50% |
| E-14 | Excavator | Owned | 2420 | 132 | 176 | 75% |
| T-09 | Skid steer | Owned | 2420 | 150 | 176 | 85% |
Data you need
Fields
| Field | What it means | Example value |
|---|---|---|
| Equipment unit | ID, class, owned or rented | E-14, excavator, owned |
| Engine hours | From telematics | 136.0 |
| Equipment time on timecards | Hours charged to jobs | 132 |
| Job assignment | Where the unit is | Job 2420 |
| Rental terms | Rate and period, for rentals | Weekly rate |
| Shop or down time | Days out of service | 1 |
What the raw data looks like
Example data A few rows as they might come out of the source system.
| Unit | Class | Owned / rented | Job | Engine hrs (Oct) | Timecard hrs | Down days |
|---|---|---|---|---|---|---|
| E-14 | Excavator | Owned | 2420 | 136.0 | 132 | 0 |
| L-03 | Loader | Owned | 2431 | 91.5 | 88 | 2 |
| C-02 | Crane | Rented | 2417 | 44.2 | 40 | 0 |
| T-09 | Skid steer | Owned | 2420 | 155.1 | 150 | 0 |
Where this data usually lives
- Equipment telematics portals from equipment makers hold engine hours and idle time. Rentals often appear only as AP invoices.
- Payroll and time tracking hold hours and labor cost by job and cost code, sometimes from a field time app.
- Construction ERP and accounting holds job cost, budgets, billing, AP, and AR. For example: Sage 300 Construction and Real Estate, Viewpoint Vista (Trimble), and Foundation. Some smaller contractors use general accounting software such as QuickBooks with jobs set up as projects.
The same field can live in more than one system. Agree with the customer which one is the source of truth.
Common data gaps and traps
- No telematics. Older or small equipment may have none; rely on timecards.
- Rentals not in the fleet list. Rentals may only appear as AP invoices.
- Equipment not on timecards. Some contractors charge equipment to jobs by day rate without hours.
- Several manufacturer portals. Telematics data may sit in more than one OEM system.
Related metrics
- Labor productivity: crews and machines together.
- Job cost variance: equipment cost by code.
- Cash flow by job: rental spend.
FAQ
- Should idle engine time count as used?
- Usually not. Many teams use engine hours minus idle, or timecard hours. State the rule.
- What about weekends?
- Use working days unless the job runs weekends. Keep the rule the same across units.
- Is there a target utilization?
- It depends on the equipment and business. We do not publish one without a source.
For your data teamFormula variants, tables, SQL sketch, and dashboard spec
Formula details
available_hours = working_days(:period) * shift_hours - down_days * shift_hours
used_hours = COALESCE(timecard_hours, engine_hours - idle_hours)
utilization = used_hours / available_hours
Worked example detail
| Unit | Used | Available | Utilization |
|---|---|---|---|
| E-14 | 132 | 176 | 75% |
| L-03 | 88 | 176 | 50% |
| C-02 (rented) | 40 | 176 | 23% |
| T-09 | 150 | 176 | 85% |
Tables and fields
| Table | Fields | Notes |
|---|---|---|
equipment |
unit_id, class, ownership, rental_rate | |
equipment_hours |
unit_id, work_date, engine_hours, idle_hours | From telematics |
equipment_time |
unit_id, job_id, work_date, hours | From timecards |
SQL sketch
SELECT e.unit_id, e.ownership, SUM(t.hours) AS used_hours,
:working_days * 8 AS available_hours,
SUM(t.hours) / (:working_days * 8.0) AS utilization
FROM equipment e LEFT JOIN equipment_time t ON t.unit_id = e.unit_id AND t.work_date BETWEEN :start AND :end
GROUP BY e.unit_id, e.ownership;
Build spec
Copy this into a ticket. It lists the grain, inputs, logic, and edge cases.
metric: construction.equipment_utilization
grain: one row per unit per period
inputs:
- used hours (timecard or telematics)
- working days
- shift hours
- down days
- ownership
logic:
- available = working_days * shift_hours - down time
- utilization = used / available
edge_cases:
- unit acquired mid-month: prorate available
- utilization > 100% (double shift): allow and label
- no hours source: return null
As a dashboard card
- Bar per unit sorted by utilization with rentals highlighted, and a trend by class.
Common mistakes
- Counting idle engine time as use.
- Leaving rentals out.
- Changing the available-hours rule between months.