Lifetimely: UTM Explorer

UTM Explorer

At a glance

UTM Explorer assigns Shopify orders to eligible Customer Visit touches, then groups attributed revenue and order outcomes by Shopify source or a selected UTM parameter. Use it to find high-value tags, spot missing or inconsistent campaign naming, and compare how first-touch, last-touch, and linear attribution redistribute credit.

Availability and data freshness

Availability and prerequisites: Requires Attribution access, Shopify orders with customer identity, and Shopify Customer Visits. Orders without a matching eligible visit cannot appear. Connected ad accounts are not required because this report uses Shopify visit and order data rather than ad-platform reporting.

Freshness and history: Direct navigation falls back to two weeks ago through today. A valid date range previously selected in another report overrides that fallback; URL dateFrom and dateTo values take priority over the stored range. The UI treats an identical request as fresh for 60 seconds and does not refetch merely because you return focus to the page.

On this page

Open and operate the report

Open Attribution > UTM Explorer (/attribution/utm_explorer) and select UTM Report. The report starts with UTM Source, platform All, 7 Days, First Touch, revenue descending, and 25 rows per page. Only URL platform and sort values, dates, or a stored report date range can override those initial values; grouping, model, and window are not restored from the URL.

Choose the population and attribution rule

  • Time period: Select custom dates or Last 6 months, Last 12 months, This year, or a Since 2020 through Since 2025 preset. Presets end yesterday, while the report's direct-navigation fallback includes today. The selected range is saved and can become the initial range on other reports.
  • Group by: Choose Blended Source, UTM Source, UTM Campaign, UTM Medium, UTM Term, or UTM Content. Changing this control resets sorting to revenue descending. Despite its UI label, Blended Source currently groups the source value stored on the Shopify Customer Visit; the query does not apply an additional normalization map.
  • Platform: Choose All, Facebook, Google, or TikTok. A specific platform keeps visits whose lowercased Shopify source exactly matches that platform. This is a visit-source filter, not an ad-account or campaign filter.
  • Attribution Window: Choose 1 Day, 7 Days, 14 Days, or 28 Days. The window looks backward from each order's processed time and includes visits on both boundaries.
  • Attribution Model: Choose First Touch, Last Touch, or Linear. The model selects or weights eligible visits; it does not change the order's actual value.

The page does not expose product, order, customer, country, or complex report filters. Although store prefilters and shop settings are present in the request contract, the current UTM Explorer calculation reads Shopify orders directly and does not apply them.

Search, sort, paginate, and export

  • Search performs a case-insensitive contains match against the raw value of the selected grouping field. It does not search other columns. Blank values display as No value, but searching for that display label does not match the underlying blank value.
  • Select any column heading to sort ascending or descending. The available columns are Param, Revenue, AOV, Orders, New Customers, and Returning Customers.
  • Show 10, 25, 50, or 100 rows per page and use the entry count to understand how many distinct grouped values matched.
  • Export CSV downloads all matching grouped rows—not only the current page—with the active dates, grouping, platform, model, window, search, and sort order.
  • Ask AI receives the currently loaded report response plus the page identity and dates captured when the page opened. If you changed the dates or other controls after opening the page, restate them in your question and verify consequential decisions against the table or CSV.

The UTM Builder tab constructs a destination URL from a Base URL and any nonblank utm_source, utm_medium, utm_campaign, utm_term, and utm_content values, then lets you copy it. It does not alter historical visits. It also does not validate or URL-encode entered values, so use consistent lowercase names and encode spaces or reserved characters before publishing the link.

Data contract: which orders and visits qualify

One row represents one distinct value of the selected Shopify Customer Visit field. Revenue and order credit are aggregated across qualifying Shopify orders processed in the selected period.

Where the data comes from

Report element Data used
Param / grouped row source or the selected UTM value parsed into the Shopify Customer Visit record. Empty selected values are grouped as No value. Values are otherwise grouped as stored, so capitalization or spelling differences create separate rows.
Eligible touch A Shopify Customer Visit for the same Shopify customer as the order, occurring no later than the order and no earlier than the selected number of days before it. Visits whose source is direct or an unknown source are excluded before model selection.
Order value Shopify current_total_price, the current order total after order edits and refunds. This is not the Profit & Loss net-sales formula.
New/returning classification The order ID is compared with the customer's earliest Shopify order by processed time across available store history. This lookup also bypasses store prefilters.

The join uses Shopify customer ID, not the visit's order ID. An order is omitted when it has no customer ID, no visit for that customer in the selected window, or only excluded direct/unknown-source visits. Consent restrictions, tracking blockers, cross-device browsing, and incomplete Shopify history can therefore lower attributed totals.

How dates, windows, and models are applied

  1. The date picker creates full-day boundaries in the store timezone and sends them as timestamps.
  2. An order qualifies when its Shopify processed_at is between those timestamps, inclusively.
  3. For each qualifying order, the report looks back by the selected window for visits belonging to the same customer. A visit before the report's start can receive credit when it is still inside an in-range order's attribution window; a visit after the order cannot.
  4. First Touch assigns the order to the earliest eligible, non-direct visit in the window. Last Touch assigns it to the latest.
  5. Linear gives every eligible visit an equal share. It weights visits rather than distinct source/UTM values: repeated eligible visits with the same value receive multiple shares, which are then combined in that row.

Caution: The calculation does not filter canceled orders, test orders, financial statuses, or records excluded by store prefilters. It also does not use the requested display currency for conversion. The UI formats current_total_price using the store-context currency symbol, so stores with orders recorded in multiple currencies must not treat the displayed sum as converted revenue. Confirm the underlying order currencies before making a revenue decision.

Check a row against Shopify data

  1. Match the report's store, time period, grouping, platform, window, and model. Remember that store-wide prefilters do not affect this report.
  2. Export CSV if the value is not on the current page; the export preserves the active search and sorting but removes pagination.
  3. In Shopify, identify orders processed in the selected period and compare their current total and customer ID.
  4. For each order, inspect Customer Visit timestamps and source/UTM values from the order's processed time backward through the selected window. Remove direct and unknown-source visits, then apply the selected model.
  5. Group the resulting full or fractional credit using the exact stored value. Keep blank values in No value and do not merge values that differ by case or spelling.

Columns and calculations

Column Definition
Param The exact selected source/UTM value. Blank values display as No value.
Revenue Sum of Shopify current_total_price × visit credit. First/Last Touch credit is 1 for the selected visit. Linear credit is 1 / eligible visits for the order. Revenue is rounded to two decimal places by the query.
AOV Average full current_total_price across the eligible visit/order records in the row, rounded to two decimals. For First/Last Touch there is one selected visit per order, so this equals Revenue / Orders. Under Linear it is a visit-weighted average of full order totals and can differ from Revenue / fractional Orders.
Orders Sum of visit credit. This is a whole-order count under First/Last Touch and can be fractional under Linear.
New Customers Weighted order credit for orders that are the customer's earliest Shopify order in available store history. Despite the label, this is not a distinct-customer count.
Returning Customers Orders − New Customers. Despite the label, this is returning-order credit, not a distinct-customer count.

New Customers + Returning Customers = Orders for a row, subject to two-decimal display. A customer can contribute returning-order credit more than once if multiple qualifying repeat orders are in the period.

Worked attribution example

Suppose one customer has these eligible visits and orders under a seven-day window:

  • Before the first $100 order: one visit tagged UTM SOURCE A.
  • Before a later $300 order: three eligible visits tagged UTM SOURCE A, UTM SOURCE B, and UTM SOURCE C in chronological order.

The first order is the customer's earliest order.

Model Result
First Touch A receives both orders: $400 Revenue, 2 Orders, 1 New Customers, 1 Returning Customers, and $200 AOV.
Last Touch A receives the $100 first order; C receives the $300 repeat order. Each row has 1 Order, and its AOV is the full value of its assigned order.
Linear A receives $100 + one third of $300 = $200 revenue and 1.33 orders. B and C each receive $100 revenue and 0.33 orders. A's AOV is $200—the average of the full $100 and $300 order values—not $200 / 1.33.

Use First Touch to ask which eligible visit opened the tracked journey, Last Touch to ask which eligible visit was closest to purchase, and Linear to acknowledge every tracked visit equally. None of these proves incrementality.

Resolve missing or different results

A campaign or source is missing

  • Confirm the link retained its UTM query parameters through redirects and that Shopify captured a Customer Visit.
  • Check for a customer ID match and a visit timestamp inside the order-relative window—not merely inside the report dates.
  • Look for the value under No value, another capitalization/spelling variant, or a different grouping field.
  • Set Platform to All if the Shopify source is not exactly Facebook, Google, or TikTok.
  • Direct and unknown-source visits are intentionally excluded. Orders with only those visits are omitted rather than shown as unattributed.

Totals do not match another report

  • Attribution Overview All Sales includes Shopify sales even when no eligible visit exists; UTM Explorer requires a customer-matched, non-direct visit inside the selected window.
  • UTM Explorer uses Shopify Customer Visits and Shopify current order totals. Ad-platform views use platform identity, conversion windows, modeled conversions, and revenue definitions, so their totals need not match.
  • Profit & Loss reports can apply prefilters, currency conversion, refund profiles, and different sales formulas. UTM Explorer does not share that calculation path.
  • Match order processed dates, store-timezone boundaries, source, model, and window before comparing. Under Linear, compare fractional revenue and order credit rather than expecting every row's AOV to equal Revenue / Orders.

Data is recent or changed

Shopify order updates can change current_total_price, and visit/order records are read from their current imported versions. If a recent visit or refund is absent, verify the order in Shopify and reload the report after the source import completes.

Next actions

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.

Still need help? Contact Us Contact Us