German bureaucracy is legendary. And nowhere is it more apparent than in the annual ritual of the Nebenkostenabrechnung—the utility cost statement that landlords must provide to tenants every year.

If you've never experienced this joy: imagine a document that needs to break down every heating cost, water bill, garbage fee, and property tax, then allocate them proportionally across multiple tenants based on square meters, consumption, or sometimes just the number of people living there. Miss a deadline? Pay a penalty. Calculate something wrong? Risk legal disputes.

So naturally, I decided to build something to make this easier.

The Problem

My girlfriend's family owns a few rental properties. Nothing crazy—just a handful of apartments spread across a couple buildings. Every year around March, I'd watch the same chaos unfold. Stacks of paper bills. Excel spreadsheets from 2012. Calculators. Arguments about which costs can be passed on and which can't.

The worst part? There's actual legal complexity here. Germany has strict rules about what landlords can charge tenants for. Certain costs are umlagefähig (allocable) and others aren't. Get it wrong, and tenants can dispute the entire statement.

Professional property managers charge hundreds of euros per unit for this service. For small landlords with just a few apartments, that's a significant chunk of the rental income.

Enter the LLM

The idea hit me during one of those stressful March evenings. What if an AI could read the utility bills, extract the relevant data, and generate a legally compliant statement?

Not as a replacement for understanding what you're doing—but as a tool that handles the tedious extraction and calculation while you focus on verification.

The technical approach was straightforward:

  1. Upload scans or photos of your utility bills (electricity, gas, water, garbage, etc.)
  2. The AI extracts costs, dates, and consumption values using vision capabilities
  3. User answers a few questions (billing period, prepayments, property tax)
  4. Algorithm allocates costs based on German regulations
  5. Generate a professional PDF ready to send to tenants

The Stack

I went with Next.js 14 for this one. Yes, I know—I usually preach simplicity. But for a SaaS with authentication, payments, and a multi-step wizard UI, the App Router and server components actually made sense.

Frontend: Next.js, TypeScript, Tailwind, shadcn/ui components. The shadcn approach is growing on me—copy the component into your project, own the code, customize freely. No npm dependency hell.

Backend: Next.js API routes calling GPT-4o for document analysis. The vision model is surprisingly good at reading German utility bills, even the badly formatted ones from small municipal utilities.

Database: MongoDB for storing user data and generated statements. Probably overkill for this use case, but it was already set up from a previous project.

Payments: Stripe. Because of course Stripe. The checkout flow is almost too easy now.

The Hard Part: German Law

The interesting challenge wasn't the tech—it was encoding German rental law into algorithms.

Did you know that you can charge tenants for chimney sweeping costs, but only if the chimney actually serves their unit? Or that elevator costs can be allocated differently depending on which floor the tenant lives on? Or that the landlord must complete the statement within 12 months of the billing period, or lose the right to collect additional payments?

I spent weeks reading through the Betriebskostenverordnung (the regulation governing allocable costs) and court decisions. The algorithm now includes 17 different cost categories, each with specific allocation rules.

The AI helps with extraction, but the legal logic is hard-coded. I don't trust an LLM to know that Hausmeisterkosten (janitor costs) are allocable but Verwaltungskosten (administrative costs) generally aren't.

Pricing and Launch

I went with a simple freemium model. Upload your documents and see a preview for free. Pay €29 to generate the actual PDF. One-time purchase per statement, no subscription.

Why no subscription? Because most landlords only need this once a year. A monthly fee for something you use in March feels wrong. The one-time model aligns with how people actually think about this task.

The launch was quiet—just a tweet, a post on a German landlord forum, and some basic SEO work. The organic traffic has been slow but steady. Most users come from Google searches for "Nebenkostenabrechnung erstellen" or "Betriebskostenabrechnung Software."

What I Learned

Domain expertise matters more than tech: Any competent developer could build the upload-and-process flow. The value is in understanding German rental law well enough to generate legally compliant documents. That knowledge took months to acquire.

Vision models are genuinely useful: A year ago, I would have needed OCR plus a bunch of regex patterns to extract data from utility bills. Now I just send the image to GPT-4o with a prompt describing what I need. It handles rotated text, tables, handwritten notes, stamps. Genuinely impressive.

German B2B SaaS is underserved: Most software is built in English first, German maybe never. There's real opportunity in building tools specifically for German regulations, German workflows, German users. The competition is often decade-old desktop software with UIs from 2005.

Simple pricing beats clever pricing: I experimented with per-page pricing, subscription tiers, volume discounts. In the end, a single fixed price converted best. People don't want to think. They want to know what it costs.

What's Next

The current version handles creation of statements. The next big feature is verification—upload an existing statement (from your landlord, property manager, or last year), and the AI will check it for errors and legal compliance.

Turns out tenants are a bigger market than landlords. Everyone rents at some point. And everyone suspects their Nebenkostenabrechnung has mistakes. Most people just don't have the expertise to find them.

If you're a German landlord drowning in utility bills every spring, give it a try. Or if you're a tenant who just received a suspiciously high statement, the verification feature should be ready by the time you read this.

Building tools for boring problems is underrated.