Show HN: CLI to order groceries via reverse-engineered REWE API (Haskell) (github.com)

205 points by wazHFsRy ↗ HN
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

36 comments

[ 2.1 ms ] story [ 51.3 ms ] thread
Nice! Do you know if the Austrian billa (REWE's subsidiary) is using the same api?
Very cool! Thanks for sharing, I’ll try it out.

Haskell is indeed an interesting choice. ;)

this feels a bit like Sandra Bullock ordering pizza in „The Net“, impressive
Really 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?

I 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.
That's funny, I've just built the same thing for Asda in the UK 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.

Funny enough I was looking at rewe network requests for a personal app that suggests weekly meals and automatically orders the ingredients for you
Cool 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/

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.

> 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.

This is a great idea. I just think the use case is not that big since REWE is the worst in the price/quality ration and just going to another shop would save you more.

> 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.

Really cool, but this is also how you end with 300 avocados and 500 L of detergent.
It’s one step closer to have an agent to go shopping for my recipes or dinner, but hopefully unlike the Son of Anton
Surprised 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.
Normal customers are not paying for APIs, so there is little value in offering them for free, especially when it can be harmful. B2B sometimes does pay for them, but not always is it obvious from the outside that they even exist. Much commerce is also on tight numbers and thus kinda secretive about their stuff.
I 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!

Kroger 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

Serious 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!
I 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_f...

As 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.
Please 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.

That'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.

This reminds me of pizza party cli app way back late 90s or early 2000
I 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.

supper cool, would be great if you can onboard different services.

  > 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.