Order Conversion Rate (Visitor)
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) × 100Calculation 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
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | purchase |
| Adobe | purchase |
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:
Metrics:
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
Segment Eligibility
True
Governance
Governance
GitHub
catalog/kpis/order-conversion-rate-visitor.yml