The aging report tells you who owes money. It does not tell you who changed. Those are different questions, and only one of them is worth anything on a Monday morning.
A resident who has been sitting at 60 days since April is a known problem with a plan attached to it. A resident who went from current to 30 days on Thursday is a new problem, and it is the only one still cheap to solve. On a 250-unit property with ordinary turnover there are usually two or three of those in any given week, and they are buried in a forty-line report where every row looks the same as every other row.
So people read the total, see it moved a point, and move on. Six weeks later somebody is three months down and the conversation is about an eviction instead of a payment plan.
The report you want is not a list of who owes. It is a list of who moved, and it is usually three lines long.
function bucket(daysLate) {
if (daysLate <= 0) return 0; // current
if (daysLate < 30) return 1; // 1-29
if (daysLate < 60) return 2; // 30-59
if (daysLate < 90) return 3; // 60-89
return 4; // 90+
}const moved = [];
for (const r of thisWeek) {
const prior = lastWeek.find(p => p.leaseId === r.leaseId);
if (!prior) continue; // new lease, nothing to compare
const now = bucket(r.daysLate), was = bucket(prior.daysLate);
if (now > was) moved.push({ ...r, was, now, dir: 'worse' });
if (was > 0 && now === 0) moved.push({ ...r, was, now, dir: 'cleared' });
}3 moved, 1 cleared —
Oakwood, week of 3 Aug. Body is one line per resident with unit, balance, which bucket they
left and which they entered. Send it even when nothing moved, with a line saying nothing moved. A
report that only arrives with bad news teaches you to dread it, and then to ignore it.The alert is worth nothing if you have not decided in advance what each crossing means. These are mine. They are opinions, not standards, and they come from apartment portfolios in the southeast, so check them against your own market and your own lease.
| Crossed into | What it means | What I do that week |
|---|---|---|
| 1–29 days | Usually nothing. Most people in this bucket are late, not delinquent, and most of them catch up on their own. | Note it. No call. If the same name appears here three months running, that is not lateness, that is a budget. |
| 30–59 days | This is the one that matters. A resident who misses a second month usually misses a third. | Call, do not email. Get a specific date and a specific amount, and write it down somewhere that will remind you when the date passes. |
| 60–89 days | The payment plan either did not happen or did not hold. | Make the eviction decision now rather than next month. Waiting costs you the filing timeline and does not improve the odds of collecting. |
| 90+ days | The money is gone. The only remaining question is how fast you get the unit back and re-leased. | Stop treating it as collections and start treating it as a turn. |
One more that is not a bucket. Any resident who crosses into 30 days twice in six months is a renewal decision, not a collections decision. They will do it again, and the cost of carrying them for another twelve months is larger than the cost of the turn. That rule has saved me more money than the alert itself.
A software update renames a column. Your parser was matching on position or on an exact header string, and now every row is null. Match on a normalized header name, and have the scenario email you when the row count comes back zero instead of silently succeeding.
Move-outs read as cleared. A resident who skipped owing $4,000 disappears from next week's roll, and a naive comparison reports them as having caught up. Check the move-out date before you call anything cleared, and route skips to a different list, because they are a write-off question rather than a collections question.
Partial payments read as improvement. Somebody at 60 days pays one month and lands back at 30, and the report congratulates them for getting better while the balance sat still. Track the dollar balance alongside the bucket and flag any case where the bucket improved and the balance did not.
The kit is the finished version of everything above: the Make.com blueprint you import, the parsing for the six common export formats, the bucket and comparison code, the email template, and the threshold table as a spreadsheet you can edit. It takes about five minutes instead of forty-five.
The build is not ready yet. Put your email in below and I will send it when it is, along with a note about what it costs.
Also gets you the next guide. Nothing else.
No sequence, no upsell drip. Unsubscribe link on every send.