---
title: Shopify order tracking and profit
slug: shopify-order-tracking
description: How Personizely tracks Shopify orders server-side: paid vs created orders, what revenue includes, profit from cost of goods, and tagging orders by variation.
docTags: 
createdAt: 2026-10-16T19:45:26.753Z
---

Personizely records Shopify orders server-side, from Shopify order data, and matches each order to the visitor who placed it. You don't add a script to the thank-you page or the checkout. Each recorded order reaches the **Purchase** goal and is credited to the campaigns and widgets the visitor saw within your [Revenue attribution](docId\:jpQKiTTVFyptseo8UEQOD). You can also track profit from Shopify's cost of goods, and tag orders in Shopify with the variations they were credited to.

**Available on:** Shopify.

## How it works

1. **Installing the app connects order tracking.** When you install Personizely and connect your store, Personizely subscribes to your store's order events. There's nothing else to set up.
2. **The visitor shops on your storefront.** The Personizely snippet and web pixel recognize the visitor as they browse, add to cart and start checkout.
3. **Shopify reports the order.** Depending on **Attribute orders**, Personizely records the order when it's paid (default) or when it's created.
4. **Personizely matches the order to the visitor.** The match is made server-side, from Shopify order data, to the visitor Personizely tracked on your storefront. Orders that can't be matched to a tracked visitor aren't recorded.
5. **The order is attributed.** It reaches the system **Purchase** goal, and any Purchase goals of your own whose product or tag filters it matches. It's credited to every campaign and widget seen within the window. The order appears in reports shortly after it's placed.

Add to cart and Checkout start come from Personizely's Shopify web pixel, which installs automatically with the app.

## What's recorded for each order

| Field      | Value                                                                                                | Used for                                          |
| ---------- | ---------------------------------------------------------------------------------------------------- | ------------------------------------------------- |
| Revenue    | The order total in your store currency: line items after discounts, plus shipping and taxes          | Revenue, revenue per visitor, AOV                 |
| Shipping   | The order's shipping charge                                                                          | Optionally added to profit                        |
| Profit     | Subtotal after discounts minus cost of goods (see [Profit](docId\:hS2Gsx3K3YcJ2NRssNAmX))            | Profit per visitor                                |
| Products   | Product and variant of each line item. Price-test duplicates are mapped back to the original product | Goal product filters, product breakdowns          |
| Order tags | The order's tags, kept in sync when they change in Shopify                                           | Goal tag filters, the **Goal tags** report filter |
| Order ID   | Shopify's order ID, shown as **Remote ID** in the goal hits list                                     | Finding the order in Shopify                      |
| Time       | When the order was created                                                                           | The attribution window                            |

## Settings

All in **Settings → Tracking**:

| Option                                      | What it does                                                                   | Values / default                                                |
| ------------------------------------------- | ------------------------------------------------------------------------------ | --------------------------------------------------------------- |
| **Attribute orders**                        | Which order event counts as a conversion                                       | **When the order is paid** (default), When the order is created |
| **Track profit analytics**                  | Records profit for each order from Shopify's cost of goods                     | Off. Profit analytics is available on the Premium plan          |
| **Calculate shipping price towards profit** | Adds the shipping charge to each order's profit                                | Off. Shown when profit tracking is on                           |
| **Tag orders with campaign attribution**    | Adds tags in Shopify for each campaign and variation the order was credited to | Off                                                             |
| **Attribution window**                      | How far back from an order exposures are credited                              | 2–30 days, default 7                                            |

When you turn on **Track profit analytics** or **Tag orders with campaign attribution** for the first time, Shopify may ask you to approve an extra permission: reading inventory (for cost of goods) or writing orders (for tags). Approve it, or the setting turns itself off again.

### Paid or created

- **When the order is paid** counts orders once payment is captured. Use it for stores that take card payments up front.
- **When the order is created** counts every order as soon as it's placed, including unpaid ones. Use it for **cash on delivery** and other pay-later methods, otherwise those orders are only counted when marked paid, which can be days later and outside the attribution window.

Changing the setting applies to orders from then on.

## Profit

With **Track profit analytics** on, each order's profit is:

```javascript
profit = order subtotal after discounts − cost of goods
```

- **Cost of goods** comes from the **Cost per item** you set on each product variant in Shopify.
- The subtotal excludes shipping and taxes. With **Calculate shipping price towards profit** on, the shipping charge is added to profit. Reports then use (profit + shipping) for **Profit per visitor**.
- **Profit is recorded only when every item in the order has inventory tracked by Shopify and a Cost per item. If any item is missing either, that order gets no profit value at all.** Fill in costs and turn on inventory tracking for all products before running a test on profit per visitor.
- Cost of goods is multiplied by the quantity of each item.
- Profit applies to orders recorded after you turn it on.

Profit per visitor becomes available as a primary metric and in reports once profit tracking is on. See [Statistics methodology](docId\:Jl7imbqyTMR8uy4RyPYQL).

## Order tagging

With **Tag orders with campaign attribution** on, each order credited to at least one campaign gets two tags per campaign:

| Tag                                  | Meaning                                                |
| ------------------------------------ | ------------------------------------------------------ |
| `ply_campaign_<campaignId>`          | The order was credited to this campaign                |
| `ply_variation_<variationId>`        | The order was credited to this variation               |
| `ply_variation_<campaignId>_control` | The order was credited to the campaign's control group |

Use these tags to filter orders in Shopify admin, in exports or in your BI tool. In a campaign report, open a row's menu and choose **View orders** to open Shopify admin filtered to that variation's tag.

## Behavior details and limitations

- **No checkout script needed.** Orders are recorded from Shopify order data, so you don't add anything to the checkout or the thank-you page.
- **Unmatched orders aren't recorded.** Orders Personizely can't link to a visitor it tracked on your storefront, such as orders created in Shopify admin or imported from another system, don't appear in reports.
- **Refunds and edits don't change revenue.** Revenue is recorded once, when the order is counted. Later refunds, cancellations and order edits don't reduce it. Tag changes are synced.
- **Purchase goals with tag filters** check the tags the order has when it's recorded. Tags added later still show up in the **Goal tags** report filter.
- **Store currency.** Revenue and profit are recorded in your store's currency, whatever currency the customer paid in. Set the same currency under **Settings → Website → Currency** so reports format it correctly.
- **Subscription and bundle apps.** Orders are recorded like any other order. For price tests on subscription products, see [Duplicate products (clones) for price tests](docId:40FTmfABkmLPu-g2S0rqk).
- **Price-test duplicates are reported as originals.** Purchases of a duplicate product are mapped back to the original product and variant in Personizely's reports. Shopify's own reports show the duplicate.
- **Tags are added once.** If a campaign is deleted later, existing tags on orders stay.
- **Custom checkouts.** Orders placed through GoKwik, ShipRocket or Shopflo also have checkout events of their own. See [Custom checkouts: GoKwik, ShipRocket, Shopflo](docId\:X4-4KmLJTdX84oVkwOtfJ).

## Troubleshooting

- **No purchases at all** → check that the Personizely app is installed and connected, the theme app embed is on, and the Dashboard's **Snippet** card shows **Tracking active**. Orders are only matched to visitors the snippet has tracked. See [Install Personizely on Shopify](docId\:KKBkXcEXtFXCVJdjXvQ74).
- **Cash on delivery orders are missing** → switch **Attribute orders** to **When the order is created**.
- **Fewer orders in Personizely than in Shopify** → expected. Shopify counts every order. Personizely counts orders it can match to a tracked storefront visitor, and campaign reports only include orders from visitors exposed to that campaign within the window.
- **Profit per visitor is empty or too low** → some products have no Cost per item, or don't have inventory tracked by Shopify, so those orders have no profit. Add costs and turn on inventory tracking in Shopify.
- **Orders aren't tagged** → approve the write-orders permission when prompted, and check that the order was credited to at least one campaign.

## Related

- [Revenue attribution](docId\:jpQKiTTVFyptseo8UEQOD)
- [Goals](docId\:XSkE1LjM1yiNhLBzpr1B1)
- [Custom checkouts: GoKwik, ShipRocket, Shopflo](docId\:X4-4KmLJTdX84oVkwOtfJ)
- [Reading campaign reports](docId\:Xb9pSvXG7zF45wIEXc7Sp)
- [Statistics methodology](docId\:Jl7imbqyTMR8uy4RyPYQL)
- [Install Personizely on Shopify](docId\:KKBkXcEXtFXCVJdjXvQ74)
