angebots-radar
Live · sign-in requiredCollects the supermarket leaflets for your own region, makes them searchable and sends matches to your phone.
The week’s offers sit in leaflets that every chain publishes separately, and they do not hold everywhere alike: what is on offer in one branch may not be in the next town. So anyone who wants to know whether a particular thing is cheap right now pages through several leaflets — new every week, and usually for nothing.
Angebots-Radar collects the leaflets for its own region overnight, breaks them into single offers and files them so they can be searched. Every offer knows which postcodes it holds in; only what actually exists near the user is shown. A saved search term — optionally with a price ceiling and narrowed to certain chains — brings a notification to the phone, outside the quiet hours that were set. On top of that a shopping list sorted by chain, and a viewer for the leaflet pages themselves.
What stands out is the rule behind it: when in doubt write nothing rather than guess. An application that pushes to a phone unasked is believed, so an offer carrying the price of the item next to it does more damage than a missing one. Everything read out of a leaflet image has to pass counter-checks before it may enter the collection — and where the recognition is unsure of itself, it is discarded rather than smoothed over.
Decisions
No offers out of text recognition
One leaflet was put through OCR as a test. It read the product names well, but between a third and four fifths of the offers won that way would have been wrong — and plausibly wrong: the right price on the wrong product, a discount sticker read as the price. That is the worst kind of error for an application that pushes to a phone unasked, because what is pushed gets believed. The project's rule ever since: when in doubt write nothing rather than guess.
The whole leaflet page to the vision model, not the single tile
Asking a vision model was rejected at first — running costs and a dependency on someone else's service in an application that had none until then. The sum tipped once it was no longer each of the 189 product tiles going out on its own, but the leaflet's 17 pages in one go: a minute and a half per leaflet, once a week, and the names come out complete where the hand-written parser stopped at 88 per cent. Even so, only what passes three counter-checks is taken over — a price the model names has to appear in the text it quotes, and the model is allowed to say “unsure” about itself.
A closed API stays closed
One of the big chains explicitly turns away requests to its own offers API. That is a decision by the operator and not a technical hurdle, so it is not worked around with different headers. That chain's offers are in the collection all the same — through the service they are published on anyway.
No bought-in service for reading other people's pages
At around 600 calls a month, a paid scraping service would have fitted comfortably into the free tier. But what it is good for is reaching pages that fight off scripts — the source used here serves plain HTML, and the number of offers found would have stayed exactly the same. It becomes the right choice only when that source goes away.