Cost Per Ticket (CPT)¶
Definition¶
Cost Per Ticket (CPT) measures the average cost incurred by a business to resolve a single customer support ticket. It reflects the efficiency of support operations and resource allocation.
Description¶
Cost Per Ticket (CPT) tracks the average cost of handling a support inquiry, combining labor, tooling, and overhead into a single operational efficiency benchmark.
The relevance and interpretation of this metric shift depending on the model or product:
- In SaaS, it reflects volume-to-staffing balance and automation ROI
- In retail/eComm, it measures support handling during peak campaigns or post-sale
- In global CX, it helps standardize service cost models across geos
A low CPT with high resolution quality = service excellence. A rising CPT suggests overhead drag or process complexity. Segment by inquiry type, product area, or support channel to surface cost-saving opportunities.
Cost Per Ticket informs:
- Strategic decisions, like support structure (in-house vs. outsourced) or tooling needs
- Tactical actions, such as retraining or optimizing underperforming flows
- Operational improvements, including AI/FAQ use and staffing planning
- Cross-functional alignment, by linking support, ops, and CX leaders around sustainable service delivery
Key Drivers¶
These are the main factors that directly impact the metric. Understanding these lets you know what levers you can pull to improve the outcome
- Ticket Volume Drivers (UX Gaps, Bugs, Billing Confusion): Preventable tickets inflate cost. The fewer tickets per user, the lower your baseline.
- Channel Choice (Live Chat vs. Email vs. Phone): Some channels are more expensive than others — real-time methods cost more per interaction.
- Agent Productivity and Resolution Time: Efficient, empowered agents resolve more tickets per hour — improving cost per ticket.
Improvement Tactics & Quick Wins¶
Actionable ideas to optimize this KPI, from fast, low-effort wins to strategic initiatives that drive measurable impact.
- If cost per ticket is high, identify and eliminate top sources of unnecessary volume (e.g., unclear billing, missing help docs).
- Add routing rules to prioritize async channels for low-complexity issues, like email or help desk forms.
- Run time audits across ticket categories, identifying cases taking longer than expected and why.
- Refine agent enablement (macros, templates, knowledge base access) to speed up first response and resolution.
- Partner with product to surface contextual help and inline education, preventing “how do I do this?” tickets entirely.
-
Required Datapoints to calculate the metric
- Total Support Costs: All expenses related to running customer support for a specific period.
- Total Tickets Resolved: The number of support tickets closed during the same period.
-
Example to show how the metric is derived
A SaaS company calculates the following for Q1:
- Total Support Costs: $50,000
- Total Tickets Resolved: 2,500
- Cost Per Ticket = $50,000 / 2,500 = $20 per ticket
Formula¶
Formula
Data Model Definition¶
How this KPI is structured in Cube.js, including its key measures, dimensions, and calculation logic for consistent reporting.
cube(`SupportCosts`, {
sql: `SELECT * FROM support_costs`,
measures: {
totalSupportCosts: {
sql: `total_support_costs`,
type: `sum`,
title: `Total Support Costs`,
description: `All expenses related to running customer support for a specific period.`
}
},
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
},
createdAt: {
sql: `created_at`,
type: `time`,
title: `Created At`,
description: `The time when the support cost record was created.`
}
}
})
cube(`TicketsResolved`, {
sql: `SELECT * FROM tickets_resolved`,
measures: {
totalTicketsResolved: {
sql: `total_tickets_resolved`,
type: `sum`,
title: `Total Tickets Resolved`,
description: `The number of support tickets closed during the same period.`
}
},
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
},
resolvedAt: {
sql: `resolved_at`,
type: `time`,
title: `Resolved At`,
description: `The time when the ticket was resolved.`
}
}
})
cube(`CostPerTicket`, {
sql: `SELECT * FROM cost_per_ticket`,
measures: {
costPerTicket: {
sql: `${SupportCosts.totalSupportCosts} / NULLIF(${TicketsResolved.totalTicketsResolved}, 0)`,
type: `number`,
title: `Cost Per Ticket`,
description: `Measures the average cost incurred by a business to resolve a single customer support ticket.`
}
},
joins: {
SupportCosts: {
relationship: `belongsTo`,
sql: `${CUBE}.support_cost_id = ${SupportCosts.id}`
},
TicketsResolved: {
relationship: `belongsTo`,
sql: `${CUBE}.ticket_id = ${TicketsResolved.id}`
}
},
dimensions: {
id: {
sql: `id`,
type: `number`,
primaryKey: true
},
calculationDate: {
sql: `calculation_date`,
type: `time`,
title: `Calculation Date`,
description: `The date when the cost per ticket was calculated.`
}
}
})
Note: This is a reference implementation and should be used as a starting point. You’ll need to adapt it to match your own data model and schema
Positive & Negative Influences¶
-
Negative influences
Factors that drive the metric in an undesirable direction, often signaling risk or decline.
- Ticket Volume Drivers: An increase in UX Gaps, Bugs, and Billing Confusion leads to a higher number of preventable tickets, which inflates the Cost Per Ticket by increasing the workload and resource allocation needed to resolve these issues.
- Channel Choice: Opting for more expensive channels like Phone or Live Chat over Email increases the Cost Per Ticket due to higher interaction costs associated with real-time communication methods.
- Agent Productivity: Low agent productivity results in fewer tickets being resolved per hour, thereby increasing the Cost Per Ticket as more resources are required to handle the same volume of tickets.
- Resolution Time: Longer resolution times per ticket increase the Cost Per Ticket as they require more agent hours and resources to resolve each issue.
- Training Deficiencies: Insufficient training leads to less efficient ticket handling, increasing the Cost Per Ticket due to prolonged resolution times and potential escalations.
-
Positive influences
Factors that push the metric in a favorable direction, supporting growth or improvement.
- Agent Productivity: High agent productivity allows more tickets to be resolved per hour, reducing the Cost Per Ticket by optimizing resource use and minimizing time spent per ticket.
- Resolution Time: Shorter resolution times decrease the Cost Per Ticket by reducing the amount of time and resources needed to resolve each ticket.
- Channel Choice: Utilizing cost-effective channels like Email over Phone or Live Chat reduces the Cost Per Ticket by lowering the interaction costs.
- Self-Service Options: Implementing effective self-service options reduces the number of tickets that require agent intervention, thereby lowering the Cost Per Ticket by decreasing overall ticket volume.
- Automation: Automating repetitive tasks and processes reduces the need for manual intervention, decreasing the Cost Per Ticket by improving efficiency and reducing agent workload.
Involved Roles & Activities¶
-
Involved Roles
These roles are typically responsible for implementing or monitoring this KPI:
-
Activities
Common initiatives or actions associated with this KPI:
Customer Support
Support Efficiency Programs
Case Deflection Tactics
Funnel Stage & Type¶
-
AAARRR Funnel Stage
This KPI is associated with the following stages in the AAARRR (Pirate Metrics) funnel:
-
Type
This KPI is classified as a Lagging Indicator. It reflects the results of past actions or behaviors and is used to validate performance or assess the impact of previous strategies.
Supporting Leading & Lagging Metrics¶
-
Leading
These leading indicators influence this KPI and act as early signals that forecast future changes in this KPI.
- Ticket Volume: Ticket Volume is a primary input for Cost Per Ticket, as more tickets increase total support cost (unless offset by efficiency), directly influencing the average cost per ticket.
- First Response Time: First Response Time affects Cost Per Ticket by shaping agent workload and customer satisfaction—faster responses can lead to quicker resolutions and potentially lower costs.
- Escalation Rate: A higher Escalation Rate suggests more complex tickets requiring specialized staff, usually increasing overall support costs and driving up the Cost Per Ticket.
- Activation Rate: Activation Rate reflects how quickly users reach meaningful engagement; a higher rate may correlate with more support inquiries or efficient onboarding, both impacting Cost Per Ticket.
- Customer Health Score: Customer Health Score anticipates potential support needs; at-risk customers may generate more or costlier tickets, influencing future Cost Per Ticket trends.
-
Lagging
These lagging indicators confirm, quantify, or amplify this KPI and help explain the broader business impact on this KPI after the fact.
- Cost per Resolution: Cost per Resolution is closely allied to Cost Per Ticket, often serving as a more granular metric. Changes in CPR typically mirror or amplify Cost Per Ticket movements, helping to explain fluctuations at the ticket-type or segment level.
- Customer Acquisition Cost: Customer Acquisition Cost impacts resource allocation. High CAC may result in increased pressure on support to be efficient, and CPT trends can inform future CAC planning.
- Average Resolution Time: Longer Average Resolution Time usually increases support costs, thus raising Cost Per Ticket. This KPI helps quantify operational bottlenecks that drive CPT up.
- Escalation Rate: (Appears in both, but as a lagging metric it confirms cost impact) High escalation rates confirm that a significant portion of tickets are complex, leading to higher average support costs per ticket.
- Customer Support Tickets: Analyzing the volume and category of Customer Support Tickets post-period helps confirm the drivers of Cost Per Ticket, explaining cost spikes related to ticket mix or volume.