Estimate the growth of your portfolio by reinvesting dividends and adding monthly contributions.
Monthly
Quarterly
Annually
Total Portfolio Value:$0.00
Total Contributions:$0.00
Total Dividends Earned:$0.00
Estimated Annual Dividend Income:$0.00
What is a DRIP Calculator?
A Dividend Reinvestment Plan (DRIP) calculator helps investors visualize the power of compounding. When you own dividend-paying stocks, you have two choices: take the cash or use that cash to buy more shares. By choosing to reinvest, you increase the number of shares you own, which in turn increases your next dividend payment, creating a "snowball effect."
How the Calculation Works
Our calculator accounts for three main drivers of wealth:
Price Appreciation: The underlying value of the shares increasing over time (capital gains).
Dividend Yield: The percentage of the share price paid out annually to shareholders.
Contributions: Regularly adding new capital to your investment account.
Real-World Example
Imagine you start with $10,000 in a high-yield dividend stock. You contribute $500 per month. The stock has a 4% dividend yield and the share price grows at 5% per year. After 20 years of reinvesting dividends (DRIP):
Your total out-of-pocket contributions would be $130,000.
However, your final portfolio would likely exceed $400,000.
Your annual dividend income at the end of the period would be roughly $16,000 per year, purely from passive yield.
Why Reinvesting Dividends Matters
Reinvesting dividends is one of the most effective ways to build long-term wealth. Because dividends are often paid quarterly or monthly, reinvesting them allows you to benefit from "compound interest" on a more frequent basis. Over decades, the portion of your portfolio value derived from reinvested dividends often exceeds the portion from your original principal investment.
function calculateDRIP() {
var initialInvestment = parseFloat(document.getElementById('initial_investment').value);
var monthlyContribution = parseFloat(document.getElementById('monthly_contribution').value);
var annualYieldPercent = parseFloat(document.getElementById('dividend_yield').value) / 100;
var annualGrowthPercent = parseFloat(document.getElementById('stock_growth').value) / 100;
var years = parseInt(document.getElementById('years').value);
var freq = parseInt(document.getElementById('dividend_freq').value);
if (isNaN(initialInvestment) || isNaN(monthlyContribution) || isNaN(years)) {
alert("Please enter valid numbers in all fields.");
return;
}
var totalMonths = years * 12;
var currentBalance = initialInvestment;
var totalInvested = initialInvestment;
var totalDividends = 0;
// Convert annual rates to monthly for calculation
var monthlyGrowthRate = Math.pow(1 + annualGrowthPercent, 1/12) – 1;
// We calculate month by month to handle monthly contributions and compounding
for (var m = 1; m <= totalMonths; m++) {
// 1. Apply monthly price appreciation
currentBalance = currentBalance * (1 + monthlyGrowthRate);
// 2. Add monthly contribution
currentBalance += monthlyContribution;
totalInvested += monthlyContribution;
// 3. Handle Dividend Payout/Reinvestment based on frequency
// (12/freq) tells us how many months are in a dividend period
var monthsInPeriod = 12 / freq;
if (m % monthsInPeriod === 0) {
var periodYield = annualYieldPercent / freq;
var dividendAmount = currentBalance * periodYield;
totalDividends += dividendAmount;
currentBalance += dividendAmount; // Reinvesting
}
}
var finalAnnualIncome = currentBalance * annualYieldPercent;
// Display Results
document.getElementById('drip-results-box').style.display = 'block';
document.getElementById('res_total_value').innerText = '$' + currentBalance.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_total_contributions').innerText = '$' + totalInvested.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_total_dividends').innerText = '$' + totalDividends.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('res_annual_income').innerText = '$' + finalAnnualIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
}