This calculator shows how claiming expenses affects your tax. By default, store revenue is $0 (just claiming expenses reduces your taxable income), but you can adjust the revenue.
Location
Auckland
Wellington
Christchurch
Hamilton
Tauranga
Napier
Dunedin
Palmerston North
Nelson
Rotorua
Other Income Sources
Yes
This calculator is only for a single main salary and no other business income.
Please contact us or your accountant directly.
Main Employment & Store Revenue
Home Office Calculation (For Interest/Rent & Rates)
Select rooms used for business and enter total home size:
Expenses (Weekly, NZD)
Interest / Rent:
Percentage determined by home office calculation (max 30%).
Rates:
Percentage determined by home office calculation (max 30%).
Phone Bill:
Percentage for business use (max 30%):
%
Power Bill:
Percentage for business use (max 30%):
%
Water Bill:
Percentage for business use (max 30%):
%
Petrol Cost:
Percentage for business use (max 30%):
%
Other:
Percentage for business use (max 30%):
%
Summary
Detailed Calculations
Total Income Without Store:
Total Tax Without Store:
Total Income With Store:
Total Tax With Store:
Additional Tax Due To Store:
Total Business Deductible Expenses:
Store Net Profit After Expenses:
Total Tax Reduction:
Effective Tax Rate on Additional Income: %
body {margin:0;padding:0;font-family:'Inter',sans-serif;}
.tax-calculator-container{max-width:600px;margin:40px auto;background:#fefefe;border-radius:10px;padding:30px;box-shadow:0 4px 12px rgba(0,0,0,0.1);color:#333;}
h1{text-align:center;font-size:1.8rem;margin-bottom:10px;}
.description{text-align:center;color:#666;font-size:0.9rem;margin-bottom:20px;}
.calc-section{margin-bottom:30px;}
.calc-section h2{font-size:1.2rem;border-bottom:1px solid #ddd;padding-bottom:5px;margin-bottom:20px;color:#444;}
.input-row,.expense-row{display:flex;flex-direction:column;margin-bottom:20px;}
.input-row label,.expense-row strong{font-weight:600;margin-bottom:5px;}
input[type="text"],select{border:1px solid #ccc;border-radius:5px;padding:8px;font-size:0.9rem;outline:none;width:100%;max-width:200px;}
input[type="range"]{width:100%;}
.slider-title{font-size:0.85rem;color:#555;margin:5px 0;}
.note{margin-top:5px;font-size:0.85rem;color:#555;}
.rooms-selection{margin:10px 0;}
.info-msg{font-size:0.9rem;}
#toggleDetailsBtn{padding:6px 12px;border:none;background:#00aaff;color:#fff;border-radius:5px;cursor:pointer;font-size:0.9rem;margin-top:10px;}
#toggleDetailsBtn:hover{background:#008ecc;}
.results{background:#f9f9f9;border-radius:8px;padding:20px;border:1px solid #eee;}
.results h2{margin-top:0;font-size:1.2rem;margin-bottom:20px;}
.result-row{display:flex;justify-content:space-between;margin-bottom:10px;font-size:0.95rem;flex-wrap:wrap;}
.result-row strong{color:#111;}
.result-row span{color:#333;font-weight:500;}
.currency-input{position:relative;max-width:200px;width:100%;}
.currency-input::before{content:'$';position:absolute;left:10px;top:50%;transform:translateY(-50%);color:#333;font-size:0.9rem;}
.currency-input input{padding-left:20px;border:1px solid #ccc;border-radius:5px;width:100%;}
@media screen and (max-width:600px){
.tax-calculator-container{margin:20px;padding:20px;}
.result-row{flex-direction:column;align-items:flex-start;}
#toggleDetailsBtn{margin-top:15px;}
}
document.addEventListener('DOMContentLoaded',function(){
var cityData={
auckland:{salary:1200,interest_rent:650,phone:25,power:18,water:15,rates:60,petrol:35,other:12},
wellington:{salary:1100,interest_rent:600,phone:20,power:17,water:14,rates:55,petrol:32,other:10},
christchurch:{salary:1050,interest_rent:550,phone:22,power:16,water:13,rates:50,petrol:30,other:10},
hamilton:{salary:1000,interest_rent:500,phone:20,power:15,water:12,rates:48,petrol:28,other:9},
tauranga:{salary:950,interest_rent:530,phone:19,power:14,water:12,rates:50,petrol:27,other:9},
napier:{salary:900,interest_rent:480,phone:18,power:14,water:11,rates:45,petrol:26,other:8},
dunedin:{salary:920,interest_rent:450,phone:18,power:14,water:11,rates:42,petrol:25,other:8},
palmerston_north:{salary:880,interest_rent:470,phone:17,power:13,water:10,rates:40,petrol:24,other:7},
nelson:{salary:890,interest_rent:490,phone:18,power:13,water:10,rates:45,petrol:24,other:7},
rotorua:{salary:870,interest_rent:460,phone:17,power:13,water:10,rates:43,petrol:23,other:7}
};
var roomSizes={bedroom:12,office:10,lounge:20,kitchen:15,garage:25};
var otherBusiness=document.getElementById('otherBusiness');
var otherBusinessMsg=document.getElementById('otherBusinessMsg');
var citySelect=document.getElementById('citySelect');
var primaryIncome=document.getElementById('primaryIncome');
var storeRevenue=document.getElementById('storeRevenue');
var homeSize=document.getElementById('homeSize');
var calculateHomeUseBtn=document.getElementById('calculateHomeUseBtn');
var homeUseResult=document.getElementById('homeUseResult');
var roomCheckboxes=document.querySelectorAll('.room-checkbox');
var summaryText=document.getElementById('summaryText');
var toggleDetailsBtn=document.getElementById('toggleDetailsBtn');
var resultArea=document.getElementById('resultArea');
var exp_interest_rent=document.getElementById('exp_interest_rent');
var exp_rates=document.getElementById('exp_rates');
var cats=['phone','power','water','petrol','other'];
var businessHomePercentage=0;
otherBusiness.addEventListener('change',function(){
if(isOtherBusinessChecked()){
otherBusinessMsg.style.display='block';
disableAllInputs(true);
}else{
otherBusinessMsg.style.display='none';
disableAllInputs(false);
calculateTax();
}
});
citySelect.addEventListener('change',function(){
applyCityDefaults(citySelect.value);
if(!isOtherBusinessChecked()) calculateTax();
});
toggleDetailsBtn.addEventListener('click',function(){
if(resultArea.style.display==='none'){
resultArea.style.display='block';
toggleDetailsBtn.textContent='Hide Details';
} else {
resultArea.style.display='none';
toggleDetailsBtn.textContent='Show Details';
}
});
calculateHomeUseBtn.addEventListener('click',function(){
var totalArea=parseFloat(homeSize.value)||0;
if(totalArea30) perc=30;
businessHomePercentage=perc;
homeUseResult.style.display='block';
homeUseResult.textContent="Business Use: "+perc.toFixed(2)+"% of home (capped at 30%)";
cats.forEach(function(cat){
document.getElementById('slider_'+cat).value=perc;
document.getElementById('input_'+cat).value=Math.round(perc);
});
if(!isOtherBusinessChecked()) calculateTax();
});
var dynamicInputs=[
'primaryIncome','storeRevenue','homeSize','citySelect','calculateHomeUseBtn',
'exp_phone','slider_phone','input_phone',
'exp_power','slider_power','input_power',
'exp_water','slider_water','input_water',
'exp_petrol','slider_petrol','input_petrol',
'exp_other','slider_other','input_other',
'exp_interest_rent','exp_rates'
];
roomCheckboxes.forEach(cb=>dynamicInputs.push(cb));
dynamicInputs.forEach(function(id){
var elem=document.getElementById(id);
if(elem && !id.startsWith('slider_') && !id.startsWith('input_')){
elem.addEventListener('input',function(){
if(!isOtherBusinessChecked()) calculateTax();
});
}
});
cats.forEach(syncExpensePercentage);
applyCityDefaults('auckland');
calculateTax();
function isOtherBusinessChecked(){return otherBusiness.checked;}
function disableAllInputs(disable){
dynamicInputs.forEach(function(id){
var elem=document.getElementById(id);
if(elem) elem.disabled=disable;
});
roomCheckboxes.forEach(cb=>cb.disabled=disable);
}
function applyCityDefaults(city){
var data=cityData[city];
primaryIncome.value=data.salary;
storeRevenue.value=0;
exp_interest_rent.value=data.interest_rent;
exp_rates.value=data.rates;
document.getElementById('exp_phone').value=data.phone;
document.getElementById('exp_power').value=data.power;
document.getElementById('exp_water').value=data.water;
document.getElementById('exp_petrol').value=data.petrol;
document.getElementById('exp_other').value=data.other;
businessHomePercentage=0;
cats.forEach(function(cat){
document.getElementById('slider_'+cat).value=30;
document.getElementById('input_'+cat).value=30;
});
}
function syncExpensePercentage(cat){
var slider=document.getElementById('slider_'+cat);
var input=document.getElementById('input_'+cat);
slider.addEventListener('input',function(){
var val=Math.min(slider.value,30);
slider.value=val; input.value=val;
if(!isOtherBusinessChecked())calculateTax();
});
input.addEventListener('input',function(){
var val=parseFloat(input.value)||0;
val=Math.min(Math.max(val,0),30);
input.value=val; slider.value=val;
if(!isOtherBusinessChecked())calculateTax();
});
}
function calculateNZTax(income){
if(income<=14000)return income*0.105;
else if(income<=48000)return(14000*0.105)+(income-14000)*0.175;
else if(income<=70000)return(14000*0.105)+(48000-14000)*0.175+(income-48000)*0.30;
else if(income taxNoStore
if(netBenefit > taxNoStore) {
netBenefit = taxNoStore;
}
var effectiveTax=(storeProfitAnnual!==0)?(additionalTax/storeProfitAnnual)*100:0;
document.getElementById('noStoreIncome').textContent=incomeNoStoreAnnual.toFixed(2);
document.getElementById('noStoreTax').textContent=taxNoStore.toFixed(2);
document.getElementById('withStoreIncome').textContent=incomeWithStoreAnnual.toFixed(2);
document.getElementById('withStoreTax').textContent=taxWithStore.toFixed(2);
document.getElementById('additionalTax').textContent=additionalTax.toFixed(2);
document.getElementById('totalDeductibleExpenses').textContent=totalDeductibleAnnual.toFixed(2);
document.getElementById('storeProfit').textContent=storeProfitAnnual.toFixed(2);
document.getElementById('netBenefit').textContent=netBenefit.toFixed(2);
document.getElementById('effectiveTaxRate').textContent=effectiveTax.toFixed(2);
// Summary line logic
// If netBenefit>0 and storeRevenue=0: "Tax refund due"
// If netBenefit>0 and storeRevenue>0: "Extra money in pocket"
// If netBenefit0 && weeklyRevenue===0) {
summaryText.textContent="Tax refund due: $"+netBenefit.toFixed(2);
} else if(netBenefit>0 && weeklyRevenue>0) {
summaryText.textContent="Extra money in pocket: $"+netBenefit.toFixed(2);
} else {
var extraCost=Math.abs(netBenefit);
summaryText.textContent="Additional Tax Due: $"+extraCost.toFixed(2);
}
}
});