Popup Scheduler - Privacy Policy

Effective:

This Privacy Policy explains how the Popup Scheduler Shopify app (the "App") collects, uses, and protects information when merchants install or use the App and when visitors interact with popups on a storefront, including optional email capture features enabled by the merchant.

TL;DR: We store campaign configuration in your Shopify store metafields, use a small non-personal plan cache metafield to reduce cold starts, and can optionally help merchants collect email signups into their Shopify customer records when the merchant enables that feature and grants the required permission. We do not profile customers, and we do not sell or share personal information.

1) Who we are

Controller (merchant-facing data): Syntax Repairs, UK.
Processor (storefront data on behalf of the merchant): We act as a data processor/service provider to the merchant for storefront interactions.
Contact: info@syntaxrepairs.co.uk

2) Scope

This Policy covers data handled about merchants and their staff when using the App inside Shopify Admin, and limited technical data about storefront visitors needed to show, dismiss, and optionally submit an email signup through a popup. It does not cover a merchant's own wider use of customer data in their Shopify store (governed by the merchant's privacy policy) or Shopify's processing as platform provider.

3) Data we collect

3.A From Shopify Admin APIs (merchant/staff data)

  • Shop metadata: shop ID (GID), shop domain, shop name, primary locale, store timezone (IANA), and the API scopes granted.
  • Billing status: current app subscription name(s) and status (used to derive a plan and limit for gating popups). We store only the derived plan key and limit in a cache metafield; detailed billing stays within Shopify.
  • Campaign configuration: popup campaigns (schedules, content blocks, styling) saved in the shop metafield pps/campaigns (type JSON).
  • Plan cache: non-personal JSON written to pps/plan_cache - typically { plan, limit, checkedAt, expiresAt, v } - to allow fast plan checks and mask cold starts.
  • App session data: Shopify authentication sessions and related expiring offline token / refresh token data needed to securely keep the App connected to the merchant's store.

3.B From storefront runtime (visitors)

  • Functional cookie: ps_dismissed_<campaignId> set to "1" to remember a visitor's dismissal for the configured snooze days.
  • Functional cookie: ps_submitted_<campaignId> set to remember that a visitor already submitted the email capture form for that popup so it is not shown to them again.
  • Optional email signup data: when a merchant enables email capture and a visitor submits the form, the App may send the visitor's email address, the popup/campaign identifier, popup name, and any merchant-configured customer tags into the merchant's Shopify customer records.
  • Runtime debug (optional): When a merchant appends ?pps_debug=1 to a page URL, we log diagnostic values in the browser console (not transmitted to our servers).
  • No behavioral profiling: We do not use the App to create behavioral advertising profiles, and we do not sell visitor data.

3.C Server telemetry

Server logs (standard web logs): request timestamps, IP address, user agent, URL path (e.g., /apps/pps/status), and error stacks for debugging and security.

4) Sources of data

  • You/your staff: through the App's admin UI (campaign content, schedules, settings).
  • Shopify APIs: Admin GraphQL/REST for shop/billing/metadata; Theme App Extension for theme blocks/metafields.
  • Automatically: storefront cookies for dismissal/submission state; app proxy status checks.

5) How we use data

  • Provide and operate the App: render popups according to saved campaigns and schedules.
  • Plan gating: determine whether a popup is permitted under the active plan/limit. The App writes a 24-hour plan cache to pps/plan_cache to improve storefront performance.
  • Optional lead capture: where enabled by the merchant, send submitted email signup details into that merchant's Shopify customer records, update email marketing consent, and apply standard and merchant-defined tags.
  • Support & troubleshooting: investigate errors (using server logs) and respond to support requests.
  • Security & abuse prevention: monitor for misuse and secure our infrastructure.
  • Legal compliance: meet obligations under applicable laws and agreements.

Legal bases (EU/UK GDPR): contractual necessity (to provide the App), legitimate interests (performance optimization, security), and where applicable, consent (managed by the merchant for their storefront).

6) Cookies and similar technologies

Set by the App on storefronts:

Name Purpose Type Duration
ps_dismissed_<campaignId> Remember a visitor's dismissal to avoid re-showing the popup within the snooze window Functional Configurable (snooze days)
ps_submitted_<campaignId> Remember that a visitor already submitted the popup's email signup form so the same popup is not shown again Functional Long-lived, unless cleared by the visitor/browser

The App does not set analytics or advertising cookies.

7) Sharing & disclosures

We do not sell personal information. We may disclose limited data to Shopify (platform provider), hosting/infrastructure providers (e.g., Fly.io/CDN) for secure operation, support tools (if used), and legal authorities if required.

8) International transfers

We may process data on servers located outside your country. Where required, we rely on standard contractual clauses or equivalent safeguards. Hosting regions: [insert region(s), e.g., EU, UK, US].

9) Retention

  • Campaign data (pps/campaigns): retained while the App is installed and until you delete campaigns or uninstall the App.
  • Plan cache (pps/plan_cache): auto-rotated/overwritten (typical TTL 24h).
  • Email signup submissions: where the merchant enables email capture, submitted email addresses and related tags are stored in the merchant's Shopify customer records and are then retained according to the merchant's Shopify data practices.
  • App session data: retained as needed to keep the App authenticated with Shopify and refreshed securely, and deleted when no longer needed or when the App is uninstalled.
  • Server logs: retained for ~[30] days unless needed longer for security/legal reasons.
  • Support communications: retained as needed to service your request.

Upon uninstallation or written request, we will delete app-side data we control within a reasonable period (typically within 30 days), and we will stop writing to your shop metafields. You can delete the metafields at any time within Shopify.

10) Data subject rights

Merchants/staff: access, correction, deletion, portability, objection/restriction. Contact info@syntaxrepairs.co.uk.
Storefront visitors: direct rights requests to the merchant (store owner), especially where signup details are written into that merchant's Shopify customer records. We support merchants by honoring Shopify privacy webhooks and by minimizing data collection.

11) Security

We use industry-standard safeguards: HTTPS in transit; principle of least privilege; scoped API tokens; minimal app-side data storage; expiring Shopify app session tokens with refresh support; and monitoring/logging for anomalies. Where email capture is enabled, submitted email addresses are written into Shopify customer records on behalf of the merchant rather than stored in a separate marketing database operated by us.

12) Children

The App is not directed to children. Merchants should not use the App to knowingly target children under the age of 13 (or the applicable age of consent in their jurisdiction).

13) Changes to this Policy

We may update this Policy to reflect improvements or legal requirements. We will post the updated version with a revised effective date. Material changes will be communicated via the Shopify app listing or in-app notice.

14) Contact

[Syntax Repairs]

Email: info@syntaxrepairs.co.uk


Appendix: Shopify-specific details

  • Metafields we use:
    • pps/campaigns (JSON): stores popup campaigns (content, styles, schedules).
    • pps/plan_cache (JSON): { plan, limit, checkedAt, expiresAt, v } for fast gating; contains no customer PII.
  • App Proxy endpoint: /apps/pps/status returns { ok, plan, limit } and refreshes pps/plan_cache on success.
  • Theme App Block anchors: inline JSON scripts #ps-campaigns and #ps-status so the storefront can render without extra network roundtrips.
  • Email capture: optional feature that can create or update Shopify customer records, subscribe the submitted email for marketing, and apply tags such as popup-scheduler, a popup/campaign tag, and any merchant-defined custom tags.
  • Storefront cookies: ps_dismissed_<campaignId> and ps_submitted_<campaignId> (functional only).