6 ms·
Show HN: CLI to order groceries via reverse-engineered REWE API (Haskell)
I just had the best time learning about the REWE (German supermarket chain) API, how they use mTLS and what the workflows are. Also `mitmproxy2swagger`[1] is a great tool to create OpenAPI spec automatically.
And then 2026 feels like the perfect time writing Haskell. The code is handwritten, but whenever I got stuck with the build system or was just not getting the types right, I could fall back to ask AI to unblock me. It was never that smooth before.
Finally the best side projects are the ones you actually use and this one will be used for all my future grocery shopping.
[1]https://github.com/alufers/mitmproxy2swagger https://github.com/alufers/mitmproxy2swagger
- ramon156 7mo agoSerious good use of an AI. Just let them do the grey area (like repeated purchase). I'd even let an algo pick better groceries for me. Cools tuff!
- wazHFsRy 7mo agoAbsolutely. For example, I want to ask it: Suggest me some vegetables I haven't ordered in recent weeks or stuff like this, and this is all possible.
- aprilnya 7mo agoCould even ask it to find recipes and then have it buy the ingredients needed for them next time it's doing your shopping!
- dewey 7mo agoIdeally it should also look up if they are currently in season in your location, so many possibilities!
- wazHFsRy 7mo agoYou can already filter by `isRegional`. That's maybe close enough.
- wklm 7mo agoNice! Do you know if the Austrian billa (REWE's subsidiary) is using the same api?
- fractallyte 7mo agoMy friend works at Billa AT; I could ask her – but that would be cheating ;-)
- stavros 7mo agoWhat's the point of this comment!
- elAhmo 7mo agoThis could be helpful: https://heisse-preise.io https://heisse-preise.io
- Dominik1001 7mo agoVery cool! Thanks for sharing, I’ll try it out. Haskell is indeed an interesting choice. ;)
- kls0e 7mo agothis feels a bit like Sandra Bullock ordering pizza in „The Net“, impressive
- MORPHOICES 7mo ago[dead]
- sigr_ 7mo agoReally cool to see things still being built in Haskell! How do you find using it compared to some of the newer languages that have more modern tooling? Did you implement your own OAUTH2 flow in haskell for this?
- yakshaving_jgt 7mo agoDoes Haskell not have modern tooling? What would be considered modern in this context?
- sigr_ 7mo agoit does through cabal and stack but its not as streamlined, quick, and versatile as tooling for languages like Golang or Rust imo. I'm a huge fan of Haskell and I'm really exploring it as my primary language now that AI has gotten so huge, not just because it makes it easier but also because I can really lock down what I allow code to do (through pure functions, type checking etc) and so I feel a lot more confident in AI generated code
- yakshaving_jgt 7mo agoCould you be specific? Saying it's not as "streamlined, quick, and versatile" is vague — I'm not really getting anything from that. For context, I've been writing Haskell for quite a long time and I'm maintaining a few packages like Yesod.
- sigr_ 7mo agoSure, I find that with cabal and/or stack you often have to do things like manually add/link files for compilation and also both go mod and cargo support pulling libraries directly from Github say easily (using something like GO_PRIVATE), which I think is possible in cabal but you have to use project files which I never found intuitive. Also, just by virtue of having a smaller user base obviously the package ecosystem is smaller (this isnt the fault of the tooling) but in practice it means that community IDE plugins for things like autochecking for updates just aren't as good for Haskell. The things above are definitely a skill issue on my part, I'm sure all of this is possible with cabal and stack and I may just not be using them right, but I definitely found cargo and go mod to be a lot simpler to get started with. Also, for cross-compilation and for FFI I found cabal to be a pain when including C sources where as Go was trivial through CGO (and the tooling around it was too). I love Haskell though so all good <3
- tietjens 7mo agoLove this! Super cool.
- danielszlaski 7mo agoI love the idea of a CLI for groceries. Do you have plans to support 're-order' scripts or meal-plan integration? I can imagine a workflow where a recipes.yaml file gets piped into your CLI to automatically fill the cart with everything needed for the week. Much faster than clicking through a mobile UI.
- wazHFsRy 7mo agoAbsolutely, that could just be a small script or something on top that calls the CLI tool
- ramonga 7mo agoFunny enough I was looking at rewe network requests for a personal app that suggests weekly meals and automatically orders the ingredients for you
- picografix 7mo agotell us more about it
- wazHFsRy 7mo agoJust pipe the items through this CLI, and you can save a ton of work :)
- splike 7mo agoThat's funny, I've just built the same thing for Asda in the UK https://github.com/markDunne/asdabot https://github.com/markDunne/asdabot It can search for items, add them to the basket, picks a delivery slot and does the checkout. With a little more scaffolding in markdown files, this now takes care of my weekly shopping.
- Latitude7973 7mo agoEven a CLI interface would be better than the sorry excuse of Asda's website. I wonder if entrusting an LLM is worth the trade off with the tedium of online shopping.
- Bewelge 7mo agoCool project, but have mixed feelings about publishing ever easier ways to access this API. They've locked down the API a while ago for a reason. Also there already exists this reverse engineered project: https://github.com/ByteSizedMarius/rewerse-engineering/ https://github.com/ByteSizedMarius/rewerse-engineering/ I do have a suggestion for your app though: Have it compare your basket of goods across different markets in your region to show you the cheapest option. I'm pretty sure this possibility is actually one of the reasons they locked down the API. I've used Data from REWE in the past and made a comparison between a couple of cities in Germany (I believe it was Frankfurt, cologne, Berlin, Munich and Hamburg). Hamburg was by far the most expensive, often as much as 10-20% more expensive.
- duskdozer 7mo ago>I do have a suggestion for your app though: Have it compare your basket of goods across different markets in your region to show you the cheapest option. I'd settle for just being able to sort items by unit price... I'm sure this is a [regulation-]solved problem in Germany though
- Bewelge 7mo ago> I'd settle for just being able to sort items by unit price What do you mean? The official REWE app and website provide just that. > I'm sure this is a [regulation-]solved problem in Germany though Not sure what you mean by that.
- tstenner 7mo agoStores are required by law to provide the price per unit/weight/volume alongside the price, so you can directly compare the price of a pint of beer to the 0.33 liter bottle without calculating anything.
- Bewelge 7mo agoAh thanks, didn't think about that. I just checked and REWE only lets you sort by absolute price. But honestly, you can compare prices so much better on their website than in a physical supermarket already [0]. [0] https://www.rewe.de/shop/c/frisches-obst/?sorting=PRICE_DESC https://www.rewe.de/shop/c/frisches-obst/?sorting=PRICE_DESC You have to enter a random zip code eg 20249
- rvz 7mo ago> Finally the best side projects are the ones you actually use and this one will be used for all my future grocery shopping. Until it breaks in a few weeks.
- wazHFsRy 7mo agoI mean, fixing small issues is not a big deal – during my ordering sessions, if something comes up, I actually just let Claude create an issue for it, and then when I have time, I create a fix.
- son3tt 7mo agoReally cool, but this is also how you end with 300 avocados and 500 L of detergent.
- stavros 7mo agoWell of course, how else am I going to make my Tideamole?
- a012 7mo agoIt’s one step closer to have an agent to go shopping for my recipes or dinner, but hopefully unlike the Son of Anton
- wazHFsRy 7mo agoI am using it exactly like this. I tell Claude: "Add all things for this recipe to the basket."
- rmoriz 7mo agoSurprised how little the B2C and even B2B e-commerce segment is providing API access for automation and agentic coding. One could easily set up rate limits, fraud detection and KYC checks upfront initial access.
- Bewelge 7mo agoB2B: Look at chefkoch.de They do use the REWE API, and I'm guessing not without their knowledge B2C: Is it really surprising that a busines has no interest in providing more price transparency to their customers?
- rmoriz 7mo agoWhen Amazon launches an API everyone cries. Same story over and over. Even better example: TakeAway-Group. The perfect MITM.
- Bewelge 7mo agoThink it's context dependent whether it's a good or bad thing. The owners of German supermarket and car companies are really the richest of the rich in Germany (okay and maybe the SAP guy on top). It would definitely be a net positive if someone manages to scrape and compare their prices. In the restaurant market it's one player abusing many small players. And honestly, I think the reason everyone cries when "Amazon launches an API" is because Amazon would not dare to piss off the German supermarket oligopoly.
- dewey 7mo ago> It would definitely be a net positive if someone manages to scrape and compare their prices. There's a few projects doing that for DE / AT at least.
- Bewelge 7mo agoCan you share them? I recently looked for such projects and didn't really find anything that works well. The issue is that each market sets their own prices and I believe REWE is the only large one where you can fairly easily scrape the product catalogue. I thought about it in a shopping list context, so you'd need to make it location dependent to be useful. But you could do a lot of cool things with it. Like choose a basket of goods and it creates a route for you: "Go to supermarket A and buy goods XYZ, then to supermarket B and buy ABC"
- braedonwatkins 7mo agoI remember a friend and I in college were looking into ways to do this in the US but major grocery chains here are pretty sensitive about their product data being accessible by open APIs and web scraping... It would have been a cool project!
- bronco21016 7mo agoKroger does have an open API with some limitations that get you pretty far. Someone built a python wrapper and MCP for it awhile back. [1] The workflow in our house is basically to use Siri to add items to an iOS Reminders list as the week goes on. Then, the day of or day before we plan to shop we fill-in with commonly purchased items or one-off things and go shop. It's been on my TODO list to have an agent "skill" take the Reminders list, ask for additional items, and populate the cart to schedule a pickup. We tend to prefer going in the store though to browse the produce because our local Kroger isn't great about that. Pickup is generally reserved for the weeks where we're feeling a bit short on time. [1] https://github.com/CupOfOwls/kroger-api https://github.com/CupOfOwls/kroger-api
- wazHFsRy 7mo agoI want to add something else to this. In the process of writing this, I also played with formal verification and formally verified the suggestion engine, which was a really nice side discovery. The basic idea is to write a prove in Lean4 and then test both the production implementation (Haskell) and the Lean implementation against random inputs. Compare if the results are the same. If that is the case -> you can be pretty sure the unproven production version is as correct as the proven lean version. https://www.dev-log.me/formal_verification_in_any_language_for_everybody/ https://www.dev-log.me/formal_verification_in_any_language_f...
- zephyrwhimsy 7mo ago[flagged]
- zephyrwhimsy 7mo ago[flagged]
- atollk 7mo agoAs a SWE at Rewe (at a completely different department), I can say that I find this pretty cool. I wonder if this is going to be a wakeup to management to relax the API restrictions.
- wazHFsRy 7mo agoI mean, definitely leads to me buying more stuff on Rewe than before.
- kleiba 7mo ago...or to tighten them.
- rvz 7mo agoYou should tell them to charge for the API.
- aweiher 7mo agoPlease pitch internally for an official Rewe MCP server. This is the future of doing groceries. Let us login with our credentials and let us do the search/filling the cart with agents. Totally fine to do the payment only on the web, so everyone can be sure they only order what was wished, and not 300 avocados.
- atollk 7mo agoThat's a good idea and actually was my first thought too. I sent a chat message so the product owner in charge is aware of the interest in something like it. I think a big issue here is the lack of standard - there is no established way of where an MCP server should be hosted so that agents are easily able to find it. Right now, the best solution I could think of would be to serve it at something like rewe.de/shop/mcp and you'd manually have to register it with your agent.
- wazHFsRy 7mo agoNice thank you. If something came out of this that would be amazing. I am not the biggest fan of mcp, as they are a waste of tokens though. I shot you a message on LinkedIn as well, was wondering if this caused some discussion internally at Rewe because it was immediately blocked.
- hk1337 7mo agoThis reminds me of pizza party cli app way back late 90s or early 2000
- volume_tech 7mo ago[flagged]
- aweiher 7mo agoI hope REWE is seeing this and offers an official MCP server. In the end we pay real money there. :D I wrote a skill some time ago to support me with "agentic groceries" on my own - it's the future of shopping I would say. My workflow: - I paste in urls or text for receipts I will cook this week - agent extracts the ingredients, calculates cups to ml and such, replaces meat with vegi ingredients, replaces some other things I prefer always (often also creates a nice markdown receipe at this steo I can put into Obsidian) - check my list of favs, check search cache (so not every time the api is called, I'm a good netizen :D ) - ask me which items I have at home (no need to add to the basket) - search rewe api for multiple candidates and let me choose. - after each recipe I enter /new to start with fresh context - also I have a list of things I buy every week I still put everything manually in the basket in the end, but this is not the thing which is time intensive.
- wazHFsRy 7mo agoThis is also my exact workflow here. Thank you. I'm adding things that should be in the basket via Siri to my Obsidian notes. I also add recipes to that list or anything else. Then Claude checks that list once I want to do the shopping, looks through my favorites, and fills the baskets with all the items needed. I also use Claude to list the most frequently bought items for a template that always gets filled in.
- robonot 7mo agoAwesome. Are you exposing the api to Claude or just copy pasting the data for it to analyze? How are you feeding it the data?
- wazHFsRy 7mo agoIt is extremely simple. I just tell Claude: "Use korb to look at my order history and create a table with my most frequently bought items. Next time, fill my basket with the items I always buy." So something of that variation works.
- deleted 7mo ago[deleted]
- kylex-ken 7mo agosupper cool, would be great if you can onboard different services.
- sgbeal 7mo ago> supper cool Pun presumably intended?
- vessenes 7mo ago> The suggestion engine (korb suggestion threshold) is re-implemented in Lean 4 with five mathematically proven properties: suggestions have positive frequency, are sorted descending, come from ordered and available products, exclude basket items, and respect the count limit. This is amazing. I mean this literally in that I am amazed, but also figuratively in that I am delighted to watch the type-safe-mad build cool shit.
- wazHFsRy 7mo agoThank you. Though I have to say I'm really not an expert in that domain and just starting to explore it myself.
- karim79 7mo agoI want to use this but I literally have a Rewe 20 meters (at most) from the entrance to my building. Still I might give it a go considering all the positive comments in the thread.
- zephyrwhimsy 7mo ago[flagged]
- edinetdb 7mo ago[flagged]
- grimm8000 7mo agoWhy say CLI instead of AI agent?
- edinetdb 7mo ago[flagged]
- silbercue 6mo agobeen ordering from REWE for years =) always wished the app was less annoying. all my programm skills - for what? lol. probs for reverse engineering the mTLS part, most people would have just given up. how stable this is in practice? Internal APIs tend to break without warning when they update the app.