← Back to KPIs
Time to Close
Also known as: Closing Time, Sales Cycle Duration
Measures the average duration from the initiation of a property inquiry to the final closing of the sale. It reflects the efficiency of the sales process in converting inquiries into closed deals.
Business Use Case
Executives use this KPI to identify bottlenecks in the sales process and implement strategies to reduce the time to close, thereby increasing overall sales efficiency.
Business Criticality
High
Journey / Navigation Area
Generic
Owning Function
Data Architecture Team
Scope
Session
Formula
(Sum of Time from Inquiry to Close for All Transactions) / (Number of Closed Transactions)Calculation Notes
1️⃣ Exclude canceled transactions. 2️⃣ Exclude withdrawn transactions. 3️⃣ Account for timezone differences. 4️⃣ Ensure consistent date formats.
Technical Details
Measure Typeaverage
Aggregation WindowTime based - Daily
Events
| Platform | Event |
|---|---|
| Google Analytics 4 | time_to_close |
| Adobe | time_to_close |
Data Mappings
W3 Data Layer
{
"event": {
"name": "Time to Close",
"label": "Time to Close",
"action": "Close",
"category": "User Engagement"
}
}GA4 Data Layer
{
"event": "time_to_close",
"event_params": {
"label": "Time to Close",
"action": "Close",
"category": "User Engagement"
}
}Adobe Client Data Layer
{
"event": "time_to_close",
"eventInfo": {
"label": "Time to Close",
"action": "Close",
"category": "User Engagement"
}
}XDM Mapping
{
"_experience": {
"analytics": {
"event1": {
"name": "Time to Close",
"label": "Time to Close",
"action": "Close",
"category": "User Engagement"
}
}
}
}SQL Queries
Google Analytics 4 (BigQuery)
-- ==========================================
-- 1. GOOGLE BIGQUERY SQL (GA4 Export)
-- ==========================================
SELECT user_id, TIMESTAMP_DIFF(CLOSE_TIMESTAMP, OPEN_TIMESTAMP, SECOND) AS time_to_close
FROM (
SELECT user_id,
MAX(CASE WHEN event_name = 'open_event' THEN event_timestamp END) AS OPEN_TIMESTAMP,
MAX(CASE WHEN event_name = 'close_event' THEN event_timestamp END) AS CLOSE_TIMESTAMP
FROM `your-project.analytics_123456789.events_*`,
UNNEST(event_params) AS params
WHERE event_name IN ('open_event', 'close_event')
GROUP BY user_id
)
WHERE OPEN_TIMESTAMP IS NOT NULL AND CLOSE_TIMESTAMP IS NOT NULL;Adobe Experience Platform (AEP Query Service)
-- ==========================================
-- 2. ADOBE AEP QUERY SERVICE SQL (XDM Dataset)
-- ==========================================
SELECT userID, DATEDIFF(SECOND, OPEN_TIMESTAMP, CLOSE_TIMESTAMP) AS time_to_close
FROM (
SELECT userID,
MAX(CASE WHEN eventType = 'open_event' THEN timestamp END) AS OPEN_TIMESTAMP,
MAX(CASE WHEN eventType = 'close_event' THEN timestamp END) AS CLOSE_TIMESTAMP
FROM xdm_dataset
WHERE eventType IN ('open_event', 'close_event')
GROUP BY userID
)
WHERE OPEN_TIMESTAMP IS NOT NULL AND CLOSE_TIMESTAMP IS NOT NULL;Source Data
CRM
Dependencies
[ "Inquiry Initiation Event", "Sale Closing Event" ]
Report Attributes
Region Property Type Sales Agent
Recommended Reporting Views
Views
Sales Performance DashboardConversion Metrics Dashboard
Segment Eligibility
true
Governance
Data Sensitivityinternal
Governance
Created bydevyendarm
Created on8/19/2026
Last modified bydevyendarm
StatusPUBLISHED
GitHub
View File on GitHub
catalog/kpis/time-to-close.yml