Rental Property Bad Debt Allowance Calculator in Excel: Model What Actually Collects

Your 12-unit in Dayton billed $180,000 of rent last year. The bank took in $171,400. That $8,600 gap never appeared anywhere in your model, because your pro forma carried a single line called "vacancy and credit loss, 5%" and called it a day. A rental property bad debt allowance calculator in Excel exists to split that line in two, since the halves behave nothing alike and cost wildly different amounts.
Vacancy is a unit sitting empty. You never billed anyone, you lost the rent, you re-rent it in 30 days. Bad debt is a unit that is occupied, billed, and not paying. You cannot re-rent it. You cannot enter it. In most states you cannot start the clock for another 30 days after the first missed payment. Rolling both into one percentage is the most common reason a deal that penciled at a 1.20 debt service coverage ratio reports 1.06 at its first annual review.
One Non-Payer Costs What Six Vacant Months Cost
Price both events on the same unit at $1,250 a month and the asymmetry stops being theoretical.
| Cost line | Vacancy event | Bad debt event |
|---|---|---|
| Billed rent never collected | $0 | $5,000 (4 months) |
| Vacant time lost | $1,250 (1 month) | $1,250 (post-lockout turn) |
| Filing, service, attorney | $0 | $1,100 |
| Turnover repairs above normal | $0 | $1,800 |
| Security deposit applied | $0 | ($1,250) |
| Post-judgment recovery at 8% | $0 | ($632) |
| Net cost per event | $1,250 | $7,268 |
One default costs 5.8 months of vacancy on the same unit. That ratio is why the two risks need separate inputs, separate assumptions, and separate lines in the pro forma.
The input block
Build an Inputs sheet with the eleven cells that drive everything downstream. Nothing here is a plug. Every one of them is knowable.
| Cell | Input | Example |
|---|---|---|
| B3 | Units | 12 |
| B4 | Average monthly rent | $1,250 |
| B5 | Gross potential rent, annual =B3*B4*12 | $180,000 |
| B6 | Physical vacancy rate | 6.0% |
| B7 | Expected default events per year | 1.0 |
| B8 | Months billed and unpaid before lockout | 4.0 |
| B9 | Filing, service, and attorney per event | $1,100 |
| B10 | Turnover repairs above normal per event | $1,800 |
| B11 | Security deposit applied | $1,250 |
| B12 | Post-judgment collection recovery rate | 8% |
The calculation block sits directly underneath:
- B14, gross cost per event:
=(B8*B4)+B4+B9+B10-B11returns $7,900. The loneB4in the middle is the turn month after lockout, which most models forget because the tenant is already gone by then. - B15, net cost per event:
=B14*(1-B12)returns $7,268. Set B12 from your own history, not from what the collection agency claims. Eight percent is generous for a judgment against someone who just spent four months not paying rent. - B16, annual bad debt allowance:
=B7*B15returns $7,268. - B17, allowance as a percent of GPR:
=B16/B5returns 4.04%. - B18, vacancy loss:
=B5*B6returns $10,800, and it stays on its own line forever.
Total economic loss on this building is 10.0% of gross potential rent. The combined 5% line was off by half, and half of $180,000 is not a rounding difference.
The Eviction Calendar Drives the Allowance More Than the Tenant Does
Hold the building constant. Same $1,250 rent, same $1,100 legal cost, same tenant who stops paying in March. Change only the county where the case gets filed.
| Market | Practical notice to lockout | B8 months unpaid | Net cost per event | Allowance at 1 event/year |
|---|---|---|---|---|
| Texas metro | 3 to 6 weeks | 1.5 | $4,393 | 2.44% |
| Georgia, Florida | 6 to 10 weeks | 2.5 | $5,543 | 3.08% |
| Ohio, Missouri | 3 to 5 months | 4.0 | $7,268 | 4.04% |
| Cook County, Illinois | 6 to 9 months | 7.0 | $10,718 | 5.95% |
| New York City | 9 to 14 months | 11.0 | $15,318 | 8.51% |
Same tenant, same rent, and the allowance moves 607 basis points. Legal cost is held at $1,100 across every row to isolate the calendar, which means the bottom two rows are optimistic: housing court attorneys in Cook County and New York bill $2,500 to $4,500 per case. A national "use 2% for bad debt" default is a guess about a courthouse you have never walked into.
Get the number from your county clerk's docket, not from a state summary. Filing to judgment and judgment to sheriff's lockout are two separate queues, and the second one is where the months disappear.
Measure It From the T-12 Instead of Guessing
On a property you own or are under contract to buy, stop estimating. Build a Collections sheet with one row per month: A month, B charges posted, C collected in period, D collected late, E written off, F concessions.
- Gross collection rate:
=SUM(C5:C16)/SUM(B5:B16) - True uncollected fraction:
=1-(SUM(C5:C16)+SUM(D5:D16))/SUM(B5:B16)
Three things wreck this calculation, and all three are common enough to check every time.
Late is not lost
A model that treats anything not received by the 5th as bad debt overstates the allowance by three to four times. The tenant who pays on the 14th every month for six years is a cash management problem, not a credit loss. Keep columns C and D separate and flag the difference: =IF(AND(D5>0,E5=0),"LATE, NOT LOSS",""). Price the late payer into your operating account balance, not into your NOI.
The seller who never writes anything off
A T-12 showing $700 of bad debt on $180,000 of rent looks like a well-run building. Then you pull the accounts receivable aging as of the first and last day of that same window. Receivables went from $4,900 to $18,600. Nothing was written off because writing off is a decision, and the seller chose not to make it while marketing the property.
The real number: =Write_offs+(AR_end-AR_begin) returns $14,400, which is 8.0% of gross potential rent, not 0.39%. Request the aging report at both endpoints on every deal. If the seller will not produce it, underwrite the allowance at the top of the class band and let the price reflect that.
Double counting vacancy
Rent on an empty unit was never billed, so it can never be bad debt. If column B comes from a rent roll of scheduled rent instead of charges actually posted, you are counting the same loss twice and your EGI is wrong in the conservative direction, which feels safe and costs you deals. Tie it out: =IF(ABS(SUM(B5:B16)-(B5-B18))>500,"CHECK BILLING SOURCE","OK").
Roll Rates Turn Today's Aging Into Next Quarter's Write-Off
The trailing twelve tells you what happened. Roll rates tell you what is about to. Pull the percentage of each aging bucket that moves to the next bucket the following month, averaged over the last year, then chain them.
| Bucket | Balance today | Roll to next bucket | Cumulative write-off probability | Reserve |
|---|---|---|---|---|
| Current | $4,200 | 8% | 2.2% | $93 |
| 1 to 30 | $3,150 | 46% | 27.6% | $869 |
| 31 to 60 | $2,400 | 71% | 60.0% | $1,440 |
| 61 to 90 | $1,900 | 88% | 84.5% | $1,605 |
| 90 plus | $3,600 | 96% | 96.0% | $3,456 |
| Total | $15,250 | $7,463 |
The cumulative column is one formula copied down: =PRODUCT(D5:$D$9). The mixed anchor makes each row multiply its own roll rate by every roll rate below it. Reserve per row is =B5*E5, and the total allowance is =SUMPRODUCT(B5:B9,E5:E9).
Your balance sheet says $15,250 is owed to you. About $7,463 of that is not money, it is a story about money. Booking the reserve is what keeps you from spending it twice, once in your distribution and once in your refinance package.
The operational payoff is the trigger. The $3,600 sitting in the 90-plus bucket was current five months ago, and the roll rate flagged it in month two. Put a decision rule on the sheet instead of on your calendar: =IF(F9>B4*2,"START FILING","HOLD"). When the reserve on the oldest bucket passes two months of rent, negotiating is over and the only variable left is how many more months you fund.
Where the Number Goes and What It Changes
Vacancy, concessions, and bad debt each get their own line between gross potential rent and effective gross income. Here is the same 12-unit under both treatments, with operating expenses held flat at $79,200 so the only variable is the loss block.
| Line | Combined 5% version | Modeled version |
|---|---|---|
| Gross potential rent | $180,000 | $180,000 |
| Vacancy at 6.0% | ($10,800) | |
| Concessions | ($1,875) | |
| Bad debt allowance at 4.04% | ($7,268) | |
| Vacancy and credit loss at 5% | ($9,000) | |
| Effective gross income | $171,000 | $160,057 |
| Operating expenses | ($79,200) | ($79,200) |
| Net operating income | $91,800 | $80,857 |
| Value at a 6.5% cap | $1,412,308 | $1,243,954 |
| DSCR, $980,000 loan at 6.75% | 1.20 | 1.06 |
The gap is $168,354 of value and 14 basis points of coverage on a building most people would describe as small. You underwrite to a 1.20, the lender agrees, you close at $1,400,000. Twelve months later the operating statement produces a 1.06 and someone at the bank runs the covenant test. Nothing went wrong at the property. The model just billed rent it was never going to collect.
Where to start when you have no history
| Tenant profile | Allowance, percent of GPR |
|---|---|
| Class A, 3.5x income minimum, 700+ FICO, third-party management | 0.2% to 0.5% |
| Class B, 3.0x income, 640 to 700 | 0.5% to 1.5% |
| Class C, 2.5x to 3.0x income, 580 to 640 | 2.0% to 4.5% |
| No credit check, cash applicants, month to month | 5.0% to 9.0% |
| Housing authority portion of a voucher unit | under 0.2% |
That last row is worth a cell of its own. On a Section 8 unit, the housing authority pays 65% to 75% of contract rent by direct deposit and defaults on essentially none of it. Only the tenant portion carries credit risk. Blend it: =(1-B22)*B23, where B22 is the HAP share and B23 is the class rate for the tenant portion. A C-class building at a 4.0% class rate with 70% HAP coverage prices out at a 1.2% allowance. Underwriting voucher rent at the same risk as market rent is how buyers argue themselves out of the most reliable cash flow on the block.
Build It This Week
- Export 12 months of posted charges, not scheduled rent, from your property management software or your ledger.
- Pull the AR aging as of the first and last day of that window. Run
=Write_offs+(AR_end-AR_begin)and compare it to what the income statement claims. - Split collected in period from collected late. Recompute the true uncollected fraction.
- Look up the practical notice-to-lockout window in your county docket and set B8 from that, not from a state-level article.
- Count actual default events over the last three years and divide by three to set B7. If the answer is zero, your screening is working or your sample is too small. Use the class band.
- Give vacancy, concessions, and bad debt three separate lines above effective gross income. Delete the combined percentage from every template you own.
- Rerun the DSCR and the cap rate valuation with the modeled EGI before you send the loan package.
Then look at what the allowance is actually buying you. One default event costs $7,268 in Ohio. Screening 12 applicants properly, with income verification, prior landlord contact, and a full credit pull, runs about $540 a year. Avoiding a single eviction pays for 13 years of screening. Moving your minimum from 2.5x income to 3.0x costs you two weeks of extra vacancy on a turn and cuts the input in B7 by more than any collections process ever will.
If you would rather not build the input block, the roll-rate chain, the T-12 tie-out, and the three-line loss stack from scratch, SheetCraft's Rental Property Analyzer ships with the credit loss module already wired: separate vacancy, concession, and bad debt lines feeding effective gross income, a per-event eviction cost calculator driven by your county timeline, an aging schedule with roll-rate reserves, and a DSCR panel that updates the moment the allowance changes. You enter charges and collections. It tells you what the building actually earns and which unit is about to stop paying for it.
Related template
Rental Property Analyzer
Analyze any rental deal in 15 minutes — not 3 hours in a messy spreadsheet. Cash flow, cap rate, cash-on-cash return, and 10-year projections. All automated.
Get the Template — $49