Estimate your Inheritance Tax liability using current UK thresholds and rules.
Calculation Summary
Total Nil Rate Band:£0Total Residence NRB:£0Total Tax-Free Threshold:£0
Estimated Tax Due:£0Net Estate to Heirs:£0
Understanding the Nil Rate Band (NRB)
Inheritance Tax (IHT) in the UK is a tax on the estate (the property, money, and possessions) of someone who has died. The Nil Rate Band is the fixed threshold under which no Inheritance Tax is payable.
Standard Nil Rate Band (NRB)
The current standard Nil Rate Band is £325,000. This has been frozen until April 2028. If the total value of your estate is below this threshold, there is usually no IHT to pay. Any value above this amount is typically taxed at 40%.
Residence Nil Rate Band (RNRB)
The Residence Nil Rate Band is an additional allowance introduced to help families pass on the family home. It currently stands at £175,000. To qualify for the RNRB:
You must leave your home (or a share of it) to your "direct descendants" (children, grandchildren, etc.).
The value of the estate must be within certain limits (tapering applies for estates over £2 million).
Transferring Allowances
If a spouse or civil partner dies and does not use their full Nil Rate Band, the unused percentage can be transferred to the surviving partner's estate. This effectively allows a couple to pass on up to £1 million tax-free (£325k + £325k + £175k + £175k).
The Tapering Rule
For large estates, the Residence Nil Rate Band is subject to tapering. For every £2 that the estate value exceeds £2 million, the RNRB is reduced by £1. This means for very large estates, the additional property threshold may be completely lost.
Practical Example:
Estate Value: £800,000
Situation: Individual passing a home to children. Full standard NRB (£325k) and full RNRB (£175k) available.
Total Threshold: £500,000
Taxable Amount: £300,000
Tax Due (40%): £120,000
function calculateIHT() {
// Basic NRB constants
var baseNRB = 325000;
var baseRNRB = 175000;
var taperThreshold = 2000000;
// Get Inputs
var estateVal = parseFloat(document.getElementById('estateValue').value) || 0;
var transNRBPct = parseFloat(document.getElementById('transferredNRBPercent').value) || 0;
var residenceVal = parseFloat(document.getElementById('residenceValue').value) || 0;
var transRNRBPct = parseFloat(document.getElementById('transferredRNRBPercent').value) || 0;
var isPassingToDescendants = document.getElementById('passingToDescendants').checked;
// Limit percentages
if (transNRBPct > 100) transNRBPct = 100;
if (transRNRBPct > 100) transRNRBPct = 100;
// 1. Calculate Standard NRB
var totalNRB = baseNRB + (baseNRB * (transNRBPct / 100));
// 2. Calculate Residence NRB
var totalRNRBAvailable = 0;
if (isPassingToDescendants && residenceVal > 0) {
var potentialRNRB = baseRNRB + (baseRNRB * (transRNRBPct / 100));
// Handle Tapering
if (estateVal > taperThreshold) {
var taperAmount = Math.floor((estateVal – taperThreshold) / 2);
potentialRNRB = potentialRNRB – taperAmount;
if (potentialRNRB < 0) potentialRNRB = 0;
}
// RNRB is limited to the value of the residence
totalRNRBAvailable = Math.min(potentialRNRB, residenceVal);
}
// 3. Final Calculation
var combinedThreshold = totalNRB + totalRNRBAvailable;
var taxableAmount = estateVal – combinedThreshold;
if (taxableAmount < 0) taxableAmount = 0;
var taxDue = taxableAmount * 0.40;
var netEstate = estateVal – taxDue;
// Display Results
document.getElementById('resTotalNRB').innerText = "£" + totalNRB.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resTotalRNRB').innerText = "£" + totalRNRBAvailable.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resTotalThreshold').innerText = "£" + combinedThreshold.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resTaxDue').innerText = "£" + taxDue.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resNetEstate').innerText = "£" + netEstate.toLocaleString(undefined, {minimumFractionDigits: 0, maximumFractionDigits: 0});
document.getElementById('resultsArea').style.display = "block";
}