Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time
November 20, 2022 17:02
March 25, 2023 07:12
November 24, 2022 11:15
December 8, 2022 17:07
November 19, 2022 16:42
November 6, 2022 08:43
November 6, 2022 08:05
December 8, 2022 17:07
December 21, 2022 21:20

Comparing food prices across multiple supermarkets is made a lot simpler using Simply scan your receipt, or enter your shopping list manually and you can instantly compare how much you would spend at each supermarket on the exact same products. You can query for generic products like milk or be more exact and specify the brand and amount.

The project can freely be used on

This will bring up the amount due per supermarket for the shopping list.

After setting up your shopping list and selecting your preferred supermarket, simply check off items as you collect them from the store.

You can share your current shopping list with family members or friends at any time, or use the sharing functionality to use the shopping list created on your desktop or tablet to your phone as you go out to get groceries.

Supported supermarkets is aimed at the Dutch market, and currently aims to provide accurate and recent prices for:

Some supermarkets do not provide prices for their products online or are not yet indexed on a daily basis, and therefor are currently not included in the data set:

  • Boni - No online assortment.
  • Boon's Markt (MCD) - No online assortment.
  • Butlon - Not yet indexed.
  • Crisp - No online assortment without an account.
  • Dagwinkel - Not yet indexed.
  • EkoPlaza - Not yet indexed.
  • Flink - Not yet indexed.
  • GORILLAS - No online assortment without an account.
  • Hanos - No online assortment without an account.
  • Makro - Not yet indexed.
  • Marqt - No online assortment.
  • LIDL - No online assortment.
  • Nettorama - No online assortment.
  • Odin - Not yet indexed.
  • Poiesz - Not yet indexed.
  • Sligro - No online assortment without an account.

Product selection algorithm

For any product added to the shopping list, tries to take a best guess at what you actually meant. Sometimes this may result in not seeing what you expect, simply because other products come up cheaper. In general, first an exact match by name is attempted. If there was no exact match, a fuzzy search will be applied, compiling a list of all products that contain the words from the shopping list item. The fuzzy search finds products based on if they contain all the letters from your shopping list item in the same order as they are given, but not necessarily right next to each other. For example, milk will find skiM mILK as well as whole MILK. When an amount in liter or kilogram is given, all products below the given amount are filtered out unless this returns zero results, in which case the filter is undone. Finally, products are first ordered by the string length of the fuzzy search (so whole MILK=>4 goes before skiM mILK=>6) in an attempt to find the closed possible match, those results are then ordered by price, and finally the top item from that list is returned.

The algorithm works better when supplying exactly what you are looking for. Note that generic names like milk are not well suited for this even though in in day to day live that would be enough to write down since you will make the choice between skim milk or whole milk once you get to the cooling compartment. The same goes for products like butter (salted butter, whipped butter, cream butter, etc).

When no prices are found for a specific product for any of the given supermarkets, a price estimate is used based on the average price for that product among other supermarkets.

Receipt scanning

When scanning receipts, Tesseract.js is used in order to detect text. After that, some processing is done to align the recognized text with true product names. Adjust any errors where necessary.


When entering your shopping list, you data never leaves your computer. All processing is done in the browser. This means no one can keep track of your purchases or build an advertisement profile based on your searches. Upon opening, all available prices will be downloaded. You will notice that reloading the page will not empty your shopping list; this is stored in your browser using the localStorage API.

Open data

Product price data is updated frequently and may be reused in other projects. For example, you can get a price alert when a product you don't buy often is discounted, such as cleaning supplies or personal care products, or more expensive products with long expiration dates such as (soft) drinks or bake-off pizzas. Data journalists may use the data to see trends or verify claims from supermarkets.