KRA Vehicle Import Duty Calculator 2025
/* Minified Tailwind CSS for the calculator */
*,::before,::after{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}html{line-height:1.5;-webkit-text-size-adjust:100%}body{margin:0;line-height:inherit}.container{width:100%;margin-right:auto;margin-left:auto;padding-right:1.5rem;padding-left:1.5rem}@media (min-width:640px){.container{max-width:640px}}@media (min-width:768px){.container{max-width:768px}}.flex{display:flex}.min-h-screen{min-height:100vh}.items-center{align-items:center}.justify-center{justify-content:center}.space-y-4>:not([hidden])~:not([hidden]){–tw-space-y-reverse:0;margin-top:calc(1rem * calc(1 – var(–tw-space-y-reverse)));margin-bottom:calc(1rem * var(–tw-space-y-reverse))}.rounded-lg{border-radius:0.5rem}.rounded-md{border-radius:0.375rem}.border{border-width:1px}.border-gray-300{–tw-border-opacity:1;border-color:rgb(209 213 219 / var(–tw-border-opacity))}.bg-gray-50{–tw-bg-opacity:1;background-color:rgb(249 250 251 / var(–tw-bg-opacity))}.bg-gray-100{–tw-bg-opacity:1;background-color:rgb(243 244 246 / var(–tw-bg-opacity))}.bg-white{–tw-bg-opacity:1;background-color:rgb(255 255 255 / var(–tw-bg-opacity))}.bg-blue-600{–tw-bg-opacity:1;background-color:rgb(37 99 235 / var(–tw-bg-opacity))}.bg-blue-700{–tw-bg-opacity:1;background-color:rgb(29 78 216 / var(–tw-bg-opacity))}.p-2{padding:0.5rem}.p-4{padding:1rem}.p-6{padding:1.5rem}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-xl{font-size:1.25rem;line-height:1.75rem}.text-2xl{font-size:1.5rem;line-height:2rem}.font-medium{font-weight:500}.font-semibold{font-weight:600}.font-bold{font-weight:700}.text-gray-700{–tw-text-opacity:1;color:rgb(55 65 81 / var(–tw-text-opacity))}.text-white{–tw-text-opacity:1;color:rgb(255 255 255 / var(–tw-text-opacity))}.text-red-600{–tw-text-opacity:1;color:rgb(220 38 38 / var(–tw-text-opacity))}.shadow-lg{box-shadow:0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05)}.mt-1{margin-top:0.25rem}.mt-2{margin-top:0.5rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.mb-4{margin-bottom:1rem}.mb-6{margin-bottom:1.5rem}.block{display:block}.hidden{display:none}.w-full{width:100%}.max-w-2xl{max-width:42rem}.hover\:bg-blue-700:hover{–tw-bg-opacity:1;background-color:rgb(29 78 216 / var(–tw-bg-opacity))}.table-auto{width:100%;table-layout:auto}.text-left{text-align:left}
KRA Vehicle Import Duty Calculator 2025
Vehicle Type
Motor Vehicles ≤1500cc (Incl. S/Cab Pickups/Lorries/Buses)
Motor Vehicles >1500cc (Excl. HS 8703.24.90 & 8703.33.90)
Motor Vehicles >3000cc Petrol or >2500cc Diesel
100% Electric Powered Motor Vehicles
School Buses for Public Schools
Prime Movers (No Excise Duty)
Trailers (No Excise Duty)
Ambulance
Motor Cycles
Special Purpose Vehicles
Heavy Machineries
Registration Status
Direct Import
Previously Registered in Kenya
Current Retail Selling Price (KES)
Year of Manufacture
Engine Capacity (cc)
Fuel Type
Petrol
Diesel
Hybrid
Electric
Calculate Duty
// Depreciation tables
const directImportDepreciation = {
1: 0.20, 2: 0.30, 3: 0.40, 4: 0.50, 5: 0.55, 6: 0.60, 7: 0.65
};
const registeredDepreciation = {
1: 0.20, 2: 0.35, 3: 0.50, 4: 0.60, 5: 0.70, 6: 0.75, 7: 0.80,
8: 0.83, 9: 0.86, 10: 0.89, 11: 0.90, 12: 0.91, 13: 0.92, 14: 0.93, 15: 0.94, 16: 0.95
};
// Tax rates by vehicle type
const taxRates = {
mv1500: { importDuty: 0.35, exciseDuty: 0.20, vat: 0.16, idf: 0.035, rdl: 0.02 },
mv1500plus: { importDuty: 0.35, exciseDuty: 0.25, vat: 0.16, idf: 0.035, rdl: 0.02 },
mv3000petrol2500diesel: { importDuty: 0.35, exciseDuty: 0.35, vat: 0.16, idf: 0.035, rdl: 0.02 },
electric: { importDuty: 0.25, exciseDuty: 0.10, vat: 0.16, idf: 0.035, rdl: 0.02 },
schoolBus: { importDuty: 0.35, exciseDuty: 0.25, vat: 0.16, idf: 0.035, rdl: 0.02 },
primeMover: { importDuty: 0.35, exciseDuty: 0.0, vat: 0.16, idf: 0.035, rdl: 0.02 },
trailer: { importDuty: 0.35, exciseDuty: 0.0, vat: 0.16, idf: 0.035, rdl: 0.02 },
ambulance: { importDuty: 0.0, exciseDuty: 0.25, vat: 0.16, idf: 0.035, rdl: 0.02 },
motorCycle: { importDuty: 0.25, exciseDuty: 12952.83, vat: 0.16, idf: 0.035, rdl: 0.02 },
specialPurpose: { importDuty: 0.0, exciseDuty: 0.0, vat: 0.16, idf: 0.035, rdl: 0.02 },
heavyMachinery: { importDuty: 0.0, exciseDuty: 0.0, vat: 0.16, idf: 0.035, rdl: 0.02 }
};
document.getElementById(‘vehicleType’).addEventListener(‘change’, function() {
const vehicleType = this.value;
const engineCapacityDiv = document.getElementById(‘engineCapacityDiv’);
const fuelTypeDiv = document.getElementById(‘fuelTypeDiv’);
engineCapacityDiv.classList.add(‘hidden’);
fuelTypeDiv.classList.add(‘hidden’);
if ([‘mv1500’, ‘mv1500plus’, ‘mv3000petrol2500diesel’].includes(vehicleType)) {
engineCapacityDiv.classList.remove(‘hidden’);
fuelTypeDiv.classList.remove(‘hidden’);
}
});
document.getElementById(‘dutyForm’).addEventListener(‘submit’, function(e) {
e.preventDefault();
const vehicleType = document.getElementById(‘vehicleType’).value;
const registrationStatus = document.getElementById(‘registrationStatus’).value;
const crsp = parseFloat(document.getElementById(‘crsp’).value);
const yom = parseInt(document.getElementById(‘yom’).value);
const currentYear = 2025;
const age = currentYear – yom;
const engineCapacity = parseInt(document.getElementById(‘engineCapacity’).value) || 0;
const fuelType = document.getElementById(‘fuelType’).value;
// Validation
const errorElement = document.getElementById(‘error’);
errorElement.textContent = ”;
if (isNaN(crsp) || crsp <= 0) {
errorElement.textContent = 'Please enter a valid CRSP value.';
return;
}
if (isNaN(yom) || yom currentYear) {
errorElement.textContent = ‘Please enter a valid Year of Manufacture.’;
return;
}
if ([‘mv1500’, ‘mv1500plus’, ‘mv3000petrol2500diesel’].includes(vehicleType)) {
if (isNaN(engineCapacity) || engineCapacity <= 0) {
errorElement.textContent = 'Please enter a valid Engine Capacity.';
return;
}
if (!fuelType) {
errorElement.textContent = 'Please select a Fuel Type.';
return;
}
}
// Validate engine capacity and fuel type for specific vehicle types
if (vehicleType === 'mv3000petrol2500diesel') {
if ((fuelType === 'petrol' && engineCapacity <= 3000) || (fuelType === 'diesel' && engineCapacity = 8 ? 0.65 : directImportDepreciation[age] || 0;
} else {
depreciation = registeredDepreciation[Math.min(age, 16)] || 0;
}
// Calculations
const customsValue = crsp * (1 – depreciation);
const rates = taxRates[vehicleType];
const importDuty = customsValue * rates.importDuty;
const exciseValue = customsValue + importDuty;
const exciseDuty = vehicleType === ‘motorCycle’ ? rates.exciseDuty : exciseValue * rates.exciseDuty;
const vatValue = exciseValue + exciseDuty;
const vat = vatValue * rates.vat;
const idf = customsValue * rates.idf;
const rdl = customsValue * rates.rdl;
const grandTotal = registrationStatus === ‘direct’ ?
customsValue + importDuty + exciseDuty + vat + idf + rdl :
importDuty + exciseDuty + vat;
// Display results with thousand separators
const resultTable = `
Current Retail Selling Price (KES): ${crsp.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
Depreciation (${(depreciation * 100).toFixed(0)}%): ${(crsp * depreciation).toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
Customs Value: ${customsValue.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
Import Duty (${(rates.importDuty * 100).toFixed(0)}%): ${importDuty.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
Excise Value: ${exciseValue.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
Excise Duty${vehicleType === ‘motorCycle’ ? ” : ` (${(rates.exciseDuty * 100).toFixed(0)}%)`}: ${exciseDuty.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
VAT Value: ${vatValue.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
VAT (16%): ${vat.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
${registrationStatus === ‘direct’ ? `
IDF Fees (3.5%): ${idf.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
RDL (2%): ${rdl.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
` : ”}
Grand Total (KES): ${grandTotal.toLocaleString(‘en-KE’, { minimumFractionDigits: 2, maximumFractionDigits: 2 })}
`;
document.getElementById(‘resultTable’).innerHTML = resultTable;
document.getElementById(‘result’).classList.remove(‘hidden’);
});