← Back to Dimensions

Shipment Status

Also known as: Tracking Status, Delivery Status, Shipment Tracking Status, Carrier Status, shipment_status

OperationsdimensionE-commerce: Post-Purchase Logistics & FulfillmentE-commerce

Latest carrier milestone of one shipment: Label Created, In Transit, Out for Delivery, Delivered, Exception or Returned to Sender. Set per tracking number; Order Status covers the whole order.

Business Use Case

1️⃣ Customer Service: when a carrier's Exception share spikes, send proactive delay emails before WISMO contacts arrive. 2️⃣ Fulfillment Operations: review shipments stuck in Label Created over 48 hours daily and escalate missed pickups. 3️⃣ Product: split tracking views by status to see where customers check most and add ETA messaging there. 4️⃣ Finance: file weekly carrier claims for Returned to Sender and unresolved Exception shipments.

Business Criticality

High

Journey / Navigation Area

Generic

Owning Function

Customer Service

Scope

Event

Calculation Notes

1️⃣ Normalise carrier scan codes (UPS, FedEx, USPS, DHL) to the six governed values; unmapped codes go to Unknown and are reviewed weekly. 2️⃣ Latest status is the scan with the newest carrier event timestamp, not the newest webhook receipt, so late webhooks cannot overwrite it. 3️⃣ One value per tracking number: a split order carries several shipment statuses; the order-level roll-up belongs to Order Status. 4️⃣ On shipment tracking views, send the status shown at view time as shipment_status; current status comes from the OMS carrier feed. 5️⃣ Delivered and Returned to Sender are terminal; an Exception can move back to In Transit or Out for Delivery on a later scan. 6️⃣ A label with no carrier acceptance scan stays Label Created; aged pre-transit labels are flagged, never reclassified. 7️⃣ Return (reverse-logistics) shipments are excluded; they are reported through return and refund flows.

Technical Details

Data Typestring
Lookback WindowEvent, Daily, Weekly

Events

PlatformEvent
Google Analytics 4page_view
AdobepageView

Data Mappings

W3 Data Layer
{
  "page": {
    "pageInfo": {
      "pageName": "Shipment Tracking",
      "pageType": "order_tracking"
    }
  },
  "order": {
    "transactionID": "ORD-100293",
    "shipmentStatus": "Out for Delivery",
    "trackingNumber": "1Z999AA10123456784"
  }
}
GA4 Data Layer
{
  "event": "page_view",
  "page_type": "order_tracking",
  "transaction_id": "ORD-100293",
  "tracking_number": "1Z999AA10123456784",
  "shipment_status": "Out for Delivery"
}
Adobe Client Data Layer
{
  "event": "pageView",
  "page": {
    "pageType": "order_tracking"
  },
  "order": {
    "transactionId": "ORD-100293",
    "trackingNumber": "1Z999AA10123456784",
    "shipmentStatus": "Out for Delivery"
  }
}
XDM Mapping
{
  "commerce": {
    "order": {
      "purchaseID": "ORD-100293"
    }
  },
  "_tenant": {
    "shipmentStatus": "Out for Delivery",
    "trackingNumber": "1Z999AA10123456784"
  },
  "_experience": {
    "analytics": {
      "customDimensions": {
        "eVars": {
          "eVar12": "shipmentStatus"
        }
      }
    }
  }
}

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);

WITH
-- Carrier scans normalised to the governed status list (unmapped codes become Unknown); return shipments excluded
scans AS (
  SELECT
    e.tracking_number,
    e.carrier_event_ts,
    COALESCE(m.shipment_status, 'Unknown') AS shipment_status
  FROM `your-project.oms_backend.carrier_tracking_events` AS e
  LEFT JOIN `your-project.oms_backend.carrier_status_map` AS m
    ON m.carrier = e.carrier
   AND m.carrier_status_code = e.carrier_status_code
  WHERE DATE(e.carrier_event_ts) BETWEEN start_date AND end_date
    AND COALESCE(e.shipment_direction, '') != 'return'
),
-- One status per tracking number: terminal statuses win, otherwise the newest carrier event timestamp (not webhook receipt)
latest AS (
  SELECT tracking_number, shipment_status
  FROM scans
  WHERE TRUE
  QUALIFY ROW_NUMBER() OVER (
    PARTITION BY tracking_number
    ORDER BY IF(shipment_status IN ('Delivered', 'Returned to Sender'), 1, 0) DESC, carrier_event_ts DESC
  ) = 1
)
-- Shipment Status: the latest normalised status per tracking number
SELECT tracking_number, shipment_status
FROM latest;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
WITH
-- Relative reporting window: last 90 complete days
params AS (
  SELECT date_sub(current_date(), 90) AS start_date,
         date_sub(current_date(), 1) AS end_date
),
-- Carrier scans normalised to the governed status list (unmapped codes become Unknown); return shipments excluded
scans AS (
  SELECT
    e.tracking_number,
    e.carrier_event_ts,
    COALESCE(m.shipment_status, 'Unknown') AS shipment_status
  FROM oms_backend_carrier_tracking_events AS e
  LEFT JOIN oms_backend_carrier_status_map AS m
    ON m.carrier = e.carrier
   AND m.carrier_status_code = e.carrier_status_code
  CROSS JOIN params AS p
  WHERE CAST(e.carrier_event_ts AS DATE) BETWEEN p.start_date AND p.end_date
    AND COALESCE(e.shipment_direction, '') <> 'return'
),
-- One status per tracking number: terminal statuses win, otherwise the newest carrier event timestamp (not webhook receipt)
latest AS (
  SELECT tracking_number, shipment_status
  FROM (
    SELECT
      tracking_number,
      shipment_status,
      ROW_NUMBER() OVER (
        PARTITION BY tracking_number
        ORDER BY CASE WHEN shipment_status IN ('Delivered', 'Returned to Sender') THEN 1 ELSE 0 END DESC, carrier_event_ts DESC
      ) AS rn
    FROM scans
  ) AS ranked
  WHERE rn = 1
)
-- Shipment Status: the latest normalised status per tracking number
SELECT tracking_number, shipment_status
FROM latest;

Source Data

Digital Analytics (GA4 / Adobe Analytics) + Order Management (reconciliation)

Dependencies

Prerequisite: List the dependencies required for this Dimension

Events:

shipment-tracking-viewdelivery-confirmationdelivery-exception-occurrence

Report Attributes

carrier shipment_mode shipping_tier delivery_region fulfillment_method number_of_shipments

Segment Eligibility

true

Governance

Data SensitivityInternal

Derived Dimensions

Governance

Created bydevyendarm
Created on9/23/2026
Last modified bydevyendarm
Last modified on9/23/2026
Version1.0.0
Validation stateqa passed
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/dimensions/shipment-status.yml

Community Discussion