Investing in real estate is one of the most reliable ways to build wealth, but not every property is a good deal. The key to successful real estate investing is analyzing the numbers accurately before you buy. This Rental Property Cash Flow Calculator helps you determine if a potential investment will generate positive income or drain your wallet.
What is Cash Flow?
Cash flow is the profit you bring in each month after paying all operating expenses and mortgage payments. It is calculated as:
Cash Flow = Total Rental Income – Total Expenses – Mortgage Payment
Positive cash flow means the property pays for itself and provides you with monthly income. Negative cash flow implies you must contribute your own money every month to keep the property, which is generally risky.
Key Metrics Calculated
Cash on Cash (CoC) Return: This metric measures the annual return on the actual cash you invested (Down Payment + Closing Costs). A higher CoC indicates a better return on your capital. Many investors target 8-12% or higher.
Monthly Expenses: This includes obvious costs like taxes and insurance, but also "hidden" costs like vacancy reserves, repairs, and HOA fees. Our calculator accounts for these to give you a realistic picture.
How to Use This Calculator
Enter the Purchase Price and your financing details (Down Payment, Interest Rate).
Input the expected Monthly Rental Income based on comparable properties in the area.
Estimate annual expenses like Taxes and Insurance. Don't forget to allocate a percentage for maintenance and vacancy (typically 5-10% each).
Use the results to compare different properties and financing strategies to maximize your investment returns.
function calculateCashFlow() {
// 1. Get Input Values
var price = parseFloat(document.getElementById('rp_price').value) || 0;
var downPercent = parseFloat(document.getElementById('rp_down').value) || 0;
var closingCosts = parseFloat(document.getElementById('rp_closing').value) || 0;
var rate = parseFloat(document.getElementById('rp_rate').value) || 0;
var years = parseFloat(document.getElementById('rp_term').value) || 0;
var rent = parseFloat(document.getElementById('rp_rent').value) || 0;
var annualTax = parseFloat(document.getElementById('rp_tax').value) || 0;
var annualIns = parseFloat(document.getElementById('rp_ins').value) || 0;
var monthlyHOA = parseFloat(document.getElementById('rp_hoa').value) || 0;
var maintPercent = parseFloat(document.getElementById('rp_maint').value) || 0;
// 2. Calculate Mortgage (P&I)
var loanAmount = price – (price * (downPercent / 100));
var monthlyRate = (rate / 100) / 12;
var totalPayments = years * 12;
var monthlyMortgage = 0;
if (rate > 0) {
monthlyMortgage = loanAmount * (monthlyRate * Math.pow(1 + monthlyRate, totalPayments)) / (Math.pow(1 + monthlyRate, totalPayments) – 1);
} else {
monthlyMortgage = loanAmount / totalPayments;
}
// 3. Calculate Monthly Expenses
var monthlyTax = annualTax / 12;
var monthlyIns = annualIns / 12;
var monthlyMaint = rent * (maintPercent / 100);
// Total Operational Expenses (Tax, Ins, HOA, Maint)
var totalMonthlyExpenses = monthlyTax + monthlyIns + monthlyHOA + monthlyMaint;
// 4. Calculate Cash Flow
var totalOutflow = monthlyMortgage + totalMonthlyExpenses;
var monthlyCashFlow = rent – totalOutflow;
var annualCashFlow = monthlyCashFlow * 12;
// 5. Calculate Returns
var totalCashInvested = (price * (downPercent / 100)) + closingCosts;
var cocReturn = 0;
if (totalCashInvested > 0) {
cocReturn = (annualCashFlow / totalCashInvested) * 100;
}
// 6. Update HTML Results
document.getElementById('res_mortgage').innerText = "$" + monthlyMortgage.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
document.getElementById('res_expenses').innerText = "$" + totalMonthlyExpenses.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
document.getElementById('res_outflow').innerText = "$" + totalOutflow.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
var cfElement = document.getElementById('res_cashflow');
cfElement.innerText = "$" + monthlyCashFlow.toFixed(2).replace(/\d(?=(\d{3})+\.)/g, '$&,');
// Color coding for cash flow
if (monthlyCashFlow >= 0) {
cfElement.style.color = "green";
} else {
cfElement.style.color = "red";
}
var cocElement = document.getElementById('res_coc');
cocElement.innerText = cocReturn.toFixed(2) + "%";
if (cocReturn >= 0) {
cocElement.style.color = "green";
} else {
cocElement.style.color = "red";
}
// Show results div
document.getElementById('rp_results').style.display = "block";
}