---
url: https://simpledatalogs.com/docs/integrations/shopify.md
description: >-
  The simpledatalogs Shopify app; a web pixel that sends storefront and checkout
  events with no theme edits, only with analytics consent and without personal
  data.
---

# Shopify

The simpledatalogs Shopify app sends storefront and checkout events with no theme edits. You paste a public key, and a Shopify web pixel starts sending.

* Runs in Shopify's strict pixel sandbox, on the storefront and in checkout.
* Loads only with the shopper's analytics consent.
* Sends no personal data.

::: info Early access
The app isn't in the Shopify App Store yet. Until it is, you can run it from its [GitHub repo](https://github.com/XKD-Labs/simpledatalogs-shopify) with a Shopify Partner account and `shopify app dev`; the README has the steps.
:::

## Set it up

1. Install the app on your store and open it from the Shopify admin.
2. Paste a public key (`sdl_pub_…`). Secret keys are refused.
3. Pick the event groups to send, and save. Saving connects the pixel.
4. Press **Send test event**.
5. Check **Settings → Customer events**: the simpledatalogs pixel shows as connected.

## What it sends

| Group | Events | Props |
|---|---|---|
| Page views | `page_view` | `title`; an external `referrer` and `referrer_host`; `utm_*` |
| Product, collection and search views | `product_viewed`, `collection_viewed`, `search_submitted` | Product and variant ids, titles, type, vendor, `sku`, `price_amount`, `currency`; collection id, title and `product_count`; search `query` and `result_count` |
| Add to cart | `product_added_to_cart` | Product and variant props, `quantity`, `total_amount`, `currency` |
| Checkout started, payment info and purchases | `checkout_started`, `payment_info_submitted`, `checkout_completed` | `currency`, `total_amount`, `subtotal_amount`, `tax_amount`, `shipping_amount`, `discount_amount`, `line_item_count`, `item_quantity`; purchases add `order_id` and `is_first_order` |

* Every event also carries `source` (`shopify`), `shop`, `path` and `shopify_event_id`.
* Shopify's `clientId` is sent as `anonymous_id`.
* `page_view` matches the [JavaScript SDK](/sdks/javascript)'s name, so the same boards work for Shopify and other sites.

## Privacy and consent

* The pixel runs only with analytics consent. When a shopper withdraws consent, it clears its unsent events.
* **Never sent:** emails, names, phone numbers, addresses, customer ids, checkout tokens, query strings, URL fragments or IPs.
* A search query that looks like an email or phone number is dropped.
* The app stores your shop's settings, nothing about shoppers. Uninstalling deletes them.

## Delivery

* Unsent events wait in the pixel's local storage, at most 500 events or 512 KB; the oldest go first.
* Batches of up to 50 events and 256 KB go out about a second after the first waiting event. Leftovers from an earlier page are resent on the next.
* Failures back off with full jitter from 1 second to 5 minutes, honoring `Retry-After`. A `401` pauses sending for 10 minutes; a `413` splits the batch, and a `415` drops it.

## Next steps

* [Core concepts](/guide/concepts#deployments): give the store its own deployment and key.
* [Privacy for senders](/reference/privacy): what to keep out of events.
