Stamp Duty Land Tax Calculator (SDLT)
Updated for current UK rates (England & Northern Ireland)
Calculation Breakdown
Understanding the New Stamp Duty Rates
Stamp Duty Land Tax (SDLT) is a progressive tax paid when purchasing a property in England and Northern Ireland. The amount you pay depends on the property price, your buying status (e.g., first-time buyer), and whether you are a UK resident.
Recent changes to the thresholds mean that buyers can now purchase properties up to £250,000 without paying any Stamp Duty (for standard purchases), or up to £425,000 for First Time Buyers.
Current Standard Rates (Moving Home)
If you are replacing your main residence, the following rates apply to the portion of the property price falling within each band:
| Property Value Band | SDLT Rate |
|---|---|
| £0 – £250,000 | 0% |
| £250,001 – £925,000 | 5% |
| £925,001 – £1,500,000 | 10% |
| Over £1,500,000 | 12% |
First Time Buyer Relief
First-time buyers benefit from increased thresholds. If the property price is £625,000 or less, you pay:
- 0% on the first £425,000.
- 5% on the remainder up to £625,000.
Additional Properties and Non-Residents
Additional Dwelling Supplement: If you are buying a second home or a buy-to-let property, you must pay an extra 3% on top of the standard rates for each band.
Non-Resident Surcharge: Non-UK residents purchasing residential property in England and Northern Ireland must pay a 2% surcharge on top of all other applicable rates.
Calculation Example
Imagine a home mover purchasing a property for £500,000. The calculation works as follows:
- £0 to £250,000: Taxed at 0% = £0.
- £250,001 to £500,000: The remaining £250,000 is taxed at 5% = £12,500.
- Total Stamp Duty: £12,500.
If this were a second home, an additional 3% would be charged on the full £500,000 (£15,000), making the total tax £27,500.
- ";
// Base Rates and Bands logic
var bands = [];
var rates = [];
// Surcharges
var surcharge = 0;
if (buyerType === 'additional') {
surcharge += 0.03; // 3% extra for additional homes
}
if (isNonResident) {
surcharge += 0.02; // 2% extra for non-residents
}
// Determine Logic based on Buyer Type
if (buyerType === 'ftb' && price 0) {
var taxable1 = Math.min(price, band1Limit);
var rate1 = 0 + surcharge;
var tax1 = taxable1 * rate1;
totalTax += tax1;
breakdownHtml += "
- £0 – £" + taxable1.toLocaleString() + " @ " + (rate1*100).toFixed(1) + "% = £" + tax1.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } // Band 2 if (price > band1Limit) { var taxable2 = price – band1Limit; var rate2 = 0.05 + surcharge; var tax2 = taxable2 * rate2; totalTax += tax2; breakdownHtml += "
- £" + (band1Limit+1).toLocaleString() + " – £" + price.toLocaleString() + " @ " + (rate2*100).toFixed(1) + "% = £" + tax2.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } } else { // Standard Logic (applies to Next Home, Additional Home, and FTB over £625k) // If FTB is over £625k, they lose all relief and pay standard rates. // Bands: 0-250k, 250k-925k, 925k-1.5m, 1.5m+ // Base Rates: 0%, 5%, 10%, 12% // Add surcharge to all base rates var b1 = 250000; var b2 = 925000; var b3 = 1500000; // Band 1: 0 – 250k var taxable1 = Math.min(price, b1); var rate1 = 0 + surcharge; var tax1 = taxable1 * rate1; totalTax += tax1; if (taxable1 > 0) { breakdownHtml += "
- £0 – £" + taxable1.toLocaleString() + " @ " + (rate1*100).toFixed(1) + "% = £" + tax1.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } // Band 2: 250k – 925k if (price > b1) { var taxable2 = Math.min(price, b2) – b1; var rate2 = 0.05 + surcharge; var tax2 = taxable2 * rate2; totalTax += tax2; breakdownHtml += "
- £" + (b1+1).toLocaleString() + " – £" + Math.min(price, b2).toLocaleString() + " @ " + (rate2*100).toFixed(1) + "% = £" + tax2.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } // Band 3: 925k – 1.5m if (price > b2) { var taxable3 = Math.min(price, b3) – b2; var rate3 = 0.10 + surcharge; var tax3 = taxable3 * rate3; totalTax += tax3; breakdownHtml += "
- £" + (b2+1).toLocaleString() + " – £" + Math.min(price, b3).toLocaleString() + " @ " + (rate3*100).toFixed(1) + "% = £" + tax3.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } // Band 4: 1.5m+ if (price > b3) { var taxable4 = price – b3; var rate4 = 0.12 + surcharge; var tax4 = taxable4 * rate4; totalTax += tax4; breakdownHtml += "
- £" + (b3+1).toLocaleString() + "+ @ " + (rate4*100).toFixed(1) + "% = £" + tax4.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2}) + " "; } } breakdownHtml += "