← Back to KPIs

Item revenue

Also known as: Product Revenue, Sales per Item, Item-level Revenue, Product Sales

MonetizationkpiecommerceproductrevenueE-commerce: Merchandising & Product PerformanceE-commerce

Item revenue is the total revenue earned from purchased products, calculated at line-item level as unit price multiplied by quantity for every item in completed orders, excluding tax and shipping. It shows how much each product, SKU, brand or category contributes to sales, so merchandising and finance teams can rank assortment performance independently of order-level totals.

Business Use Case

1️⃣ The merchandising team reviews weekly item revenue by SKU and category and, when a top-20 product drops more than 15% week over week, checks stock, pricing and on-site placement before the next promotional cycle. 2️⃣ Inventory planners use monthly item revenue per SKU to set replenishment quantities and flag long-tail items with negligible revenue for markdown or delisting. 3️⃣ The marketing team compares item revenue for promoted products during a campaign against the prior period to decide whether to extend, rebudget or stop the promotion. 4️⃣ Finance reconciles monthly item revenue with order revenue and the ERP sales ledger, investigating any gap above 2% as a tracking or discount-allocation issue.

Business Criticality

High

Journey / Navigation Area

Monetization

Owning Function

Merchandising

Scope

Event

Formula

SUM(Item Price × Item Quantity) across all items in purchase events for the period

Calculation Notes

1️⃣ Computed per line item from the purchase event items array as price × quantity, where price is the unit price after item-level discounts (coupon / promotion reductions already applied to the item). 2️⃣ Excludes tax, shipping and order-level fees; order-level discounts not allocated to items are not deducted, so the sum of item revenue can differ slightly from order revenue. 3️⃣ Returns and refunds are not netted inside this KPI; they are captured by the refund event and reported alongside it as item refund amount (net item revenue = item revenue − item refund amount). 4️⃣ Deduplicate on transaction_id so a purchase event re-fired on a thank-you page reload is counted once; exclude test orders and zero-value internal transactions. 5️⃣ Report in a single currency: use the reporting-currency field (item_revenue_in_usd in GA4 export) or convert at the order-date exchange rate when stores sell in several currencies. 6️⃣ Attribute revenue to the event date of the purchase in the property time zone; late-arriving hits within the export's 72-hour window may restate the last three days.

Technical Details

Measure TypeCurrency
Aggregation WindowDaily, Weekly, Monthly, Quarterly

Events

PlatformEvent
Google Analytics 4purchase
Adobepurchase

Data Mappings

W3 Data Layer
{
  "transaction": {
    "transactionID": "T-100245",
    "total": {
      "basePrice": 129.97,
      "currency": "USD"
    },
    "item": [
      {
        "productInfo": {
          "productID": "SKU-12345",
          "productName": "Example Product"
        },
        "category": {
          "primaryCategory": "Apparel"
        },
        "quantity": 2,
        "price": {
          "basePrice": 49.99,
          "currency": "USD"
        }
      },
      {
        "productInfo": {
          "productID": "SKU-67890",
          "productName": "Example Accessory"
        },
        "category": {
          "primaryCategory": "Accessories"
        },
        "quantity": 1,
        "price": {
          "basePrice": 29.99,
          "currency": "USD"
        }
      }
    ]
  }
}
GA4 Data Layer
{
  "event": "purchase",
  "ecommerce": {
    "transaction_id": "T-100245",
    "value": 129.97,
    "currency": "USD",
    "tax": 10.4,
    "shipping": 5,
    "coupon": "SUMMER10",
    "items": [
      {
        "item_id": "SKU-12345",
        "item_name": "Example Product",
        "item_brand": "Example Brand",
        "item_category": "Apparel",
        "item_variant": "Blue / M",
        "price": 49.99,
        "discount": 5,
        "quantity": 2
      },
      {
        "item_id": "SKU-67890",
        "item_name": "Example Accessory",
        "item_brand": "Example Brand",
        "item_category": "Accessories",
        "price": 29.99,
        "quantity": 1
      }
    ]
  }
}
Adobe Client Data Layer
{
  "event": "purchase",
  "eventInfo": {
    "eventName": "purchase"
  },
  "transaction": {
    "purchaseID": "T-100245",
    "currencyCode": "USD",
    "total": 129.97
  },
  "product": [
    {
      "SKU": "SKU-12345",
      "name": "Example Product",
      "category": "Apparel",
      "quantity": 2,
      "priceTotal": 99.98
    },
    {
      "SKU": "SKU-67890",
      "name": "Example Accessory",
      "category": "Accessories",
      "quantity": 1,
      "priceTotal": 29.99
    }
  ]
}
XDM Mapping
{
  "eventType": "commerce.purchases",
  "commerce": {
    "purchases": {
      "value": 1
    },
    "order": {
      "purchaseID": "T-100245",
      "currencyCode": "USD",
      "priceTotal": 129.97
    }
  },
  "productListItems": [
    {
      "SKU": "SKU-12345",
      "name": "Example Product",
      "productCategories": [
        {
          "categoryID": "Apparel"
        }
      ],
      "quantity": 2,
      "priceTotal": 99.98,
      "currencyCode": "USD"
    },
    {
      "SKU": "SKU-67890",
      "name": "Example Accessory",
      "productCategories": [
        {
          "categoryID": "Accessories"
        }
      ],
      "quantity": 1,
      "priceTotal": 29.99,
      "currencyCode": "USD"
    }
  ]
}

SQL Queries

Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL
-- ==========================================
-- Item revenue per day and SKU from the GA4 export (purchase events, deduplicated by transaction_id)
WITH purchases AS (
  SELECT
    PARSE_DATE('%Y%m%d', event_date) AS event_date,
    ecommerce.transaction_id AS transaction_id,
    item.item_id,
    item.item_name,
    item.item_category,
    COALESCE(item.quantity, 0) AS quantity,
    COALESCE(item.item_revenue_in_usd, item.price_in_usd * item.quantity, 0) AS item_revenue_usd,
    ROW_NUMBER() OVER (
      PARTITION BY ecommerce.transaction_id, item.item_id, item.item_variant
      ORDER BY event_timestamp
    ) AS rn
  FROM `your-project.analytics_123456789.events_*`,
    UNNEST(items) AS item
  WHERE _TABLE_SUFFIX BETWEEN FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY))
                          AND FORMAT_DATE('%Y%m%d', DATE_SUB(CURRENT_DATE(), INTERVAL 1 DAY))
    AND event_name = 'purchase'
    AND ecommerce.transaction_id IS NOT NULL
    AND ecommerce.transaction_id != '(not set)'
)
SELECT
  event_date,
  item_id,
  ANY_VALUE(item_name) AS item_name,
  ANY_VALUE(item_category) AS item_category,
  SUM(quantity) AS items_purchased,
  ROUND(SUM(item_revenue_usd), 2) AS item_revenue_usd
FROM purchases
WHERE rn = 1
GROUP BY event_date, item_id
ORDER BY event_date, item_revenue_usd DESC;
Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL
-- ==========================================
-- Item revenue per day and SKU from the ExperienceEvent dataset (commerce.purchases, deduplicated by purchaseID)
WITH purchase_items AS (
  SELECT
    CAST(e.timestamp AS DATE) AS event_date,
    e.commerce.order.purchaseID AS purchase_id,
    e.timestamp AS event_ts,
    explode(e.productListItems) AS pli
  FROM analytics_experience_events e
  WHERE e.commerce.purchases.value = 1
    AND e.commerce.order.purchaseID IS NOT NULL
    AND e.timestamp >= date_sub(current_date(), 30)
    AND e.timestamp < current_date()
),
ranked AS (
  SELECT
    event_date,
    purchase_id,
    pli.SKU AS item_id,
    pli.name AS item_name,
    COALESCE(pli.quantity, 0) AS quantity,
    COALESCE(pli.priceTotal, 0) AS item_revenue,
    ROW_NUMBER() OVER (PARTITION BY purchase_id, pli.SKU ORDER BY event_ts) AS rn
  FROM purchase_items
)
SELECT
  event_date,
  item_id,
  MAX(item_name) AS item_name,
  SUM(quantity) AS items_purchased,
  ROUND(SUM(item_revenue), 2) AS item_revenue
FROM ranked
WHERE rn = 1
GROUP BY event_date, item_id
ORDER BY event_date, item_revenue DESC;

Source Data

Digital Analytics (GA4) + Adobe Analytics / AEP

Dependencies

Prerequisite: List the dependencies required for this KPI

Events:

purchase

Report Attributes

Item ID (SKU) Item Name Item Brand Item Category Item Variant Region Device Category Traffic Source / Medium

Recommended Reporting Views

Views
Sales Performance DashboardProduct Analysis DashboardMerchandising Performance Dashboard

Segment Eligibility

true

Governance

Data SensitivityInternal

Governance

Created bydevyendarm
Created on5/6/2026
Last modified bydevyendarm
Last modified on9/18/2026
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/kpis/item-revenue.yml

Community Discussion