Shopify
Connect a Shopify store to sync its customers into a MailInApp contacts list, trigger journeys off real store events, and see revenue tie back to a campaign or variant.
Connect your store
From Settings → Integrations, enter your store's myshopify.com domain and hit Connect Shopify. You'll be sent through Shopify's own OAuth screen to approve access. MailInApp requests read_customers, read_orders and read_products (all read-only), plus write_discounts so it can mint the single-use discount codes described below — it never asks for write access to your store's products, orders or customers themselves. On approval, MailInApp creates a dedicated contacts list for the store and starts an initial customer backfill in the background, capped at 5,000 customers per connection. A store with more customers than that keeps growing its list from there through Shopify's own webhooks, just without a one-shot backfill past the cap.
If you install from the Shopify App Store itself, before you've ever created a MailInApp account, MailInApp provisions one for you automatically using your store's own email address — you land signed in, with the store already connected.
Connecting Shopify is a one-time $30 fee, billed once through Shopify's own Billing API as part of this flow, available on every plan (including Free). It's non-refundable if you later uninstall the app — but reconnecting later on the same MailInApp account is free.
What it does
- Customer sync — Shopify customers land in a contacts list scoped to this integration, kept current afterward by Shopify's own webhooks (
customers/create, pluscheckouts/createandorders/paidfor the triggers below) rather than a periodic re-poll. - Journey triggers — a connected store can fire a journey's cart abandoned trigger (a checkout started but not completed) and its purchase trigger (an order paid), so a welcome-series or abandoned-cart automation can run off real Shopify activity instead of only MailInApp's own product-block checkout. See Journeys.
- Revenue attribution — an order's own campaign/variant, where identifiable, rolls into the same response and A/B-test revenue numbers a native checkout order already produces.
- Purchase-history segments & discount offers — order line items sync alongside customers, so an audience filter can match "bought product X between date A and B" (see Purchase history), and a project can mint a single-use Shopify discount code per matched recipient, redeemed on your own store checkout (see Discount offer). Ongoing orders sync from the
orders/paidwebhook automatically; a store connected before this shipped, or with older history, needs a one-time Backfill order history pull from Settings → Integrations — capped to roughly the last 60 days unless Shopify has separately approved this app for full order history on your store. - Product catalog for the studio — your store's own active listings sync into MailInApp too, refreshed automatically on the same cadence as customers (no separate button). The Product block's Import from store picker searches this synced catalog and fills in a block's name, description, image and price from a real product — a one-time copy, not a live link, so nothing about a sent email can drift from what you reviewed. A store connected before this shipped needs a quick Disconnect then Connect Shopify to grant the new
read_productspermission Shopify requires — the picker just shows nothing until then.
Disconnecting
Disconnect in Settings stops the sync and any further webhook processing immediately. Customers already synced stay in their contacts list — disconnecting an integration never deletes contacts, since they may already be a send audience for other projects. Uninstalling the app from Shopify's side works the same way at first. About 48 hours later, once Shopify's own data-deletion webhook fires, it fully erases the synced contacts and cart records too — the standard grace period every Shopify app must honor.