Lease Renewal Planner · Real Estate & Property
Every renewal offer out on time, on your rent rule
Each month it finds leases ending in 60 to 90 days, applies your rent rule (the math checked in code) and drafts each offer. Your property manager approves the batch before anything goes.
Free account to start. Buying and running live need a paid plan.
- Runs on a schedule
- 2 AI steps
- A person approves before it acts
- About 25 min to set up
Sound familiar?
The job, before and after this agent.
What it feels like today
- “We miss renewal windows and end up month-to-month by accident.”
- “Building each renewal letter by hand eats a full day every month.”
- “I never remember which non-renewal notices need preparing.”
What you get with the agent
- Every lease ending in 60 to 90 days (or your own window) found on the 1st of each month.
- Your rent rule applied exactly, the % step and increase recalculated in code, in an offer with your terms and reply deadline.
- One batch approval: edit any offer or hold any lease before a single email goes.
- Approved offers get a final rent check, go out with replies to your leasing inbox and the row is marked Renewal offer sent.
- A Slack summary of offers sent, non-renewal notices to prepare and leases that need you.
Before
It's the 20th and you realize five leases end in seven weeks. You're working out increases on a calculator and pasting letters together.
After
On the 1st the batch is waiting: every offer drafted with its working checked in code, the Do not renew list ready, and your sheet updated the moment you approve.
How it works
The whole workflow, step by step.
On the 1st of each month the agent reads your leases sheet in Google Sheets (up to 100 rows). For each lease ending in 60–90 days that isn't marked yet, AI applies your written rent rule exactly, shows its working and drafts a renewal offer with your terms and reply deadline (the rule's percentage step, the increase and the % change are recalculated in code, never by the AI); leases your sheet marks “Do not renew” are listed as non-renewal notices to prepare, and anything it can't draft safely is held for you. The whole batch waits for the property manager's approval. Each approved offer gets a final check, is emailed with replies to your leasing inbox and its row is marked “Renewal offer sent”, and a summary goes to Slack. It drafts for a person to approve and makes no legal decision: it never decides rent or renewal, follows your rent rule only (never fair-housing-sensitive criteria) and doesn't check rent-control or notice laws.
- Trigger1st of each month at 8:00
- App callRead your leases sheet
- LogicCheck the lease end dates
- LogicEach lease ending soon
- AI stepDraft the renewal offer (or skip)
- LogicCheck the math
- Human approvalApprove this month's batch
- Approved:Each approved lease
- LogicEach approved lease
- LogicNon-renewal?
- LogicOffer or non-renewal?
- Non-renewal:Mark the lease row
- Offer:Final check on the wording
- AI stepFinal check on the wording
- LogicCheck before sending
- LogicSend it?
- Passes:Email the renewal offer
- Held:Held
- OutputEmail the renewal offer
- App callMark the lease row
- OutputHeld
- LogicCount what happened
- App callPost the summary to Slack
- OutputDone
This is the workflow that opens in your workspace when you set the agent up. Every step can be edited.
- Step 11st of each month at 8:00Runs on the first morning of every month. Set your time zone on the trigger: “today” and the 60–90 day window are counted in that zone.
- Step 2Read your leases sheetReads your leases tab in Google Sheets: one row per lease with tenant, email, property, unit, lease end, current rent, your renewal decision and the agent's status column.
- Step 3Check the lease end datesIn code, not AI: works out the days to each lease's end in your time zone and keeps only leases ending in 60–90 days. It also works out each lease's effective renewal date (the day after the lease ends) and the reply-by date (21 days from today). Change the window here (within.min / within.max) and the reply window in add (reply_by days).
- Step 4Each lease ending soonRepeats the draft step for every lease the date check kept (up to 100 per run).
- Step 5Draft the renewal offer (or skip)AI applies your stated rent rule exactly (showing its working) and drafts the offer — or lists it for a non-renewal notice when your sheet says you decided not to renew. The 60–90 day window, the effective date and the reply-by date were already worked out in code.
- Step 6Check the mathRecalculates in code — not by AI — the rule's percentage step (current rent × (1 + %)), the increase in dollars and the % change from the current to the new rent, corrects any figure the AI got wrong and lists it in math_check for the reviewer. Rounding, caps and overrides from your rule are left for the reviewer to confirm.
- Step 7Approve this month's batchAll of this month's drafts wait in Reviews together. The property manager checks every rent and wording, edits any offer, sets send to false on any that shouldn't go, and approves; nothing is sent before that.
- Step 8Each approved leaseRepeats the wording check, the code checks, the send and the row update for every lease in the approved batch.
- Step 9Non-renewal?In code: is this lease marked “non_renewal” in the approved batch? Those are marked for notice prep with no email; everything else goes through the wording check and the code checks.
- Step 10Offer or non-renewal?Non-renewals your sheet decided are marked for notice prep (no email); everything else goes through the checks.
- Step 11Final check on the wordingAI reads each approved offer for a rent that differs from the approved figures, legal statements, pressure and anything about the tenant as a person — stating the unit, the lease end, the new rent, the terms and the reply-by date is fine. It must quote the exact sentence it objects to.
- Step 12Check before sendingIn code: drafted as an offer, still marked to send, 1–5 valid tenant emails, a row number, a new rent, and a subject and body with no placeholders left — plus the wording check's verdict. Anything that fails is held, with the reason.
- Step 13Send it?Offers that pass every check are emailed and their row marked; the rest are held and listed in the summary with the reason.
- Step 14Email the renewal offerSends the approved offer to the tenant from your workspace's sender, with replies going to your leasing inbox.
- Step 15Mark the lease rowWrites the status (“Renewal offer sent” or “Non-renewal — notice to prepare”) and today's date into the lease's row, so next month's run skips it.
- Step 16HeldSkipped, on hold, set to not send or stopped by a check; listed in the Slack summary with the reason.
- Step 17Count what happenedIn code, not AI: sorts every approved lease by what really happened — offer sent, non-renewal marked, skipped, held (with the reason) or failed — and lists the leases outside the window.
- Step 18Post the summary to SlackPosts the batch summary — counted in code: offers sent, non-renewal notices to prepare, leases that need you — to your leasing channel.
- Step 19DoneThe run history keeps the batch, every outcome and the summary.
Example run
What goes in, and what comes out.
Example with fictional data
Comes in
Fictional row: unit 3B, lease ends Jan 31, current rent $1,850, decision blank. Your rule: +3%, rounded to the nearest $5, capped at $100.
The agent produces
A draft offer at $1,905 with the math shown (1,850 × 1.03 = 1,905.50, rounded to 1,905), your terms and reply deadline, in the batch for approval. Once approved, it's emailed and the row is marked sent.
What you need
Everything it takes to run it.
About 25 minutes from purchase to live. A checklist above the canvas takes you through each step.
Plan
Included in Enterprise; on other paid plans it's $99 once. Agents run live on paid plans, from Basic ($39/mo).
Your AI key
Connect any of 14 AI providers on your own key. Your provider bills usage directly, at cost; we add no markup.
Apps
- Google SheetsLive
- SlackLive
Checklist
- A paid plan (agents run live on paid plans).
- An AI provider key (Settings → AI Providers).
- Google Sheets (with edit access to the leases sheet) and Slack, connected in Settings → Integrations.
- A leases sheet with tenant emails, lease end dates, current rents, a decision column and an empty status column.
- Your written rent rule and renewal terms.
Setup, about 25 minutes
- Connect your AI provider. The AI steps run on your own key (OpenAI, Anthropic, Google and more). Add one in Settings → AI Providers.
- Connect Google Sheets. Connect the Google account that can open and edit your leases spreadsheet (Settings → Integrations → Google Sheets).
- Connect Slack. Connect the Slack workspace your leasing team uses (Settings → Integrations → Slack).
- Write your renewal rules. Open “Draft the renewal offer (or skip)” and replace the placeholder with your rent rule, terms and sign-off. The 60–90 day window and the reply window are set in “Check the lease end dates”.
- Pick your leases sheet. Open “Read your leases sheet” and “Mark the lease row” and pick the same account, spreadsheet and tab in both, then enter the status column letter.
- Add your leasing inbox and Slack channel. Open “Email the renewal offer” and enter the Reply-to address, then “Post the summary to Slack” and pick the account and channel.
- Test it with Dry Run. Press Dry Run: the agent runs on sample data with no messages sent and nothing written to your apps.
- Switch the trigger on. Open the trigger, set your time zone (lease end days are counted in it) and switch the schedule on. It runs on the 1st of each month at 8:00.
Is it a fit?
Who it's for, and what it won't do.
Built for
- Property managers with rolling lease cycles
- Owner-operators of rental portfolios
- Leasing teams working from a Google Sheet
What it doesn't do
- It drafts and organises renewal offers for a person to approve; it makes no legal decision. It never decides the rent (only your written rule does) or whether to renew (only your sheet's decision column does).
- It doesn't check rent-control, rent-increase or notice laws: you set the rule and you're responsible for compliance.
- It follows your rent rule only and never uses fair-housing-sensitive criteria — nothing about the tenant as a person changes an offer.
- It doesn't send non-renewal notices or the renewal agreement; the tenant signs through your usual process.
- Nothing is emailed before the batch is approved. It skips rows whose lease end it can't read (they're listed in the summary) and drafts up to 100 leases per run, so keep ended leases in another tab.
We list the limits up front so you can decide before you buy.
Price
$99 one-time
Per workspace. It never renews.
- Included at no extra cost on Enterprise.
- Buying and running it live need a paid plan, from Basic ($39/mo).
- Dry Run costs nothing: simulated AI and app calls, nothing sent.
- AI usage is billed by your own provider, at cost. No AI credits to buy from us.
One-time agent purchases aren't covered by the 30-day money-back guarantee. Refund policy
FAQ
Questions about Lease Renewal Planner.
Who decides the rent?
You do, through the rent rule you write. The agent applies it exactly, shows the math and a person approves every offer. It makes no legal decision and nothing about the tenant as a person changes an offer.
Does it handle rent-control and notice laws?
No. It doesn't check them; you set a rule that complies. It also doesn't send non-renewal notices or the renewal agreement itself.
How long is setup?
About 25 minutes: connect Google Sheets and Slack, write your renewal rules, pick your leases sheet, add your leasing inbox and run a Dry Run on a sample lease.
What does it cost?
A one-time unlock that never renews. Live runs need a paid plan and your own AI provider key; Dry Run is free.
What should the leases sheet look like?
One row per current lease with a header row: Tenant, Email, Property, Unit, Lease end, Current rent, Decision (blank, Renew, Do not renew or Hold) and two empty columns at the end for the agent: Renewal status and Status date. Column names can vary; the date check looks for a lease end or expiration column. Dates like 2026-12-31, 12/31/2026 or December 31, 2026 all work. Keep ended leases in another tab.
How is the 60–90 day window worked out?
In code, not by the AI: the agent counts the days from today (in your trigger's time zone) to each lease end, and only leases inside the window reach the AI. The effective date (the day after the lease ends) and the reply-by date (21 days from today) are computed the same way. To change them, open “Check the lease end dates” and edit within.min / within.max or the reply_by days.
Does it decide not to renew anyone?
No. It only lists the leases your sheet marks “Do not renew” so you can prepare those notices through your usual process.
Is this a subscription?
No. Lease Renewal Planner is a one-time purchase of $99 per workspace and never renews. The Enterprise plan includes it at no extra cost. Running it live needs a paid plan (from Basic ($39/mo)), and your AI provider bills you directly for usage.
Can I test it before it touches real data?
Yes. Once it's set up in your workspace, Dry Run plays every step on sample data with simulated AI and app calls: nothing is sent and nothing in your apps changes. Switch the trigger on only when you're happy.
Put Lease Renewal Planner to work.
Free account, no credit card. Your Agents page opens with Lease Renewal Planner ready to buy and set up, then Dry Run it before it goes live.