Skip to content

← Engineering

Client reporting pipeline (My TeamR)

A deterministic Python pipeline that replaced ~320h/year of manual owner reporting.

Illustration of a laptop covered in invoice files, standing in for the manual reporting. Real client invoices are not shown.

Illustration of the manual pile. Real client invoices are not published.

The brief

Owner reporting for a 16+ property short-term rental portfolio was a multi-week grind: PDF invoices, address mapping, owner splits, validation, and formatted reports. It was slow and error-prone, and it consumed time that should have gone to the operation itself.

Decision

No LLM in the shipped pipeline — on purpose. I tried n8n + an LLM API first. It failed on speed, API cost, and trust. One owner has ~200 invoices; long LLM chains drift and eventually invent. A report that's sometimes right is worse than a slow one. The tool is deterministic Python: extract → normalize → calculate → triage → report. It batches 1,000+ PDFs, assigns each to the right owner, and costs nothing once written. Decisions live in code you can check; a human queue catches flagged edges.

System

Solo-built Python pipeline, now the company default. Flow: PDF ingest → classify → extract → calculate → validate → PDF/HTML for non-technical operators. Mappings and a review queue keep humans where judgment still matters.

Client invoices, real addresses, and owner identities are not published here. Architecture and outcomes only — demo data would be redacted if shown.

Reflection

  • A report that's sometimes right is worse than a slow one. Deterministic beats probabilistic for money-critical output.
  • One owner has ~200 invoices; long LLM chains drift and eventually invent. That's why the tool is deterministic Python.
  • Decisions live in code you can check; a human review queue catches flagged edges.

Tech stack

  • Python
  • PDF parsing
  • Data validation
  • HTML/PDF reporting

Results

  • Replaced ~320h/year of dedicated manual work with a repeatable pipeline.
  • Batches 1,000+ PDFs and assigns each invoice to the right owner automatically.
  • Costs nothing once written — deterministic Python, no per-run API spend.