How we count
Every number on this site comes from a reproducible pipeline over one public data dump. Nothing is predicted and nothing is read by a language model: fixed rules, written down below, checked by reading decisions by hand.
1. Source
Open Legal Data — court decisions Germany,
dump 2026-05 (revision 408eb916fab6), 423 941
decisions, licensed under the Open Database License. We do not scrape court portals; we use this dump only.
Decision texts are free of copyright (§ 5 UrhG).
2. Which decisions are flight-compensation cases
A decision counts if its text contains one of these strong signals: “261/2004” (or “261/04” right after “VO/Verordnung/EG”), “Fluggastrechteverordnung / FluggastrechteVO / Fluggastrechte-VO”, “Ausgleichszahlung” or “Ausgleichsleistung” in the same paragraph as “Flug…” or “Luftfahrtunternehmen”, or “Art. 7 der Verordnung” together with “Fluggast”.
Decisions that only combine weak signals (Fluggast, Luftfahrtunternehmen, Annullierung, Verspätung + Flug, Nichtbeförderung, außergewöhnliche Umstände, Sturgeon, an airline name) are not counted: we read 30 random ones and none was a claim under Regulation (EC) No 261/2004 — they were EU state-aid cases, airline employment disputes, package-travel refunds and unfair-terms actions. Decisions of labour, administrative, finance, social, constitutional and EU courts are excluded.
Some decisions cite the regulation but decide something else. Three kinds are recognisable from the text and excluded: consumer associations' injunctions against airline terms (UKlaG), package-travel claims against the tour operator (price reduction or damages named in the same sentence), and aircraft noise. All 50 decisions these exclusions remove were read; 0 of them decided a passenger's claim under the regulation.
Precision, from reading random decisions in full: strong-rule matches, round 1: 27 of 30 are claims under the regulation (27 of the 28 the current rules still select); strong-rule matches, round 2 (unseen cases): 23 of 30 are claims under the regulation (23 of the 27 the current rules still select); weak-only matches: 0 of 30 are claims under the regulation. What still slips through cites the regulation along the way: baggage left behind (Montreal Convention), withdrawal from the contract of carriage, package tours whose defendant is not called the tour operator, a car purchase. Result: 601 decisions from 57 courts.
3. What we read from each decision
- Court
- from the dump's metadata, normalised (“Amtsgericht Köln” → AG Köln) with the level AG / LG / OLG / BGH / other.
- Decision date
- from the dump's metadata.
- Filing date
- only when the text states it: the claim “eingegangen”, “zugestellt”, “Klage(schrift) vom …”, or “Mahnbescheid vom …”; the earliest such date before the decision. Found in 63 of 601 decisions. For an appeal it is the first-instance filing, so the duration covers both instances.
- Airline (defendant)
- only when a sentence binds the name to the defendant (“die Beklagte, die Deutsche Lufthansa AG”, “Ryanair DAC (im Folgenden: Beklagte)”). Courts anonymise the parties, and a name elsewhere in the text is usually another carrier — the replacement flight, a codeshare partner, a cited case. Identified in 0 of 601 decisions.
- Claimant
- “service” when a claims service is named next to the claimant, the claimant is described as a collection or legal-services business, or it sues on claims that passengers assigned to it; “passenger” when the claimant booked, travelled or sues on its own right — also when it holds the assigned claim of a spouse or a fellow traveller; otherwise not stated.
- Amount
- the sum of the payment orders in the operative part (Tenor), without interest, lawyers' fees, security deposits or the Streitwert. An amount awarded “jeweils” to each claimant is multiplied by the claimants the Tenor lists (“an die Kläger zu 1. bis 4. jeweils 400 €” = 1 600 €); empty when their number is not stated. An item the Tenor does not label (“weitere 147,56 €”) counts — in 5 of the reviewed decisions it was probably fees or a side claim.
4. Outcome — read from the operative part (Tenor) only
| Rule | Tenor says | Outcome | Counts for |
|---|---|---|---|
| O1 | Versäumnisurteil (in the type or the Tenor) | default judgment | claimant — unless the Tenor dismisses the claim; an upheld default judgment after objection is “granted” |
| O2 | Anerkenntnis(urteil), “anerkannt” | acknowledged | claimant |
| O3 | “Die Klage wird abgewiesen” without a payment order | dismissed | defendant |
| O4 | payment order and “im Übrigen … abgewiesen” | partly granted | claimant |
| O5 | “wird verurteilt … zu zahlen / freizustellen” | granted | claimant |
| O6 | “Berufung / Revision … zurückgewiesen” | appeal dismissed | the party that did not appeal; excluded when the appellant cannot be read |
| O7 | anything else (referral to the EuGH, remand, notice of intent, cost decision) | unclear | excluded |
5. How accurate the extraction is
We draw 30 random decisions that nobody has reviewed before, read each one and mark the extracted value right or wrong. Every miss becomes a rule fix and an automated test; the next round is a fresh sample, so the last round measures the rules as shipped on decisions they were not fixed on.
| Field | Round | Correct |
|---|---|---|
| Outcome | Round 1 — rules before any fix | 28 of 30 (93 %) |
| Outcome | Round 2 — after the round-1 fixes | 27 of 30 (90 %) |
| Outcome | Round 3 — after the round-2 fixes (rules as shipped) | 28 of 30 (93 %) |
| Claimant | Round 1 — rules before any fix | 14 of 30 (47 %) |
| Claimant | Round 2 — after the round-1 fixes | 20 of 30 (67 %) |
| Claimant | Round 3 — after the round-2 fixes (rules as shipped) | 25 of 30 (83 %) |
| Amount awarded | Round 1 — rules before any fix | 26 of 30 (87 %) |
| Amount awarded | Round 2 — after the round-1 fixes | 27 of 30 (90 %) |
| Amount awarded | Round 3 — after the round-2 fixes (rules as shipped) | 30 of 30 (100 %) |
The amount is checked on decisions the claimant won. All reviewed decisions are re-checked against the current rules on every change; a decision that was right at review time and is wrong now fails the build.
6. The table
- n decided
- cases whose side is known: everything except “unclear” and appeals without a readable appellant.
- Claimant success
- (granted + partly granted + default judgment + acknowledged + defendant's appeal dismissed) ÷ n decided.
- Dismissed
- (dismissed + claimant's appeal dismissed) ÷ n decided.
- Default / ack.
- (default judgment + acknowledged) ÷ n decided — the “no dispute” share; 4 % here.
- Median days
- filing to decision over cases with both dates, shown with that n; empty below 5 cases.
- Median €
- over cases with an awarded amount.
- Insufficient data
- rows with fewer than 10 decided cases show counts only.
7. What the numbers are not
- Published decisions only (courts publish a selection); contested cases are over-represented.
- Duration = filing to decision where both dates are in the text, not to payment.
- Statistics, not a prediction for an individual claim.
- Courts anonymise the defendant: none of the 601 decisions names the airline as defendant, so there are no airline-level figures.
8. Licence and attribution
- The dump is published by Open Legal Data under the Open Database License (ODbL). We credit the source wherever we show data: on these pages, in every API response and in the first line of the CSV.
- The derived tables (aggregates.csv, cases.parquet) are published openly under the ODbL, without technical restrictions.
- What the API sells, once it is paid, is access, freshness and calibration — not the database.
- Decision texts are official works and free of copyright (§ 5 UrhG); court portals are not scraped.