Camellia — rent never billed for 14 residents, and a missed office handoff

One property, three separate breakdowns that all show up as the same thing: a resident's rent stops getting charged and nobody notices. Plus a phone handoff that actually worked but got logged as a failure.

Findings — 2026-09-01, read-only investigation; no fixes applied yet. Property: Camellia Apartments. Dollar totals marked "estimate" below are estimates, not verified accounting figures.

1. What kicked this off

Resident Paul Wilkins (unit 111) called Clara (the AI phone/text assistant) on Sept 1 at 1:03 PM Mountain time to ask his balance before paying rent. Clara told him he owed $40 and it wasn't overdue. He asked about a "free month" he thought he had. Clara guessed at an explanation (a utility charge, or a credit applied when he moved in) — that guess was wrong; no such credit exists on his account. Clara then admitted she only had a balance snapshot, not the full story, and tried to connect him to the office. The app logged this as "transfer attempted — no one picked up" and closed the conversation as resolved.

2. The call to the office actually connected — the system just didn't record that correctly

Phone-carrier records (Twilio, the service that carries the calls) show the office line answered 10 seconds into the transfer, at 1:04:29 PM, stayed connected for 21 seconds, and the resident hung up at 1:04:50 PM. We can't tell from the records alone whether a person or voicemail answered — the system wasn't set up to detect the difference, and there's no audio to check.

Three separate bugs stacked up to turn a real, connected call into a false "nobody answered":

A separate overnight quality check did flag this conversation as needing a human look — but nothing acts on that flag automatically. Detailed system logs only go back about 6 minutes, which limited how far we could dig into exactly what happened server-side.

3. Paul Wilkins's account, in plain terms

Paul has paid $1,190/month by check, on time, every month since September 2025 ($1,150 rent + $40 utilities). Staff put an end date on his rent charge back in October 2025 — meaning the system stopped billing him rent as of August 31, 2026. This month it only charged him the $40 utility line, which has no end date. There is no free-month credit anywhere on his account; Clara's guess on the phone call was wrong.

A renewal offer at $1,150/month was sent to him back on June 8, with reminders — it's still sitting unsigned. A new lease is also open for signature and hasn't been signed. He's never activated his online resident portal. Our system's copy of his account matched AppFolio (the property-management software of record) exactly as of an 11:01 AM sync that morning — though our copy doesn't currently track his utility charge, only rent, which is a gap worth closing.

4. Why the auto-renewal safety net didn't catch him

Camellia has an automated system meant to convert residents to month-to-month billing if their lease expires without a signed renewal, so rent keeps getting charged. All the switches for this were on, and it ran its daily check on Sept 1. But it has a bug: it treats any renewal offer that was sent — even one nobody has signed — as if the resident already renewed, and skips them.

That means once an offer is sent, a resident who never responds becomes permanently invisible to the auto-renewal safety net. Paul had a valid 31-day advance warning already sent on August 1, so the system was on track to catch his case correctly — until this bug intervened. Five Camellia residents were skipped this way on Sept 1 for the same reason.

Where this lives in the code, for engineers following up: the check that decides "already renewed" (getLeaseProvenance in src/lib/integrations/appfolio/pms-adapter.ts) treats any renewal-offer row from AppFolio as proof of a signed renewal, which then makes convertLeaseToHoldover (src/lib/domain/leasing/renewal-holdover.ts:130) skip the resident with reason already_renewed.

5. Eight residents past their lease end date — one by one

We checked every occupied unit whose lease has already ended. Seven of eight have stopped being billed rent; together that's about $8,650 in unbilled September rent (estimate).

UnitResidentLease endedSept rent billed?Balance owedRenewal statusWhat went wrong
118Ignacia CruzJun 30Yes — $1,750$3,750 past dueAn earlier attempt to convert this account closed itself out on July 16Billing is fine, but no lease is on file — a paperwork gap, not a billing gap
111Paul WilkinsAug 31No — just $40 utilities$40Offer sent, unsignedFell through — the trigger for this whole review
415Christopher AveryAug 31No$4,224.96No renewal ever startedFell through — worst case in the batch
420Bernardo MolinaAug 31No$0Offer sent Jul 10, no responseFell through
504Mia GrimaldiAug 31No$0Second offer sent Aug 5, response due Sept 4, still unsignedFell through
522Leonel GongoraAug 31No$0Offer sent Jul 10, no responseFell through
603Simone KoningAug 31No$0Our system closed this out as a move-out notice on Jun 24, but AppFolio has no notice or move-out on file — she still shows as a current residentFell through — two systems disagree
607Paula DelgadoAug 31No$0Resident agreed to renew, but the property manager never countersigned within the 14-day windowFell through — most avoidable of the eight

6. New move-in that's missing a month

Unit 311, Avery Belafsky: moved in Aug 24 on a lease running Sept 1, 2026 to Feb 28, 2027 at $1,000/month. Portal activated, lease signed, everything else about the account looks healthy — application fee, deposit, and the prorated August rent are all paid, balance is $0. But the recurring rent charge's own tracker says it's "paid through Sept 30" and the next charge isn't due until Oct 1 — meaning September itself was silently skipped, most likely because the move-in paperwork consumed what should have been the first regular billing cycle. About $1,000 unbilled.

7. Six move-ins with no rent charge set up at all

These six residents have never had a recurring rent charge created in AppFolio — the rent-management software shows $0.00 rent for each of them. Five moved in via internal transfers on Aug 1 (the deposit carried over from their old unit, but nobody set up a new rent line — this looks like a gap in how transfers are processed). One moved in fresh on Sept 1.

UnitResidentMoved inMonths missedCurrently prepaying into an unapplied credit?
101Jhon HernandezAug 1 (transfer)Aug & SeptYes — $1,000
117Onel Cruz FernandezAug 1 (transfer)Aug & SeptYes — $1,000
224Pedro FrancoAug 1 (transfer)Aug & SeptYes — $1,245
422Rodolfo Salazar N.Aug 1 (transfer)Aug & SeptYes — $940
611Yudi CruzAug 1 (transfer)Aug & SeptNo
315Armando I. Montano MezaSept 1SeptNo

Parking, deposits, and utility charges are all posting normally for these residents — it's specifically the rent line that was never created. Total exposure is roughly $11,800 (estimate, using market rent as a stand-in since no rent charge exists to read from).

8. The pattern across all of it

Put together, roughly $21,000 in Camellia rent is currently not being billed this month across these 14 residents (estimate — sum of the three sections above).

9. A different, smaller problem: renewal alerts nobody's acting on

Separately, on the morning of Sept 1 (8:33 AM MT) the system emailed the shared Camellia office inbox about three renewals it couldn't send because it has no email address on file for the resident: units 220 (Mario Santos Quinteros), 317 (Cesar Hernandez), and 409 (Brian Stuckey) — all leases ending Nov 30. Camellia doesn't have individual staff mailboxes, so this goes to one shared inbox. As of 7:23 PM the same day, the email had been opened 2–4 times each with no reply and none of the three fixed.

There's no task or reminder created when this happens — it's a one-time email with no follow-up. It also only exists for one specific reason (missing email address); there's no equivalent for a missing phone number, and no broader sweep for other blockers. Across the whole property, 20 of 139 residents have no email on file and 4 have no phone number. (Two other alerts in the same batch were unrelated delinquency/renewal-decision emails, not part of this issue.)

10. Options for what to do next

These are options, not decisions — nothing below has been approved or built yet.

A. Send Paul Wilkins a manual follow-up

A one-time email to the office explaining his real balance and correcting the "free month" confusion. Drafted, waiting on approval to send.

B. Fix the three technical bugs

Stop treating an unsigned renewal offer as proof of a signed renewal; make the call-outcome checker trust the carrier's "connected" signal the same way it trusts "no pickup"; fix the recording so it actually starts when a transfer call connects.

C. Manually create the missing rent charges

Get September (and August, where relevant) rent charges created in AppFolio for the 14 affected residents. Needs a decision on whether this is office-driven or something PropFlow does directly.

D. Add a monthly "is everyone being billed" check

A first-of-the-month sentinel, for every property, that flags any occupied unit with no rent charge — so this class of problem gets caught automatically going forward.

E. Decide whether to turn on the missed-transfer email at Camellia

It currently only runs at the one test property. Turning it on here is a separate decision from fixing the underlying bugs.

F. Make renewal-blocker alerts self-nagging

Turn the one-time "missing email" email into a tracked task that keeps nagging until someone actually fixes the resident's contact info, instead of firing once and going silent.

PropFlow Docs