Loan Officer Assistant
LiveA loan officer with about 1,700 closed loans had no time to keep in touch with past clients or work a 15,000+ real estate agent network. This system does the busywork every morning and asks before it sends anything. She isn't technical, and she uses it every day.
- Built for
- A mortgage loan officer with about 1,700 closed loans
- Platform
- AI agents · Python · Discord
- Built with
- Python
- OpenClaw agents
- Discord bot
- launchd
- Excel / openpyxl
How a morning run works
Find today's anniversaries
The morning job reads the loan records and finds past clients whose home anniversary is today.
Draft the notes
It writes a personal email and text for each client, plus notes for the buyer's agent and the listing agent.
Post for approval
Every draft lands in Discord as a card the loan officer can read, edit or skip.
Human taps ✅
Only a ✅ reaction sends a message. No reaction, no send.
Send and log
Approved messages go out from the loan officer's own number and email, and each send is logged so nothing goes twice.
Watch the replies
STOP removes the contact everywhere. A wrong-number reply sends the contact back for fresh research.
What it does
- Finds past clients whose home anniversary is today and drafts a personal email and text for each one.
- Drafts matching notes to the buyer's agent and the listing agent on each of those loans.
- Researches real estate agents' missing phone numbers and emails with a sandboxed AI web-research step, and only writes back findings it is confident in.
- Builds first-touch outreach lists of local agents, ranked by drive time from the office.
- Watches mortgage rates and emails the loan officer a list of past clients who could now refinance to a meaningfully lower rate.
Nothing goes out without a human
- Every draft posts to Discord as a card. A ✅ reaction sends it; nothing else does.
- Replies are monitored: STOP removes the contact from all future outreach, and a wrong-number reply queues the contact for re-research.
- An audit flags agent phone numbers whose area code doesn't match the states where that agent actually closed loans.
- Message templates can be edited from Discord without touching code.
Built to be reliable
- The critical steps (find today's anniversaries, write the approval records, send) run as plain code, not as AI instructions, so a fallback model can't skip them and report success.
- Every job is idempotent and keeps a sent log, so retries never double-send.
- A generator rebuilds a live system map from the running schedules and state files, so the documentation can't drift from reality.
- Each run backs up the working spreadsheet before it writes.