Revenue per ticket per client as a proxy for seat-level pricing. Identifies underpriced accounts, outliers, and pricing inconsistencies across your client portfolio. Generated by AI via Proxuma Power BI MCP server.
Revenue per ticket per client as a proxy for seat-level pricing. Identifies underpriced accounts, outliers, and pricing inconsistencies across your client portfolio. Generated by AI via Proxuma Power BI MCP server.
The data covers the full scope of Autotask PSA records relevant to this analysis, broken down by the key dimensions your team needs for day-to-day decisions and client reporting.
Who should use this: Account managers, MSP owners, and service delivery leads
How often: Monthly for client reviews, quarterly for QBRs, on-demand when client signals change
Revenue per ticket per client as a proxy for seat-level pricing. Identifies underpriced accounts, outliers, and pricing inconsistencies across your client portfolio. Generated by AI via Proxuma Power BI MCP server.
All clients ranked by revenue per ticket, descending. Client H excluded from main ranking due to outlier status (14 tickets only).
| Client | Revenue | Tickets | Hours | Hours/Ticket |
|---|---|---|---|---|
| Craig-Huynh | 2324617 | 5458 | 3575 | 0.655 |
| Lewis LLC | 2212915 | 1758 | 1206 | 0.686 |
| Little Group | 1431177 | 5290 | 3050 | 0.577 |
| Martin Group | 637092 | 2775 | 2046 | 0.737 |
| Lopez-Reyes | 589694 | 1317 | 670 | 0.509 |
EVALUATE TOPN(15, ADDCOLUMNS(VALUES(BI_Autotask_Companies[company_name]), "TicketCount", [Tickets - Count - Created], "BillingRevenue", CALCULATE(SUM(BI_Autotask_Billing_Items[total_amount])), "HoursWorked", [Tickets - Hours Worked], "CostPerTicket", DIVIDE([Tickets - Hours Worked], [Tickets - Count - Created])), [BillingRevenue], DESC)
Tickets vs hours per client. High ticket counts with low hours may indicate quick-fix work. Low ticket counts with high hours suggest complex or project-based engagements.
EVALUATE
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Tickets,
BI_Autotask_Tickets[company_name]
),
"TicketCount", CALCULATE(
COUNT(BI_Autotask_Tickets[ticket_id])),
"TotalHours", CALCULATE(
SUM(BI_Autotask_TimeEntries[hours_worked])),
"HoursPerTicket", DIVIDE(
CALCULATE(SUM(BI_Autotask_TimeEntries[hours_worked])),
CALCULATE(COUNT(BI_Autotask_Tickets[ticket_id])),
0)
)
ORDER BY [TicketCount] DESC
Which clients generate the most revenue relative to the effort required? Revenue per hour worked reveals true service profitability.
| # | Client | Revenue | Hours | Rev / Hour | Efficiency |
|---|---|---|---|---|---|
| 1 | Client E | $589,694 | 695 | $848.48 | High |
| 2 | Client B | $2,212,915 | 2,801 | $790.04 | High |
| 3 | Client A | $2,324,617 | 4,370 | $531.95 | High |
| 4 | Client I | $328,165 | 782 | $419.65 | Medium |
| 5 | Client C | $1,431,177 | 3,791 | $377.57 | Medium |
| 6 | Client G | $469,660 | 1,312 | $358.13 | Medium |
| 7 | Client J | $321,669 | 962 | $334.37 | Medium |
| 8 | Client L | $286,926 | 865 | $331.71 | Medium |
| 9 | Client K | $320,832 | 1,006 | $318.92 | Medium |
| 10 | Client D | $637,092 | 2,217 | $287.35 | Low |
| 11 | Client F | $476,622 | 1,697 | $280.86 | Low |
Two clients fall outside the normal distribution: Client H at the top and Client L at the bottom
EVALUATE
VAR _AllClients =
ADDCOLUMNS(
SUMMARIZE(
BI_Autotask_Tickets,
BI_Autotask_Tickets[company_name]
),
"RevPerTicket", DIVIDE(
CALCULATE(SUM(BI_Autotask_Tickets[contract_service_revenue])),
CALCULATE(COUNT(BI_Autotask_Tickets[ticket_id])),
0),
"TicketCount", CALCULATE(
COUNT(BI_Autotask_Tickets[ticket_id]))
)
VAR _AvgRevPerTicket =
AVERAGEX(_AllClients, [RevPerTicket])
VAR _StdDev =
STDEVX.P(_AllClients, [RevPerTicket])
RETURN
FILTER(
_AllClients,
ABS([RevPerTicket] - _AvgRevPerTicket) > 2 * _StdDev
)
ORDER BY [RevPerTicket] DESC
Plotting total revenue against total hours worked per client. The ideal position is top-left: high revenue, low effort.
Client B sits in the ideal quadrant: $2.2M revenue with 2,801 hours. That is $790 per hour of effort. Client A generates even more total revenue ($2.3M) but requires significantly more hours (4,370), pulling its per-hour rate down to $532. Both are profitable, but Client A consumes more service capacity.
Client D and Client F are in the worst quadrant: moderate revenue with high effort. Client D generates $637K on 2,217 hours ($287/hr) and Client F brings in $477K on 1,697 hours ($281/hr). These clients consume disproportionate resources relative to what they pay.
With 2,180 tickets and only $286,926 in revenue, Client L generates the lowest revenue per ticket in the portfolio. At 9.6x less than Client B, their pricing has either not been updated to match service demand, or the contract was set too low from the start. This account needs a contract review before the next renewal.
The gap between $1,259 (Client B) and $132 (Client L) is not explained by client size or industry alone. A 2-3x range is normal for different service tiers. A 9.6x range suggests that contracts were negotiated ad-hoc over time without a standard pricing model. Standardizing per-seat rates would reduce this variance.
Client B generates more revenue per ticket than any other account in the standard portfolio while maintaining a reasonable hours-per-ticket ratio (1.59 hours). This client profile represents what good pricing looks like: predictable revenue with manageable service load. Use their contract structure as a template for future deals.
4 priorities based on the data above
At $132 per ticket across 2,180 interactions, Client L consumes significant service capacity at a rate that does not reflect the cost of delivery. Pull their contract, check the per-seat rate, and compare it against your standard pricing. If the rate has not changed in over a year, propose an adjustment at the next QBR. A 30% increase would bring them closer to $170 per ticket, still well below average.
Client K at $178 per ticket with 1,803 tickets and 1,006 hours has a ticket-to-hours ratio that suggests they may have added users without updating the contract. Verify the current seat count in Autotask against what the contract covers. If seats have grown, the per-seat rate should be renegotiated.
Client H's 14 tickets and $416,450 in revenue clearly indicate a different engagement model. Keeping them in the same rev-per-ticket analysis distorts the averages. Move this client to a separate reporting category so that portfolio-level benchmarks stay meaningful.
Client B demonstrates that higher per-ticket revenue does not require fewer tickets or less service. With 1,758 tickets, they still use your services actively but pay proportionally. Model your new client contracts on this structure: a per-seat rate that generates $400+ per ticket at the expected ticket volume.
Revenue per ticket divides a client's total contract revenue by their total ticket count. It serves as a proxy for how much you earn per service interaction. A low number means you are delivering a lot of service relative to what you charge. A high number means the pricing is healthy relative to the workload.
Client H has only 14 tickets but $416,450 in revenue, resulting in a $29,746 per-ticket figure. This is not a per-seat MSP contract. It is almost certainly project work or a retainer. Including them in the main chart would compress the scale and make other clients harder to compare.
There is no universal benchmark because it depends on your per-seat price, client size, and service scope. As a rule of thumb, anything above $300 per ticket for a standard managed services agreement is healthy. Below $200 usually signals that the client has outgrown their contract or that the per-seat price was set too low.
Yes. Connect Proxuma Power BI to your Autotask PSA, add an AI tool (Claude, ChatGPT, or Copilot) via MCP, and ask the same question. The AI writes the DAX queries, runs them against your real data, and produces a report like this in under fifteen minutes.
This analysis uses total contract service revenue from Autotask, which covers both recurring and one-time charges. For a more precise view, you could filter the DAX query to include only recurring contract revenue and exclude project billing. The outlier analysis in section 5 already flags the most obvious non-standard contract (Client H).
Connect Proxuma Power BI to your PSA, RMM, and M365 environment, use an MCP-compatible AI to ask questions, and generate custom reports - in minutes, not days.
See more reports Get started