Case Study · AI automation

How I Automated a 9-Property Rental Business on a Raspberry Pi

A landlord in Spain rents rooms in 9 buildings to 71 tenants. Rent arrives across 7 bank accounts at 4 banks. Utility invoices come from 6 providers. Until this spring, one person managed all of it by hand. Now a Raspberry Pi 5 does, and it has run unattended since April 2026.

Results

  • Invoices file themselves in minutes. An invoice email from Iberdrola, Digi or Aqualia is parsed, matched to its property and filed into Google Drive moments after it arrives. 199 PDFs and counting.
  • Every rent payment is matched by the next morning, across all 7 accounts, and written into the owner's ledger with the changed cells highlighted.
  • Zero babysitting. The core service has run over 40 days without a restart. A watchdog catches silent failures and restarts the pipeline itself.
  • The owner only hears signal. Telegram gets a message when rent is missing, a deposit lands or something needs a decision. Silence means everything worked.
  • 90% cheaper to run than the first version. Moving routine work from an LLM agent to deterministic scripts saves about 600,000 tokens per month; AI handles only the steps that need judgment.

How it works

Three layers, matched to how fast each job needs to happen:

  1. Real time: Gmail push notifications hit a webhook on the Pi the moment an invoice email lands.
  2. Nightly: a 20-step pipeline scrapes the Endesa and TotalEnergies portals with Playwright, pulls Finetwork invoices through its reverse-engineered API, syncs all bank accounts via Enable Banking (PSD2), matches payments to tenants and updates the ledger. Every step is failure-isolated.
  3. AI agents, only where judgment lives: detecting signed contracts in email threads, writing the monthly missing-rent report, deciding whether a failing backup deserves to wake anyone up. Built on ClaudeClaw, an OpenClaw-based agent daemon.

Payments a rule cannot safely match, anything of 100 euros or more, go to a human decision queue instead of being guessed. That line between automated and human is the design.

The system now has a product face: arcorooms.com hosts working previews of a landlord dashboard built on this backend.

The details clients ask about

Does it ever get things wrong? It nearly did once: a pension payout landed within a few percent of a rent and almost matched. Amount-only matching has been forbidden in code ever since. The system never overwrites a human entry in the ledger, and guardrails report anomalies instead of fixing them silently.

What does it run on? About 22,300 lines of TypeScript and Python on a Raspberry Pi in the owner's home, so tenant data never leaves hardware he controls. Total footprint: 344 MB.

Got a process that eats hours and follows rules someone could write down? That is exactly what I build. Drop me a message.