Order Status Checks
Also known as: Order Tracking Lookups, Order Status Lookups, Track Order Views, WISMO Lookups, Where Is My Order Checks
Count of self-service lookups in which a customer viewed the status of an existing order, via the account order page or the guest order-lookup form. Feeds the WISMO Rate KPI.
Business Use Case
1️⃣ Customer Service sees checks per order jump after a carrier delay and sends proactive delay emails to affected orders.,2️⃣ Customer Service splits checks by order status and adds tracking detail to the stage that draws most repeat lookups.,3️⃣ Product watches guest-lookup share rise and shortens the lookup form or adds a tracking link to the confirmation email.
Business Criticality
Medium
Journey / Navigation Area
Engagement
Owning Function
Customer Service
Scope
Event
Formula
Calculation Notes
1️⃣ One check = one transaction_id viewed in one session; refreshes and repeat views of the same order in that session are not counted again.,2️⃣ Counts successful lookups only: guest lookups that fail on order number or email match are excluded.,3️⃣ Account and guest lookups both count; checks started from a shipping email link count once the status page loads.,4️⃣ Carrier-site tracking views and contact-centre status enquiries are out of scope; they are not visible in site analytics.,5️⃣ Exclude internal and test traffic (traffic_type = 'internal') and lookups with no transaction_id.,6️⃣ Attribute each check to the date it occurred, not the order date; one order checked on three days counts three times.
Technical Details
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | page_view |
| Adobe | pageView |
Data Mappings
W3 Data Layer
{
"page": {
"pageInfo": {
"pageName": "Order Status",
"pageType": "order_status",
"destinationURL": "https://www.example.com/account/orders/status?transaction_id=1029384"
}
},
"user": [
{
"profile": [
{
"profileInfo": {
"loginStatus": "logged_in"
}
}
]
}
],
"event": [
{
"eventInfo": {
"eventName": "page_view",
"session_id": "{{session_id}}",
"transaction_id": "{{transaction_id}}",
"order_status": "{{order_status}}",
"login_status": "logged_in",
"lookup_success": true,
"entry_source": "account_menu",
"traffic_type": "external"
}
}
]
}GA4 Data Layer
{
"event": "page_view",
"page_title": "Order Status",
"page_location": "https://www.example.com/account/orders/status?transaction_id=1029384",
"page_path": "/account/orders/status",
"page_referrer": "https://www.example.com/account/orders",
"page_type": "order_status",
"session_id": "{{session_id}}",
"transaction_id": "{{transaction_id}}",
"order_status": "{{order_status}}",
"login_status": "logged_in",
"lookup_success": true,
"entry_source": "account_menu",
"traffic_type": "external"
}Adobe Client Data Layer
{
"event": "pageView",
"page": {
"pageName": "Order Status",
"pageType": "order_status"
},
"session_id": "{{session_id}}",
"transaction_id": "{{transaction_id}}",
"order_status": "{{order_status}}",
"login_status": "logged_in",
"lookup_success": true,
"entry_source": "account_menu",
"traffic_type": "external"
}XDM Mapping
{
"eventType": "web.webpagedetails.pageViews",
"web": {
"webPageDetails": {
"name": "Order Status",
"pageViews": {
"value": 1
}
}
},
"_experience": {
"analytics": {
"session_id": "{{session_id}}",
"transaction_id": "{{transaction_id}}",
"order_status": "{{order_status}}",
"login_status": "logged_in",
"lookup_success": true,
"entry_source": "account_menu",
"traffic_type": "external"
}
}
}SQL Queries
Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
DECLARE start_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 90 DAY);
DECLARE end_date DATE DEFAULT DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY);
-- Order status page views with their parameters pivoted to one row per event
WITH status_views AS (
SELECT
PARSE_DATE('%Y%m%d', event_date) AS check_date,
MAX(IF(ep.key = 'page_type', ep.value.string_value, NULL)) AS page_type,
MAX(IF(ep.key = 'session_id', COALESCE(ep.value.string_value, CAST(ep.value.int_value AS STRING)), NULL)) AS session_id,
MAX(IF(ep.key = 'transaction_id', COALESCE(ep.value.string_value, CAST(ep.value.int_value AS STRING)), NULL)) AS transaction_id,
MAX(IF(ep.key = 'lookup_success', COALESCE(ep.value.string_value, CAST(ep.value.int_value AS STRING)), NULL)) AS lookup_success,
MAX(IF(ep.key = 'traffic_type', ep.value.string_value, NULL)) AS traffic_type
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) AS ep
WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', start_date) AND FORMAT_DATE('%Y%m%d', end_date)
AND event_name = 'page_view'
GROUP BY event_date, user_pseudo_id, event_timestamp, event_bundle_sequence_id
)
-- One check per order per session, successful lookups only, external traffic with a transaction_id, attributed to the check date
SELECT
check_date,
COUNT(DISTINCT CONCAT(session_id, '|', transaction_id)) AS order_status_checks
FROM status_views
WHERE page_type = 'order_status'
AND lookup_success IN ('true', '1')
AND COALESCE(traffic_type, 'external') != 'internal'
AND transaction_id IS NOT NULL AND transaction_id != ''
AND session_id IS NOT NULL
GROUP BY check_date
ORDER BY check_date;Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Relative reporting window: the last 90 complete days
WITH params AS (
SELECT date_sub(current_date(), 90) AS start_date, date_sub(current_date(), 1) AS end_date
),
-- Order status page views with the lookup fields captured on each event
status_views AS (
SELECT
to_date(e.timestamp) AS check_date,
CAST(e._experience.analytics.session_id AS STRING) AS session_id,
CAST(e._experience.analytics.transaction_id AS STRING) AS transaction_id,
lower(CAST(e._experience.analytics.lookup_success AS STRING)) AS lookup_success,
e._experience.analytics.traffic_type AS traffic_type
FROM aep_web_events_dataset e
CROSS JOIN params p
WHERE e.eventType = 'web.webpagedetails.pageViews'
AND e.web.webPageDetails.name = 'Order Status'
AND to_date(e.timestamp) BETWEEN p.start_date AND p.end_date
)
-- One check per order per session, successful lookups only, external traffic with a transaction_id, attributed to the check date
SELECT
check_date,
COUNT(DISTINCT concat(session_id, '|', transaction_id)) AS order_status_checks
FROM status_views
WHERE lookup_success IN ('true', '1')
AND COALESCE(traffic_type, 'external') <> 'internal'
AND transaction_id IS NOT NULL AND transaction_id <> ''
AND session_id IS NOT NULL
GROUP BY check_date
ORDER BY check_date;Source Data
Digital Analytics (GA4)
Dependencies
Prerequisite: List the dependencies required for this Metric
Events:
Dimensions:
Report Attributes
order-status shipment-status carrier fulfillment-method device-category delivery-region
Recommended Reporting Views
Segment Eligibility
true
Governance
Derived KPIs
Governance
GitHub
catalog/metrics/order-status-checks.yml