View on GitHub

My Price Log

Track and compare prices at local shops, offline.

Get it on F-Droid

Overview

This app helps you record prices of products at local stores and compare them. It works entirely offline:

There’s nothing particularly fancy or clever here. It’s a very simple, specialised database with a user interface optimised for easy use when you’re standing in a supermarket aisle with a basket or trolley.

The app tracks how old each price is, so you won’t be misled by out-of-date prices. Old prices are indicated by icons and a simplistic inflation adjustment is applied to try to keep them somewhat useful, although for best results you should update the prices yourself.

The app will make a recommendation as to whether a price is good, OK or bad if it has enough information. A list of unit prices is also shown so you can decide for yourself.

Customer loyalty scheme discounts can be specified for each store and these will be used to adjust the unit price when making a comparison between stores.

Unit conversions are handled automatically, both within and between measurement systems. Metric, imperial and US customary units are all supported.

Getting started

When you first install the app, it will be populated with some demonstration data. This isn’t realistic, but it lets you explore the app as it’s meant to be used without having to enter a load of data first. Feel free to just play around; it’s not as if this data is valuable.

Collections

You can have as many collections as you like. Each of these is almost like a completely separate database - each collection has its own independent list of stores, products and prices. The demo data is placed in a collection called “Groceries (demo)” to keep it separate.

You can see the collections by tapping on the ☰ (“hamburger menu”) at the top left. Tap a collection to make it the current collection. The current collection name is shown at the top of the screen.

When you want to start using the app for real, you will want to create your own collection. Tap on the ⋮ (“three dots menu”) at the top right and choose “Edit collections”, then use the floating + button at the bottom right to add a new collection. You can also tap on a collection to edit it, and from there you can use the “Delete collection” button to remove it.

Top bar of the app's main screen showing the hamburger menu, current collection and three dots menu

Products and stores

The “Edit products” and “Edit stores” menu options on the three dots menu at the top right allow you to add, edit and delete products and stores for the current collection. As with collections, you can add products or stores using the floating + button at the bottom right. You can tap on a product or store to edit it, and from there you can use the “Delete” button to remove it.

The current product and store are shown near the top of the app’s main screen:

Product and Store fields on the app's main screen

Tap the “Product” field on the main screen to change the current product. This will open the product selection screen, where you can scroll through the list of products or search by typing in any part of the product name. You can also add new products here using the floating + button at the bottom right of the product selection screen.

Tap the “Store” field on the main screen to change the current store. A menu will open allowing you to pick one. Choosing “None” will mean there is no current store, which hides the “Store price” panel. This might be useful because:

You can also select a store by tapping on its row in the “Price comparison” panel.

Design philosophy

Is “design philosophy” a bit pretentious? Sorry, I wasn’t sure what else to call it.

Entering all the data yourself obviously means more work than an app using a crowd-sourced database, website scraping or with the app owner curating a database of prices. However, it also means:

The last point is key. Suppose you drink coffee but aren’t brand-sensitive. You might create a product “Ground coffee” and record the price of the best value coffee (regardless of brand) at each store. In the app, you will see all these prices compared together so you can buy the cheapest. There’s no need to track each brand separately and categorise them all as “coffee” so you can compare across the different brands. If you’re not brand-sensitive but hate ValueMart’s own brand coffee, you can just remember that and ignore it when updating the price for “Ground coffee” at ValueMart. You can also write a note within the app if you want to jog your memory the next time you’re buying coffee at ValueMart.

On the other hand, suppose you’re brand-sensitive when it comes to cereals. You can create separate products for “Jones’ Wheaty Flakes” or “Smith’s Sugarcorn” and track them separately. When you decide you need to buy a new packet of Jones’ Wheaty Flakes, you can see where the cheapest place to buy it is and ignore Smith’s Sugarcorn completely.

Either way, there is at most one current price for each combination of store and product.

This is a very simplistic way of representing the price data, but in practice I think it is a good compromise between ease of use and tracking what needs to be tracked. A more advanced data model would allow a better representation of the real world, but it would also require extra effort to navigate and maintain while you’re standing in the supermarket aisle.

The app is not intended to allow you to gather an objective and detailed history of prices for everything you buy. Its purpose is to assist you by remembering prices and whether those prices are recent ones or not.

Settings

The Settings option on the triple dot “overflow” menu at the top right of the home screen brings up the Settings screen. These settings apply to all collections; each collection does not have separate settings.

Backup and restore

Unless you have some other means of backing up your phone as a whole and have tested it works with this app’s data, you are strongly advised to periodically use the Settings->Backup option to export your data to a file and copy the file off your phone so you don’t lose it if your phone is lost, stolen or damaged.

You can use Settings->Restore to restore a backup created via Settings->Backup. This will destroy all the data currently held within the app. The expectation is that if you are restoring a backup, something happened to your phone and you are setting things up fresh with a brand new installation of the app with no real data in yet.

The backup includes all collections, not just the collection you are currently working with. Similarly, restoring a backup removes all existing collections and replaces them with the collections from the backup.

The backup file is just a SQLite database. You can open it with various tools, including web-based SQLite viewers like SQLite Viewer Web App. If you have privacy concerns, make sure to use a tool you trust and which will not take a copy of your data.

The app is still new and I suggest you perform additional verification of the backups to be safe:

Although I have not tried to test it myself, I believe that on versions of Android with “Auto Backup for Apps”, this app’s data may be included in the cloud backup. I have not taken steps to prevent this, since I understand it is opt-in and may be a worthwhile security/privacy trade-off for some people. As this is completely untested, please be very careful before relying on this to keep a useful backup - I strongly suggest you follow the manual backup process described above as well.

Feedback

Please raise bug reports and suggestions for enhancements as issues at the app’s GitHub repository.

This app is open source and is freely available under the MIT license on GitHub.