How to setup a custom GHL dashboard.

How I Built a Custom GoHighLevel Dashboard for a Client (Win/Loss, CSR Performance & Lead Tracking)

When a client comes to you frustrated with their reporting, you have two options: patch it together with random widgets or rebuild it strategically.

I chose the second one.

This client was running their operations across multiple tools – CRM, spreadsheets, and separate call tracking software. We were consolidating the parts that mattered most into GoHighLevel: task management, speed to lead, and rep/CSR accountability. They didn’t need GHL to replace everything overnight. They needed it to handle their specific workflow, cleanly and accurately.

The problem? Their default GoHighLevel dashboard was giving them noise, not insight.

Here’s exactly how I rebuilt it, and why every decision was intentional.

Why Their Default Dashboard Wasn’t Working

Before we get into the build, let me tell you what they actually needed:

  • Win/loss tracking broken down by trade
  • Revenue visibility by lead source
  • CSR performance tracking
  • A clear split between business hours and after-hours leads

The default GoHighLevel dashboard couldn’t surface any of this. The widgets were too generic, the filters weren’t set up for their business model, and there was no structure behind what was being shown.

So instead of adding random widgets and hoping for the best, I rebuilt their entire reporting system from scratch with a clear strategy behind it.

How to Create a Custom Dashboard in GoHighLevel

If you’re new to this, here’s the quick setup before we get into the strategy:

  1. Go to Dashboard in the left-hand sidebar
  2. Click Select Dashboard at the top
  3. Hit Add Dashboard
  4. Start building from there
Setting up a new GHL Dashboard

That part is easy. What most people get wrong is everything that comes after — which widgets to use, what to filter by, and how to structure it so the data actually means something.

Understanding What Reports Are Available in GoHighLevel

This is something most people skip over, and it kills their reporting before they even start.

GoHighLevel has a set of report types that every dashboard widget is built from. Each one has its own filters and conditions.

Here’s what is available:

Report TypeAvailable Filters
Contacts17 filter options
Appointments15 filter options
Opportunities17 filter options
Visitor Data13 filter options
Emails11 filter options
Calls13 filter options
Conversations12 filter options
Payments17 filter options
Meta Ads16 filter options
Social Planner18 filter options
General15 filter options
Google AnalyticsAvailable

For this client’s build, we primarily worked inside Contacts and Opportunities – because that’s where their operational and revenue data lived. They weren’t running email campaigns or Meta Ads through GHL at this stage. Their use case was internal: rep task management, lead follow-up, and appointment reporting.

Knowing which report type to pull from before you touch a single widget is the difference between a dashboard that works and one that confuses everyone.

Want me to build this reporting system for your GHL account?

The Foundation You Need to Understand First: Contacts vs Opportunities

This is the most important concept to understand before building any team performance-related GoHighLevel custom dashboard.

GoHighLevel has two core objects that can help you set up and understand your performance as per your build.

Here’s how I set it up:

Contacts = Where Reps Operate

The Contact record is the workspace that was set up for the sales and CSR team. This is where the day-to-day work happens:

  • Calls logged
  • Notes added
  • Tasks created and completed
  • Follow-ups scheduled
  • Nurture sequences running

The team lives inside the Contact records. That’s the operational layer.

Opportunities = Where Revenue Gets Reported

Opportunities are the reporting engine. This is where business performance lives:

  • Pipeline movement and stage tracking
  • Won/Lost status
  • Revenue values
  • Lead source attribution
  • Trade and service type tracking

How I Structured the Dashboard: 3 Strategic Sections

I divided the entire dashboard into three sections, each designed for a different audience within the business:

  • Executives see revenue and win/loss first
  • Managers see rep and CSR performance second
  • Operations sees lead volume and workflow data third

That top-down structure wasn’t accidental. It mirrors how decisions actually get made in a service business.

Section 1: Revenue & Win/Loss Performance (Opportunity-Based)

Every single widget in this section pulls from Opportunities. This is pure business performance data.

Opportunity Win/Loss Performance dashboard

Win/Loss Breakdown

  • Widget type: Count of Opportunities
  • Filter: Opportunity Status
  • Conditions: Status = Won OR Status = Lost

This gives you a clean ratio of won versus lost deals across any time period you select. At a glance, leadership can see if the close rate is moving in the right direction.

Lost Reason Tracking

  • Widget type: Opportunities filtered by Lost Reason
  • Condition: Status = Lost

Here’s what makes this one more powerful than a standard lost reason report: this client only runs sales calls after a lead enters the funnel. So every lost deal has a rep-logged disposition attached to it via a custom field. That disposition becomes the lost reason you see in the dashboard.

This means management isn’t just seeing that leads were lost — they’re seeing why, straight from the rep’s own notes. [Read the full case study on how I built the disposition and custom field system here →]

Win Rate by Source

  • Widget type: Count of Opportunities
  • Group by: Lead Source
  • Condition: Status = Won

This answers the question every business owner wants answered: which marketing channel is actually closing deals, not just generating leads.

Win rate by source data

Win Rate by Rep

  • Widget type: Count of Opportunities
  • Group by: Assigned User
  • Condition: Status = Won

Instant rep-level accountability. No spreadsheets, no manual tracking. You can see exactly which CSR or sales rep is converting, and who needs coaching.

Revenue by Trade

  • Widget type: Sum of Revenue
  • Group by: Lead Type (custom field)
  • Condition: Status = Won

Lead Type is a custom field we built to tag each opportunity by the service or trade it falls under. When you sum revenue and group by that field, you immediately see which services are driving the most closed revenue.

Revenue by Source

  • Widget type: Sum of Revenue
  • Filter by: Lead Source
  • Condition: Status = Won

Similar to win rate by source — but instead of counting deals, you’re summing dollars. A source might send more leads but close smaller deals. This widget catches that.

Together, these six widgets answered the client’s core reporting questions: where is the money coming from, which services perform best, which reps are closing, and where are deals falling apart.

Section 2: CSR Performance Dashboard (Contact + Task Based)

This section shifts from revenue to operations. It pulls primarily from Contacts and answers three questions:

  1. Who is handling which leads right now?
  2. Are leads actually being nurtured or just sitting in someone’s pipeline?
  3. Is any CSR overloaded while others are underutilized?
CSR Performance dashboard

Open Leads Per Rep

  • Widget type: Contacts
  • Filter: Opportunity Status = Open
  • Group by: Assigned User

This shows you the active lead load each CSR is carrying at any given moment. It’s your workload distribution view — essential for making sure leads aren’t piling up with one person while another rep has nothing to work.

Actively Nurtured Leads by Rep

  • Widget type: Contacts
  • Filter: Nurture Status = Active (via custom field) OR Tag = Active Nurture
  • Group by: Assigned User
Leads in active nurture and Disposition dashboard

This is the widget most agencies never build — and it’s one of the most powerful things you can show a manager.

Having an open lead and actively working an open lead are two completely different things. This widget separates the two. It shows you which reps are genuinely engaging their leads versus which ones have a full pipeline but aren’t moving anything forward.

For this client, we used a custom field called Nurture Status. When a rep updates a lead’s nurture status to Active, it shows up here. Management can now have a real conversation about lead quality and rep engagement using actual data — not gut feel.

Need a CSR performance dashboard built for your team?

Section 3: Business Hours vs After-Hours Lead Tracking

This was the most unique section of the entire build — and it came directly from a real operational problem.

After-hours leads were being mixed in with daytime leads in every report. Management had zero visibility into how many leads were coming in outside business hours, whether those leads were being responded to quickly enough, or whether their automation was actually picking up the slack overnight.

Speed to lead was one of the core reasons this client moved to GHL in the first place. So if we couldn’t measure it by time of day, we were missing the whole point.

The Workflow I Built to Make This Work

Business hour vs After hour leads

I built a GoHighLevel workflow that fires the moment a new lead tag is added to a contact.

Trigger: Contact tag added (new lead tag)

Logic — If/Else Branch:

If the contact is created Monday through Friday AND the time is between 9 AM and 5 PM:

  • Update custom field → Business Hours Lead
  • Add tag → Business Hours (for quick filtering in contact views)

Else (evenings, weekends, or outside those hours):

  • Update custom field → After Hours Lead
  • Add tag → After Hours

Dashboard Widget:

  • Widget type: Contacts
  • Group by: Custom Field (Business Hours Lead / After Hours Lead)

Now the dashboard shows exactly how lead volume splits across business and after-hours windows. Management can see:

  • How many leads are arriving outside staffing hours
  • Whether automation is handling the after-hours volume properly
  • Whether staffing decisions need to change based on when leads actually come in
  • Whether the lead provider is sending quality leads during hours when reps can act on them immediately

This section connects reporting to automation in a way that has a direct impact on speed to lead – and ultimately, on close rate.

Full Dashboard Layout at a Glance

Section 1 — Revenue & Win/Loss Performance

  • Win/Loss Breakdown
  • Lost Reason Analysis
  • Win Rate by Source
  • Win Rate by Rep
  • Revenue by Trade
  • Revenue by Source

Section 2 — CSR Lead Management

  • Open Leads by Rep
  • Active Nurtures by Rep

Section 3 — Operational Volume

  • Business Hours Lead Volume
  • After Hours Lead Volume
  • Leads by Source

Structured top-down: revenue first, rep performance second, operational volume third. Executives, managers, and operations each get exactly what they need without digging through irrelevant data.

Like tutorials in videos? Watch the set up in YouTube:

What Most Agencies Get Wrong With GoHighLevel Dashboards

Worth calling out, because these mistakes are everywhere:

They don’t separate Contacts from Opportunities. They try to pull revenue data from Contact reports and wonder why the numbers don’t add up.

They don’t track nurture status. So there’s no way to tell whether a lead is being worked on or just sitting assigned to someone.

They ignore rep-level performance. The default dashboard shows totals, not breakdowns. No one gets held accountable.

They never build time-based segmentation. After-hours lead volume is invisible, which means speed-to-lead problems stay invisible too.

They add widgets without a strategy. A dashboard isn’t a collection of charts. It’s a reporting system — and it should be designed like one.

A well-built GoHighLevel custom dashboard mirrors how your business actually operates. It’s not about more data. It’s about the right data, for the right person, at the right level of the business.

Results This Dashboard Delivered

  • Full win/loss transparency across every trade and lead source
  • Revenue visibility broken down the way leadership actually thinks about the business
  • CSR accountability without needing daily check-in calls
  • Clear workload distribution across the team
  • Measurable after-hours lead performance tied directly to automation
  • Faster, more confident decision-making at every level of the business

Want This Built for Your Business?

If you’re running a team on GoHighLevel and your dashboard isn’t showing you any of this — you’re operating blind. You’re making staffing decisions, marketing decisions, and rep coaching decisions without the data to back them up.

I build custom GoHighLevel reporting systems, CSR performance dashboards, and lead tracking workflows for service businesses. [Reach out here] and let’s map out what your reporting should actually look like.

Want the full technical breakdown of this exact build — including the disposition system, custom fields, pipeline structure, and full workflow logic?

Read the complete case study here →

Similar Posts

Leave a Reply

Your email address will not be published. Required fields are marked *