Ghost Stars: What a 4.0 Means in Germany
written by Stefan Christoph
- 15 minutes readYesterday I spent half an hour in the R-Forum of the NRW-Forum in DĂŒsseldorf, at re:publica x New Fall Festival, listening to a talk with the best title of the day: “4,8 Sterne, my ass! Warum wir Google Maps nicht mehr trauen” (“4.8 stars, my ass! Why we no longer trust Google Maps”) [1]. The speakers were Torsten Kleinz and Markus Böhm, both editors in the Netzwelt (tech) section of DER SPIEGEL. The talk built on their newsroom’s reporting, including a May 2026 article co-written by Böhm on how to find out which restaurants in your city have reviews removed [2].
One chart stayed with me. It showed Google Maps reviews removed across the EU for “defamation”, month by month, rising from around 50,000 a month in early 2024 to 150,000-180,000 a month in autumn 2025. The slide’s annotation said that 99 % of the removals shown concern Germany (source on the slide: the EU’s DSA Transparency Database, data as of November 2025) [1].
I went home and built a small tool that asks what a rating would look like if the removed reviews were counted, under an assumption you choose. This post explains the German anomaly for readers outside Germany, what Google now shows, how to read a rating anyway, and what the tool does.
Why it’s almost all Germany
Short version: German case law makes it easy for a business to start a removal process, and the platform then has to check the review.
Google explains the legal background on its help page for the removal notice [3]:
“German law protects a company’s commercial reputation by allowing the company to demand the removal of false factual statements or factually unjustified expressions of opinion that could harm its business standing (“defamation”). German courts have set a low threshold for businesses to challenge reviews as defamatory. Besides proving that a review actually contains a defamatory statement, businesses can also claim that a reviewer was not a customer (for example, they have no record of a transaction). Unless there is evidence to the contrary, courts generally order platforms to remove such reviews.”
That last sentence is Google’s own summary of German court practice.
The ruling the speakers called “The Notorious BGH” is a 2022 judgment of Germany’s Federal Court of Justice, VI ZR 1244/20 [4]. The case was about a hotel review portal. Its headnote (Leitsatz) starts:
“Bei einem Bewertungsportal (hier: Hotelbewertungsportal) reicht die RĂŒge des Bewerteten, einer Bewertung liege kein GĂ€stekontakt zugrunde, grundsĂ€tzlich aus, um PrĂŒfpflichten des Bewertungsportals auszulösen. Zu weiteren Darlegungen, insbesondere einer nĂ€heren BegrĂŒndung seiner Behauptung des fehlenden GĂ€stekontakts, ist der Bewertete gegenĂŒber dem Bewertungsportal grundsĂ€tzlich nicht verpflichtet.”
My unofficial translation: on a review portal (here, a hotel review portal), the reviewed party’s complaint that a review is not based on any guest contact is, as a general rule, enough to trigger the portal’s duty to check. As a general rule, the reviewed party need not give the portal a more detailed justification of the claim that there was no guest contact.
The two sources describe different steps, so I keep them apart. The BGH headnote is about the start: the reviewed party can dispute that a genuine visit happened, and that triggers the platform’s review, which can include asking the reviewer for evidence. Google’s help page describes how such cases tend to end: unless there is evidence to the contrary, courts generally order platforms to remove the review. According to the speakers, that is why “the guest was never here” became the standard removal reason.
How a complaint can lead to a removal: the reviewed party disputes the visit, the platform checks, and the outcome depends on that check.
The numbers, by period and source
The share depends on the period, the source and what is counted, so here is each figure with its own:
- Almost 99.9 %: of more than 756,500 Google Maps contributions removed across the EU for “illegal content” from January to June 2026, these removals concerned Germany, according to a dpa report on DSA Transparency Database figures, published by heise on 20 July 2026 [5]. It counts removal decisions, not businesses.
- About 99 %: the talk’s chart of monthly “defamation” removals in the EU from early 2024 to autumn 2025, from the DSA Transparency Database, data as of November 2025 [1].
The same dpa report includes a snapshot: of more than 3,700 hospitality businesses dpa checked in several German cities, 11 to 30 % had had reviews removed, depending on the city, with the highest shares in Frankfurt, Berlin and Cologne [5]. The report was published on 20 July 2026 and does not give the sampling date. The primary data is public in the EU’s DSA Transparency Database [9], though it does not say which business a removal belongs to.
About one square in a thousand: EU Google Maps removals for illegal content outside Germany, January to June 2026, from the figures dpa reported.
The talk also showed the business side of this. Removal services advertise with lines like “50,000+ reviews deleted”. According to the speakers, lawyers offer removals from about 99 ⏠and agencies from about 20 ⏠[1]. I’m not naming any of them, because this post is about the mechanism.
Google’s removal notice
Since April 2026, Google Maps shows a notice on business profiles in Germany when reviews were removed after defamation complaints [6]. In German it reads, for example, “201 bis 250 Bewertungen aufgrund von Beschwerden wegen Diffamierung entfernt” (“201 to 250 reviews removed due to defamation complaints”).
According to Google’s help page [3], the notice:
- shows a range (“2 to 5”, “51 to 100”, up to “Over 250”), never an exact number;
- counts only removals after defamation complaints under German law (removals for policy violations are left out);
- covers removals processed in the last 365 days;
- leaves out reviews that were reinstated after a successful appeal.
Google also states: “This notice does not influence local ranking or where a Business Profile appears in Google Search or Maps results.” [3]
I read the notice as a transparency step. Google can’t change German law, but it can show you that something happened. The notice itself gives no counterfactual rating that includes the removed reviews; the profile keeps showing Google’s current aggregate. A place showing 4.0 next to “201 to 250 removed” gives you no second number.
Legitimate removals
It would be easy to read every notice as proof of a cheating business, and that would be wrong. In the dpa report, some businesses said they only report reviews they consider fake, insulting or invented, and a few described attempts to pressure them with threatened bad reviews [5]. SPIEGEL has reported on the same tactic, one-star extortion: someone threatens a bad review to get a discount or a free meal [7].
Treat a notice as a reason to read the reviews more carefully.
Five tips from the talk
The speakers closed with five survival tips. Here they are, in my translation:
- Photos say more than words: look at the pictures guests uploaded.
- Recent over ancient: sort reviews by “Newest” instead of “Most relevant”.
- Read across and click across: compare several reviews and several places.
- Context is king: a complaint about a long wait on a Saturday night means something different from one about the food.
- Take your own photos, of the food and of the receipt.
The fifth tip matters most if you write reviews yourself. The usual removal claim is “this person was never a guest”, and the speakers’ advice is to keep photos of the food and the receipt. Google’s page on appealing a removed review in Germany lists “Receipts, bills or invoices” and “Photos or videos you took at the location” among its examples of evidence that may support an appeal [8]. That is no guarantee the review comes back.
This connects to something I wrote about on Friday, in Asymmetries Pt. 8: an owner can reply publicly to a review, but the record a review leaves is hard to answer [14]. In Germany, the reviewed party can also dispute that the visit happened, which starts the platform’s review and may end in removal.
Ghost Stars: a calculator and an explorer
On the way home I kept doing the same sum in my head. If a place shows 4.0 from 341 ratings, and 201 to 250 reviews were removed, what would the rating be if those reviews had stayed, for a given guess about their stars? That evening I wrote it down as code and called it Ghost Stars.
It has two parts. The first is a calculator that runs right here in the page:
If the calculator does not load, open it on its own page.
You copy three things from a place’s Maps page: the rating, the number of ratings, and the range from the notice. You choose what star value a removed review should count as. The calculator then works out a scenario:
scenario = (rating Ă ratings + s Ă removed) / (ratings + removed)
for both ends of the range, where s is the assumed star value. The calculator assumes that Google’s displayed rating is the average of the visible ratings, rounded to one decimal, so rating Ă ratings stands in for the sum of the visible stars. It shows one decimal and notes the range that the rounding alone allows under that assumption. The explorer below computes the visible sum from the star counts Google displays (the histogram) instead. The calculation runs in your browser, and the calculator does not transmit the numbers you type.
With the default example, a place showing 4.0 from 341 ratings with 201 to 250 removed comes out at about 2.7 to 2.9 if every removed review had one star. With three stars it is about 3.6.
One star is the minimum-star scenario and three stars the midpoint scenario. Neither estimates the real star values of the removed reviews: some were removed for good reasons, and nobody outside the platform knows how many stars they had. Read the result as a sensitivity check: how far could the removals move the rating?
The explorer: a whole area side by side
The second part is a small local app. You type an area (a neighbourhood or a town in Germany) and a category (restaurants, cafés, bars and so on), and it draws the area on a map and fills a table with the places the Maps search returns for that area. The search results, the page loading and a cap of 150 reviews per place all limit what it sees. For each place the table shows:
- the Google rating, the number of ratings, and the removal range;
- two scenario ratings with the removed reviews counted at the star value you choose: over the place’s lifetime, and an experimental 12-month version;
- the average of the newest visible reviews in the last 1, 2, 3, 6 and 12 months, with the number of reviews behind each figure;
- a trend sparkline: the average stars for each month of the last 12 (per week over the last four weeks for busy places), skipping months without reviews. The arrow shows the change of a line through those averages, weighted by the number of reviews, across the period shown. Less than ±0.2 stars counts as flat, and fewer than 3 periods or 8 reviews shows “too few”. It only describes the reviews the explorer loaded.
Every column sorts. The default is the Google rating, highest first. Sort by the 12-month scenario or by the last three months, and the order can change a lot.

A scan of the places a Maps search returned for one area. I replaced the place names with letters and rounded the review counts, to make the rows harder to match to real places. The screenshot predates a label change: its âWith removed reviewsâ columns are now called âScenario: removed reviews counted as the chosen â â.
The 12-month column is experimental. Google’s notice counts removals processed in the last 365 days, but the removed reviews themselves may be older, so adding them to the visible reviews of the last 12 months mixes two different groups. The explorer also loads at most 150 reviews per place, so for busy places the 12-month review count is extrapolated. I kept the column because it hints at how much the recent picture might shift. Treat it as a rough indication.
Where the data comes from (no API key)
Neither part uses a Google API or a key.
- The calculator has no data source at all. You type the numbers.
- The explorer reads the public Google Maps web page with Playwright, driving the Chrome browser installed on your machine. For each place it reads the star histogram, the removal notice, and up to 150 reviews sorted by newest.
- Area outlines come from OpenStreetMap’s Nominatim service: one lookup per search, which keeps the request rate low (see the service’s usage policy [13]). The map tiles are OpenStreetMap too.
How the explorer gets its data. The calculator needs none of this, only your browser.
I did look at the official route first. The Places API documentation says “A maximum of 5 reviews can be returned”, and the place resource has no field for the removal notice [12], so it cannot do this job.
Why the explorer can’t be embedded in this blog
I would have liked to put the explorer on this blog as well, but this blog is static pages with no server of its own. Code running in a web page can’t read the response from another site unless that site allows it (the browser’s cross-origin rules), and Google Maps does not allow it. A server could fetch the pages instead, but that would mean running a scraping service. The Places API resource I checked does not expose the notice either. So the explorer runs on your own computer, with a real browser under your control.
It reads business profiles in Germany through the German-language Maps interface, which is where it finds the notice, and its page selectors can break whenever Google changes that page. It caches results on your machine for 24 hours. It is meant for personal, low-volume lookups. If you want to run anything like it at scale or as a service, check Google’s terms first.
The code is on GitHub, with a README that explains how to run it [15].
Extensions and scrapers others built
I was not the first. Several browser extensions read the notice on the Maps page you are already looking at and show an adjusted rating next to Google’s. Fair Rating is open source, under the MIT license, and runs in Chrome and Firefox [10]. Others in the Chrome Web Store include ReviewShield [16] and RealRating [17]. There is also an open-source scraper, maps-deleted-reviews, that scans a category in a city (restaurants in Bonn by default) and writes a CSV with the removal estimates [11].
Ghost Stars combines an area view with places side by side, recent-month columns and an experimental 12-month scenario.
Ideas if you want to build on it
If you want to take this further:
- Extend the repo. The rating maths lives in one small file,
metrics.py, and the Maps selectors sit together at the top ofmaps_reader.py. - Contribute to the open-source extension. Recent-month ratings would fit well there: the user is already on the Maps page, and the extension reads only what they see.
- Think about mobile. Many people check a restaurant on their phone while standing in front of it, and the tools I found are desktop browser extensions or a desktop app.
Which would you build first: the extension panel with recent-month ratings, or something that works on a phone?
Sources
[3] Google â Defamation Removal Notices in Germany (Maps User Generated Content Policy Help)
[4] Bundesgerichtshof, judgment of 9 August 2022, VI ZR 1244/20 (official decision, PDF); also available as an HTML copy on rewis.io
[5] heise online / dpa â Warum in Deutschland so viele Online-Bewertungen verschwinden (20 July 2026)
[6] PPC Land â Google Maps now shows removed review counts in Germany (April 2026)
[8] Google â Appealing a removed review in Germany (Legal Help)
[12] Google Maps Platform â Places API (New), Place resource reference
[14] Asymmetries Pt. 8: One Side Rates, the Other Can’t Answer
[17] RealRating: Real Google Maps Reviews (Chrome Web Store)
About the Author
Stefan Christoph is a Principal Solutions Architect at AWS, focused on agentic AI, media & entertainment, and helping builders move from demo to production. He writes about AI architecture, developer productivity, and the future of software.
This is a personal blog. Opinions expressed here are my own and do not represent the views or positions of my employer.
â€ïž Created with the support of AI (Kiro)