Donor Retention Rate Calculation

Donor Retention Rate Calculator .npo-calc-container { max-width: 800px; margin: 0 auto; font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif; background: #ffffff; border: 1px solid #e0e0e0; border-radius: 8px; padding: 20px; box-shadow: 0 4px 6px rgba(0,0,0,0.05); } .npo-calc-header { text-align: center; margin-bottom: 25px; background-color: #f7f9fc; padding: 15px; border-radius: 6px; } .npo-calc-header h2 { margin: 0; color: #2c3e50; font-size: 24px; } .npo-row { display: flex; flex-wrap: wrap; gap: 20px; margin-bottom: 20px; } .npo-col { flex: 1; min-width: 250px; } .npo-input-group { margin-bottom: 15px; } .npo-input-group label { display: block; margin-bottom: 8px; font-weight: 600; color: #4a5568; font-size: 14px; } .npo-input-group input { width: 100%; padding: 12px; border: 1px solid #cbd5e0; border-radius: 4px; font-size: 16px; box-sizing: border-box; transition: border-color 0.2s; } .npo-input-group input:focus { border-color: #4299e1; outline: none; box-shadow: 0 0 0 3px rgba(66, 153, 225, 0.2); } .npo-calc-btn { width: 100%; padding: 15px; background-color: #2b6cb0; color: white; border: none; border-radius: 6px; font-size: 18px; font-weight: bold; cursor: pointer; transition: background-color 0.2s; margin-top: 10px; } .npo-calc-btn:hover { background-color: #2c5282; } .npo-results { margin-top: 30px; padding: 20px; background-color: #ebf8ff; border-radius: 6px; border-left: 5px solid #4299e1; display: none; } .npo-result-item { display: flex; justify-content: space-between; align-items: center; margin-bottom: 15px; padding-bottom: 15px; border-bottom: 1px solid #bee3f8; } .npo-result-item:last-child { margin-bottom: 0; padding-bottom: 0; border-bottom: none; } .npo-result-label { font-weight: 600; color: #2d3748; } .npo-result-value { font-weight: 700; color: #2b6cb0; font-size: 20px; } .npo-article { margin-top: 40px; line-height: 1.6; color: #2d3748; } .npo-article h3 { color: #2c3e50; margin-top: 25px; border-bottom: 2px solid #edf2f7; padding-bottom: 10px; } .npo-article p { margin-bottom: 15px; } .npo-article ul { margin-bottom: 15px; padding-left: 20px; } .npo-article li { margin-bottom: 8px; } .info-tip { font-size: 12px; color: #718096; margin-top: 4px; } @media (max-width: 600px) { .npo-row { flex-direction: column; } }

Donor Retention Calculator

The number of unique donors who gave last year.
How many of the Period 1 donors gave again this year?

Optional: Calculate Value Retention

Donor Retention Rate
0.00%
Donor Attrition Rate (Churn)
0.00%
Revenue Retention Rate
0.00%
Change in Average Gift (Retained)

Understanding Your Donor Retention Rate

Donor Retention Rate is one of the most critical Key Performance Indicators (KPIs) for non-profit organizations. It measures the percentage of donors who gave in a previous time period (usually last year) and donated again in the current time period.

A high retention rate indicates a healthy relationship with your supporter base, while a declining rate may suggest issues with donor stewardship or communication strategies.

How is it Calculated?

The standard formula used in this calculator is:

( Number of Donors Retained / Total Donors in Previous Period ) × 100

Example: If you had 1,000 donors in 2022, and 450 of those specific individuals donated again in 2023, your retention rate is 45%.

What is a "Good" Retention Rate?

According to the Fundraising Effectiveness Project, the average donor retention rate for the non-profit sector typically hovers around 40% to 45%. However, this varies significantly by donor type:

  • First-time donors: Retention is often lower, around 20-30%.
  • Repeat donors: Donors who have given more than once tend to retain at 60% or higher.
  • Monthly (Recurring) donors: Often see retention rates upwards of 80-90%.

Donor Attrition vs. Value Retention

Donor Attrition (Churn): This is the inverse of retention. If you retain 40% of donors, you have lost (churned) 60%.

Value (Revenue) Retention: While you may lose some donors, if the donors who stay increase their giving significantly, your Value Retention Rate could be over 100%. This calculator provides both metrics if you input the revenue figures.

function calculateRetention() { // Get Inputs var initialDonors = document.getElementById('initialDonors').value; var retainedDonors = document.getElementById('retainedDonors').value; var initialRevenue = document.getElementById('initialRevenue').value; var retainedRevenue = document.getElementById('retainedRevenue').value; // Clean Inputs var donorsA = parseFloat(initialDonors); var donorsB = parseFloat(retainedDonors); var revA = parseFloat(initialRevenue); var revB = parseFloat(retainedRevenue); // Validation for Basic Retention if (isNaN(donorsA) || isNaN(donorsB) || donorsA donorsA) { alert("Retained donors cannot exceed the total number of donors from the previous period."); return; } // Calculate Donor Metrics var retentionRate = (donorsB / donorsA) * 100; var attritionRate = 100 – retentionRate; // Display Basic Results document.getElementById('resRetentionRate').innerHTML = retentionRate.toFixed(2) + '%'; document.getElementById('resAttritionRate').innerHTML = attritionRate.toFixed(2) + '%'; // Show Result Container document.getElementById('resultsArea').style.display = 'block'; // Optional: Revenue Logic var revRow = document.getElementById('revRetentionRow'); var giftRow = document.getElementById('avgGiftRow'); if (!isNaN(revA) && !isNaN(revB) && revA > 0) { // Calculate Value Retention var valRetention = (revB / revA) * 100; document.getElementById('resRevRetentionRate').innerHTML = valRetention.toFixed(2) + '%'; revRow.style.display = 'flex'; // Calculate Average Gift Change // Prev Avg Gift = revA / donorsA // Retained Avg Gift = revB / donorsB if (donorsB > 0) { var prevAvg = revA / donorsA; var currAvg = revB / donorsB; var diff = currAvg – prevAvg; var symbol = diff >= 0 ? "+" : "-"; document.getElementById('resAvgGiftChange').innerHTML = "$" + prevAvg.toFixed(2) + " → $" + currAvg.toFixed(2) + " (" + symbol + "$" + Math.abs(diff).toFixed(2) + ")"; giftRow.style.display = 'flex'; } else { giftRow.style.display = 'none'; } } else { revRow.style.display = 'none'; giftRow.style.display = 'none'; } }

Leave a Comment