> ## Documentation Index
> Fetch the complete documentation index at: https://docs.senderz.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Shopify

> Connect Shopify via OAuth or install from the App Store — with GDPR webhooks, customer and order back-fill, storefront pixel and dual billing.

Shopify is the deepest store integration. Connect it and Senderz syncs your customers, orders and on-site behaviour, and can serve popups through a theme app embed.

## Two ways to connect

<Tabs>
  <Tab title="From Senderz (web-first)">
    In **Settings → Integrations** or onboarding, click **Connect Shopify**,
    enter your shop domain, and approve the OAuth scopes. You land back in
    Senderz and the back-fill starts.
  </Tab>

  <Tab title="From the Shopify App Store">
    Installing Senderz from Shopify provisions a workspace automatically —
    the merchant never types their domain. If the shop email matches an
    existing account, Senderz links it; otherwise it routes you through a
    normal signup/login handoff.
  </Tab>
</Tabs>

## What syncs

<CardGroup cols={2}>
  <Card title="Customers" icon="users">
    Existing customers back-fill on connect (via the GraphQL Admin API);
    new and updated customers arrive by webhook. Consent is read from
    Shopify's marketing state, never assumed.
  </Card>

  <Card title="Orders" icon="cart-shopping">
    The last 60 days of order history back-fill (facts + timeline only — no
    flow enrolment on historical orders). Live orders drive the full
    lifecycle event pipeline.
  </Card>

  <Card title="Products" icon="box">
    The product catalog syncs on connect and hourly, powering the Products
    page.
  </Card>

  <Card title="Storefront behaviour" icon="eye">
    A web pixel captures product views, cart adds and checkouts, linked to
    identified contacts.
  </Card>
</CardGroup>

## Lifecycle events

Shopify webhooks map to canonical Senderz events that drive flows and outbound webhooks:

* Orders: `orders/create`, `cancelled`, `fulfilled`, `partially_fulfilled`, `refunds/create`
* Fulfilment & shipping: `fulfillments/create|update`
* Checkout: `checkouts/create|update` → `checkout.started` (abandonment capture)
* Customers: `customers/create`, `customers/update` → `contact.updated`

<Note>
  An order placement force-exits cart-recovery flows, so a customer who buys
  stops receiving abandoned-cart reminders.
</Note>

## GDPR & app compliance

Senderz handles Shopify's mandatory app webhooks: `customers/data_request`, `customers/redact`, `shop/redact`, and `app/uninstalled`. Redaction **anonymises** the contact (nulls PII, unsubscribes, soft-deletes) rather than hard-deleting, so analytics and the audit trail survive.

## Billing

App Store-installed merchants are billed through **Shopify Managed Pricing** — you pick your tier on Shopify's hosted plan page, and it syncs back to Senderz. Web-first merchants are billed through Lemon Squeezy. A store connected only for sync doesn't move a web merchant onto Shopify billing.

## Scopes & re-auth

<Warning>
  Senderz requests scopes for customers, orders, fulfilments, checkouts,
  products, pixels and discounts. **Existing installs must re-authorise to
  grant newly-added scopes** — a scope bump only takes effect on reconnect.
</Warning>

## Embedded app

Senderz runs as a minimal embedded App Bridge shell inside Shopify Admin (install, auth and plan selection), while the full product runs at `app.senderz.app`. Popups are served via a theme app embed you enable once under **Online Store → Themes → Customize → App embeds**.
