DealMonitor Logo
Back to Blog
Wir lesen jetzt die AGB jedes Shops — und scheitern noch an der richtigen Stelle

Wir lesen jetzt die AGB jedes Shops — und scheitern noch an der richtigen Stelle

·by DealMonitor Team·6 Min. Lesezeit
compliancetosagbllmtransparency

Wir haben einen kleinen Job gebaut, der für jeden Shop in unserem System einmal die AGB liest und entscheidet, ob automatisierte Preisabrufe für Privatnutzer dort erlaubt sind. Das Feature ist heute live gegangen. Wir wollten gleich darüber schreiben — aber ehrlich: es funktioniert noch nicht. Erstmal nicht. Hier ist die Geschichte.

Warum wir damit überhaupt anfangen

Wenn du bei uns einen Tracker für einen Shop anlegst, läuft im Hintergrund schon länger ein Compliance-Check: wir holen die robots.txt der Domain und respektieren, was dort drin steht. Wenn ein Shop dort schreibt „bitte nicht crawlen”, lassen wir's. Das ist der maschinenlesbare Industry-Standard und in deutschem Recht eine recht klare Linie.

Was die robots.txt nicht abdeckt: das, was in den AGB eines Shops im Kleingedruckten zum Thema „automatisiertes Auslesen” steht. Manche Shops verbieten dort explizit Scraping, Bots, Crawler, oder auch nur „die automatische Vervielfältigung von Inhalten”. Andere haben dort gar nichts dazu stehen. Wieder andere erlauben es explizit für nicht-kommerzielle Nutzung.

Bisher war das bei uns ein blinder Fleck. Wir wollten ihn aufmachen — nicht weil ein Anwalt geklopft hat, sondern weil's der ehrlichere Umgang mit den Shops ist. Und weil ein Tracker, dessen Shop uns das Scraping ausdrücklich untersagt, ohnehin früher oder später entweder rechtlich oder technisch gegen die Wand fährt.

Was wir gebaut haben

Die Pipeline ist konzeptionell simpel:

  1. AGB-Link finden — wir holen die Startseite des Shops und scannen sie nach Footer-Links, die in einer von sechs Sprachen (Deutsch, Englisch, Französisch, Italienisch, Spanisch, Niederländisch) plausibel zu den AGB führen — Begriffe wie „AGB”, „Allgemeine Geschäftsbedingungen”, „Terms of Service”, „Conditions générales”. Off-Domain-Links akzeptieren wir nicht (wer seine AGB bei einer Anwaltskanzlei hostet, wird übersprungen — zu leicht zu fälschen)
  2. AGB-Text holen — wir laden die gefundene Seite, strippen Javascript, Styles und Navigation raus, lassen den reinen Vertragstext übrig
  3. LLM-Klassifikation — wir reichen den Text an ein kleines Sprachmodell weiter mit der Frage: „Erlauben diese AGB einem Privatnutzer den automatisierten Preisabruf zu nicht-kommerziellen Zwecken in niedriger Frequenz?” Antwort kommt zurück als ALLOWED, DISALLOWED oder UNCLEAR plus einem Satz Begründung auf Deutsch
  4. Persistenz — Ergebnis landet auf dem Shop-Eintrag in unserer Datenbank und erscheint am nächsten Morgen im Daily-Status-Report neben der robots.txt-Bewertung

Erwartetes Bild im Daily-Status, wenn alles läuft:

🆕 5 neue Shops (24h):
  • example.de — ✓ robots ok — ✓ AGB ok — 3 Tracker
  • shop.com — ✓ robots ok — 🚫 AGB verbietet Scraping — 1 Tracker
  • mystery.io — ❓ robots ungeprüft — ❓ AGB nicht gefunden — 1 Tracker

Wo's hakt: die LLM-Inferenz

Wir wollten das bewusst lokal machen. Ein eigener kleiner Server, ein quelloffenes Modell (gemma4:e4b auf Ollama), keine Daten an OpenAI, Anthropic oder Google. Das ist eine Position die wir mögen — du sollst nicht ratraten müssen wo deine Anfragen verarbeitet werden. Wir auch nicht.

Die Box auf der das läuft, hat 12 GB RAM und keine GPU — bewusst klein gehalten. Beim ersten echten Test gegen einen normalen Shop (eine Shopify-AGB mit ~13 KB reinem Text) sieht das so aus:

  • „Sag Hallo in einem Wort.” → 9 Sekunden ✓
  • 4 KB AGB-Text mit Klassifikations-Prompt → Timeout nach 180 Sekunden ✗
  • 40 KB AGB-Text mit Klassifikations-Prompt → Timeout nach 180 Sekunden ✗

Reines CPU-Inference braucht für so eine Klassifikation auf der kleinen Box mehrere Minuten pro Shop. Bei 20 Shops pro Tagesrun wären das im Worst Case eine knappe Stunde reine Inferenz-Zeit, die zuverlässig im 4-Uhr-Slot durchläuft — das geht so nicht.

Was funktioniert (und worauf wir jetzt aufbauen)

Die ersten beiden Pipeline-Schritte sitzen. Wir haben gegen drei zufällig gewählte Shops (cabletex.de, mediamarkt.de, thomann.de) getestet:

  • cabletex.de → /policies/terms-of-service
  • mediamarkt.de → /de/legal/terms
  • thomann.de → /compinfo_terms.html

Die AGB-URL wird also zuverlässig gefunden — das ist das in der Praxis fehleranfälligste Stück, weil jeder Shop seine Footer-Struktur anders baut. Auch die Persistenz, die Daily-Status-Anbindung und die tracking_status-Schraube, mit der wir disallowed-Shops später automatisch aus dem Scraping-Pool nehmen können, funktionieren technisch sauber.

Was fehlt, ist eine funktionierende Inferenz. Dafür gibt es drei realistische Optionen:

  1. Mehr Hardware — eine GPU im LXC-Container. Bringt die 120 Sekunden auf 2-5 Sekunden runter. Sauberste Lösung, kostet ein bisschen mehr Strom und nochmal Bastelei am Host.
  2. Hosted-API mit klarem Vertrag — Claude Haiku oder ein gleichwertig kleines Modell. 200 Millisekunden statt 120 Sekunden. Bei unserer Frequenz (~10 Calls pro Tag) liegen die Kosten unter zehn Cent im Monat. Heißt aber: der AGB-Text wird einmalig pro Shop an einen externen Provider geschickt. Kein Kundendatum, aber halt nicht mehr „komplett bei uns”.
  3. LLM weglassen, Stichwort-Heuristik — wenn im AGB-Text Begriffe wie „Scraping verboten”, „Crawler”, „automatisches Auslesen” auftauchen, markieren wir DISALLOWED, sonst ALLOWED. Sofort einsatzbereit, ungenau, viele Fehlklassifikationen bei Shops die diese Wörter im Kontext „Wir schützen uns vor…” verwenden.

Wir tendieren zu Option 2 als Übergangslösung — mit der ehrlichen Offenlegung dass es so läuft — und Option 1 als Endzustand, sobald die GPU verfügbar ist.

Was sich für dich heute ändert (Spoiler: wenig)

Konkret: nichts. Tracker laufen weiter wie bisher, der robots.txt-Check bleibt aktiv, Shops die uns über das Shop-Opt-out-Formular manuell ausgeschlossen haben bleiben ausgeschlossen. Der AGB-Check wird ab dem Zeitpunkt aktiv, an dem wir die Inferenz-Frage geklärt haben — und sobald er Ergebnisse liefert, siehst du sie im Daily-Status zusammen mit der robots.txt-Bewertung.

Wir hätten den Post auch erst nach der Lösung schreiben können — fertige Geschichte, alles glänzt. Stattdessen schreiben wir ihn jetzt, weil zwei Sachen daran wichtig sind: dass wir das überhaupt prüfen, und dass die ehrliche Antwort manchmal „funktioniert noch nicht, hier ist der Plan” ist.

Eine Bitte

Falls du als Shop-Betreiber das hier liest und eindeutige Regeln in deinen AGB hast — schreib uns eine kurze Mail an [email protected]. Die saubere Markierung von Hand ist immer besser als das, was unser Modell rät. Und falls du als Nutzer einen Shop kennst, von dem du sicher weißt dass er Scraping verbietet: gleicher Weg.

Ready to Never Miss a Deal Again?

Start tracking prices in seconds. No credit card required.

Start for Free

Related Posts

Wenn Shops uns aussperren — warum manche Preise nicht aktualisiert werden

Wenn Shops uns aussperren — warum manche Preise nicht aktualisiert werden

5 Min. Lesezeit

Drei kleine Features, die DealMonitor im Alltag besser machen

Drei kleine Features, die DealMonitor im Alltag besser machen

4 Min. Lesezeit

Schlauere Preisalarme und selbstheilende Tracker

Schlauere Preisalarme und selbstheilende Tracker

3 Min. Lesezeit

Freunde einladen und Tracker-Slots freischalten

Freunde einladen und Tracker-Slots freischalten

3 Min. Lesezeit

Wunschlisten importieren — Steam & Amazon mit einem Klick

Wunschlisten importieren — Steam & Amazon mit einem Klick

4 Min. Lesezeit

1 Jahr DealMonitor: Von der Idee zum Preistracker

1 Jahr DealMonitor: Von der Idee zum Preistracker

4 Min. Lesezeit

v0.12: HTTP-First Scraping und das Ende der Selenium-Abhängigkeit

v0.12: HTTP-First Scraping und das Ende der Selenium-Abhängigkeit

5 Min. Lesezeit

Regime Change: Wie CatBoost unser bisheriges Preiserkennungs-Modell abgelöst hat

Regime Change: Wie CatBoost unser bisheriges Preiserkennungs-Modell abgelöst hat

5 Min. Lesezeit

Die 5 besten Preisvergleich-Tools 2026 im Vergleich

Die 5 besten Preisvergleich-Tools 2026 im Vergleich

7 Min. Lesezeit

Amazon Preisverlauf anzeigen: So trackst du Preise richtig

Amazon Preisverlauf anzeigen: So trackst du Preise richtig

6 Min. Lesezeit

v0.11: API-Integrationen für Etsy, Game-Stores und Multi-Preis-Tracking

v0.11: API-Integrationen für Etsy, Game-Stores und Multi-Preis-Tracking

5 Min. Lesezeit

Weihnachtsgeschenke jetzt schon auf dem Schirm? Ja, auch im März ist das clever.

Weihnachtsgeschenke jetzt schon auf dem Schirm? Ja, auch im März ist das clever.

5 Min. Lesezeit

v0.10: Amazon und AliExpress mit APIs bezwingen

v0.10: Amazon und AliExpress mit APIs bezwingen

5 Min. Lesezeit

Wie Online-Shops dich zum Kaufen manipulieren — und wie du dich wehrst

Wie Online-Shops dich zum Kaufen manipulieren — und wie du dich wehrst

8 Min. Lesezeit

DealMonitor geht in die Beta: Alles, was neu ist

DealMonitor geht in die Beta: Alles, was neu ist

5 Min. Lesezeit

Der ultimative Leitfaden für smartes Online-Shopping

Der ultimative Leitfaden für smartes Online-Shopping

6 Min. Lesezeit

v0.8: Dark Mode, Fehler-Monitoring und unsere ersten Blogposts

v0.8: Dark Mode, Fehler-Monitoring und unsere ersten Blogposts

4 Min. Lesezeit

v0.7: Web-Push-Benachrichtigungen und Dashboard-Suche

v0.7: Web-Push-Benachrichtigungen und Dashboard-Suche

5 Min. Lesezeit

Wie KI Preise auf jeder Website erkennt

Wie KI Preise auf jeder Website erkennt

6 Min. Lesezeit

v0.6: Telegram-Benachrichtigungen, Tracker-Gruppen und Teilen

v0.6: Telegram-Benachrichtigungen, Tracker-Gruppen und Teilen

4 Min. Lesezeit

5 Wege, mit Preisalarmen Geld zu sparen

5 Wege, mit Preisalarmen Geld zu sparen

5 Min. Lesezeit

v0.5: Google OAuth und 9 Sprachen von Anfang an

v0.5: Google OAuth und 9 Sprachen von Anfang an

4 Min. Lesezeit

So verfolgst du Preise online

So verfolgst du Preise online

5 Min. Lesezeit

Wir lesen jetzt die AGB jedes Shops — und scheitern noch an der richtigen Stelle