Review client billing
Walk through the MSP billing report — read seat usage per client, set cost and sell prices, see margin, and export to CSV.
The Billing Report at /msp/billing shows seat usage per client,
lets you plug in your cost and sell price per seat, and calculates
revenue and margin per client and across your book. It's the page you
open at monthly close to figure out what to invoice. It is not an
invoicing system — it doesn't push to Stripe, QuickBooks, or any
accounting tool, and it doesn't generate invoices. Think of it as the
math layer between Hook's seat data and your billing tool.
Open the billing report
Sign in to the MSP portal.
Click Billing in the sidebar to land on /msp/billing. The header
reads Billing Report with the subtitle See how many seats each of your
clients is using, set your cost and sell price, and instantly see your
revenue and margin. Export to CSV when you're ready to invoice.
If you haven't onboarded any client orgs yet, you'll see an empty state No subclients found. Add clients from the Clients page first.
What each column means
The page has three regions: summary cards across the top, a Pricing card where you enter rates, and a Client Breakdown table. The table is the heart of the page.
Client Name
Each row is a client organization. Direct children of your MSP appear at
the top level; if a client has its own sub-orgs, those nest underneath.
Use the chevron on the parent row to expand or collapse, or click the
+N badge to see how many child orgs are hidden.
Status
Either Active (green) or Suspended (red). Suspended rows render dimmed, but their seats still roll into your totals — suspension is an access state, not a billing state. Exclude suspended clients in your invoicing tool if you don't want to bill them.
Seats
The current active user count for that client org — this number drives every dollar on the row.
Total Cost
Seats × Cost Per Seat — what you pay Hook for that client. Shows --
until you enter a Cost Per Seat in the Pricing card.
Total Revenue
Seats × Client Price Per Seat — what you charge the client. Shows --
until a Client Price Per Seat is entered.
Margin
Total Revenue − Total Cost. Positive margins render green; negative
margins render red — the fastest way to spot a client whose contracted
rate has drifted below your cost.
Summary cards
Above the table:
- Active Clients — active orgs over total (e.g.,
12 / 14) - Total Seats — sum across all clients
- Total Revenue — sum of
Seats × Client Price Per Seat - Total Margin — sum of
Total Revenue − Total Cost, color-coded
Set sell prices and margins
Pricing inputs are session-scoped — they aren't saved, and the same rate applies to every client. Treat the Pricing card as a calculator you re-enter each billing cycle.
In the Pricing card, enter your Cost Per Seat — what Hook charges
you per active user per billing period (e.g., $X per seat per month).
Enter your Client Price Per Seat — the MSRP you charge each client
per seat (e.g., $Y per seat per month).
The table updates instantly. If your sell price exceeds your cost, a
$Z margin per seat indicator appears next to the inputs.
One rate at a time
The Pricing card uses a single cost and sell price for the whole table. For per-client contract rates, run the report once per rate band: enter the rate, export the matching client rows, then repeat for the next band and combine in your accounting tool.
Export a CSV
The CSV is the artifact you hand to whoever cuts invoices. It includes metadata at the top (report type, generated date, MSP name, the cost and sell rates) followed by a data table.
Set your Cost Per Seat and Client Price Per Seat so the export includes computed columns. If you skip pricing, cost / revenue / margin columns export as zeros.
Click Export CSV in the Client Breakdown card header.
The file billing-report-YYYY-MM-DD.csv downloads. Columns: Client
Name, Status, Seat Count, Total Cost, Total Revenue,
Margin, plus a Totals row at the bottom.
The export is flat — every client appears as one row regardless of hierarchy depth, sorted alphabetically. An Export PDF button next to it produces a formatted snapshot with the same columns plus the summary tiles for internal review meetings.
Recommended cadence
Open this page at monthly close to reconcile seats before invoicing. Pull it again at quarterly business reviews to spot shrinking margins, suspended orgs you're still billing in error, or sub-orgs that have grown enough to renegotiate.
What this won't do
The Billing Report is a calculator, not a billing engine. It does not:
- Generate or send invoices
- Sync with Stripe, QuickBooks Online, Xero, or any accounting system
- Store per-client custom rates between visits
- Replace the rates and terms in your client contracts
Use the CSV as the bridge to your invoicing tool. The contract you signed with the client is still the source of truth for what they owe.
Related
- Manage client accounts — provision and adjust the client orgs that show up here
- Run a phishing campaign for a client — drive simulation activity on the seats you're billing
- Assign training across clients — the other half of what those seats unlock