Skip to content
← Back to Security overviewProtected Customer Data

16 pre-attested answers to Shopify's data-protection form

This page mirrors the answers we submitted on the Shopify Partner Dashboard's "DΓ©tails sur la protection des donnΓ©es" form. Each question is shown in the original French (verbatim from the form) with the answer we attested and a plain-English explanation.

Last reconciled with our internal compliance record Β· May 11, 2026

Purpose & data minimization

Q1

Do you process the minimum personal data required to deliver value to merchants?

Oui

We collect only what's needed to attribute conversions and bid for ads on the merchant's behalf: a first-party cookie ID (anonymous), event metadata (page view, add to cart, purchase), the order ID with its line items and total, and a SHA-256 hash of the customer email. The raw email is hashed at the bidder and never persisted in plaintext on the plugin side. We explicitly do not collect cleartext email, phone, payment data, postal address, government IDs, biometric data, or precise location.

Q2

Do you inform merchants about the personal data you process and the purposes of that processing?

Oui

Our public privacy policy enumerates every piece of personal data we process β€” its source, its purpose, and its retention window β€” for both merchant data (shop owner email, locale, access token) and storefront-customer data (cookie ID, events, hashed email). The Shopify App Store listing links to that policy, and the in-app Settings page surfaces it once the listing URL is published.

Q3

Do you limit the use of personal data to those purposes?

Oui

Each piece of data has exactly one documented purpose, enforced by both policy and code. The bidder API key is server-only and never reaches the browser. The pixel key is scoped to the event-ingestion endpoint. Our first-party cookie identifies a single visitor for that merchant's own attribution and is never combined across shops. Webhook payloads are stripped of email before being persisted in the retry queue. A single read boundary in our code is the only path that decrypts secrets, and every read is audit-logged β€” making purpose violations detectable.

Storage

Q8

Have you configured retention windows that ensure personal data is not kept longer than necessary?

Oui

Each table has a documented retention window enforced by an automated pruner that runs weekly. Locked windows: completed retry-queue jobs 90 days, audit logs 365 days, install nonces 24 hours, Shopify sessions until uninstall + 30 days, shop configuration until uninstall + 30 days (or 48 hours after a shop-redact webhook, whichever fires first), and the storefront cookie 365 days browser-side. In-flight rows are never pruned β€” only completed rows past the cutoff.

Q9

Do you encrypt data at rest and in transit?

Oui

Two layers of encryption. At rest (application layer): our most sensitive secrets β€” the bidder API key and the pixel key β€” are wrapped with AES-256-GCM. The 16-byte GCM authentication tag detects tampering, surfacing as an error rather than a silent decode. The encryption key lives in our hosting provider's secret manager; the app refuses to operate without it. At rest (disk layer): the deployment requires a managed Postgres provider with disk encryption enabled (Neon, Vercel Postgres, Supabase Pro, AWS RDS with storage encryption, or equivalent). Unmanaged Postgres deployments are forbidden by our deploy spec. In transit: TLS 1.3 is enforced everywhere β€” browser to plugin, plugin to Shopify Admin, plugin to bidder backend (additionally HMAC-signed), and plugin to Postgres. Known gap (transparent): the Shopify OAuth session token is not yet application-layer encrypted; it's stored by an upstream library and is mitigated today by disk encryption, access control, and audit logging. Application-layer encryption for that token is on our v1.1 roadmap.

Q10

Do you encrypt data backups?

Oui

Two ways. Application-layer (the secrets matter most): our highest-value secrets are encrypted at the row level β€” a leaked snapshot is useless without our encryption key. Disk-layer (the rest): managed Postgres providers store point-in-time-recovery snapshots and base backups encrypted at rest. We do not run our own backups; the managed provider's automated PITR is canonical.

Q11

Do you separate test and production data?

Oui

Different database URLs per environment. Local development runs Postgres in Docker on a non-standard host port; production reads its database URL from the secret manager. Production data is never copied to development β€” dev is seeded with synthetic fixtures only. The production encryption key is generated fresh and lives only in the production secret manager; development uses a different key. The Shopify CLI naturally enforces that the development build only runs against a Shopify development store, never a production store.

Q12

Do you have a data-loss prevention strategy?

Oui

Multi-layered. Provider: managed Postgres point-in-time recovery with retention of at least 7 days (we recommend 30+). Managed providers store backups in availability zones separate from the primary. Application: a circuit breaker prevents cascade failures into the bidder, and an idempotent retry queue preserves in-flight events through transient outages. Operational: RPO 5-minute / RTO 30-minute targets are documented, and quarterly test-restores on a PITR branch validate the recovery path. Key safety: our encryption key is held in the hosting provider's secret manager and backed up in the operator's password manager (encrypted, offline). Losing the key is treated as a top-tier incident.

Access

Q13

Do you limit employee access to customer personal data?

Oui

Today, with a solo operator, our access posture is honestly stated: least privilege at N=1 means one person holds everything. Compensating controls are MFA on every in-scope account, a 365-day audit log of every secret read, and a quarterly access review. The role matrix is already documented for team growth: Engineer, Operator/SRE, Support, and CEO, with production secret-manager and production-database write access reserved to Operator/SRE only. Onboarding issues a least-privilege account on day zero with MFA enforced before access; offboarding revokes within 4 hours and rotates any shared credentials within 24.

Q14

Do you have strict security requirements for employee passwords?

Oui

Documented policy with annual self-attestation. Password managers required for all in-scope accounts (1Password, Bitwarden, Dashlane, KeePass, or equivalent) β€” no reuse, no memorized human-typed passwords. Generated passwords: at least 20 characters, at least 3 character classes. MFA required on every account in the inventory (GitHub, Shopify Partners, hosting provider, managed Postgres, secret manager, operator email, domain registrar, DNS provider, bidder admin). Preferred method: WebAuthn / FIDO2 hardware key. Fallback: TOTP. Forbidden: SMS-based 2FA (SIM-swap risk).

Q15

Do you maintain a log of access to personal data?

Oui

A dedicated audit-log table records every security-relevant access: reads of merchant access tokens, token mints during install, receipt of customer-data-request webhook payloads, and receipt of customer-redact webhook payloads. Each entry carries actor, shop, resource, action, outcome, request ID, and timestamp. Audit-log writes are fire-and-forget β€” they never break the operation they're auditing, but failures themselves surface to error logs. Retention: 365 days. What we deliberately do not log: every commerce webhook (too noisy to be useful) β€” bidder-side observability handles that.

Q16

Do you have a security-incident response policy?

Oui

A full incident-response runbook covers severity levels (Sev 1, 2, 3), detection sources, and a six-phase response: detect, contain, eradicate, recover, notify, and post-incident review. A confirmed Sev 1 starts the GDPR Article 33 72-hour clock immediately. Notification coverage includes GDPR Articles 33 (supervisory authority, 72h) and 34 (data subjects, without undue delay), CCPA Β§ 1798.82 (California Attorney General + affected residents), Shopify Trust & Security (24h), and affected merchants (72h with an included template). Containment includes documented dual-secret overlap rotation for our inter-service HMAC secret. Emergency rotation of our application-layer database encryption key uses a manual procedure today; an automated dual-read rotation path is documented in our v1.1 roadmap.

Source of truth: Shopify Partner Dashboard β†’ API access β†’ Protected customer data. We re-verify before each submission of the form.

Protected Customer Data Q&A | ArgosAd