Stockify — Datenschutzerklärung / Privacy Notice
Letzte Aktualisierung: 2026-06-24
Diese Datenschutzerklärung gilt für die Shopify-App Stockify und beschreibt, welche personenbezogenen Daten verarbeitet werden, zu welchem Zweck, auf welcher Rechtsgrundlage, wie lange und an wen sie weitergegeben werden. Sie wird code-synchron gepflegt — Änderungen am Datenmodell oder am Sub-Processor-Stack ziehen eine Aktualisierung dieser Datei nach sich.
Zeitpunkt und Form der Information (Art. 13 DSGVO). Diese Erklärung wird dem Merchant gemäß Art. 13 Abs. 1 DSGVO zum Zeitpunkt der Datenerhebung, d.h. spätestens bei der Installation der App, zur Verfügung gestellt:
- Shopify App Store-Listing: Im öffentlichen App-Listing ist diese URL (
https://stockify.amassimo.com/privacy) als "Privacy Policy" hinterlegt. Sie ist vor dem Install-Klick einsehbar. - Install-Flow: Der Shopify-OAuth-Consent-Screen verweist auf die im App-Listing hinterlegte Privacy-URL, bevor der Merchant die App-Berechtigungen bestätigt.
Diese Erklärung ist darüber hinaus unter https://stockify.amassimo.com/privacy jederzeit öffentlich zugänglich. Spätere Aktualisierungen werden über die "Letzte Aktualisierung"-Zeile oben und über den Abschnitt 12. Änderungshistorie dokumentiert. Wesentliche Änderungen am Verarbeitungsumfang werden zusätzlich per E-Mail an die hinterlegte email_address des Shops kommuniziert.
1. Verantwortlicher
Verantwortlicher gemäß Art. 4 Nr. 7 DSGVO ist:
Antoine Massimo Grünebaumstraße 13 33098 Paderborn Deutschland
E-Mail: [email protected]
Stockify wird als Solo-Projekt betrieben. Ein Datenschutzbeauftragter ist nach Art. 37 DSGVO nicht erforderlich.
2. Welche Daten verarbeitet werden
Stockify speichert ausschließlich shop-bezogene Konfigurations- und Lagerkennzahlen in einer eigenen PostgreSQL-Datenbank auf dem Stockify-Server. Es werden keine identifizierenden Kundendaten (Customer-IDs, Namen, E-Mail-Adressen, Lieferadressen, Zahlungsdaten) der Endkunden des Shops gespeichert. Für die Nachbestell-Prognose liest Stockify mit dem Scope read_orders historische Bestellungen aus, persistiert daraus aber ausschließlich eine pro Variante und Kalendertag aggregierte Netto-Verkaufsmenge (verkaufte minus erstattete Stück) — keine Bestell-ID, kein Bestellwert, kein Käufer-Bezug. Diese Datenminimierung ist bewusst gewählt: die Aggregate sind keinem einzelnen Endkunden zuordenbar.
| Tabelle / Feld | Inhalt | Personenbezug | Rechtsgrundlage |
|---|---|---|---|
shops.shop_domain |
Shopify-Shop-Domain (*.myshopify.com) |
indirekt (Shop-Inhaber:in) | Art. 6 Abs. 1 lit. b DSGVO (Vertragserfüllung) |
shops.plan, subscription_id |
Abonnement-Status (Shopify Billing GID) | nein | Art. 6 Abs. 1 lit. b |
shops.email_address |
Optionale E-Mail-Adresse für Reports/Alarme | personenbezogen | Art. 6 Abs. 1 lit. b |
shops.smtp_host / smtp_port / smtp_user / smtp_secure |
SMTP-Konfiguration (Opt-in für eigenen Mailserver) | technisch | Art. 6 Abs. 1 lit. b |
shops.smtp_pass |
SMTP-Passwort, AES-256-GCM-verschlüsselt | technisch | Art. 6 Abs. 1 lit. b |
shops.discord_webhook_url / slack_webhook_url |
Optionale Webhook-URLs für Reports/Alarme | technisch (kanal-gebundener Bearer-Secret) | Art. 6 Abs. 1 lit. b |
shops.discord_report_days / discord_alert_enabled / slack_report_days / slack_alert_enabled |
Pro-Kanal-Report-Zeitplan (Wochentage) + Sofort-Alarm-Toggle | nein | Art. 6 Abs. 1 lit. b |
shops.min_stock_default, email_report_days, email_alert_enabled, last_report_sent |
Konfiguration und Status | nein | Art. 6 Abs. 1 lit. b |
shops.locale, locale_override |
Sprachpräferenz (DE/EN) | technisch | Art. 6 Abs. 1 lit. b |
shops.installed_at, uninstalled_at, pricing_feedback_dismissed_at, default_min_stock_set_at, onboarding_dismissed_at |
Zeitstempel zu App-Lifecycle und UI-Status | nein | Art. 6 Abs. 1 lit. b |
sessions.* |
Shopify-OAuth-Session: id, shop, state, isOnline, accessToken, scope, expires (immer); zusätzlich userId, firstName, lastName, email, accountOwner, locale, collaborator, emailVerified — werden gespeichert, sofern Shopify diese Felder im OAuth-Response mitschickt (bei Online-Sessions regelmäßig, bei Offline-Sessions in der Regel nicht). Die Felder werden zur Authentifizierung gegenüber der Shopify-API verwendet, nicht ausgewertet, nicht angereichert. |
personenbezogen (Shop-Inhaber:in bzw. Mitarbeiter:in mit App-Zugriff) | Art. 6 Abs. 1 lit. b |
product_settings.* |
Mindestbestände pro Produkt-Variante | nein | Art. 6 Abs. 1 lit. b |
alert_state.* |
Letzter bekannter Stock-Status pro Variante (ok/low/out) für Duplikat-Schutz bei Sofort-Alarmen |
nein | Art. 6 Abs. 1 lit. b |
pricing_feedback.* |
Optional vom Shop abgegebene Preis-Einschätzung: Zahlungsbereitschafts-Spanne (wtp_bucket) + wichtigster Wert-Treiber (value_driver) + Währung. Dazu ein serverseitig erfasster Shop-Snapshot: Produkt-, Varianten- und Standort-Anzahl, der effektive Tarif (plan) sowie ein Nutzungsprofil (features_used — welche Stockify-Funktionen der Shop aktiviert hat). Kein freier Preis-Betrag, keine Kundendaten. |
nein (shop-bezogene Konfigurations-/Nutzungsdaten, kein Endkunden-Bezug) | Art. 6 Abs. 1 lit. a DSGVO (Einwilligung — Eingabe ist freiwillig, kein Pflichtfeld) |
feature_requests.message |
Optional vom Shop abgegebener Wunsch-Freitext | kann personenbezogen sein, wenn der Shop solche Daten in den Freitext schreibt — der UI-Hinweis weist explizit darauf hin, das zu unterlassen | Art. 6 Abs. 1 lit. a DSGVO (Einwilligung) |
suppliers.name / notes |
Vom Merchant angelegte Lieferanten (Name, optionale Notizen) | technisch; kann personenbezogen sein, wenn der Merchant eine natürliche Person als Lieferant einträgt | Art. 6 Abs. 1 lit. b |
suppliers.email / phone |
Optionale Kontaktdaten des Lieferanten | personenbezogen (Kontaktdaten des Lieferanten/der Ansprechperson) | Art. 6 Abs. 1 lit. b |
purchase_orders.* |
Vom Merchant erstellte Bestellungen: Referenz, Notizen, Status, Währung, Zeitstempel, Lieferanten-Verknüpfung | nein | Art. 6 Abs. 1 lit. b |
purchase_order_lines.* |
Bestellpositionen: Variant-ID + Snapshot von Produkttitel/Variantentitel/SKU, bestellte und erhaltene Mengen, optionaler Stückpreis | nein | Art. 6 Abs. 1 lit. b |
purchase_order_receipts.* |
Idempotenz-Beleg je gebuchtem Wareneingang (Shop-Domain, Bestell-Verknüpfung, Idempotenz-Schlüssel, Zeitstempel) — verhindert Doppelbuchungen beim Empfangen | nein | Art. 6 Abs. 1 lit. b |
forecast_sales_daily.* |
Pro Variante und Kalendertag aggregierte Netto-Verkaufsmenge (verkaufte minus erstattete Stück), abgeleitet aus read_orders. Keine Bestell-ID, kein Bestellwert, kein Käufer-Bezug |
nein (nicht einem Endkunden zuordenbar) | Art. 6 Abs. 1 lit. b |
forecast_inventory_snapshots.* |
Täglicher Stand des verfügbaren Bestands pro Variante (für die Stockout-Bereinigung der Prognose) | nein | Art. 6 Abs. 1 lit. b |
forecasts.* |
Errechnete Prognose-Kennzahlen pro Variante (Tagesabsatz, Streuung, Methode, Verlässlichkeit, Lieferzeit, Sicherheitsbestand, Meldebestand) | nein | Art. 6 Abs. 1 lit. b |
forecast_seasonality.* |
Shop-weiter, über alle Varianten gepoolter monatlicher Saison-Index | nein | Art. 6 Abs. 1 lit. b |
suppliers.lead_time_days |
Optionale Lieferzeit (Tage) je Lieferant, fließt in den Meldebestand der Prognose ein | nein | Art. 6 Abs. 1 lit. b |
product_settings.forecast_excluded |
Flag, ob eine Variante aus der Prognose ausgeschlossen ist | nein | Art. 6 Abs. 1 lit. b |
shops.forecast_lead_time_days / forecast_service_level / forecast_orders_synced_through / forecast_orders_access |
Prognose-Standardwerte des Shops + Sync-Cursor (bis wann Bestellungen aggregiert wurden) + Status der read_orders-Freigabe (granted/pending, steuert den Hinweis-Banner auf der Prognose-Seite) |
nein | Art. 6 Abs. 1 lit. b |
shops.multi_location_enabled |
Schalter, ob der Shop den Multi-Standort-Modus aktiviert hat | nein | Art. 6 Abs. 1 lit. b |
location_settings.* |
Mindestbestand-Override je (Variante, Shopify-Standort) | nein | Art. 6 Abs. 1 lit. b |
purchase_orders.location_id / location_name |
Optionaler Ziel-Standort einer Bestellung (Shopify-Standort-ID + Anzeigename) | nein | Art. 6 Abs. 1 lit. b |
stock_transfers.* |
Protokoll von Umlagerungen zwischen Standorten: Quell-/Ziel-Standort (ID + Name), Status, Notiz, Zeitstempel | nein | Art. 6 Abs. 1 lit. b |
stock_transfer_lines.* |
Umlagerungs-Positionen: Variant-ID + Snapshot von Produkttitel/Variantentitel/SKU, Menge | nein | Art. 6 Abs. 1 lit. b |
2.1 Was nicht gespeichert wird
- Keine identifizierenden Customer-Daten der Shop-Endkunden (Customer-IDs, Namen, E-Mails, Liefer-/Rechnungsadressen, Zahlungsdaten). Bestellungen werden für die Prognose zwar gelesen (
read_orders), aber nicht als Bestellungen gespeichert — persistiert wird nur die pro Variante und Tag aggregierte Netto-Verkaufsmenge (sieheforecast_sales_dailyoben), die keinem einzelnen Endkunden zuordenbar ist - Keine Roh-Bestelldaten — Bestell-IDs, Bestellwerte, Positionspreise, Käufer-Bezug werden zu keinem Zeitpunkt persistiert; sie werden während der nächtlichen Aggregation im Arbeitsspeicher verarbeitet und sofort verworfen
- Lagerbestände werden für die Anzeige bei Bedarf live über die Shopify-GraphQL-API abgefragt. Für die Prognose hält Stockify zusätzlich einen täglichen Bestands-Snapshot pro Variante (
forecast_inventory_snapshots), um Tage mit Ausverkauf bei der Absatzschätzung herauszurechnen. Beim Wareneingang schreibt Stockify die vom Merchant gebuchte Liefermenge über die Shopify-Admin-API (Scopewrite_inventory) dem verfügbaren Bestand der jeweiligen Variante gut — ausschließlich auf ausdrückliche Aktion des Merchants, kein automatischer Schreibzugriff - Keine Zahlungsdaten — Zahlungen werden ausschließlich über Shopify Billing abgewickelt; Stockify speichert nur die nicht-sensitive
subscription_id(Shopify-GID) - Keine Tracking-, Analytics- oder Telemetrie-Daten
2.2 Einwilligung für freiwillige Eingaben (Art. 6 Abs. 1 lit. a)
Die in der obigen Tabelle mit lit. a markierten Daten (pricing_feedback.*, feature_requests.message) werden ausschließlich auf Grundlage einer freiwilligen Einwilligung des Merchants verarbeitet:
- Freiwilligkeit: Beide Eingaben sind keine Voraussetzung für die Nutzung der App. Sämtliche Kernfunktionen (Mindestbestand, Reports, Alarme) sind ohne Abgabe dieses Feedbacks vollumfänglich nutzbar.
- Einwilligungshandlung: Die Einwilligung erfolgt durch aktives Ausfüllen des jeweiligen Feldes und Klick auf den Submit-Button. Der UI-Hinweis direkt am Formular nennt den freiwilligen Charakter und das Widerrufsrecht.
- Dokumentation (Art. 7 Abs. 1 DSGVO): Jeder Eintrag erhält automatisch einen
created_at-Zeitstempel; dieser belegt zusammen mit der Shop-Domain Wann und Wer der Einwilligung. - Widerruf (Art. 7 Abs. 3 DSGVO): Die Einwilligung kann jederzeit mit Wirkung für die Zukunft widerrufen werden — am einfachsten direkt in der App unter Einstellungen (Button „Angabe zurückziehen" beim Preis-Feedback bzw. „Meine Wünsche löschen" beim Wunsch-Feld), alternativ formlos per E-Mail an [email protected]. Die Einträge sind ausschließlich über die Shop-Domain zugeordnet (keine E-Mail-Adresse, kein Name gespeichert); zum Auffinden und Bearbeiten Ihrer Einträge benötige ich daher die Angabe Ihrer
*.myshopify.com-Domain (Identitätsklärung nach Art. 12 Abs. 6 DSGVO). Auf Verlangen werden die betroffenen Einträge unverzüglich gelöscht oder anonymisiert (Entfernen der Shop-Zuordnung; danach sind die verbleibenden, rein statistischen Werte kein personenbezogenes Datum mehr, Erwägungsgrund 26). Der Widerruf berührt nicht die Rechtmäßigkeit der bis dahin erfolgten Verarbeitung. Bei Deinstallation der App werden diese Einträge zudem automatisch über den Shopify-shop/redact-Webhook (48 h nach Deinstallation) gelöscht.
2.3 Datenfluss
- Eingehend (Shopify → Stockify): OAuth-Token bei Installation; Produkt- und Inventardaten live abgefragt (nicht persistiert); für die Prognose nächtlich Bestellungen (
read_orders) abgefragt und sofort zu Tages-/Varianten-Aggregaten verdichtet (Roh-Bestelldaten werden nicht persistiert); Webhook-Benachrichtigungen (inventory_levels/update,app/uninstalled,app_subscriptions/update, GDPR-Webhooks). - Ausgehend (Stockify → Empfänger): Wöchentliche Lagerberichte und Sofort-Alarme an die vom Shop konfigurierten Kanäle (E-Mail / Discord / Slack). Inhalt: Liste der kritischen Produkte des jeweiligen Shops (Titel, SKU, Bestand, Mindestbestand).
- Ausgehend zu Owner: Bei Wunsch-Submits (
feature_requests) sendet Stockify einen inhaltsfreien Trigger-Ping ohne Shop-Identifikation oder Freitext-Inhalt an einen Owner-Discord-Webhook. Inhalt: nur "es liegt ein neuer Eintrag vor". Den eigentlichen Inhalt liest der Owner in der lokalen Datenbank.
3. Speicherdauer
| Daten | Aufbewahrung | Trigger zur Löschung |
|---|---|---|
sessions.* |
Sofort gelöscht bei app/uninstalled-Webhook |
Webhook (durch Shopify ausgelöst, sobald die App im Shop deinstalliert wird) |
shops.*, product_settings.*, alert_state.*, pricing_feedback.*, feature_requests.*, suppliers.*, purchase_orders.*, purchase_order_lines.*, purchase_order_receipts.*, forecast_sales_daily.*, forecast_inventory_snapshots.*, forecasts.*, forecast_seasonality.*, location_settings.*, stock_transfers.*, stock_transfer_lines.* |
Bis shop/redact-Webhook (regulär 48 h nach Deinstallation durch Shopify ausgelöst); fallback: 90 Tage ab uninstalled_at via Defense-in-Depth-Cleanup-Job |
shop/redact-Webhook, oder täglicher Cleanup-Job |
forecast_sales_daily.*, forecast_inventory_snapshots.* (laufender Betrieb) |
Rollierendes Fenster von max. 400 Tagen; ältere Aggregate/Snapshots werden bei jedem nächtlichen Lauf automatisch gelöscht | Nächtlicher Prognose-Job |
| Backups (Snapshots der Postgres-DB) | 30 Tage rollierend, lokal und als verschlüsselte Off-Site-Kopie bei Cloudflare R2; anschließend automatisch überschrieben | Rotationsskript |
| Server-Logs (pino, strukturiert) | 30 Tage rollierend, anschließend rotiert | Logrotate |
GDPR-Webhook-Bodies und inventory_levels/update-Payloads werden grundsätzlich nicht in Logs geschrieben (siehe Abschnitt 6).
3.1 Residuelle Daten in Backups und Logs
Nach einer Löschung der Live-Datenbank über shop/redact oder den Defense-in-Depth-Cleanup-Job können shop-bezogene Daten technisch bedingt noch für die jeweilige Rotationsdauer in Backups und Logs vorhanden sein:
- Postgres-Backups: bis zu 30 Tage — sowohl in der lokalen Backup-Kopie als auch in der verschlüsselten Off-Site-Kopie bei Cloudflare R2 (siehe Abschnitt 8) —, danach durch das Rotationsskript überschrieben.
- Server-Logs: bis zu 30 Tage, danach durch Logrotate überschrieben.
Diese residuelle Vorhaltung ist technisch zur Sicherstellung der Wiederherstellbarkeit und zur Fehlerdiagnose erforderlich (Art. 32 DSGVO — Integrität und Verfügbarkeit als Aspekt der Sicherheit der Verarbeitung) und wird ohne weiteres Zutun durch die genannten Rotationen automatisch beendet. Eine selektive Löschung einzelner Shop-Daten aus Backup-Snapshots ist technisch nicht praktikabel; eine gezielte Wiederherstellung gelöschter Daten aus Backups findet nicht statt.
Auf ein begründetes Auskunftsverlangen nach Art. 15 DSGVO wird die Existenz solcher residueller Backup-/Log-Inhalte transparent benannt; der konkrete Löschzeitpunkt ergibt sich aus der jeweiligen Rotationsdauer.
4. GDPR-Webhooks (Shopify-Pflichtimplementierung)
Stockify implementiert alle drei von Shopify geforderten GDPR-Webhooks:
customers/data_request: Antwortet mit200 OK. Es werden keine einem Endkunden zuordenbaren Daten gespeichert — die für die Prognose abgeleiteten Verkaufsmengen sind pro Variante und Tag aggregiert und tragen keinen Käufer-Bezug, sind also keinem einzelnen Customer zuordenbar. Es gibt daher keine personenbezogenen Daten herauszugeben. Der Request-Body wird nicht geloggt.customers/redact: Antwortet mit200 OK. Es existieren keine einem Endkunden zuordenbaren Daten zur Löschung (die aggregierten Verkaufsmengen tragen keinen Käufer-Bezug). Der Request-Body wird nicht geloggt.shop/redact: Löscht alle zum Shop gehörenden Daten aussessions,product_settings,alert_state,pricing_feedback,feature_requests,suppliers,purchase_orders,purchase_order_lines,purchase_order_receipts,forecast_sales_daily,forecast_inventory_snapshots,forecasts,forecast_seasonality,location_settings,stock_transfers,stock_transfer_linesundshops. Technisch genügt ein einzigesDELETE FROM shops— alle shop-bezogenen Tabellen hängen perFOREIGN KEY … ON DELETE CASCADEanshops(Bestellpositionen kaskadieren transitiv über ihre Bestellung), sodass auch die Lieferanten-Kontaktdaten und Prognose-Aggregate strukturell mitgelöscht werden.
Zusätzlich:
app/uninstalled: Markiert den Shop als deinstalliert (uninstalled_at-Zeitstempel) und löscht alle Sessions sofort.- Defense-in-Depth-Cleanup: Täglicher Hintergrund-Job (02:30 Europe/Berlin) löscht alle Shop-Daten, deren
uninstalled_atälter als 90 Tage ist — fallsshop/redactnie ankommt.
5. Verschlüsselung
- At rest:
shops.smtp_passist mit AES-256-GCM verschlüsselt; der Schlüssel liegt in einer Umgebungsvariable (ENCRYPTION_KEY), nicht in der Datenbank. Die ausread_ordersabgeleiteten Prognose-Aggregate (forecast_sales_daily,forecast_inventory_snapshots) sind nicht personenbezogen (Erwägungsgrund 26 — kein Endkunden-Bezug) und werden ohne zusätzliche anwendungsseitige Verschlüsselung gespeichert; der Zugriff auf die Datenbank ist auf den Verantwortlichen beschränkt (Solo-Betrieb, siehe Abschnitt 1). - In transit: Sämtliche Kommunikation mit Shopify und Auftragsverarbeitern läuft über HTTPS / TLS 1.2+. Die SMTP-Verbindung zum Mailserver (Brevo bzw. Shop-eigener Server) nutzt STARTTLS (Port 587) oder TLS (Port 465).
- Ingress: Der Stockify-Server ist ausschließlich über einen Cloudflare-Tunnel erreichbar; es gibt keinen offenen Port am Host. Cloudflare terminiert TLS auf der Edge und reicht den Traffic verschlüsselt an den Origin weiter.
6. Logs
Logs (strukturiert via pino) enthalten keine personenbezogenen Daten:
- GDPR-Webhook-Bodies werden nicht geloggt
inventory_levels/update-Payloads werden nicht geloggt (Geschäftsgeheimnis des Shops)- OAuth-Token werden nie ausgegeben (nur ihre Existenz wird in Debug-Logs vermerkt)
- Freitext-Inhalt von Wishlist-Einträgen wird nicht geloggt
7. Cookies und clientseitiger Speicher (TTDSG § 25)
Stockify setzt keine Cookies. Die App-Oberfläche läuft eingebettet im Shopify-Admin und verwendet ausschließlich sessionStorage für die Dauer der jeweiligen Browser-Session:
| Key | Inhalt | Zweck | Lebensdauer |
|---|---|---|---|
sessionStorage.shopify_host |
Von Shopify durchgereichter host-Parameter (Base64-codiert) |
Notwendig für App-Bridge zur Kommunikation mit dem Shopify-Admin | Bis Schließen des Tabs |
sessionStorage.shopify_shop |
Aktuelle Shop-Domain | Notwendig für authentifizierte API-Aufrufe an den Stockify-Server | Bis Schließen des Tabs |
sessionStorage.shopify_locale |
Sprachcode (de / en) |
Notwendig für korrekte UI-Sprache nach Re-Mounts | Bis Schließen des Tabs |
Diese Speichervorgänge sind technisch unbedingt erforderlich für den Betrieb der App im Shopify-Admin und unterliegen daher der Ausnahmeregelung nach § 25 Abs. 2 Nr. 2 TTDSG — eine Einwilligung ist nicht erforderlich. Es findet kein Tracking, keine Profilbildung und keine Weitergabe an Dritte statt.
localStorage wird nicht verwendet.
8. Auftragsverarbeiter und Drittland-Transfer
Stockify nutzt folgende externe Dienstleister als Auftragsverarbeiter nach Art. 28 DSGVO:
| Dienstleister | Zweck | Standort | Verarbeitete Daten | Rechtsgrundlage Drittland-Transfer | Vertrag |
|---|---|---|---|---|---|
| Shopify International Ltd. | Plattform (App-Hosting-Kontext, OAuth, Webhooks, Billing) | Irland (EU) / Kanada | OAuth-Token, Shop-Domain, Shop-Owner-Metadaten | Konzern-DPA gemäß SCC für Kanada-Anteil | Shopify Partner Program DPA |
| Brevo (Sendinblue SAS) | Transaktionaler Mail-Versand der Reports/Alarme via Managed SMTP | Frankreich (EU) | Empfänger-Adresse (email_address), Mail-Inhalt (Liste kritischer Produkte) |
EU-intern, kein Drittland-Transfer | Brevo Standard-DPA |
| Cloudflare, Inc. | Ingress (TLS-Termination + Named Tunnel zum Origin-Server), optional Email-Routing für *@stockify.amassimo.com und verschlüsselte Off-Site-Backup-Ablage (Cloudflare R2) |
USA (EU-Adequacy-Maßnahmen) | TLS-terminierter Klartext-Verkehr zwischen Edge und Origin (kurzlebig); E-Mail-Forwarding (privacy@); clientseitig verschlüsselte Datenbank-Backups (für Cloudflare nicht lesbar) | Art. 45 DSGVO i.V.m. EU-US Data Privacy Framework + SCC | Cloudflare DPA |
8.1 Hinweise zu den Auftragsverarbeitern
- Brevo wird ausschließlich für transaktionalen Mail-Versand eingesetzt — keine Marketing-, Tracking- oder Profilbildungs-Funktion. Shops, die in den Stockify-Einstellungen einen eigenen SMTP-Server konfigurieren, umgehen Brevo vollständig — Empfänger und Mail-Inhalt werden in diesem Fall weder an Brevo übertragen noch dort verarbeitet.
- Cloudflare sieht naturgemäß den TLS-terminierten Datenstrom zwischen Edge und Origin. Der gesamte Stockify-Traffic läuft über einen Cloudflare-Tunnel; alternativlos im aktuellen Setup. Für die Owner-Mailadresse
[email protected]wird zusätzlich Cloudflare Email Routing eingesetzt — Mails an diese Adresse werden an die persönliche Mailbox des Verantwortlichen weitergeleitet. Cloudflare verarbeitet diese Mails nur zur Zustellung und speichert sie nicht über die Weiterleitung hinaus. - Cloudflare R2 (Off-Site-Backups): Die nächtlichen Datenbank-Backups werden als zusätzliche Off-Site-Kopie nach Cloudflare R2 synchronisiert. Die Backups werden dabei vor dem Upload clientseitig verschlüsselt (
rclone crypt); der Entschlüsselungsschlüssel verbleibt ausschließlich beim Verantwortlichen und wird Cloudflare nicht zugänglich gemacht. Cloudflare speichert insoweit nur einen für sie inhaltlich nicht lesbaren Geheimtext und fungiert als reiner Speicherort. - Pflichten der Auftragsverarbeiter: Sämtliche o.g. Auftragsverarbeiter sind vertraglich zur Einhaltung der DSGVO verpflichtet, dürfen die Daten nur weisungsgebunden verarbeiten und unterliegen Vertraulichkeits- und Sicherheitsanforderungen nach Art. 28 Abs. 3 DSGVO.
8.2 Vom Merchant benannte Empfänger (Discord / Slack)
Wenn ein Shop in den Stockify-Einstellungen einen Discord- oder Slack-Webhook hinterlegt, übermittelt Stockify die Berichts- und Alarm-Inhalte (Shop-Domain, Produkttitel, SKU, Bestände) an den von diesem Shop ausgewählten Webhook-Endpunkt.
Diese Übermittlung erfolgt nicht im Wege einer Auftragsverarbeitung durch Stockify: Der Empfänger und der Kanal werden ausschließlich vom Merchant selbst bestimmt und konfiguriert; Discord bzw. Slack handeln insoweit als vom Merchant benannte Drittempfänger seines eigenen Kommunikationsdienstes. Stockify ist hier reines Übertragungswerkzeug nach Weisung des Merchants. Verantwortlicher i.S.d. Art. 4 Nr. 7 DSGVO für diese Datenflüsse ist der jeweilige Merchant, nicht Stockify; der Merchant trägt insbesondere die Verantwortung für etwaige eigene Auftragsverarbeitungsverträge mit Discord (USA, EU-US Data Privacy Framework) bzw. Salesforce/Slack (USA, EU-US Data Privacy Framework).
Die Empfänger-URL wird in der Stockify-Datenbank als technische Konfiguration des Shops gespeichert (siehe Tabelle in Abschnitt 2) und ausschließlich zum Versand der vom Merchant aktivierten Reports und Alarme verwendet.
8.3 Owner-Trigger-Pings an Discord (intern, ohne Personenbezug)
Bei einem neuen Eintrag in Wishlist/Feature-Requests sendet Stockify einen inhaltsfreien Trigger-Ping an einen privaten Discord-Webhook des Verantwortlichen. Der Payload ist ein hartkodierter konstanter Text:
- Wishlist:
"A new wish was submitted. Review it in the Stockify database."+ Timestamp
Es werden keine Shop-Identifikatoren, keine Freitextinhalte, keine Empfänger-Mails und keine sonstigen personenbezogenen Daten an Discord übertragen. Den eigentlichen Inhalt der Wishlist-Einträge liest der Verantwortliche manuell in der lokalen Stockify-Datenbank nach.
Da bei diesen Pings keine personenbezogenen Daten verarbeitet werden, liegt insoweit kein Anwendungsfall des Art. 28 DSGVO vor; Discord ist hier kein Auftragsverarbeiter, sondern ein technischer Kommunikationskanal für die interne Betriebsorganisation des Verantwortlichen.
9. Rechte der Betroffenen
Sie haben jederzeit das Recht auf:
Auskunft über die zu Ihrer Person gespeicherten Daten (Art. 15 DSGVO)
Berichtigung unrichtiger Daten (Art. 16 DSGVO)
Löschung Ihrer Daten (Art. 17 DSGVO) — "Recht auf Vergessenwerden"
Einschränkung der Verarbeitung (Art. 18 DSGVO)
Datenübertragbarkeit in einem strukturierten, gängigen, maschinenlesbaren Format (Art. 20 DSGVO)
Widerspruch gegen die Verarbeitung (Art. 21 DSGVO)
Widerruf erteilter Einwilligungen mit Wirkung für die Zukunft (Art. 7 Abs. 3 DSGVO) — betrifft v.a. die freiwilligen Einträge in Pricing-Feedback und Wishlist
Beschwerde bei einer Datenschutz-Aufsichtsbehörde (Art. 77 DSGVO). Für den Verantwortlichen zuständig:
Landesbeauftragte für Datenschutz und Informationsfreiheit Nordrhein-Westfalen (LDI NRW) Kavalleriestraße 2–4 40213 Düsseldorf https://www.ldi.nrw.de
Sie können sich auch an die Aufsichtsbehörde Ihres gewöhnlichen Aufenthaltsorts wenden.
Anfragen zu Ihren Rechten richten Sie bitte formlos an [email protected]. Für Shop-Daten ist außerdem der Shopify-eigene customers/data_request- / customers/redact- / shop/redact-Mechanismus verfügbar (siehe Abschnitt 4).
10. Datenübermittlung in Drittländer
Eine Übermittlung in Drittländer findet im Verantwortungsbereich von Stockify ausschließlich gegenüber den in Abschnitt 8 genannten Auftragsverarbeitern statt. Konkret:
- Cloudflare, Inc. (USA) — Ingress, Email Routing und verschlüsselte Off-Site-Backup-Ablage (R2; für Cloudflare inhaltlich nicht lesbar). Rechtsgrundlage: Art. 45 DSGVO i.V.m. dem EU-US Data Privacy Framework (Angemessenheitsbeschluss der EU-Kommission vom 10.07.2023), ergänzt durch EU-Standardvertragsklauseln (SCC) der EU-Kommission vom 04.06.2021 als Fallback.
- Shopify (Kanada-Anteil) — Konzern-DPA mit SCC.
Brevo verarbeitet ausschließlich EU-intern. Eine Liste der zertifizierten US-Empfänger ist abrufbar unter https://www.dataprivacyframework.gov/.
Werden zusätzlich vom Merchant eigene Empfänger in den USA benannt (Discord-Webhook, Slack-Webhook — siehe Abschnitt 8.2), erfolgt die Übermittlung dorthin im Rahmen der Verantwortlichkeit des Merchants. Stockify führt diese Übermittlung lediglich technisch nach Weisung des Merchants aus.
11. Beschwerde- und Verletzungsmeldung
Sollte trotz aller technischen und organisatorischen Maßnahmen eine Datenpanne (Art. 33 DSGVO) eintreten, wird diese innerhalb von 72 Stunden nach Kenntnisnahme an die LDI NRW gemeldet. Betroffene Shops werden — sofern hohes Risiko vorliegt (Art. 34 DSGVO) — über die hinterlegte email_address benachrichtigt.
12. Änderungshistorie
| Datum | Änderung |
|---|---|
| 2026-06-24 | Drift-Korrektur nach Datenschutz-Audit: pricing_feedback (§2) auf das größen-basierte Modell aus Migration 006 aktualisiert (Zahlungsbereitschafts-Bucket + Wert-Treiber + serverseitiger Shop-Snapshot inkl. plan und features_used/Nutzungsprofil) — die alte „freier Preis-Betrag"-Beschreibung war überholt. shops.forecast_orders_access (Migration 007) und purchase_order_receipts (Migration 005) in §2 ergänzt sowie in Speicherdauer (§3) und shop/redact-Löschumfang (§4) nachgezogen. §5 um die At-Rest-Einordnung der read_orders-Aggregate erweitert (nicht personenbezogen, Erwägungsgrund 26). |
| 2026-06-22 | Feature „Mehrere Standorte & Umlagerung" (opt-in): neue Tabellen location_settings, stock_transfers, stock_transfer_lines sowie Spalten shops.multi_location_enabled und purchase_orders.location_id/location_name in Abschnitt 2 ergänzt — ausschließlich Standort-Infrastruktur (Standort-IDs/-Namen) und Variant/Mengen, keinerlei Kundendaten/PII. Speicherdauer (Abschnitt 3) und shop/redact-Löschumfang (Abschnitt 4) entsprechend erweitert (strukturelle Kaskadenlöschung). Keine neuen Shopify-Scopes — read_locations war bereits erteilt, Umlagerungen nutzen das bestehende write_inventory. |
| 2026-06-17 | Feature „Nachbestell-Prognose" (Forecasting): Scope read_orders (Protected Customer Data) ergänzt — es werden ausschließlich aggregierte Netto-Stückzahlen je Variante/Tag sowie Bestands-Snapshots gespeichert (Tabellen forecast_sales_daily, forecast_inventory_snapshots, forecasts, forecast_seasonality), keinerlei Kundendaten/PII; Abschnitte 2, 3 und 4 entsprechend erweitert, GDPR-Webhooks (Abschnitt 4) zur PII-Freiheit der Aggregate klargestellt. Backup-Angaben auf den realen Stand gebracht: 30-Tage-Retention sowie verschlüsselte Off-Site-Kopie bei Cloudflare R2 (Abschnitte 3, 3.1, 8, 8.1, 10). |
| 2026-06-17 | Feature „Bestellungen & Lieferanten": neue Tabellen suppliers, purchase_orders, purchase_order_lines in Abschnitt 2 ergänzt (Lieferanten-email/phone als personenbezogene Kontaktdaten); Speicherdauer (Abschnitt 3) und shop/redact-Löschumfang (Abschnitt 4) entsprechend erweitert inkl. Hinweis auf strukturelle Kaskadenlöschung. |
| 2026-06-07 | Preismodell-Anpassung (Free + Basic): obsoleten „Pro-Currency-Request"-Trigger-Ping und „Pro"-Tarif-Bezüge entfernt (Abschnitte 2.3 und 8.3). Anrede-Korrektur zur Sie-Form in Abschnitt 2.2. |
| 2026-05-29 | Klarstellung: Discord/Slack-Webhooks der Merchants sind keine Auftragsverarbeitung durch Stockify, sondern vom Merchant benannte Drittempfänger (neuer Abschnitt 8.2). Owner-Trigger-Pings an Discord werden als PII-freie interne Kommunikation klargestellt (neuer Abschnitt 8.3). Abschnitt 10 (Drittland-Transfer) entsprechend reduziert. |
| 2026-05-27 | Erstfassung mit vollständiger Art. 13 DSGVO-Umsetzung: Verantwortlicher, Rechtsgrundlagen, Speicherdauer, Cookies/sessionStorage-Hinweis, Discord/Slack/Cloudflare als zusätzliche Sub-Processors, Betroffenenrechte, Aufsichtsbehörde, Drittland-Transfer mit DPF + SCC |
Diese Datenschutzerklärung wird code-synchron gepflegt: Änderungen am Datenmodell oder am Sub-Processor-Stack ziehen eine unmittelbare Aktualisierung dieser Datei nach sich. Der Stand der jeweils letzten Änderung ist oben unter "Letzte Aktualisierung" vermerkt.