Generate move-out deposit statements with gpt-5.6-terra, Gmail, and Google Sheets

Go to Workflow
0 views
Built by Khairul Muhtadin Khairul Muhtadin
Created on September 03, 2026

Description

Move-outs without the paperwork headache. This workflow takes inspection data via webhook, has AI separate chargeable damages from normal wear-and-tear, computes the deposit refund or amount owed, emails an itemized statement to the tenant, and keeps the landlord posted with daily pending reminders.

Last updated: September 2026.

Quick Overview
This workflow accepts move-out inspection data via a webhook, logs it to Google Sheets, uses OpenAI to classify damages as chargeable or wear-and-tear, computes the security deposit refund or amount owed, emails an itemized statement via Gmail, and notifies the landlord via Telegram with daily pending reminders.

How it works
Receives a POST webhook request with move-out details (tenant, unit, deposit, unpaid balances, and a damages list).
Normalizes the payload, validates required fields, and either alerts the landlord about an invalid intake via Telegram and Gmail or continues.
Appends the move-out as pending to a Google Sheets MoveOutLog tab and prepares the inspection details for review.
Uses OpenAI to classify each damage item as chargeable or wear-and-tear with estimated costs, then parses and cleans the returned JSON.
Calculates total deductions, applies unpaid rent/utilities, and generates an itemized deposit disposition statement with the net refund or amount owed.
Emails the statement to the tenant via Gmail, updates the matching row in Google Sheets, and notifies the landlord via Telegram (plus a copy by Gmail when the tenant owes money).
Runs daily on a schedule to scan Google Sheets for move-outs pending 3+ days and sends the landlord a Telegram/Gmail reminder or an all-clear message.

Setup
Create and connect credentials for Google Sheets, OpenAI (Chat), Gmail, and Telegram.
Create a Google Sheet with a MoveOutLog tab and columns that match the workflow’s fields (at minimum moveout_id, tenant_name, tenant_email, unit, move_out_date, deposit_amount, unpaid_rent, unpaid_utilities, damages, status, received_at, plus disposition outputs like deduction_total, unpaid_total, net_refund, classified_at).
Update the Google Sheets document ID, sheet name, and matching column (moveout_id) if you use a different spreadsheet structure.
Configure the webhook URL in your move-out intake source (property system or form) to POST to /lease/moveout with the expected fields, including a damages array.
Set the landlord notification targets by updating the Telegram chat ID and the landlord email address used for invalid-intake, owed-copy, and daily sweep emails.
Adjust the daily sweep cron schedule and the pending threshold (currently 3+ days) to fit your operations.

Quick Answers
How are damages judged?
AI classifies each item as chargeable or wear-and-tear with estimated costs.
Who gets notified?
Tenants get the itemized statement by Gmail. Landlords get Telegram updates plus a Gmail copy when money is owed.
What if a case stalls?
A daily sweep flags move-outs pending 3+ days, or sends an all-clear when nothing is stuck.

Additional info
Built with n8n. Need an assessment on your business? Feel free to reach out at https://khmuhtadin.com/consultation/

Nodes Used (6)

AI Agent
@n8n/n8n-nodes-langchain.agent
Code
n8n-nodes-base.code
Gmail
n8n-nodes-base.gmail
Google Sheets
n8n-nodes-base.googleSheets
OpenAI Chat Model
@n8n/n8n-nodes-langchain.lmChatOpenAi
Telegram
n8n-nodes-base.telegram