A small side project that evolved from a simple daily crawler into a price prediction tool for New Zealand insurance auctions.
During time in New Zealand, buying and selling cars became a practical side hustle (the Garage section on this site is basically the receipts). With a PhD-student budget, one workable approach was picking up damaged/rough cars, fixing them, and selling them on. Insurance auctions were a major source for those purchases.
The problem: “Is this a good buy?”
One of the auction sources used regularly was manheim.co.nz. After moving from New Zealand to Singapore, friends would occasionally ask for help spotting a good buy and estimating what a sensible price might be.
Over time, a rough intuition forms for what “good value” looks like for certain makes/models/years — but intuition has two problems:
- It requires checking listings constantly.
- It doesn’t scale when life gets busy (and the timezone changes).
That’s where tooling helps.
Step 1: a daily crawler
The first iteration was a web crawler that pulled down the day’s auction inventory and surfaced it as a simple list, hosted at findcars.prasanthsasikumar.com.
That solved one part of the workflow: “What’s up for auction today?”
But it didn’t answer the harder question.
Step 2: logging everything (CSV over time)
A few months after the crawler went online, the missing piece became obvious: if listings and outcomes are logged over time, the result is a usable dataset. The scraped data started getting saved as a growing CSV.
Once there’s a history of:
- vehicle attributes (make/model/year/odometer/etc.)
- auction context (date, listing details)
- observed prices
…it becomes possible to estimate what a “reasonable buy price” might be for a given listing, based on what similar cars sold for before.
Step 3: a simple model (XGBoost)
The prediction model is intentionally straightforward: an XGBoost regressor trained on the historical CSV. It’s not magic and it doesn’t pretend to be — it can only predict sensibly when it has seen enough similar examples.
The goal wasn’t academic novelty. It was a practical tool that can answer:
If this car is bought at around $X, is that a sensible number?
Step 4: putting it behind a UI (Streamlit)
To make it usable without copy/pasting data around, the predictor is wrapped in a Streamlit app and hosted here:
What worked (and what didn’t)
A few observations after living with it for a while:
- Logging consistently mattered more than model complexity.
- “Similar car” is doing a lot of work — trims, condition, and market shifts can dominate.
- The long tail is real: weird listings don’t have good comparables.
