RestockRadar is a Shopify app that predicts stockouts before they happen. This document describes what merchant data we receive, where it is stored, how long we keep it, and how merchants can request deletion.
When a merchant installs RestockRadar, our backend reads the following through Shopify's Admin GraphQL API:
| Data | Why we read it |
|---|---|
| Product catalog (products + variants) | Build the per-variant dashboard rows |
Inventory levels (available qty) | Compute Days-Until-Stockout |
| Order line items (last 30 days) | Calculate average daily demand and demand variance |
| Shop name + email (from session) | Send the merchant their alert digests |
We do not read or store:
Order line items are aggregated to per-variant per-day quantity counts on ingest. The customer-identifying fields on each order are dropped before anything is persisted.
All systems are accessed over TLS. Secrets are kept in Fly.io secrets and Firebase Functions config — never in source control.
| Data class | Retention |
|---|---|
| Product / inventory | While the app is installed. Refreshed every 6h by the recalc cron. |
| Daily sales buckets | While the app is installed. Older than 90 days are pruned by the recalc. |
| Webhook event log | 30 days, then auto-deleted by Firestore TTL. |
| Session tokens | While the app is installed. Removed by Shopify on uninstall. |
| Sentry errors | 30 days (Sentry default for the free tier). |
| Resend logs | 7 days (Resend default). |
When a merchant uninstalls, the app/uninstalled webhook flips the store's state to inactive. 48 hours later Shopify fires shop/redact, and our handler deletes every Firestore document associated with the shop — products, daily sales, webhook events, inventory-item mapping, and the store settings root document.
Per Shopify App Store requirements we implement all three GDPR webhooks:
| Topic | Behavior |
|---|---|
customers/data_request | Returns 200 with a confirmation that we hold no customer-level PII. |
customers/redact | No-op — we hold nothing to redact. Returns 200. |
shop/redact | Deletes the shop's entire document tree in Firestore. Returns 200. |
The fastest path is to uninstall the app from the Shopify admin. That triggers the shop/redact flow above and we are required to comply within 48 hours of the redact webhook firing.
For ad-hoc requests, email projects2024.omkar@gmail.com with the shop domain (e.g. your-store.myshopify.com). We will manually purge the data and confirm via reply within 7 business days.
| Vendor | Role | Region |
|---|---|---|
| Google Cloud (Firebase) | Firestore + Cloud Functions | us-central1 |
| Neon | Postgres for session storage | us-east-2 |
| Fly.io | Remix application hosting | iad |
| Resend | Transactional email | us-east-1 |
| Sentry | Error tracking | us |
Material changes are announced 14 days before they take effect via the in-app banner. The "Last updated" date at the top of this document reflects the most recent change.
Questions, deletion requests, or anything else: projects2024.omkar@gmail.com.