Development of Döner Kebap prices in Germany 2016–2024 [EN]
Extracting spicy facts, inflation & regional differences from Google Reviews and the help of LLMs
It’s 2024, and the Germans are a divided people: “The Nutella” vs. “The Nutella” (a joke even better in German) —people who park on bike paths vs. people who park beside them — football fans vs. Bayern Munich fans — high earners vs. Friedrich Merz — Fürth vs. Nuremberg vs. Cologne vs. Düsseldorf — Goethe Institute vs. Goethe Comprehensive School. East and West? No division there, all is well.
Yet, there’s something that keeps this fractured country together, offering hope and bridging layers and fates. Yes, it’s the Döner (often simply referred to kebap in English). Our national dish. The veal Bismarck herring of the German soul.
And nothing, absolutely nothing, stirs the German spirit like a 50-cent price hike on this staple food at the local kebab shop. A place you thought you could trust. That has been there through childhood, sickness, weddings, divorces, and hangovers. A place where you were the boss. And then: betrayal. A 50-cent increase. Unacceptable! Sure, the new car costs €5,000 more, but these 50 cents are a dagger to the heart. A betrayal of me — the lifelong customer — who has been loyal since moving here 2 years ago. That’s it. Never again. Count me out!
And as true Germans, indignation only works if it’s shared. So, we share it. And to get serious for a moment: thankfully so. Because, in recent months and years, we’ve actually seen a noticeable rise in kebab prices that seems to genuinely affect us all. Social media is full of it. But, besides anecdotes, there’s hardly any data (though Lieferando is trying).
But where, as mere mortals, can we get data to truly understand the kebab inflation? Right, from our collective outrage. Over increased prices. Over prices too high for unsatisfactory or insufficient quantities. Or too sufficient quantities. Sometimes, this outrage is interrupted by three-page blissful narratives when a €2 kebab surprisingly meets all quality standards, and outrage, therefore, must be withheld.
For about 6–7 years now, Germany has luckily had a place where all these experiences can be shared: Google Reviews. So, to establish a somewhat solid data foundation for our kebab dilemma, the following little article will analyze all this chatter. And thanks to LLMs, we can now reduce these James Joyce-like stories about visits to the kebab shop to the essentials: what was eaten and how much did it cost? Enjoy!
Döner Kebab Prices in Germany
As can be seen, prices were stable at around €4 until 2019. Unfortunately, there’s hardly any data on Google Reviews before 2016.
After a moderate increase to about €5 in 2020/21, the price, especially in 2023, rose to €6 and in early 2024 even to €7, mainly due to the VAT adjustment back to 19%. This is the national average. Such an increase would mean an annual kebab inflation rate of approximately 11.8%.
So, what can we learn from this? Maybe it was overdue for the kebab to become more expensive? Sold at the same price for years because the kebab shops knew how emotional the topic is?
Hamburg vs. Berlin
Due to the methodology, a regional breakdown of the results is not so straightforward, since there are only a handful of kebab shops per city in the dataset, and not every one of them mentions a price, especially not spread over all depicted years. However, it seems to work for the two largest German cities, Berlin and Hamburg:
The graph above shows not only a clear historical price difference between the two cities but also that Hamburg started the price increase a bit earlier. And while the data for 2024 might not be sufficient, it’s interesting to note that the prices seem to be converging.
Other Cities
Since there are not enough data points for an annual breakdown in other cities, they were summarized. The following graphic shows how the median prices for kebabs in the 30 cities with the most price data have changed between the periods 2016–2019 and 2023–24.
Other Dishes
While kebab prices are by far the most mentioned prices in the reviews, other dishes can be found, which then sometimes work more or less well for analysis.
The Dataset: Google Reviews
The Google Reviews data was collected from randomly selected kebab shops across Germany in November 2022 and February 2024. Google Maps was used to search for kebabs in various cities, which also yields pizzerias and other restaurants as results.
I’ve published the underlying dataset here (the names of the reviewers have been removed. clean_price and clean_category are the fields on which the analyses here are based).
In total, it’s about 2.15 million reviews from 21,100 restaurants. Dating the reviews precisely is unfortunately not possible since Google only publishes information like “1 year ago” (and was then simply calculated as the date of data collection minus exactly 1 year). “1 year ago” can mean the value comes from any time between November 2020 and November 2021 when collecting data in November 2022. If the reviews were included in both the 2022 and 2024 runs, the date could be narrowed down a bit more.
The reviews were then cleaned and filtered a bit (e.g., words like kebab, dürüm, kebap, EUR, €, etc., had to appear to be classified as relevant. In the end, about 25,000 reviews remained, which somehow need to be classified. This is where it ultimately failed in 2022, as it’s very difficult to extract the price from all the possible ways people complain about prices in the reviews.
Fortunately, we have LLMs today :) The reviews were then given to ChatGPT in chunks of about 150 with the following prompt to ChatGPT4:
Please go through the following prompt step by step and follow it accordingly. Below you can find a list of several UID and review pairs. Go through each UID and its associated review. Check if the review mentions a concrete price for a food item. If it does, create semicolon separated output line that contains: the UID; the price of the food item; the quantity of food items referred to; the name of the food item; the food type. The food type can be döner or dönerteller or dönerbox or dürüm or lahmacun or falafel or falafelteller or pommes or others. Determine the food type from the food item name. If several food items are found in the same text create a new semicolon separated line for each item found. Do this for all UID and review pairs. Do not describe anything, just return the semicolon separated list.
The result looks something like shown below and finds an actual price in less than half of the cases. It mostly works very well, even if ChatGPT doesn’t always stick 100% to the classification guidelines or classifies entire runs of kebabs only as “others.” This was then partially corrected manually.
Of course, this is still not 100% optimal, since kebabs are mentioned in all sorts of sizes (children’s, XXL, Jumbo…), variants (with cheese, vegetarian…), and times (last year it only cost x/y). The hope was, however, that this would be approximately the same for most years and distribute with a comparable spread around the mean/median, while this shifts due to inflation.
Including that price mentions from the past are registered by ChatGPT and listed separately was attempted but didn’t work cleanly and even worsened the rest of the classification. Therefore, better without.
Reviews Example [classified price / dish]
Here are just a few randomly selected reviews and how they were classified:
- “€6 for a kebab… so bad” [€6.00 Kebab]
- “Feel a bit cheated. €4.30 for a dürüm kebab with very little inside. I’ve gotten (good!) dürüm with much more content for €4” [€7.00 Dürüm]
- “The service people were smoking cigarettes in the back room and showed no interest in the customer. I got a kebab in a cold bun with deli meat. The man who served me didn’t ask what kind of sauce I wanted and whether it was for here or to go. There was no choice of meat. He made it very quickly and packed it to go as if I was bothering him. Overall the worst kebab I’ve ever eaten in Europe. Just a little meat on top, the rest just salads for €8??? It wasn’t worth €2. I do not recommend!!!” [€8.00 Kebab]
- “Mega good, really everything. But €4.50 is too expensive, not even a student discount in 2022 As soon as the boss isn’t there, the kebab is completely made without care, and really doesn’t taste the same as one remembers. In this case, there were only meat, salad, and a tomato inside. Unfortunately, as the kebab is currently, it’s not worth €5.50” [€4.50 and €5.50 Kebab]
- “Kebab plate with rice and everything, really very delicious. All ingredients fresh, salad crisp, seasoned with vinegar, oil, and well spiced. The rice just right, not too soft. The meat also well spiced and the sauce to it 🤩 €9.50 absolutely reasonable for quality and quantity. My new favorite kebab restaurant!” [€9.50 Kebab Plate]
- “I find the kebab very delicious but a price of €4 for a kebab is too expensive even if the staff is very nice I am not willing to pay such a price. If the price goes down to €3.50 I will change this review to 5 stars.” [€4.00 Kebab]
Conclusion
Seeing how people interact with a site like Google Reviews, what and how they really write there, it’s almost a miracle that the method works at all. Of course, it would be better if one could deduce the date more precisely (“last year the kebab was two euros cheaper”), both from the text of the reviews and from the timestamp of the rating. But even so, it’s more than interesting to see how well this kind of data suits when a real alternative is missing.e fehlt.