SuperAuditor Back to home
Guide 7 min read
Share Copied!
How to Calculate Profit Per Client in GoHighLevel

How to Calculate Profit Per Client in GoHighLevel

Most GHL agencies charge a flat SaaS fee but have no idea what each client actually costs them. Here's the exact formula for calculating profit per sub-account, why it's hard to do manually, and how to automate the entire P&L process.

The number most GHL agencies don't know

Ask any GoHighLevel agency owner how much revenue they make per client, and they'll rattle off their SaaS plan tiers without hesitation. $297 per month. $497. Maybe $997 for the premium package.

Now ask them how much each client costs them, and the conversation gets quiet.

The truth is that most agencies running GHL sub-accounts have no idea whether individual clients are profitable. They know their total GHL bill went up last month. They know Stripe deposited a certain amount. But the gap between those two numbers — the per-client margin that determines whether your agency actually makes money — is invisible.

This isn't a minor oversight. When you can't see profitability at the client level, you end up subsidizing your worst clients with revenue from your best ones. You make pricing decisions based on gut feeling instead of data. And you scale an agency that looks healthy on the surface but is quietly bleeding margin on 10 to 20 percent of its accounts.

How do you calculate profit per client in GoHighLevel?

The concept is straightforward. For each sub-account in your GHL agency, the calculation is:

Gross Margin = SaaS Plan Fee − GHL Wallet Charges

Where SaaS Plan Fee is what you charge the client monthly, and GHL Wallet Charges are the total SMS, email, Voice AI, workflow, phone number, and other usage costs GHL bills you for that specific location.

For example, if you charge a client $397/month on your Growth SaaS plan, and GHL charges you $142 in wallet usage for that client's sub-account, your gross margin on that client is $255/month — a 64% margin.

That's the healthy scenario. The problem is that not every client looks like this. Some locations generate far more GHL charges than others, and unless you're tracking it, you won't know which ones are eating into your profit.

What counts as cost (COGS)

Your cost of goods sold for each GHL client includes every wallet charge tied to their sub-account:

Why is it so hard to calculate client profitability in GHL?

If the formula is simple, why don't more agencies track it? Because the data lives in two completely separate systems, and neither one makes it easy.

Revenue lives in Stripe (or your invoicing tool)

When you set up GHL SaaS mode, client payments flow through Stripe. Your SaaS plan fees, setup charges, and recurring billing all live there. Stripe knows what each client pays you, but it has no concept of GHL sub-accounts or wallet charges.

Costs live in GHL billing (with no per-location view)

GHL charges your agency wallet for all usage across every sub-account. But the billing page shows either a single agency-wide total or a raw dump of individual transactions — sometimes 60,000 or more rows per month. There's no built-in way to see total costs grouped by location, let alone compare those costs to what each client pays you.

To calculate profit per client manually, you'd need to merge data from both systems, match clients across them, and do the math for every single sub-account. Every month.

Step-by-step: building a P&L spreadsheet (the manual way)

If you want to do this with a spreadsheet, here's the process. It works, but plan on spending 1–2 hours per month maintaining it.

  1. Export your GHL billing CSV from Settings → Billing → Download. This gives you every individual wallet charge with a location name, transaction type, and amount.
  2. Open the CSV in Google Sheets. Create a pivot table with Location Name as rows and Amount as the SUM value. This gives you total GHL cost per sub-account.
  3. In a separate tab, list every client with their monthly SaaS plan fee. You can pull this from Stripe's subscription export or type it manually.
  4. Use VLOOKUP or INDEX/MATCH to join the two tables by client name. Be careful — the client name in Stripe often doesn't match the location name in GHL exactly.
  5. Add a Margin column: =SaaS_Fee - GHL_Cost. Add a Margin % column: =Margin / SaaS_Fee.
  6. Sort by margin ascending to find your unprofitable clients at the top of the list.

This approach has real limitations:

The faster way: automated P&L with SuperAuditor

SuperAuditor was built specifically for this problem. It connects your GHL billing data and automatically detects your SaaS plan tiers, then matches each sub-account's costs to the plan it's on. The result is a real-time P&L dashboard at the client level.

  1. Sign up and import your GHL billing data — either through the Chrome Extension (reads your billing page directly) or by uploading your billing CSV.
  2. SuperAuditor auto-detects your SaaS plan tiers by analyzing the recurring charges across your sub-accounts. No manual configuration needed.
  3. Open the P&L dashboard to see revenue, cost, and margin for every single client. Sort, filter, and drill into any location.

The dashboard shows you exactly which clients are profitable, which are break-even, and which are losing you money — updated automatically every time you sync your billing data.

Real example: 100 locations, 15 unprofitable

Here's a scenario based on real patterns we see across SuperAuditor users. An agency runs 100 GHL sub-accounts across three SaaS plan tiers:

SaaS Plan Monthly Fee Locations Avg GHL Cost Avg Margin
Starter $197 40 $89 $108 (55%)
Growth $397 45 $174 $223 (56%)
Premium $697 15 $312 $385 (55%)

On the surface, this looks great — healthy 55% average margins across the board. But averages hide the outliers.

When this agency first ran their P&L in SuperAuditor, they discovered 15 of their 100 locations were unprofitable. The breakdown:

Combined, those 15 unprofitable clients were costing the agency $2,340/month in negative margin — money that was silently being subsidized by the profitable 85 accounts. That's over $28,000 per year in avoidable losses.

What should you do when you find unprofitable clients?

Finding unprofitable clients is the first step. Here's what successful agencies do next:

1. Raise prices on heavy users

If a client's usage consistently exceeds what their plan covers, it's time for a pricing conversation. Most clients understand that higher usage means higher costs. Frame it around value: they're getting more from the platform, so the plan needs to reflect that. Move them to a higher tier or create a custom plan that accounts for their actual usage.

2. Add usage-based surcharges

GHL's SaaS mode supports adding markup to wallet charges. If a client's SMS or Voice AI usage is the issue, consider passing through those costs with a margin. For example, if GHL charges you $0.015 per SMS segment, charge the client $0.025. This aligns your costs with revenue automatically as their usage fluctuates.

3. Reduce over-provisioned services

Sometimes the problem isn't pricing — it's waste. Look for misconfigured workflows running unnecessary actions, phone numbers provisioned but never used, or automation sequences sending far more messages than needed. Cleaning up a single broken workflow can save $50–200/month on a location.

4. Set usage caps or alerts

For clients on flat-rate plans, consider setting internal alerts when their GHL costs hit a threshold — for example, 70% of their plan fee. This gives you time to act before they become unprofitable. SuperAuditor's smart alerts can do this automatically.

5. Have the conversation early

Don't wait until a client has been unprofitable for six months. The earlier you address the imbalance, the easier the conversation. Clients who learn about their usage patterns early are far more receptive to plan adjustments than clients who feel blindsided by a sudden price increase.

See your profit per client in 5 minutes

Upload your GHL billing CSV and instantly see which clients make money and which ones don't. Free forever, no credit card required.

Start Free — No Card Needed

Frequently asked questions

How do I calculate profit per client in GoHighLevel?

Subtract the total GHL wallet charges for a sub-account (SMS, email, Voice AI, workflows, phone numbers) from the monthly SaaS plan fee you charge that client. The result is your gross margin per client. SuperAuditor automates this by matching your SaaS plan tiers to GHL billing data for every location, giving you a real-time P&L dashboard without any manual spreadsheet work.

What percentage of GHL agency clients are typically unprofitable?

Based on data from SuperAuditor users, 10 to 20 percent of sub-accounts are unprofitable — meaning GHL usage charges exceed the SaaS plan fee the agency collects. The most common culprits are high-volume SMS senders and locations with heavy Voice AI usage. Most agency owners don't discover this until they run a per-client P&L for the first time.

Can GoHighLevel show me profit per sub-account?

No. GoHighLevel shows agency-wide billing totals and raw transaction rows, but it does not calculate profit or margin per location. You need to manually match revenue data from Stripe or your invoicing system to GHL costs for each sub-account, or use a tool like SuperAuditor that does this automatically.

Related articles

FP

Fer Patel

Founder of SuperAuditor. Building billing visibility tools for GoHighLevel agencies.