Every value links back to its source document
Skrapan turns Swedish property companies’ scanned leases and inspection reports into a rent roll they can verify. I was the founding and only engineer, and I designed and built it.
- 6 months
- from idea to MVP
- Fully European
- and GDPR-native

The challenge
Property companies track rents, notice dates and termination status by hand, straight from scanned PDFs. It is slow, and one missed notice date can renew a lease on the old terms. The co-founders knew the domain but had no engineer. They needed one person to build the whole product: an AI pipeline that reads scanned contracts, an interface where every value can be checked, and a European stack for customers increasingly wary of sending sensitive data abroad.
What I did
Scoping the MVP with the co-founders
I scoped the MVP with the two co-founders and decided what to build first. Rent rolls and notice deadlines are always rebuilt from the contracts, so they can’t drift. The stack is European and small, and one PostgreSQL database handles background jobs, vector search and real-time updates.
Click a value, see the words in the PDF
Every extracted value shows its source quote, page and confidence. Click it and the exact words light up in the PDF, even on scanned pages, through word-level text matching I built myself.
Grounding the assistant in the documents
The assistant answers questions across the whole portfolio and cites its source every time. Evals showed that what stops it giving plausible but wrong figures is answering from the extracted data, not tuning the model. Each customer’s data is kept separate, and every model output is validated.
Testing prompt changes against a benchmark
Claude Code was my main tool. I wrote the conventions it works to, with custom skills for verifying, committing and reviewing changes, and architecture docs that fail the build when they drift from the code. A prompt change stays only if it scores better on a benchmark of hand-verified leases, and about 3,600 tests cover the rest.
The outcome
Every extracted value in the rent roll traces back to the line in the document it came from.
