returnEasier ist von Grund auf für die DSGVO gebaut: Alle personenbezogenen Daten liegen auf Servern in der Europäischen Union und die App reagiert korrekt auf die drei Datenschutz-Webhooks von Shopify (Auskunftsanfrage, Kunden-Löschung und Shop-Löschung). Das einzige Datum, das nach einer Löschung erhalten bleibt, ist das Ereignis-Audit-Log, und es wird gerade deshalb aufbewahrt, weil es der rechtliche Nachweis dafür ist, dass du Artikel 11a erfüllt hast.
Wo liegen die Daten? (EU-Residenz)
Alle Anbieter mit personenbezogenen Daten sind in der Europäischen Union:
| Dienst | Anbieter | Region / Hinweis |
|---|---|---|
| Datenbank | Neon | eu-west-2 (AWS, London) |
| Dateien (PDF, Fotos…) | Cloudflare R2 | Jurisdiktion EU (.eu) |
| Transaktions-E-Mail | Brevo | Frankreich (ohne Schrems II) |
| Rate Limiting | Upstash | EU |
| Fehler | Sentry | EU-Instanz, mit PII-Scrubbing |
| Produktanalytik | PostHog | EU-Instanz |
Außerdem werden das Zugriffs-Token deines Shops und die Sendcloud-Schlüssel verschlüsselt gespeichert (AES-256-GCM), und alle Webhooks werden vor der Verarbeitung mit HMAC validiert. Es werden niemals E-Mails oder personenbezogene Daten in den Logs erfasst: Zur Korrelation wird ein Fingerabdruck verwendet (die ersten Zeichen eines Hashes der E-Mail).
Die drei DSGVO-Webhooks
Shopify verlangt, dass jede App auf drei Datenschutz-Webhooks reagiert. returnEasier implementiert sie so:
1. Auskunftsanfrage (customers/data_request)
Wenn ein Kunde sein Auskunftsrecht ausübt, sammelt returnEasier alle personenbezogenen Daten, die es von ihm hat – Bestellungen, Anfragen, Ereignisse, Bestätigungen und Portal-Verifizierungen – und schickt sie dir, dem Verantwortlichen der Verarbeitung, in einem JSON-Export per E-Mail. Die App speichert keine Kopie des Exports: Sie erzeugt ihn und liefert ihn aus. Fragt er erneut seine Daten an, wird er neu erzeugt.
2. Kunden-Löschung (customers/redact)
Wenn ein Kunde die Löschung seiner Daten anfragt, macht returnEasier:
- Anonymisiert die E-Mail (auf einen neutralen Wert) und löscht den Namen in seinen Bestellungen.
- Löscht die Notizen des Kunden in den Anfragen (die strukturellen Felder – Mengen, Grund – bleiben erhalten).
- Macht seine Portal-Verifizierung sofort ungültig.
- Entfernt die Widerrufsbestätigungen und ihre PDFs aus R2.
- Bewahrt das Ereignis-Audit-Log auf: Es ist unveränderlich und wird als Nachweis der gesetzlichen Erfüllung erhalten.
3. Shop-Löschung (shop/redact)
Shopify löst diesen Webhook 48 Stunden nach der Deinstallation der App aus. returnEasier macht eine gründliche Bereinigung: Es anonymisiert die Kundendaten des gesamten Shops, löscht die Dateien aus R2 (PDF, Fotos, Etiketten), bereinigt die Konfiguration (Rechtseinstellungen, Branding, Sendcloud), redaktiert das Token und setzt den Tarif auf Free. Die Zeile des Shops und das Audit-Log bleiben erhalten (das Log referenziert den Shop) als Tombstone, damit das Protokoll weiterhin zuordenbar bleibt.
Wie wird die Löschung mit einem unveränderlichen Log in Einklang gebracht?
Das ist die Schlüsselfrage. Das Audit-Log ist Append-only: Die Datenbank lehnt jedes UPDATE oder DELETE auf den Ereignissen ab. Wenn eine Löschung eintrifft, werden die veränderlichen Tabellen anonymisiert (Bestellungen, Notizen, Verifizierungen) und die Dateien gelöscht, aber die Ereignisse bleiben erhalten auf der Rechtsgrundlage der gesetzlichen Pflicht (Nachweis der Erfüllung von Artikel 11a).
Transparenzhinweis: Die konkrete Rechtsgrundlage für die Aufbewahrung von PII innerhalb des unveränderlichen Logs steht noch zur Prüfung durch einen Anwalt aus. Als nächster Schritt ist eine gestaffelte Aufbewahrung des Logs selbst vorgesehen (nach einer längeren Frist nur noch die Hashes zu behalten); bis dahin werden die Ereigniszeilen geschützt durch den Trigger der Unveränderlichkeit aufbewahrt.
Automatische Anonymisierung nach 5 Jahren
Zusätzlich zu den Löschungen, die Shopify auslöst, führt returnEasier eine wöchentliche Aufgabe aus (jeden Montag in den frühen Morgenstunden, in UTC), die die 5-Jahres-Aufbewahrung anwendet: Jeder Datensatz hat seine eigene Uhr ab seiner Erstellung, und nach Ablauf der Frist:
- Anonymisiert sie die E-Mail (auf einen neutralen Wert) und löscht den Namen in den alten Bestellungen.
- Löscht sie die Notizen des Kunden in den Anfragen (einschließlich der Notizen pro Artikel); die strukturellen Felder – Mengen, Grund – bleiben erhalten.
- Anonymisiert sie die abgelaufenen Portal-Verifizierungen.
- Entfernt sie aus R2 die zugehörigen Dateien: das Bestätigungs-PDF, das Versandetikett und die Fotos des Kunden.
- Hinterlässt sie einen Eintrag im Audit-Log mit einem Anonymisierungsereignis (ohne personenbezogene Daten), das zudem verhindert, dass die Arbeit wiederholt wird.
Schlägt das Löschen einer Datei fehl, betrachtet die Aufgabe den Datensatz nicht als anonymisiert: Sie versucht es in der folgenden Woche erneut, bis bestätigt ist, dass die Datei verschwunden ist. Du musst nichts konfigurieren: Die Aufbewahrung funktioniert von allein in allen Tarifen.
Was kannst du tun?
- Anfragen deiner Kunden bearbeiten: Die Webhooks von Shopify erledigen die Arbeit automatisch; du erhältst den Auskunfts-Export per E-Mail.
- Deinen Verlauf exportieren, bevor du deinstallierst (siehe „Was ist das Audit-Log und wie exportiere ich meinen prüfbaren Verlauf?").
- Verstehen, was beim Deinstallieren oder Kündigen passiert: Das erklärt „returnEasier deinstallieren oder kündigen".