Connecting Shopify does two separate jobs: syncing your customers into a contacts list, and watching for checkout/order events so a send's own revenue shows up next to its opens and clicks. Here's exactly how to set both up and where to read the results.
If you've read "Track orders, checkouts & revenue" on the integrations page and weren't sure what that actually looks like day to day, this is the walkthrough — from the Settings screen to the number that eventually shows up on a campaign's own Responses page.
Step 1 — 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 approval screen. On approval, two things start immediately:
- MailInApp creates a dedicated contacts list for the store and begins syncing existing customers into it in the background.
- MailInApp registers webhooks with Shopify so new customers, started checkouts, and paid orders arrive live from then on — no periodic re-import needed.
This is a one-time $30 fee, billed through Shopify's own Billing API as part of the connect flow, available on every plan including Free. It's non-refundable if you later uninstall, but reconnecting later on the same account is free.
Step 2 — Build an email that links back to your store
Nothing about the email itself needs to be special. Design a project the normal way — a Countdown block for a live, always-accurate deadline works well for a promotion, and an Image or Button pointed at a real product or collection URL on your store is what actually sends someone there. Link to your store exactly the way you would from anywhere else: paste the real product page URL. There's no separate "tracking link" to generate and no tag to add by hand.
Step 3 — Send it: the link gets tagged automatically on click
This is the part that's easy to miss, because there's nothing to configure. Every Button, Image, or other link-bearing block that points off MailInApp already gets routed through a click-tracking redirect when a recipient clicks it — that's how the click heatmap on your Responses page works for any outbound link. For a link to an external site like your Shopify store, that same redirect does one more thing: it appends
utm_source=mailinapp
utm_medium=email
utm_campaign=<this project's ID>
utm_content=<the block that was clicked>
to the destination URL before sending the recipient on their way — but only if the link doesn't already carry its own utm_campaign. If you've deliberately tagged a link yourself for your own analytics, that tag is left exactly as you set it, and MailInApp won't attribute through it.
Step 4 — Shopify carries those tags through to the order
Shopify stores the URL a shopper landed on (including its full query string) on the order it eventually creates, whether they buy immediately or come back later. So the utm_campaign that named your MailInApp project is still sitting on the order by the time it's paid — nothing extra to configure on the Shopify side either.
Step 5 — MailInApp reads it back off the paid order
Once the order is actually paid — not just placed, since a placed-but-unpaid order is a checkout, covered below — Shopify calls MailInApp's webhook. MailInApp verifies the request genuinely came from Shopify, looks up the utm_campaign on the order, matches it back to your project, and records a purchase event for it. From here it flows through the same reporting pipeline a purchase made through one of MailInApp's own in-email checkouts would.
Step 6 — Read the results
Two places to look:
- That campaign's Responses page gets a Store revenue card — total revenue and order count — the moment at least one order attributes back to it. If nothing's attributed yet, the card simply doesn't appear rather than showing a zero.
- Every synced customer's own record updates with their order regardless of attribution, so even a purchase with no click behind it (someone who bought directly on your store) still updates that customer's history. It just won't show up tied to one specific campaign, since there was no click to attribute it through.
That customer-level history also feeds a Purchased and a Total revenue condition available when you're building the audience for your next send, schedule, or journey — so "people who bought something after last month's email" is a filter you can actually build, not a spreadsheet you have to assemble by hand.
What about abandoned checkouts?
A checkout that's started but never paid fires a separate event (checkouts/create) rather than the paid-order one above. MailInApp doesn't currently show a standalone list of these anywhere in the dashboard — instead, they're the trigger a journey can react to directly: point a journey's cart abandoned trigger at your connected store and set a delay, and a recovery email goes out automatically to anyone whose checkout stalls past that delay, skipping automatically if they've since paid. See the dedicated abandoned-cart journeys guide for that flow specifically.
Getting started
Connect your store from Settings → Integrations, build one email with a real link to a product or collection page, and send it to a small segment first. Check that campaign's Responses page after a day or two — if a purchase happened through that link, the Store revenue card will already be there. See Shopify, Responses & webhooks, and Behavioral segments for the full reference.