TL;DR: An independent brokerage in Charlotte was tracking 35-45 active transactions in a shared Google Sheet. Four agents updated their rows when they remembered. Each transaction had 40-plus milestones. No dependency tracking between linked properties. On day 47 of a 5-property chain, a lender called asking about an appraisal that had been "in progress" for three weeks. It had never been scheduled. The chain nearly collapsed. We built a four-stage transaction coordinator agent that generates milestone checklists from contracts, tracks status in real time with stale-data detection, maps chain dependencies so a delay on Property 3 immediately flags Properties 4 and 5, and sends daily alerts to agents and weekly chain-health summaries to the broker. Twenty-three overdue milestones caught in month one. Two chain saves in the first quarter. Agent cost: $220/month.
Day 47
Everything looked on track.
Five properties linked in a chain. Sellers downsizing on one end, a young couple buying their first home in the middle, a family relocating to Raleigh, and a couple moving into a retirement community near Lake Norman on the other end.
Five families. Five sets of solicitors. Five mortgage applications. Roughly 200 milestones across the chain, all needing to land in the right order.
One shared Google Sheet tracking all of it.
On day 47, the buyer's lender on Property 2 called the brokerage. They needed the appraisal on Property 3 to finalise the buyer's financing. The spreadsheet showed the Property 3 appraisal as yellow. In progress.
It wasn't in progress. It had never been scheduled. The listing agent on Property 3 had meant to book it, got pulled into two other closings that week, and forgot. She'd entered "in progress" three weeks ago because she intended to do it. The spreadsheet didn't know the difference between intended and done.
The financing deadline for Property 2 was in 10 days. Without the appraisal on Property 3, the lender couldn't approve the loan. Without the loan, Property 2 doesn't close. Without Property 2 closing, the sellers on Property 1 have nowhere to go. Properties 4 and 5 collapse with it.
Three families. Scrambling. Two ended up in temporary housing for three weeks while timelines were renegotiated. One nearly walked away entirely.
Because one row in a spreadsheet hadn't been updated.
The Brokerage
Independent residential brokerage in Charlotte, North Carolina. Four agents, the broker/owner, and a part-time admin working 20 hours a week. Residential sales across the greater Charlotte metro.
Average active transactions: 35 to 45. Each carries 40-plus milestones: listing agreement, disclosures, offer acceptance, inspections, appraisal, title search, mortgage approval, HOA docs, final walkthrough, closing. That's roughly 1,400 to 1,800 active milestones tracked in a Google Sheet.
Four agents update their own rows. One updates daily. He's thorough. Two update "when something happens," which means milestones sit unchanged for days. The fourth updates in batches on Fridays, which means her rows are always slightly stale by Monday.
The broker reviews the full sheet every Monday morning. By then, some milestones are a week old. A milestone that went overdue on Wednesday looks the same on Monday's review as one that was completed on Thursday. The sheet shows the last thing someone typed. It doesn't show when they typed it.
No dependency tracking. Each transaction is a separate row. Chains aren't visible. The broker knows which deals are linked, in his head. But 35 to 45 transactions with shifting chain relationships? That's too much for memory.
Average transaction value: $380,000. Broker commission at 2.5-3%: roughly $9,500 to $11,400 per deal. The 5-property chain collapse cost the brokerage over $27,000 in commission risk. They recovered most of it by renegotiating timelines, but two families needed temporary housing.

Why the Spreadsheet Was Lying
The Google Sheet was well-structured. Colour-coded, with columns for every milestone. The problem: "in progress" entered three weeks ago looks identical to "in progress" entered yesterday. Both show yellow. No timestamps. No alerts. No dependency mapping.
The broker tried transaction management software. $300 to $500 per month. The free trial lasted three weeks. Agents found it was "one more thing to update" and stopped using it. The Google Sheet survived because it was familiar, even if unreliable.
Monday reviews were the safety net. Ninety minutes every Monday. But chains don't wait for Mondays. The Property 3 appraisal was overdue on Wednesday. Nobody knew until Friday. The Monday review catches problems that are five days old. In real estate, five days can be the difference between a close and a collapse.
The part-time admin was assigned as transaction coordinator. Twenty hours a week across 40-plus transactions with 40-plus milestones each. She became a human reminder system. She still missed chain dependencies because she tracked transactions individually. Property 3's delay wasn't on her radar as a threat to Property 2.
What We Built
Four stages, running against live transaction data.
Stage 1: Transaction setup and milestone generation
When a new deal enters the pipeline, the agent creates a milestone checklist from a template matched to the transaction type: standard sale, new construction, short sale, or chain link. Key dates populate from the contract: offer acceptance, inspection deadline, appraisal deadline, financing contingency date, closing date. The agent calculates expected completion dates for each milestone based on standard timelines. An appraisal in Mecklenburg County typically takes 7-10 business days from scheduling. The agent knows that. The spreadsheet didn't.
Stage 2: Real-time milestone tracking
Agents update milestone status through a mobile-friendly interface. They're in the field showing properties, sitting in closings, driving between appointments. The interface needs to take 15 seconds, not 5 minutes. Tap the milestone, update the status, move on.
Every update gets timestamped. The agent compares the current date against expected completion for every milestone, continuously. A milestone approaching its deadline with three days to go gets a yellow flag. At deadline with no completion: orange. Past deadline: red.
Here's the difference that matters: "in progress" entered three weeks ago with no subsequent update gets flagged automatically as stale. The spreadsheet can't tell the difference between fresh and forgotten. The agent can. If someone entered "in progress" and hasn't touched it since, something's wrong. The system treats silence as information.
Stage 3: Chain dependency mapping
This is the stage that would've saved the 5-property chain.
The agent links related transactions. When properties are part of a chain, it maps which milestones on Property A are prerequisites for milestones on Property B. The appraisal on Property 3 is a prerequisite for financing approval on Property 2. Financing on Property 2 is a prerequisite for closing on Property 1. The dependencies are explicit, not stored in the broker's memory.
When a milestone on Property 3 goes overdue, the agent doesn't just flag Property 3. It flags every downstream property that depends on it. Properties 4 and 5 show "at risk: dependent milestone overdue upstream." The broker sees the chain impact, not just the individual delay.
Under the old system, the broker would've found out about the Property 3 appraisal when the lender called on day 47. Under this system, the agent would've flagged it on roughly day 32, when the appraisal passed its expected scheduling window. Fifteen days of warning instead of zero.
Stage 4: Alerts and weekly status
Individual agents get daily alerts: "These milestones need attention today," ranked by urgency and chain impact. Not 40 milestones across 10 transactions. The five that matter right now.
The broker gets a weekly chain-health summary: which chains are on track, which have risk, which need intervention. Monday review went from 90 minutes to 15 minutes. Clients get automated status updates at key milestones, configurable by the broker.

What We Learned Building It
The milestone templates needed more variation than expected. We started with two: standard sale and new construction. Within the first week, agents identified scenarios that didn't fit. Short sales have different timelines. Cash deals skip financing. VA and FHA loans have additional appraisal requirements. HOA communities add documentation steps. We ended up with six templates and a custom option for edge cases. The agents helped refine these, which was good for adoption. They felt ownership instead of imposition.
Stale-data detection was the feature that won over the sceptics. The agent who updated her rows on Fridays resisted the system initially. "I know where my deals are." The first time the agent flagged a milestone she'd marked as "in progress" two weeks ago that she'd genuinely forgotten about, she stopped objecting. "OK, that would've been a problem," she said. The system didn't replace her knowledge. It caught the one thing she'd forgotten in a week of 30 other things.
Chain mapping required the broker's input. The agent can detect when transactions share an address or party name, but chain relationships aren't always obvious from the data. The broker manually links chain transactions at setup. Takes 30 seconds. He forgot twice in month one, and both times the system missed the dependency. We added a prompt: "Is this property part of a chain? If yes, link it." Simple fix, but it needed catching.
The Numbers
Metric | Before | After |
|---|---|---|
Overdue milestones caught (month 1) | Unknown (not tracked) | 23 |
Chain risks identified proactively | 0 (found out when someone called) | 4 in Q1 |
Time from milestone overdue to broker awareness | 3+ days | Same day |
Deals saved by early chain intervention (Q1) | 0 | 2 |
Monday review time | 90 min | 15 min |
Agent cost/month | N/A | $220 |
The commission maths: $220 per month for the agent. $27,000 in protected commission from the first chain save alone. The agent paid for itself more than ten times over in a single incident.
But the broker said the real change wasn't financial. It was the shift from reactive to proactive. The spreadsheet showed status. The agent shows risk. "I used to find out when things broke," he said. "Now I find out before they break. That's a completely different way to run a brokerage."
The admin's role changed too. She stopped being a human reminder system and became an exception handler and client communication lead. Higher-value work. Better use of her 20 hours. She told me the job went from "chasing agents" to "actually helping clients."

The Pattern
If you're running a real estate brokerage, or any deal-based business with multiple concurrent transactions and interdependent milestones, and your tracking system can't tell the difference between "in progress" and "stale," your chain dependencies are invisible until they break.
This applies beyond real estate. M&A advisors tracking linked deal stages. Commercial lenders managing concurrent applications with cross-collateralisation. Immigration solicitors handling family visa chains where one denial cascades. Anywhere multiple deals share dependencies, a spreadsheet that tracks status without tracking velocity hides risk instead of revealing it.
The agent doesn't replace the broker's judgment on how to save a deal. It replaces the monitoring that nobody has time to do between Mondays. The broker still makes every call. The agent makes sure the broker knows which calls to make before the lender does.
At $220 per month, it's roughly 2% of one average commission. The question isn't whether a brokerage can afford it. It's how many chains are sitting in a spreadsheet right now with a yellow cell that should be red.
Want to see if your brokerage has transaction gaps hiding in that spreadsheet? The AI Bottleneck Audit takes 5 minutes and shows you where deals are quietly at risk. No pitch.
Want to see 25 agent architectures across different industries? Download Unstuck. It includes blueprints for pipeline tracking, intake, conflicts, engagement letters, and more.
by TG
for the AdAI Ed. Team


