← Back to KPIs

Order Conversion Rate (Visitor)

ConversionRetail, E-commerce

Order conversion rate (visitor) measures the percentage of unique visitors who place at least one order during the selected reporting period. It is a core e-commerce KPI for evaluating how effectively traffic is converted into purchasing customers at the visitor level rather than the session level.

Business Use Case

An e-commerce growth team monitors visitor-level order conversion rate by device, channel, and landing page. If mobile paid social traffic shows high visitor volume but low conversion, the team can investigate checkout friction, page speed, or audience quality and prioritize CRO tests to improve purchasing efficiency.

Business Criticality

High

Journey / Navigation Area

Digital Analytics

Scope

User

Formula

(Unique Visitors with >=1 Order / Unique Visitors) × 100

Calculation Notes

1️⃣ Use a consistent visitor identifier (e.g., GA4 user_pseudo_id, Adobe ECID). 2️⃣ Count each visitor once in the numerator, regardless of multiple orders. 3️⃣ Exclude internal traffic, bots, QA environments, and invalid/refunded test orders. 4️⃣ Define the denominator as unique visitors with at least one qualifying session. 5️⃣ Cross-device identity stitching may significantly impact results.

Technical Details

Measure TypePercentage
Aggregation WindowUser, Daily, Yearly, Monthly, Quarterly, Weekly

Events

PlatformEvent
Google Analytics 4purchase
Adobepurchase

Data Mappings

W3 Data Layer
{
  "event": "purchase",
  "timestamp": "2026-05-22T00:00:00Z",
  "user": {
    "visitorId": "visitor_12345",
    "isLoggedIn": false
  },
  "page": {
    "url": "https://www.example.com/checkout/confirmation"
  },
  "commerce": {
    "order": {
      "orderId": "ORD-100001",
      "currency": "USD",
      "total": 129.99
    },
    "conversion": {
      "type": "order",
      "visitorConversion": true
    }
  }
}
GA4 Data Layer
{
  "event": "purchase",
  "ecommerce": {
    "transaction_id": "ORD-100001",
    "currency": "USD",
    "value": 129.99,
    "items": [
      {
        "item_id": "SKU-001",
        "item_name": "Example Product",
        "price": 129.99,
        "quantity": 1
      }
    ]
  },
  "user_properties": {
    "visitor_id": "visitor_12345"
  }
}
Adobe Client Data Layer
{
  "event": "purchase",
  "data": {
    "web": {
      "webPageDetails": {
        "URL": "https://www.example.com/checkout/confirmation"
      }
    },
    "identity": {
      "visitorId": "visitor_12345",
      "authenticatedState": "ambiguous"
    },
    "commerce": {
      "order": {
        "purchaseID": "ORD-100001",
        "priceTotal": 129.99,
        "currencyCode": "USD"
      },
      "kpi": {
        "orderConversionVisitor": true
      }
    }
  }
}
XDM Mapping
{
  "eventType": "commerce.purchases",
  "identityMap": {
    "ECID": [
      {
        "id": "visitor_12345",
        "primary": true
      }
    ]
  },
  "commerce": {
    "order": {
      "purchaseID": "ORD-100001",
      "priceTotal": 129.99,
      "currencyCode": "USD"
    }
  },
  "web": {
    "webPageDetails": {
      "URL": "https://www.example.com/checkout/confirmation"
    }
  },
  "_company": {
    "analytics": {
      "kpi": {
        "orderConversionVisitor": true
      }
    }
  }
}

SQL Queries

Google Analytics 4 (BigQuery)
WITH visitors AS ( SELECT user_pseudo_id AS visitor_id FROM `project.dataset.events_*`, UNNEST(event_params) AS params WHERE event_name = 'session_start' AND _TABLE_SUFFIX BETWEEN '20260501' AND '20260531' GROUP BY 1 ), purchasers AS ( SELECT user_pseudo_id AS visitor_id FROM `project.dataset.events_*`, UNNEST(event_params) AS params WHERE event_name = 'purchase' AND _TABLE_SUFFIX BETWEEN '20260501' AND '20260531' GROUP BY 1 ) SELECT COUNT(DISTINCT p.visitor_id) AS purchasing_visitors, COUNT(DISTINCT v.visitor_id) AS total_visitors, SAFE_MULTIPLY(SAFE_DIVIDE(COUNT(DISTINCT p.visitor_id), COUNT(DISTINCT v.visitor_id)), 100) AS order_conversion_rate_visitor FROM visitors v LEFT JOIN purchasers p ON v.visitor_id = p.visitor_id;
Adobe Experience Platform (AEP Query Service)
WITH visitors AS ( SELECT identityMap.ECID[0].id AS visitor_id FROM dataset.events WHERE eventType = 'session.start' AND timestamp BETWEEN '2026-05-01' AND '2026-05-31' GROUP BY 1 ), purchasers AS ( SELECT identityMap.ECID[0].id AS visitor_id FROM dataset.events WHERE eventType = 'commerce.purchases' AND timestamp BETWEEN '2026-05-01' AND '2026-05-31' GROUP BY 1 ) SELECT COUNT(DISTINCT p.visitor_id) AS purchasing_visitors, COUNT(DISTINCT v.visitor_id) AS total_visitors, (COUNT(DISTINCT p.visitor_id)::float / NULLIF(COUNT(DISTINCT v.visitor_id), 0)) * 100 AS order_conversion_rate_visitor FROM visitors v LEFT JOIN purchasers p ON v.visitor_id = p.visitor_id;

Source Data

Digital Analytics, Business Intelligence, E-commerce Platform

Dependencies

Prerequisite: List the dependencies required for this KPI

Events:

purchase

Metrics:

unique_visitorvisitor_idorder_id

Report Attributes

Dimensions: Date, Device Category, Default Channel Group, Source/Medium, Campaign, Landing Page, Country, New vs Returning Visitor Metrics: Unique Visitors, Purchasing Visitors, Orders, Revenue, Order Conversion Rate (Visitor)

Recommended Reporting Views

Views
Executive KPI DashboardE-commerce Performance DashboardConversion Rate Optimization DashboardTurChannel Performance Dashboard

Segment Eligibility

True

Governance

Data SensitivityInternal

Governance

Created byswapnamagantius
Created on5/5/2026
Last modified bydevyendarm
Last modified on5/30/2026
StatusPUBLISHED

GitHub

View related Pull Requestcatalog/kpis/order-conversion-rate-visitor.yml

Community Discussion