Features

Everything Basket does is built on receipts you have checked yourself. Here is the whole of it, in the order it happens.

Getting receipts in

A receipt reaches Basket in one of two ways. You photograph it, or you upload the PDF the store emailed you. Both end in the same place.

A long till roll does not fit in one photograph, so it does not have to. Take three overlapping pictures of the same receipt and they are treated as pages of one purchase. Several PDFs picked at once go the other way: each is its own receipt, and you review them one after another.

Photographs are shrunk in the browser before they are sent. A modern phone produces a 50 megapixel image carrying no more legible text than a 3 megapixel one, and uploading the difference only makes you wait.

Reading, then checking

The receipt is read by a vision model that returns structured lines: the printed product text, quantity, unit price, what you actually paid, and any discount.

It then stops and shows you what it found. Nothing enters your history until you confirm it. This is deliberate and not negotiable: an extraction that is 95% right is still wrong about one line in twenty, and a price history built on unchecked numbers is worse than no price history, because you would believe it.

Lines the model was unsure about are marked so your attention goes to them first. If the lines do not add up to the printed total, Basket says so and shows the difference, which is usually a line it missed rather than arithmetic.

Turning receipt text into products

Receipts do not name products, they abbreviate them. The same yoghurt can appear as YOGH NAT 1000G at one store and ARLA YOGHURT NATURELL at another, and neither string is a product.

Basket keeps a canonical product for each real thing you buy and remembers every receipt spelling that maps to it. Once you have linked a spelling, future receipts use it automatically. Two products that turn out to be the same can be merged, and the whole purchase history moves with them.

This is what makes a price history possible at all. Without it you have a list of strings, not a record of what a thing costs.

Unit prices

Every line is normalised to a comparable unit: kronor per kilogram, per litre, or per piece. The pack size is read from the product text where the receipt prints it.

This is the single most useful thing a receipt reader can do, because comparing package sizes in your head at the shelf is where most grocery money quietly goes. The larger pack is cheaper per unit often enough that people stop checking, and stores price accordingly.

Price history and alerts

For every product you get what you paid each time, when, at which store, and whether it was on promotion. Over months that becomes a line you can read.

Price movements are reported against your own history, not against a shelf label. If something you buy regularly jumps, it is flagged, with a threshold you set so that ordinary noise stays quiet.

Promotions are separated from ordinary prices. A product that is only ever bought on offer has a very different real price from one that is not, and averaging them together hides it.

Shrinkflation detection

When a package size changes between two purchases of the same product, Basket compares the effective unit price across the change.

A 500 gram bag becoming a 425 gram bag at the same price is a 17.6% increase. It is rarely announced and almost never noticed, because the number on the shelf did not move. This is the one analysis that needs a purchase history to be possible at all — you cannot see it on the shelf, only across time.

Store comparison

Basket compares stores on the things you actually buy, using prices you actually paid. It is not a national basket and does not pretend to be.

That makes it narrower than a published price index and considerably more useful, because a national average of a basket you do not buy tells you nothing about your own bill.

Your own grocery inflation

From the products you buy regularly, Basket builds a price index for your household and tracks it over time.

Official food inflation is a weighted average across a population. Yours depends on what you eat. A household buying a lot of coffee, butter and beef has lived through a very different few years from one buying rice, lentils and seasonal vegetables, and a single national figure describes neither.

Shopping lists with a real estimate

Lists can be written by hand, saved and reused, or generated from what you usually buy and how long it has been since you last bought it.

Either way the estimated total comes from your own price history, so it is a forecast of your bill rather than a guess. Where the history is too thin to support a number, Basket says the estimate is uncertain instead of inventing precision.

The practical things

It installs to a phone home screen and works as an app, which matters because the moment to capture a receipt is while you are still standing in the shop.

It is available in English and Swedish. Money is handled in exact minor units throughout, so nothing drifts by an öre. Every statistic returns nothing rather than zero when the data cannot support an answer.

What it is not

Basket does not connect to your bank, hold a card, or see a transaction. It reads receipts you give it and nothing else. It is not a budgeting app with a grocery section bolted on, and it makes no attempt to categorise your rent.

It also will not tell you what things cost in a shop you have not been to. Every number it shows came from a receipt of yours.

See the day-to-day of using it