
Ruoanhinta.fi
Summary
The most popular (or only?) grocery store comparison app in Finland.
Ruoanhinta.fi helps you find the cheapest grocery store for you. You can freely select the stores and items that you want to compare. The site includes stores from the two largest grocery store chains in Finland: Kesko and S-Ryhmä.
You can also use pre-built example shopping carts to compare the overall price levels across stores. These can be also viewed on a map, to visually see what stores nearby are the cheapest.
The site also collects and stores historical data about the grocery prices.
Screenshots





Background / Comments
This project started mainly from pure curiosity. I had seen similar apps in the U.S. for example Basket, where you could easily compare prices across stores. I just wanted to see if I could build something similar for the Finnish market.
Overall this has been a fun project to develop and maintain over the years. In 2024, I rebuilt the whole site to match more of a ecommerce type of view, where you see and add the items like you would be shopping in an online store.
Tech
Architectually there are four pieces:
- API: Node.js, Express.js, Prisma
- Database: Postgres
- Frontend: React, Tailwind
- Data collection: Node.js
The API and Frontend are fairly normal for this, the different visualizations and are kinda cool I guess. Storing and collecting all the price data is the more interesting part though. All the price data is stored in a time-series database - TimescaleDB. That makes it possible to be able to quickly fetch the latest price, and do other time-series queries for analytics etc.
The price collection part is also relatively interesting. The prices are collected from the publicly available sources such as the online stores. It is then normalized into a single format that is stored in the database. Similar way is used to fetch the store and product information too. The data collection is kind of an endless source of work, as the data and formats change from time to time. Some of these sites also try to implement various bot protections and other means of blocking access, so bypassing those requires work too, which at times is a fun challenge, and other times incredibly frustrating.
Impact / Stats
- 30,000+ monthly users
- Thousands of email subscribers