← Back to KPIs

Time to Close

Also known as: Closing Time, Sales Cycle Duration

ConversionkpiReal Estate Tech

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

PlatformEvent
Google Analytics 4time_to_close
Adobetime_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 GitHubcatalog/kpis/time-to-close.yml

Community Discussion