Order Conversion Rate (Visit)
The percentage of visits or sessions that result in at least one completed order. This KPI measures how effectively site traffic converts into purchases and is a core indicator of ecommerce funnel performance.
Business Use Case
An ecommerce merchandising team monitors this KPI by device and landing page. If mobile visit conversion drops after a site release, the team investigates checkout UX, page speed, and payment errors, then prioritizes fixes to recover lost orders.
Business Criticality
High
Journey / Navigation Area
Digital Analytics
Scope
Session
Formula
(Sessions with at least one order / Total sessions) × 100Calculation Notes
1️⃣ Count each session once in the numerator, regardless of multiple orders. 2️⃣ Exclude internal traffic, bots, QA environments, and invalid/duplicate purchases. 3️⃣ Use only completed purchase events; exclude begin_checkout and add_payment_info. 4️⃣ Document the impact of consent mode or ad blockers on session counts. 5️⃣ For Adobe, use the visit container and deduplicate by order ID when possible.
Technical Details
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | purchase |
| Adobe | purchase |
Data Mappings
W3 Data Layer
{
"event": "purchase",
"event_name": "purchase",
"session_id": "1234567890",
"user_id": "anon_98765",
"timestamp": "2026-05-22T12:34:56Z",
"ecommerce": {
"transaction_id": "T12345",
"currency": "USD",
"value": 149.99,
"items": [
{
"item_id": "SKU-001",
"item_name": "Running Shoes",
"price": 149.99,
"quantity": 1
}
]
},
"kpi_context": {
"name": "order_conversion_rate_visit",
"scope": "session",
"conversion": true
}
}GA4 Data Layer
{
"event": "purchase",
"ecommerce": {
"transaction_id": "T12345",
"currency": "USD",
"value": 149.99,
"items": [
{
"item_id": "SKU-001",
"item_name": "Running Shoes",
"price": 149.99,
"quantity": 1
}
]
}
}Adobe Client Data Layer
{
"event": "purchase",
"xdm": {
"eventType": "commerce.purchases",
"commerce": {
"order": {
"purchaseID": "T12345",
"priceTotal": 149.99,
"currencyCode": "USD",
"purchases": {
"value": 1
}
}
},
"web": {
"webPageDetails": {
"URL": "https://www.example.com/checkout/confirmation"
}
},
"_experience": {
"analytics": {
"customDimensions": {
"eVars": {
"eVar1": "1234567890"
},
"props": {
"prop1": "checkout confirmation"
}
}
}
}
}
}XDM Mapping
{
"eventType": "commerce.purchases",
"commerce.purchases.value": 1,
"commerce.order.purchaseID": "T12345",
"commerce.order.priceTotal": 149.99,
"commerce.order.currencyCode": "USD",
"web.webPageDetails.URL": "https://www.example.com/checkout/confirmation",
"_experience.analytics.customDimensions.eVars.eVar1": "session_id"
}SQL Queries
Google Analytics 4 (BigQuery)
WITH session_orders AS (SELECT user_pseudo_id, user_id, CONCAT(user_pseudo_id, '-', CAST((SELECT value.int_value FROM UNNEST(event_params) WHERE key = 'ga_session_id') AS STRING)) AS session_key, MAX(CASE WHEN event_name = 'purchase' THEN 1 ELSE 0 END) AS has_order FROM `project.dataset.events_*` WHERE _TABLE_SUFFIX BETWEEN '20260501' AND '20260531' GROUP BY 1, 2, 3) SELECT SAFE_MULTIPLY(SAFE_DIVIDE(SUM(has_order), COUNT(session_key)), 100) AS order_conversion_rate_visit FROM session_orders;Adobe Experience Platform (AEP Query Service)
WITH session_orders AS (SELECT identityMap.ECID[0].id AS mcid, session_id, MAX(CASE WHEN eventType = 'commerce.purchases' THEN 1 ELSE 0 END) AS has_order FROM dataset.events WHERE timestamp BETWEEN '2026-05-01' AND '2026-05-31' GROUP BY mcid, session_id) SELECT (SUM(has_order)::FLOAT / COUNT(session_id)) * 100 AS order_conversion_rate_visit FROM session_orders;Source Data
Digital Analytics, Business Intelligence
Dependencies
Prerequisite: List the dependencies required for this KPI
Events:
Metrics:
Dimensions:
Report Attributes
Dimensions: Date, Device category, Source/Medium, Campaign, Landing page, Country, New vs Returning, Product category Metrics: Sessions, Orders, Order conversion rate (visit), Revenue, Average order value
Recommended Reporting Views
Segment Eligibility
True
Governance
Governance
GitHub
catalog/kpis/order-conversion-rate-visit.yml