“Billable Hours Ratio per Client: Where Time Converts to Revenue”
Autotask PSA Datto RMM Datto Backup Microsoft 365 SmileBack HubSpot IT Glue All reports
AI-GENERATED REPORT
You searched for:

Billable Hours Ratio per Client: Where Time Converts to Revenue

Which clients generate billable hours, which ones consume overhead, and where non-billable time is leaking margin. Generated by AI via Proxuma Power BI MCP server.

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

Billable Hours Ratio per Client: Where Time Converts to Revenue

Which clients generate billable hours, which ones consume overhead, and where non-billable time is leaking margin. 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

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 › Billable Hours Ratio per Client: Wher...
What you can measure in this report
Summary Metrics
Overall Hours Distribution
Billable Hours Ratio per Client — Ranked
Internal & Zero-Billable Accounts
Non-Billable Leakage — Top Clients by Unbilled Hours
Analysis
What Should You Do With This Data?
Frequently Asked Questions
OVERALL BILLABLE %
INTERNAL HOURS
BEST CLIENT
LOWEST (EXC. INTERNAL)
AI-Generated Power BI Report
Billable Hours Ratio per Client:
Where Time Converts to Revenue

Which clients generate billable hours, which ones consume overhead, and where non-billable time is leaking margin. Generated by AI via Proxuma Power BI MCP server.

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
OVERALL BILLABLE %
75.6%
Portfolio billable ratio
INTERNAL HOURS
38,364h
Billable hours logged
BEST CLIENT
12,388h
Non-billable hours
LOWEST (EXC. INTERNAL)
234
Clients with time entries
View DAX Query — Summary Metrics
EVALUATE ROW(
  "TotalHours", SUM(BI_Autotask_Time_Entries[hours_worked]),
  "Billable", SUM(BI_Autotask_Time_Entries[Billable Hours]),
  "NonBillable", SUM(BI_Autotask_Time_Entries[Non billable Hours]),
  "BillableRatio",
    DIVIDE(
      SUM(BI_Autotask_Time_Entries[Billable Hours]),
      SUM(BI_Autotask_Time_Entries[hours_worked])
    ),
  "ClientsWithTime",
    CALCULATE(
      DISTINCTCOUNT(BI_Autotask_Time_Entries[company_id]),
      NOT(ISBLANK(BI_Autotask_Time_Entries[company_id]))
    )
)
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 Overall Hours Distribution

Portfolio-wide split of billable vs non-billable hours across all clients and internal time

75.6% BILLABLE 38,364 billable hours
24.4% NON-BILL. 12,388 non-billable hours
14.3% INTERNAL 7,264h internal + 1,662h Rivers
View DAX Query — Overall Distribution
DEFINE
  VAR ClientData =
    ADDCOLUMNS(
      SUMMARIZECOLUMNS(
        BI_Autotask_Time_Entries[company_id],
        "Hours", SUM(BI_Autotask_Time_Entries[hours_worked]),
        "Billable", SUM(BI_Autotask_Time_Entries[Billable Hours])
      ),
      "Ratio", DIVIDE([Billable], [Hours])
    )
  VAR WithBand =
    ADDCOLUMNS(
      FILTER(ClientData, [Hours] > 0 && NOT(ISBLANK([company_id]))),
      "Band",
        SWITCH(TRUE(),
          [Ratio] >= 0.95, "A: Elite (95%+)",
          [Ratio] >= 0.85, "B: Strong (85-95%)",
          [Ratio] >= 0.70, "C: Standard (70-85%)",
          [Ratio] >= 0.50, "D: Low (50-70%)",
          "E: Poor (<50%)")
    )
EVALUATE
GROUPBY(WithBand, [Band],
  "Clients", COUNTX(CURRENTGROUP(), [company_id]),
  "Hours", SUMX(CURRENTGROUP(), [Hours]),
  "Billable", SUMX(CURRENTGROUP(), [Billable]))
ORDER BY [Band]
3.0 Billable Hours Ratio per Client — Ranked

Top 15 clients by total hours worked, with segmented bars showing the billable vs non-billable split per client

ClientTotal hoursBillableNon-billableBillable ratio
Craig-Huynh4,3703,79257886.8%
Little Group3,7913,12766582.5%
Lewis LLC2,8012,66513695.2%
Martin Group2,2171,97024788.8%
Wall PLC1,6971,6653298.1%
Rivers, Rogers and Mitchell1,66201,6620.0%
Burke, Armstrong and Morgan1,3121,09621683.5%
Ramos Group1,1711,1145795.1%
Thompson, Contreras and Rios1,00685315384.8%
Wu-Jackson9629164695.2%
Doyle-Contreras962954899.1%
Billable Non-billable 0% billable (internal/monitoring)
View DAX Query — Billable Ratio per Client
EVALUATE
TOPN(12,
  FILTER(
    ADDCOLUMNS(
      SUMMARIZECOLUMNS(
        BI_Autotask_Time_Entries[company_id],
        BI_Autotask_Time_Entries[company_name],
        "Hours", SUM(BI_Autotask_Time_Entries[hours_worked]),
        "Billable", SUM(BI_Autotask_Time_Entries[Billable Hours]),
        "NonBillable", SUM(BI_Autotask_Time_Entries[Non billable Hours])
      ),
      "BillableRatio", DIVIDE([Billable], [Hours])
    ),
    NOT(ISBLANK(BI_Autotask_Time_Entries[company_id]))
  ),
  [Hours], DESC
)
ORDER BY [Hours] DESC
4.0 Internal & Zero-Billable Accounts

Hours logged with no billable output: internal overhead and accounts running exclusively non-billable time

ClientTotal hoursBillable hoursNon-billable
Rivers, Rogers and Mitchell1,66201,662
Combined internal hours: 8,926 (17.6% of all time logged). Internal time with no client assigned accounts for 7,264 hours. Rivers has 1,662 hours, all non-billable, suggesting it is a monitoring or internal-services account rather than a paying client.
View DAX Query — Zero-Billable Accounts
EVALUATE
FILTER(
  ADDCOLUMNS(
    SUMMARIZECOLUMNS(
      BI_Autotask_Time_Entries[company_id],
      BI_Autotask_Time_Entries[company_name],
      "Hours", SUM(BI_Autotask_Time_Entries[hours_worked]),
      "Billable", SUM(BI_Autotask_Time_Entries[Billable Hours]),
      "NonBillable", SUM(BI_Autotask_Time_Entries[Non billable Hours])
    ),
    "BillableRatio", DIVIDE([Billable], [Hours])
  ),
  [Hours] > 50 && (ISBLANK([Billable]) || [BillableRatio] < 0.50)
)
ORDER BY [NonBillable] DESC
5.0 Non-Billable Leakage — Top Clients by Unbilled Hours

Clients with the most non-billable hours on their accounts (excluding internal and Rivers). These hours may represent missed billing, scope creep, or process gaps.

Foster Inc
664h
Patterson Hood Perez
578h
Client D
247h
Edwards Hall
216h
Martinez C. Rios
153h
Hernandez Ltd
136h
Richards Burke F.
101h
View DAX Query — Non-Billable Hours per Client
EVALUATE
TOPN(10,
  FILTER(
    ADDCOLUMNS(
      SUMMARIZECOLUMNS(
        BI_Autotask_Time_Entries[company_id],
        BI_Autotask_Time_Entries[company_name],
        "Hours", SUM(BI_Autotask_Time_Entries[hours_worked]),
        "NonBillable", SUM(BI_Autotask_Time_Entries[Non billable Hours])
      ),
      "NonBillShare", DIVIDE([NonBillable], [Hours])
    ),
    [Hours] > 20 && NOT(ISBLANK(BI_Autotask_Time_Entries[company_id]))
  ),
  [NonBillable], DESC
)
ORDER BY [NonBillable] DESC
6.0 Analysis

The portfolio-wide billable ratio of 75.6% means roughly one in four hours logged does not generate revenue. That is within the typical MSP range of 70-80%, but there is room to improve.

The biggest factor is internal overhead. The null-company bucket accounts for 7,264 hours, and Rivers adds another 1,662 hours at 0% billable. Together, these two entries represent 8,926 hours, or 17.6% of all time logged. If Rivers is truly an internal monitoring account, it should be reclassified so it does not skew client-level metrics. If it is a paying client, someone needs to investigate why every single hour is flagged non-billable.

Foster Inc stands out as the highest-leakage client account. At 82.5% billable, they have 664 non-billable hours on the books. That is 3.4 full-time equivalent weeks of work that generated no revenue. Patterson Hood Perez is close behind with 578 non-billable hours. For both accounts, the question is whether those hours represent legitimate non-billable work (onboarding, project scoping, internal meetings) or time entries that should have been billed.

On the other end, Clements (99.3%), Client K (99.1%), and Wall PLC (98.1%) are running near-perfect billability. These accounts have tight processes, minimal overhead, and clean time tracking. They are the benchmark your other accounts should target.

The gap between the best client (Clements at 99.3%) and the lowest true client (Foster Inc at 82.5%) is 16.8 percentage points. Closing even half of that gap for the bottom performers would recapture hundreds of billable hours.

7.0 What Should You Do With This Data?

5 priorities based on the findings above

1

Audit the 664 non-billable hours on Foster Inc

Foster Inc has the lowest billable ratio among active client accounts at 82.5%. Pull the time entries flagged as non-billable and categorize them: which are legitimate (internal meetings, project scoping) and which should have been billed? At typical MSP rates, 664 unbilled hours could represent $50,000-$100,000 in missed revenue. Start with the largest time entries and work backward.

2

Clarify the status of Rivers (1,662 hours at 0% billable)

Rivers has logged 1,662 hours with zero billable output. If this is an internal monitoring or infrastructure account, reclassify it so it does not appear in client-level reporting. If Rivers is a paying client, you have a serious billing gap. Either way, this needs an answer this week, not next quarter.

3

Reduce internal overhead below 15% of total hours

Internal time (no client assigned) accounts for 7,264 hours, or 14.3% of all time logged. Industry benchmarks for well-run MSPs target 10-12% internal overhead. Review the types of internal tasks consuming the most time. Are there recurring meetings that could be shorter? Administrative tasks that could be automated? Training that could be batched more efficiently?

4

Investigate non-billable patterns on Patterson Hood Perez (578h)

Patterson Hood Perez is the largest client by hours (4,370) with 578 non-billable. At 86.8% billable, they are above the portfolio average, but the absolute number of unbilled hours is high. Check whether a specific project or recurring task is driving this. Even a 5% improvement would recover around 220 billable hours.

5

Use Clements and Wall PLC as process benchmarks

Clements at 99.3% and Wall PLC at 98.1% show that near-perfect billability is achievable. Study what makes these accounts different. Is it the contract structure? The way time entries are logged? The type of work being done? Apply those patterns to accounts below 90% and measure the improvement over the next quarter.

8.0 Frequently Asked Questions
Where does the billable hours data come from?

Autotask PSA tracks every time entry your team logs, including whether the entry is flagged as billable or non-billable. Proxuma Power BI pulls these entries through the Autotask connector and calculates the [Billable Hours] and [Non billable Hours] measures. The AI then runs DAX queries to group results by company and compute ratios.

What counts as a "billable" hour?

A billable hour is any time entry in Autotask PSA where the billable flag is set. This typically includes client-facing work: ticket resolution, project tasks, and scheduled maintenance covered by contract. Non-billable hours include internal meetings, training, administrative tasks, and time logged against internal accounts.

What is a good billable ratio for an MSP?

Most MSPs operate between 65-80% billable at the portfolio level. Top-performing MSPs target 80%+ for individual client accounts. The internal overhead portion (time with no client) should stay below 12-15%. Per-client ratios above 90% indicate tight operations and clean time tracking.

Why do some accounts show 0% billable?

Accounts with 0% billable are typically internal accounts (no client assigned) or monitoring/infrastructure accounts where all time is logged as non-billable by design. If a paying client shows 0%, it usually means the billable flag is misconfigured on their time entries or their contract type does not trigger billable tagging in Autotask.

Can I run this report filtered to a specific time period?

Yes. The DAX queries in this report use all available data by default. You can add a date filter on BI_Autotask_Time_Entries[date_worked] to scope the report to a specific quarter, month, or custom range. Filtering to the last 90 days gives a more actionable picture for operational decisions.

Can I run this report against my own data?

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

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