Calculating rental yield is a critical step for any real estate investor. It measures the return on investment (ROI) generated by a property's rental income relative to its purchase price and associated costs. A clear understanding of both Gross Yield and Net Yield allows investors to compare properties effectively.
Gross Yield vs. Net Yield
There are two primary ways to look at yield:
Gross Yield: This is a simple calculation that looks at the annual rental income as a percentage of the property price. It is useful for a quick "snapshot" comparison between different properties but ignores expenses.
Net Yield: This is a more accurate reflection of ROI. It deducts all operating expenses—such as maintenance, management fees, insurance, taxes, and vacancy losses—from the rental income before calculating the percentage return against the total capital invested (price + closing costs).
What is a Good Rental Yield?
A "good" yield varies significantly by location and property type. Generally, investors aim for:
Residential Properties: 3% to 5% net yield is often considered solid in high-growth metropolitan areas, while 5% to 8% may be expected in regional areas with lower capital growth potential.
Commercial Properties: Often command higher yields, typically between 6% and 10%, to compensate for higher risks and longer vacancy periods.
Example Calculation
Imagine you purchase a property for $300,000 with closing costs of $15,000. You rent it out for $1,800 per month.
Annual Gross Rent: $1,800 × 12 = $21,600
Gross Yield: ($21,600 / $300,000) × 100 = 7.20%
Now, factor in $5,000 in annual expenses and 2 weeks of vacancy ($692 loss).
Effective Income: $21,600 – $692 = $20,908
Net Income: $20,908 – $5,000 = $15,908
Total Investment: $300,000 + $15,000 = $315,000
Net Yield: ($15,908 / $315,000) × 100 = 5.05%
Use the calculator above to run your own numbers and determine if an investment property fits your financial goals.
function validateInput(input) {
if (input.value < 0) input.value = 0;
}
function calculateYield() {
// 1. Get Elements
var priceInput = document.getElementById('ryc_price');
var closingInput = document.getElementById('ryc_closing_costs');
var rentInput = document.getElementById('ryc_rent');
var expensesInput = document.getElementById('ryc_annual_costs');
var vacancyInput = document.getElementById('ryc_vacancy');
var errorDiv = document.getElementById('ryc_error');
var resultsDiv = document.getElementById('ryc_results');
// 2. Parse Values (handle empty strings as 0)
var price = parseFloat(priceInput.value) || 0;
var closing = parseFloat(closingInput.value) || 0;
var monthlyRent = parseFloat(rentInput.value) || 0;
var annualCosts = parseFloat(expensesInput.value) || 0;
var vacancyWeeks = parseFloat(vacancyInput.value) || 0;
// 3. Validation
if (price === 0 || monthlyRent === 0) {
errorDiv.style.display = 'block';
resultsDiv.style.display = 'none';
return;
} else {
errorDiv.style.display = 'none';
}
// 4. Calculations
var annualGrossPotential = monthlyRent * 12;
var weeklyRent = annualGrossPotential / 52;
var vacancyLoss = weeklyRent * vacancyWeeks;
// Effective Gross Income (after vacancy)
var effectiveGrossIncome = annualGrossPotential – vacancyLoss;
// Total Expenses (Operating costs + Vacancy Loss calculated as a cost visually, or just deducted from income)
// For Net Yield Formula: Net Income / Total Investment
var netIncome = effectiveGrossIncome – annualCosts;
var totalInvestment = price + closing;
var totalExpensesVisual = annualCosts + vacancyLoss;
// Gross Yield Formula: Annual Rent / Property Price
var grossYield = (annualGrossPotential / price) * 100;
// Net Yield Formula: Net Operating Income / Total Cash Invested
var netYield = (netIncome / totalInvestment) * 100;
// 5. Update UI
document.getElementById('res_gross_yield').innerText = grossYield.toFixed(2) + '%';
document.getElementById('res_net_yield').innerText = netYield.toFixed(2) + '%';
// Format currency
var formatter = new Intl.NumberFormat('en-US', {
style: 'currency',
currency: 'USD',
});
document.getElementById('res_gross_income').innerText = formatter.format(annualGrossPotential);
document.getElementById('res_total_expenses').innerText = formatter.format(totalExpensesVisual);
document.getElementById('res_cash_flow').innerText = formatter.format(netIncome);
// Show Results
resultsDiv.style.display = 'block';
}