A client health board for your GoHighLevel sub-accounts

One page ranks every client sub-account by how much it slipped this period, so you know who to call today without logging into each account.

App
LeadConnectorSlack BotOperationsSalesAI ReportsResearch & Monitoring
PromptCreate

Build me an internal app for my GoHighLevel agency. I run about a dozen client sub-accounts in LeadConnector, and today I have to log into each location separately to find out which ones are slipping. I want one board that answers "who do I call today" the moment it opens. The audience is me and my account managers, never the end client, so keep the tone internal and blunt throughout.

The main view is a portfolio table with one row per sub-account, pulled from Search Locations in LeadConnector. Above the table I pick a date range, defaulting to the last 30 days, and every number is compared against the period immediately before it of the same length. For each location show: new contacts created in the range using Search Contacts (Advanced); open opportunity value and won opportunity value using Search Opportunities, with stage names resolved through Get Pipelines for that location so I know which stages count as won; and appointments booked in the range using List Calendar Events. Show each metric alongside its change versus the prior period as a percentage.

I control a decline threshold, defaulting to 20 percent. Put a red flag on any client whose new contacts or won opportunity value fell by more than that threshold versus the prior period. Sort the board by worst decline first by default, so the accounts in trouble sit at the top. Let me re-sort by any column, and keep the flagged rows visually obvious no matter how the table is sorted.

Important constraint: derive every money figure from the monetary value on won opportunities. Do not use invoices, payments, or billing anywhere in this app, and never label anything as collected revenue. This board measures the results we are producing inside each client's account, not what the client has been billed.

Clicking a client row opens a detail page for that location. Show its pipelines and stages from Get Pipelines, its top open opportunities ranked by value from Search Opportunities, and the team members assigned to that account from List Users. Repeat the headline metrics and the period comparison at the top of the page. Keep appointment detail shallow, just counts booked over the range, because I do not want this drifting into a show rate report.

Each client detail page carries a running log of internal notes. I type a note in the app, it saves with a timestamp and the name of whoever wrote it, and it persists per client so the whole team reads the same history. Store these notes in the app itself. Do not write them into the client's own GoHighLevel account, since this is internal commentary that the client should never see.

Every client row and detail page also gets a "Write the client update" button that kicks off a background agent scoped to that location. The agent pulls that location's contacts with Search Contacts (Advanced), its opportunities with Search Opportunities resolved against Get Pipelines, and its appointments with List Calendar Events, for both the selected period and the prior period. It then writes a plain English health brief covering what improved, what slipped, and three recommended actions, in the same blunt internal tone. The brief is saved back into the app so it shows on that client's card with the date it was written, and it is also posted to our account management channel using the Slack Bot Send a Message operation. Let me choose the Slack channel inside the app. Show the button in a running state while the agent works, and surface the newest brief as soon as it lands.

Practical notes for the build. Every LeadConnector read is scoped by locationId, so the board fans out one set of calls per sub-account. LeadConnector allows roughly 100 requests per 10 seconds per resource, so gather each location's rollup once and cache it rather than refetching on every render, and give me a refresh control plus a visible timestamp showing when the numbers were last pulled. List endpoints are cursor paginated through meta.startAfter and meta.startAfterId, while Search Contacts (Advanced) uses page based pagination. All requests need the Version header set to 2021-07-28. Agency level reads across sub-accounts need the locations and companies read scopes. If one location errors or times out, show that row in an error state rather than silently dropping it from the board.

What does this prompt do?

  • Puts every client sub-account in one table with new contacts, open and won deal value, and appointments booked for whatever date range you pick.
  • Compares each number against the previous period and puts a red flag on any client whose new contacts or won deal value dropped past a threshold you control.
  • Sorts worst decline first, and gives every client its own page with pipelines, top open deals, assigned team members, and a running log of internal notes you keep in the app.
  • Adds a Write the client update button that hands the account to a background assistant, which drafts a blunt health brief, saves it to the client card, and posts it to your Slack channel.

What do I need to use this?

  • A GoHighLevel agency account with access to the client sub-accounts you want on the board.
  • Permission to read account and company level data, so the board can see every sub-account instead of just one.
  • Deals tracked as opportunities inside each sub-account, since the money figures come from won deal value rather than invoices or payments.
  • A Slack workspace and the channel your account managers work out of.

How can I customize it?

  • Change the default date range and the drop percentage that turns a client red.
  • Pick which Slack channel the client updates land in, and adjust how blunt the written brief is.
  • Change the default sort or the columns on the board if you would rather lead with something other than the biggest decline.

FAQs

Does this show how much each client actually paid us?
No. Every money figure comes from the value of won deals inside each client sub-account, not from invoices or payments. The board measures the results you are producing for the client, not what the client has been billed.
How many client accounts can it handle?
It is built for a portfolio of roughly a dozen sub-accounts. It gathers each account's numbers once and caches them, so the board stays fast and stays inside GoHighLevel's request limits. You refresh when you want fresh numbers, and the page shows when they were last pulled.
Can my account managers use it, or is it just for me?
Anyone you share it with can open the board, add internal notes, and kick off a client update. It is written in an internal tone for the agency side and is not meant to be shared with the end client.
Do clients ever see the notes or the written briefs?
No. Notes stay inside the app and briefs go to your own Slack channel. Nothing is written back into the client's GoHighLevel account.
What if a client runs several pipelines?
Open and won deal value add up across all of that client's pipelines on the board, and the client's own page breaks it down pipeline by pipeline using the stage names set up in their account.
How far back does the comparison go?
Each number is compared against the period immediately before the one you picked, of the same length. Choosing the last 30 days compares against the 30 days before that.

Related templates

A brand asset library your marketing team actually searches

Every logo, photo, video cut and ad export in one searchable grid, with previews, campaign tags and rights expiry dates at a glance.

General Input Storage
General Input Database
JigsawStack
+1
App
Turn Mailjet email clicks into ranked HubSpot follow-ups

Twice a day we spot the people clicking your pricing and demo pages, create a follow-up task for their owner, and post a ranked recap to Slack.

Mailjet
HubSpot
Slack Bot
Agentic Task
Clean out the Looker dashboards and Looks nobody opens

One board showing every dashboard and Look with its folder, owner and favorite count, so you can find dead content and retire it safely.

Looker
Slack Bot
App
LiveKit live operations console for room moderation

Watch every live room on one screen, remove disruptive guests, start recordings and end stuck sessions without anyone opening a terminal.

LiveKit
Slack Bot
General Input Database
App
Wake up dormant Keap leads with a researched reason

Every Monday we find leads who never bought, research a real reason to reach out, and send a short personal email instead of another check in.

Keap
Slack Bot
Agentic Task
LiveChat coverage board for planning next week's shifts

See the exact hours your chat queue backs up and customers give up waiting, then plan next week's shifts before it happens again.

LiveChat
Slack Bot
General Input Database
App

Stop logging into a dozen client accounts to find the bad news.

Open one board that ranks your client sub-accounts by who slipped the most, then hand the write-up to an assistant.