Determine your profitable freight rates per kilometer and per hour.
Annual Fixed Costs
Variable Costs & Utilization
Required Rate Per KM
$0.00
Total Annual Costs
$0.00
Annual Revenue Target
$0.00
How to Calculate Profitable Rates for Owner Drivers
Running a transport business as an owner-driver is more than just driving; it is a complex financial operation. To survive in the freight industry, you must know your "Cost of Doing Business" (CODB) down to the cent. Many drivers fail because they accept market rates without knowing if those rates actually cover their specific expenses.
The Components of Your Rate
To use this calculator effectively, you need to understand the three main pillars of your trucking rates:
Fixed Costs: These are expenses you pay even if the truck doesn't move. This includes your finance payments, insurance, registration, and your base driver salary.
Variable Costs: These costs fluctuate based on how many kilometers you drive. Fuel is the biggest variable, followed by maintenance, tyres, and repairs.
Profit Margin: This is the "plus" on top of your costs. Profit is what allows the business to grow, replace the truck in the future, and handle emergencies. A business without profit is just a job with massive liability.
Calculation Example
Let's look at a realistic scenario for a medium-duty truck operation:
Expense Item
Estimated Value
Annual Fixed Costs (Lease, Ins, Rego)
$45,000
Driver Salary
$85,000
Fuel Cost (at $2.00/L and 30L/100km)
$0.60 per KM
Total KM per year
100,000 KM
In this example, the total annual operating cost would be roughly $190,000. If you aim for a 15% profit margin, you need to generate $218,500 in revenue, which equates to a Rate of $2.19 per KM.
Why You Must Include a Driver Salary
One of the most common mistakes owner-drivers make is not including a fair wage for themselves in the fixed costs. If you only calculate truck expenses and profit, you are working for free. Your salary should reflect what you would earn as a company driver, while the profit belongs to the business for capital reinvestment.
function calculateOwnerDriverRates() {
// Inputs
var monthlyLease = parseFloat(document.getElementById('monthlyLease').value) || 0;
var annualInsurance = parseFloat(document.getElementById('annualInsurance').value) || 0;
var annualRego = parseFloat(document.getElementById('annualRego').value) || 0;
var driverSalary = parseFloat(document.getElementById('driverSalary').value) || 0;
var annualKm = parseFloat(document.getElementById('annualKm').value) || 0;
var fuelPrice = parseFloat(document.getElementById('fuelPrice').value) || 0;
var fuelConsumption = parseFloat(document.getElementById('fuelConsumption').value) || 0;
var maintenancePerKm = parseFloat(document.getElementById('maintenancePerKm').value) || 0;
var profitMargin = parseFloat(document.getElementById('profitMargin').value) || 0;
if (annualKm <= 0) {
alert("Please enter a valid annual distance (KM).");
return;
}
// Fixed Costs Calculation
var annualLease = monthlyLease * 12;
var totalFixedCosts = annualLease + annualInsurance + annualRego + driverSalary;
// Variable Costs Calculation
// Fuel cost per KM = (Price per L * Liters used per 100km) / 100
var fuelCostPerKm = (fuelPrice * fuelConsumption) / 100;
var totalVariableCostPerKm = fuelCostPerKm + maintenancePerKm;
var totalAnnualVariableCosts = totalVariableCostPerKm * annualKm;
// Total Operating Costs
var totalOperatingCosts = totalFixedCosts + totalAnnualVariableCosts;
// Apply Profit Margin
// Target Revenue = Costs / (1 – Margin%) OR Costs * (1 + Margin%)
// Usually in transport, margin is added on top of costs
var targetRevenue = totalOperatingCosts * (1 + (profitMargin / 100));
// Rate Per KM
var ratePerKm = targetRevenue / annualKm;
// Display Results
document.getElementById('resultsArea').style.display = 'block';
document.getElementById('resRateKm').innerText = '$' + ratePerKm.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('resTotalCosts').innerText = '$' + totalOperatingCosts.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resRevenue').innerText = '$' + targetRevenue.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
// Smooth scroll to results
document.getElementById('resultsArea').scrollIntoView({ behavior: 'smooth' });
}