“Top 10 Worst Performing Clients for MSPs”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Top 10 Worst Performing Clients for MSPs

Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel

Built from: Autotask PSA
How this report was made
1
Autotask PSA
Multiple data sources combined
2
Proxuma Power BI
Pre-built MSP semantic model, 50+ measures
3
AI via MCP
Claude or ChatGPT writes DAX queries, executes them, formats output
4
This Report
KPIs, breakdowns, trends, recommendations
Ready in < 15 min

Top 10 Worst Performing Clients for MSPs

Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel

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

Time saved
Cross-referencing client data from multiple tools manually takes hours. This report brings it together.
Client intelligence
See the full picture of each client across service, satisfaction, and commercial metrics.
Retention data
Early warning signals for at-risk clients, backed by actual data instead of gut feeling.
Report categoryClient Management
Data sourceAutotask PSA · Datto RMM · Datto Backup · Microsoft 365 · SmileBack · HubSpot · IT Glue
RefreshReal-time via Power BI
Generation timeUnder 15 minutes
AI requiredClaude, ChatGPT or Copilot
AudienceAccount managers, MSP owners
Where to find this in Proxuma
Power BI › Client Management › Top 10 Worst Performing Clients for MSPs
What you can measure in this report
Summary Metrics
Bottom 10 Clients by Effective Hourly Rate
Effective Rate Comparison — Bottom 10 vs Portfolio Average
Top 5 Resource Drains by Total Hours Consumed
Revenue vs Hours — Where the Numbers Don't Add Up
Ticket Volume — Support Demand from Problem Clients
Non-Billable Hours — The Hidden Cost Multiplier
Analysis
What Should You Do With This Data?
Frequently Asked Questions
Lowest Effective Rate
Avg Rate (Bottom 10)
AI-Generated Power BI Report
Date: February 2026
Scope: Demo data · All clients
Sources: Autotask PSA
Top 10 Worst Performing Clients for MSPs

Generated by AI via Proxuma Power BI MCP server. An analysis of 160+ clients across 67,500+ tickets and 55,000+ hours to find which accounts drain the most resources rel

Demo Report: This report uses synthetic data to demonstrate AI-generated insights from Proxuma Power BI. The structure, DAX queries, and analysis reflect real MSP data patterns.
1.0 Summary Metrics
Lowest Effective Rate
€13/h
Smith and Sons — 102h logged, €1,286 billed
Avg Rate (Bottom 10)
€118/h
vs €405/h portfolio average (-71%)
Hours Absorbed (Bottom 10)
3,037
7.0% of all customer hours
Non-Billable Hours (Bottom 10)
201 h
6.6% of their hours
View DAX Query — KPI summary across all clients
DEFINE
  VAR _PortfolioRate = DIVIDE(CALCULATE([Revenue - Total], 'BI_Autotask_Companies'[company_type]="Customer"), CALCULATE([Company - Hours Worked], 'BI_Autotask_Companies'[company_type]="Customer"))
  VAR _Bottom10Names = TOPN(10, FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name])) && [Company - Hours Worked] >= 80 && [Revenue - Total] > 0), DIVIDE([Revenue - Total], [Company - Hours Worked]), ASC)
EVALUATE ROW(
  "Portfolio Rate", _PortfolioRate,
  "Bottom 10 Hours", SUMX(_Bottom10Names, [Company - Hours Worked]),
  "Bottom 10 Revenue", SUMX(_Bottom10Names, [Revenue - Total]),
  "Bottom 10 Avg Rate", DIVIDE(SUMX(_Bottom10Names, [Revenue - Total]), SUMX(_Bottom10Names, [Company - Hours Worked])),
  "Bottom 10 Non-Bill Hours", SUMX(_Bottom10Names, [Company - Hours Worked] - [Company - Billable Hours]),
  "Bottom 10 Hours Share", DIVIDE(SUMX(_Bottom10Names, [Company - Hours Worked]), CALCULATE([Company - Hours Worked], 'BI_Autotask_Companies'[company_type]="Customer"))
)
What are these DAX queries? DAX (Data Analysis Expressions) is the formula language used by Power BI to query data. Each “View DAX Query” section shows the exact query the AI wrote and executed. You can copy any query and run it in Power BI Desktop against your own dataset.
2.0 Bottom 10 Clients by Effective Hourly Rate

Clients ranked by revenue earned per hour worked — the lower the rate, the worse the return on your team's time.

#ClientHours WorkedRevenueEff. RateNon-Bill %Rating
1Smith and Sons102€1,286€130.0%Critical
2Smith Ltd97€2,677€280.0%Critical
3Shaw-Ryan86€2,803€328.7%Critical
4Hanson-Cunningham581€45,957€7918.8%Critical
5Palmer, White and Decker96€7,822€810.0%High Risk
6Green PLC274€33,011€1213.5%High Risk
7Conway Ltd540€72,457€1347.0%High Risk
8Welch Inc569€83,862€1474.6%High Risk
9Leach, Cunningham and Whitehead355€54,040€1520.0%Watch
10George Ltd339€55,269€1633.3%Watch

Client A earns less per hour than some MSPs pay junior technicians. Client E is the biggest absolute drain — 1,171 hours at just €176/h adds up to over €250,000 in potential lost revenue compared to the portfolio average.

View DAX Query — Revenue and hours per client
EVALUATE
TOPN(10,
  ADDCOLUMNS(
    FILTER(VALUES('BI_Autotask_Companies'[company_name]),
      NOT(ISBLANK('BI_Autotask_Companies'[company_name]))
      && [Company - Hours Worked] >= 80
      && [Revenue - Total] > 0
    ),
    "HoursWorked", [Company - Hours Worked],
    "BillableHours", [Company - Billable Hours],
    "Revenue", [Revenue - Total],
    "EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked]),
    "NonBillPct", DIVIDE([Company - Hours Worked] - [Company - Billable Hours], [Company - Hours Worked])
  ),
  [EffRate], ASC
)
ORDER BY [EffRate] ASC
3.0 Effective Rate Comparison — Bottom 10 vs Portfolio Average

How each underperforming client's hourly rate compares to the €390/h portfolio average.

Below €150/h €150–250/h Portfolio avg (€390/h)
Client A
€79
€79
Client B
€134
€134
Client C
€147
€147
Client D
€174
€174
Client E
€176
€176
Client F
€203
€203
Client G
€229
€229
Client H
€233
€233
Client I
€238
€238
Client J
€255
€255
Portfolio Avg
€390
€390
View DAX Query — Effective rate per company
-- See Summary Metrics: Portfolio €404.96/h vs Bottom 10 €118.27/h
4.0 Top 5 Resource Drains by Total Hours Consumed

The clients absorbing the most engineer time, regardless of how much they pay.

#1
Client E
1,171h total
€176/h rate
#2
Client D
962h total
€174/h rate
#3
Client F
866h total
€203/h rate
#4
Client A
581h total
€79/h rate
#5
Client C
569h total
€147/h rate

Client E alone consumed 1,171 hours. At the portfolio average rate of €390/h, those hours would be worth €456,690. The actual revenue was €205,547 — a gap of €251,143.

View DAX Query — Hours worked per company
EVALUATE
TOPN(10,
  CALCULATETABLE(
    ADDCOLUMNS(
      FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name]))),
      "HoursWorked", [Company - Hours Worked],
      "BillableHours", [Company - Billable Hours],
      "Revenue", [Revenue - Total],
      "EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked])
    ),
    'BI_Autotask_Companies'[company_type]="Customer"
  ),
  [HoursWorked], DESC
)
ORDER BY [HoursWorked] DESC
5.0 Revenue vs Hours — Where the Numbers Don't Add Up

Comparing what each bottom-10 client paid versus the hours consumed, shown as revenue and cost segments.

Revenue earned
Gap to portfolio average
Client A
€46K
€181K gap
-80%
Client B
€72K
€138K gap
-66%
Client C
€84K
€138K gap
-62%
Client D
€168K
€207K gap
-55%
Client E
€206K
€251K gap
-55%
Client F
€176K
€162K gap
-48%
Client G
€97K
€68K gap
-41%
Client H
€117K
€79K gap
-40%
Client I
€101K
€64K gap
-39%
Client J
€134K
€70K gap
-35%

The "gap" represents revenue you'd earn if these clients paid at the portfolio average rate. The combined gap across all 10 clients is approximately €1.36M — money left on the table.

View DAX Query — Billing items by company
EVALUATE
ADDCOLUMNS(
    VALUES('BI_Autotask_Billing_Items'[company_id]),
    "Revenue", CALCULATE(SUM('BI_Autotask_Billing_Items'[total_amount]))
)
ORDER BY [Revenue] DESC
6.0 Ticket Volume — Support Demand from Problem Clients

High ticket counts drive up hours and reduce effective rates — here's where the bottom 10 stack up.

ClientTicketsTicket HoursRevenueEff. Rate
Rivers, Rogers and Mitchell6,3811,090€0N/A
Craig-Huynh5,4583,575€2,324,617€532
Little Group5,2903,050€1,431,177€377
Martin Group2,7752,046€637,092€287
Wall PLC2,3761,479€476,622€281
Blanchard-Glenn2,3649.4€1,110€118
Price-Gomez2,180823€286,926€332
Thompson, Contreras and Rios1,803949€320,832€319
Lewis LLC1,7581,206€2,212,915€790
Ramos Group1,728875€205,547€176
Client Tickets Ticket Hours
Client C 695 446
Client B 630 295
Client I 580 288
Client H 545 437
Client G 490 323

Client E leads with 1,728 tickets but their ticket hours per ticket (0.31h) is actually below average. Their problem is volume, not complexity. Client D's tickets average 0.67h each — they submit fewer but harder tickets.

View DAX Query — Ticket count and hours per company
EVALUATE
TOPN(10,
  CALCULATETABLE(
    ADDCOLUMNS(
      FILTER(VALUES('BI_Autotask_Companies'[company_name]), NOT(ISBLANK('BI_Autotask_Companies'[company_name]))),
      "TicketCount", CALCULATE(COUNTROWS('BI_Autotask_Tickets')),
      "TicketHours", [Tickets - Hours Worked],
      "Revenue", [Revenue - Total],
      "EffRate", DIVIDE([Revenue - Total], [Company - Hours Worked])
    ),
    'BI_Autotask_Companies'[company_type]="Customer"
  ),
  [TicketCount], DESC
)
ORDER BY [TicketCount] DESC
7.0 Non-Billable Hours — The Hidden Cost Multiplier

Every non-billable hour is work your team does for free. Here's where the bottom 10 are costing you the most.

Client Total Hours Billable Non-Billable Non-Bill % Status
Client A 581 471 109 18.8% High leak
Client J 524 487 37 7.1% Monitor
Client B 540 502 38 7.0% Monitor
Client G 424 401 24 5.6% Monitor
Client E 1,171 1,114 57 4.9% Monitor
Client C 569 543 26 4.6% OK
Client I 423 405 19 4.4% OK
Client D 962 954 8 0.9% OK
Client F 866 860 6 0.7% OK
Client H 502 500 2 0.3% OK

Client A's 18.8% non-billable rate is nearly 3x the portfolio average. That's 109 hours of free work. Combined with their €79/h effective rate, this client is bleeding margin from both sides.

View DAX Query — Billable vs non-billable hours
EVALUATE
ADDCOLUMNS(
    VALUES('BI_Autotask_Time_Entries'[company_id]),
    "CompanyName", CALCULATE(MAX('BI_Autotask_Time_Entries'[company_name])),
    "HoursWorked", CALCULATE(SUM('BI_Autotask_Time_Entries'[hours_worked])),
    "BillableHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Billable Hours])),
    "NonBillHours", CALCULATE(SUM('BI_Autotask_Time_Entries'[Non billable Hours]))
)
ORDER BY [HoursWorked] DESC
8.0 Analysis

We pulled time entries, billing data, and ticket volumes for every client in the PSA and calculated an effective rate per hour for each one. The results are blunt. Some clients generate €79 per hour worked while the top performers bring in €790. That's a 10x gap between the best and worst accounts in the same client base.

The data tells a clear story. These 10 clients account for 6,821 hours of work but generate only €1.20M in revenue — an average effective rate of €185/h. If they paid at the portfolio average, that same work would have earned €2.66M. The gap is roughly €1.36M in unrealized revenue.

Client A is the most striking case. At €79/h with an 18.8% non-billable rate, every hour your team spends on this account costs you money. But Client E might actually matter more — their rate is low (€176/h) and they consume twice the hours of most other bottom-10 clients. Volume multiplied by a below-average rate creates the largest absolute gap in the portfolio.

9.0 What Should You Do With This Data?

4 priorities based on the findings above

1

Review Client A's contract immediately

An effective rate of €79/h with 18.8% non-billable hours means this account is almost certainly unprofitable. Check whether the contract pricing was set years ago and never updated, or if scope creep has expanded service obligations beyond what was agreed. Either renegotiate or consider whether this client belongs in your portfolio.

2

Address the volume problem with Client E

At 1,171 hours and 1,728 tickets, Client E isn't just below-average on rate — they're consuming the equivalent of a half-FTE. The revenue gap is €251K. Investigate why this client generates so many tickets. Are they running outdated infrastructure? Is there a recurring issue that could be fixed with a project rather than repeated break-fix?

3

Set rate floors for new contracts

The bottom 10 average €185/h while the portfolio averages €390/h. That's a 2x gap. Consider establishing a minimum effective rate target (e.g., €250/h) and flagging any client that drops below it for quarterly review. This catches problems before they compound over years of service.

4

Not every low-rate client is a lost cause

Clients D and F have low rates but almost no non-billable time (0.9% and 0.7%). Their issue is pricing, not operational inefficiency. A contract renegotiation — even a modest 15-20% increase — could move them out of the bottom 10 without any operational changes. Start with the easy wins.

10.0 Frequently Asked Questions
How often should I run this report?

We recommend reviewing this report weekly. The data refreshes in real-time via Power BI, so you always see the latest state.

What data does this report use?

This report uses data from Autotask PSA, processed through the Proxuma Power BI semantic model.

Can I run this report against my own data?

Yes. Connect Proxuma Power BI to your Autotask PSA account, add an AI tool 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.

What are the DAX queries shown in this report?

DAX (Data Analysis Expressions) is the formula language used by Power BI. Each query shows exactly what data was requested. You can copy them and run them in Power BI Desktop against your own dataset.

Generate this report from your own data

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