letto
Property management, simplified.
A white-label platform that turns South African landlords’ bank statements, municipal bills and leases into clean books, tax-ready reports and a live view of every lease.
Visit letto.co.za Now in beta

Property admin that runs itself.
Letto is a property management platform for South African landlords and letting agencies. It reads bank statements, bills and leases, books every rand to the right property, and turns it all into live dashboards and tax-ready reports.
- The problem
- Landlords run their portfolios across bank PDFs, municipal bills, levy statements, spreadsheets and WhatsApp threads. Getting it ready for tax time is manual, slow and easy to get wrong.
- What we built
- A complete SaaS platform: a smart document inbox, bank statement import with a rules engine that learns, lease tracking, multi-entity books, reports, white-labelling and an AI-ready MCP server.
- What we delivered
- End to end. Product strategy, branding, UX and UI design, data architecture and the full-stack build, from first sketch to a live product.
A landlord’s books live in six different places.
Every month the same paperwork arrives from different directions. None of it talks to each other, and all of it has to line up when the tax year closes.
- Bank statementsPDFs from FNB, Standard Bank, ABSA and Nedbank
- Municipal billsWater, electricity, refuse and rates
- Body corporate leviesMonthly and special levies per scheme
- Bond statementsInstalments and outstanding balances
- Leases and depositsTerms, escalations and deposit rules
- Spreadsheets and chatsNotes, receipts and WhatsApp threads
letto
One source of truth.
- Rent paid, due and overdue from one record
- Every transaction allocated to a property
- Reports built from the same numbers
- Each entity keeps its own books
Built for South African rules: ZAR formatting, Rental Housing Act deposits, IRP6 categories, POPIA, body corporate levies and the big four bank formats.
Everything a landlord needs, in one place.
Sixteen features built around the real admin of running rental property in South Africa, from the first bank statement to the tax return.
- Smart document inbox
- Drop any PDF. It is read, classified, matched to a property and filed.
- Bank statement import
- FNB, Standard Bank, ABSA and Nedbank statements parsed line by line.
- Rules engine that learns
- Five match types, and every manual fix can become a rule.
- Split allocations
- One payment shared across properties, tenants and leases.
- Lease tracking
- Terms, deposits, escalations and expiry alerts in one place.
- Portfolio map
- Every property on a map, colour-coded by lease health.
- Rent status
- Paid, due and overdue from a single record, always in sync.
- Multi-entity books
- Trusts, companies and personal holdings kept separate.
- Reports and exports
- Profit per property, category breakdowns, CSV and PDF.
- Tax-ready categories
- Grouped for IRP6, with tax-deductible flags per category.
- Accountant access
- Invite by role, with read and export rights only.
- Maintenance requests
- Log, assign and track repairs per property.
- White-label branding
- Logo, brand colours and a custom domain per organisation.
- Agency tier
- Agents only see the landlords assigned to them.
- AI-ready MCP server
- 38 secure tools so Claude can work with the portfolio.
- Activity log
- Every change recorded, so nothing goes missing.
Also: dark and light mode, fully responsive, ZAR and South African date formats, row-level security on every table, Rental Housing Act deposit rules.
Nine modules around one ledger.
Every module reads and writes the same organisation-scoped data, so a bill filed in the inbox shows up on the property, in the report and in the tax pack at the same time.
In
- Bank statement PDFs
- Bills and invoices
- Leases and deposits
- Manual capture
Letto core
One organisation-scoped ledger
- Organisation and team
- Entities: trust, company, personal
- Properties, tenants and leases
- Transactions and allocations
- Rent payment record
Modules
- Dashboard Stats, map, alerts
- Properties Units, bonds, values
- Leases Tenants, deposits, escalation
- Transactions Allocate and split
- Smart inbox Drop, read, file
- Reports P&L, IRP6, exports
- Entities Trust, company, personal
- Maintenance Requests and contacts
- Settings Branding, rules, team
Out
- Accountant pack
- IRP6 categories
- CSV and PDF exports
- Claude via MCP
- White-label portal
Drop a document. Letto does the filing.
One drop zone replaces separate upload pages. Every PDF runs through a server-side rule set tuned to South African document formats, then lands on the right property with the expense already booked.
- DropPDF, JPG or PNG, several at once
- ExtractText pulled from the PDF on the server
- ClassifyStatement, bill, levy, lease and more
- ReadAmounts, due dates and periods
- MatchAddress, unit and estate hints to a property
- File and bookDocument filed, expense created
Review before it books. Each document becomes a summary card with its type, amounts, matched property and confidence. The landlord confirms, edits or dismisses before anything is filed.
Recognises bank statements, municipal bills, rates notices, bond statements, body corporate levies, insurance policies, lease agreements, maintenance invoices, compliance certificates, agent statements and receipts.

Bank statements in. Categorised books out.
Upload a statement from any of the big four banks. Letto parses every line, then a priority-ordered rules engine sorts it into a category. Correct one transaction and Letto offers to turn the fix into a rule.
| Raw statement line | Matched rule | Category |
|---|---|---|
#Monthly Account Fee | contains "#Monthly Account Fee" | Bank charges |
Magtape Debit Sbsa Homel | contains "Sbsa Homel" | Bond payment |
Body Corp Levy | contains "Body Corp" | Body corporate |
Payshap Credit | contains "Payshap Credit" | Rental income |
Private Property Li | contains "Private Property" | Advertising |
POS Purchase | contains "POS Purchase" | Other expense |
- Five match types
- Contains, starts with, exact, regex and amount range. Rules run in priority order and the first match wins. A rule can also auto-allocate to a property or tenant.
- Big four bank formats
- FNB, Standard Bank, ABSA and Nedbank. Each bank has its own parser tuned to its statement layout, and duplicate transactions are flagged on import.
- Learns from corrections
- Recategorise a transaction by hand and Letto offers to create a rule, so the same line is classified automatically next month.
Every lease, colour-coded at a glance.
The dashboard pairs headline numbers with a map of the portfolio. Each property pin carries a traffic-light status, so expiring leases and vacancies stand out before they cost money.
- GreenMore than 60 days left on the lease
- Amber30 to 60 days left, time to renew
- RedUnder 30 days or already expired
- GreyVacant, or no active lease

Year-end, without the shoebox.
Reports come straight from the allocated ledger: income against expenses, profit per property and spend by category, grouped the way a South African tax return asks for it. The accountant can be invited straight in.
- Income vs expenses
- Monthly, by entity or portfolio
- Per-property profit and loss
- Income, bond, levies, net and yield
- Category breakdown
- Where the money actually goes
- IRP6 categories
- Grouped for provisional tax
- Tenant payment history
- Paid, late and missed months
- CSV, PDF and accountant pack
- One click exports

Accountant access
Invite by email with a role. Invites expire after seven days, and an accountant gets read and export rights by default.
| Role | Edit | Delete | Invite | Export |
|---|---|---|---|---|
| Owner | Yes | Yes | Yes | Yes |
| Accountant (invited) | No | No | No | Yes |
Built for how South Africans actually own property.
Properties sit in trusts, companies and personal names, each with its own bank account and tax number. Agencies want all of it under their own brand. Both live in the data model, not bolted on later.
- Trust
- Trustees, registration and tax numbers, and its own bank account.
- Company
- Directors, members, VAT and registration numbers on record.
- Personal and co-owned
- Properties in a personal name, with co-owners where they apply.
- Switching
- Move between one entity and the whole portfolio from the sidebar. Every number filters with it.
White-label, per organisation
Logo, custom domain, plan and trial, and brand colours stored per organisation.
- Primary
#0F172A - Secondary
#3B82F6 - Accent
#10B981
Agency tier: agents only see the landlords assigned to them, enforced in the database with row-level security.

Ask Claude about your portfolio.
Letto ships its own MCP server, so an AI assistant like Claude can read and update a landlord’s portfolio through scoped, audited tools. It runs under the same row-level security as the app itself.
“Which rents are still outstanding this month?”
- AI assistantClaude, or any MCP client
- Letto MCP serverEdge Function, scoped key and JWT.
get_rent_status - PostgresRow-level security, audit log
Portfolio 20 tools
list_properties get_property create_property update_property list_tenants get_tenant create_tenant update_tenant list_leases get_lease create_lease update_lease list_entities get_entity create_entity update_entity list_contacts get_contact create_contact update_contact
Financial 11 tools
list_transactions get_transaction create_transaction update_transaction categorize_transaction bulk_categorize list_categories get_rent_status get_cashflow_summary get_expense_breakdown get_dashboard_summary
Operations 7 tools
list_maintenance get_maintenance create_maintenance_request update_maintenance_request list_documents get_document create_agent_contract
Scoped per-organisation API keys, rate limiting per key, no service-role shortcuts, and every tool call recorded in the audit log.
A real backend, not a spreadsheet with a skin.
Next.js on Vercel in front, Supabase behind it. Every table is locked to its organisation with row-level security, and money has one source of truth.
Frontend
- Next.js 16, App Router
- TypeScript
- shadcn/ui and Tailwind v4
- Zustand and TanStack Query
- Recharts and Leaflet
Hosting
- Vercel
- Server routes
- Deployed from GitHub
Supabase
- Postgres with RLS
- Auth and invitations
- Storage buckets
- Edge Functions
AI layer
- MCP server
- 38 scoped tools
- Audit log
- One source of truth for rent
- Paid, due and overdue come from the rent payment record, never from calendar maths.
- Allocations win
- A transaction split across properties reports by its allocations, not the raw bank line.
- Database safety nets
- Triggers fill rent periods automatically, so a missed field cannot break the dashboard.
- Categories live in data
- Every category is a database row per organisation. Nothing is hard-coded.
Fintech calm, with South African detail.
A dark-first theme with a light mode, built on shadcn/ui and Tailwind v4 tokens. Colour always carries meaning: blue for action, green for money in, red for money out and risk, amber for attention.
A house with a keyhole: the key to letting, in one simple shape. The lowercase wordmark keeps it friendly next to the dense, number-heavy screens.
Surfaces and text
- Background
#0A0F1C - Sidebar
#0D1321 - Card
#111827 - Raised
#1E293B - Text primary
#F1F5F9 - Text secondary
#94A3B8 - Text muted
#64748B
Meaning
- Blue, action
#3B82F6 - Green, income and healthy
#10B981 - Red, expense and risk
#EF4444 - Amber, attention
#F59E0B - Purple, data and AI
#8B5CF6 - Brand gradient
#3B82F6 to #10B981
Type
Geist SansInterface and headings. Light, Regular, Medium, SemiBold, Bold.
R48,600.00Geist Mono for figures, dates and codes.
Transaction categories
Rental incomeDeposit receivedBond paymentBody corporateBank chargesInterest chargedAdvertisingAccounting feesMaintenanceInsuranceUtilitiesTransfer inTransfer outUnknown
Every category is a database row with its own colour, icon and tax flag, so organisations can extend the list.
Inside the app.
Every frame below is a current capture from the live app at letto.co.za, so this page always shows Letto as it ships.

Properties Portfolio grid with lease health on every card 
Property detail Lease, linked transactions, documents and the property P&L 
Tenants and leases Contacts, lease history and payment record 
Transactions Filters, categories and the allocation sheet 
Entities Trusts, companies and personal holdings
Dashboard
Capture a bill
Property
Rent status
Designed and built end to end.
We run every build through WAID, our own project platform, with an AI-assisted pipeline: Claude plans each change and handles the database, Claude Code builds it, and a person signs off before anything ships.
- Ticket on WAIDOne change per ticket, with its build brief
- Plan and databaseClaude plans and runs tracked migrations
- BuildClaude Code works through the Todo column
- ReviewA person signs off every change
- ShipMerged and deployed on Vercel
From beta to a paid product.
Letto is free while in beta. The planned tiers price by unit count, so the cost grows with the portfolio rather than with features.
- Starter
R99/month
1 to 5 units. For a landlord with a flat or two.
- Growth
R199/month
6 to 20 units. For a growing portfolio across entities.
- Portfolio
R299/month
21 to 50 units. For serious portfolios and small agencies.
- Lease agreements from Word templates
- Merge fields and a signature pad
- Duplicate payment detection
- Cancel, merge or add new on import
- Agency tier
- Agent invitations, client assignment and agent views
- MCP phase 2
- Document ingestion, bulk invoice allocation, contracts and statements
Designed and developed by Dezignza
Branding, product design and full-stack development, from the database to the last pixel.