← All posts
GoHighLevelReportingApril 26, 2026Clint Research Team

How to Build a Custom Report in GoHighLevel

GoHighLevel ships a Custom Reports module with drag-and-drop widgets and scheduled delivery, but it was built for marketing agencies. Here's how a contractor builds reports that answer trades questions, and where you'll need to bring in another data source.

8 min read

Key takeaways

  • GoHighLevel Custom Reports live under Reports → Custom Reports and use a drag-and-drop widget builder with chart types for Numeric, Donut, Line, Bar, and Table
  • Custom Reports support scheduled email delivery, which is the only way most owners actually consume the data
  • Most contractor reports require joining GHL data with field service tool data (Jobber, HCP, ServiceTitan) and accounting because GHL has no native job, quote, or technician concept
  • The four reports every contractor should run weekly: lead source ROI, speed-to-lead, stalled estimates, and reactivation candidates
  • Clint reads GHL plus Gmail, Calendar, and CallRail and answers any report question on demand without a build
Contents
  1. 01What "report" means inside GoHighLevel
  2. 02Step 1: Decide what question the report answers
  3. 03Step 2: Build the Lead Source ROI report
  4. 04Step 3: Build the Speed-to-Lead report
  5. 05Step 4: Build the Stalled Estimates report
  6. 06Step 5: Build the Reactivation Candidates report
  7. 07Step 6: Schedule delivery
  8. 08Step 7: Build a one-page Owner Brief
  9. 09Step 8: Where reports break for contractors
  10. 10Step 9: When to skip the report build entirely
  11. 11Sources
  12. 12Frequently Asked Questions

GoHighLevel's Custom Reports module sits under Reports → Custom Reports and ships with the same drag-and-drop widget builder as Custom Dashboards, with chart types for Numeric, Donut, Line, Bar, Horizontal Bar, and Table. [HighLevel custom dashboards and reporting]

The difference between a Dashboard and a Report inside GHL is mostly delivery. Dashboards are interactive views you log into. Reports are scheduled snapshots that get emailed on a cadence. Same widgets, different consumption pattern.

For contractors, the report pattern matters more than the dashboard pattern. Owners don't log into CRMs at 6 a.m. They check email and texts. The report that arrives in the inbox before the morning huddle is the report that gets read.

This guide walks through how to build a contractor-useful Custom Report in GHL, what to put in it, and what you'll have to either retrofit or replace because GHL was built for marketing agencies, not trades.

What "report" means inside GoHighLevel

GHL has three reporting surfaces that do different things:

  1. Standard Reports. Out-of-the-box reports for Appointment, Attribution, Call, Conversion, and Pipeline. You cannot edit the widgets, only the date range.
  2. Custom Dashboards. Interactive, live, build-your-own widget sets you view in-platform.
  3. Custom Reports. Same widget builder as dashboards, but optimized for scheduled email delivery. This is where most contractor reporting work happens.

The Custom Reports module gives you a drag-and-drop layout, the same widget catalog as dashboards, scheduled delivery to a list of recipients, and PDF export. [GHL custom dashboards (covers reports)]

That's the surface area. Now the contractor work.

Step 1: Decide what question the report answers

Before you touch the builder, write the one question this report answers in 10 words or fewer. If you can't, the report will become noise.

Good questions for a contractor weekly report:

  • "Where did our leads come from this week and which paid off?"
  • "How fast did we respond to leads, and who was slow?"
  • "How many estimates are stalled, and which are worth chasing?"
  • "Which past customers should we reactivate this month?"

Each one becomes a separate report. One question per report. Don't build a 12-widget report that answers everything. Nobody reads those.

Step 2: Build the Lead Source ROI report

Inside GHL, navigate to Reports → Custom Reports → Create Report. Name it "Lead Source ROI Weekly."

Drag in these widgets:

  • Bar chart: Contacts created this week grouped by source field
  • Bar chart: Won opportunities this week grouped by source field
  • Numeric: Total ad spend this week (Meta Ads widget if connected, otherwise a Custom Field aggregate)
  • Custom Metric: Cost per booked deal = ad spend / won opportunities, grouped by source [GHL custom metrics]
  • Table: Top 10 sources by booked revenue this week

The honest limitation: GHL only knows the spend for sources you've natively connected. Meta Ads and Google Ads via the standard integrations work cleanly. Yelp, Angi, Nextdoor, Google LSA spend has to come in through a Zap into a Custom Field or a CSV upload.

This is the dashboard most contractors retrofit through Google Sheets, and it is the single most useful weekly report you can run. We dug deeper in GoHighLevel dashboards home service contractors actually need.

Text Clint: "Revenue this week by lead source vs last week, including ad spend and cost per booked job."

Step 3: Build the Speed-to-Lead report

This one matters because the home services industry converts calls at 46 percent on average per Invoca's 2025 report, but every minute of delay drops that number. [Invoca 2025 home services report]

Build a Custom Metric: median time between contact creation and first outbound message.

Drop these widgets into "CSR Performance Weekly":

  • Numeric: Team median speed-to-first-outbound this week
  • Bar chart: Same metric grouped by user (your CSR list)
  • Line chart: Daily trend over the last 30 days
  • Table: Worst 10 cases this week (contacts with longest time-to-first-outbound)

The "worst 10" table is the one that drives behavior. People remember specific names. They don't remember a 4.2 minute team average.

Step 4: Build the Stalled Estimates report

This is the report that exists nowhere by default in GHL but pays for itself the week you turn it on.

Build a Smart List: opportunity stage = "Estimate Sent" AND last activity > 7 days ago. [GHL Smart Lists]

Embed it in a Custom Report as:

  • Numeric: Count of stalled estimates
  • Numeric: Total dollar value of stalled estimates (sum of opportunity value)
  • Table: Contact name, opportunity value, days since last activity, last assigned rep
  • Bar chart: Stalled count grouped by assigned rep

Schedule the report for Monday 6 a.m. The owner reads it on the way to the office. The first call of the week is the most stalled deal.

We covered the universe of stalled-deal patterns in find cold quotes in your CRM and how to find alive leads in a contractor CRM.

Text Clint: "Show me every quote in GHL over $2,000 with no contact in 10+ days, ranked by value."

Step 5: Build the Reactivation Candidates report

If you've been running GHL for over a year, you have a buried gold mine of customers who bought once and never came back.

Build a Smart List filtered by: tag status-active-customer was true at any point AND last opportunity activity > 12 months. Layer in a Custom Field check for last_service_date if you populate it from your field service tool.

Custom Report widgets:

  • Numeric: Reactivation candidate count
  • Bar chart: Candidates grouped by service tag (water heater, drain, install, etc.)
  • Table: Top 50 candidates by past lifetime value (requires a lifetime_value Custom Field, populated by workflow on stage change)

The reactivation playbook itself lives in customer reactivation from CRM playbook. The report just makes the queue visible.

Text Clint: "Draft a reactivation email for contacts tagged 'maintenance customer' with no contact in 12 months."

Step 6: Schedule delivery

A report nobody opens is wasted work. Set a delivery schedule.

Inside the report builder, click Schedule → Add Recipient. Choose:

  • Frequency: Weekly Monday 6:30 a.m. local timezone
  • Format: PDF attached + summary text in body
  • Recipients: Owner, ops manager, lead CSR (different reports for different recipients)

GHL's Custom Reports module supports automated delivery as a core feature. [GHL custom reports schedule]

The trap to avoid: don't schedule too many reports to too many people. A weekly Monday digest of the four reports above, plus a monthly source-attribution review, is enough. More than that and people stop opening any of them. The pattern is covered in contractor dashboard metrics owners ignore.

Step 7: Build a one-page Owner Brief

Combine the highlights of the four reports above into a single one-page Owner Brief that emails Monday morning.

Layout:

  • Top row: This week vs last week revenue, leads, booked jobs (3 numeric widgets)
  • Middle row: Lead source ROI top 5 (table) | Stalled estimates top 5 (table)
  • Bottom row: CSR speed-to-lead leaderboard (bar) | Reactivation candidates top 5 (table)

If a number on the brief looks wrong, the owner texts the team. If everything looks fine, they keep driving. That's the job of the brief.

This is the same pattern we built into Clint's morning brief, except Clint sources from GHL plus Gmail plus Calendar plus CallRail at once. We compare the wider playbook in home service KPIs complete metrics playbook.

Step 8: Where reports break for contractors

Be honest about what GHL Custom Reports cannot do without retrofitting:

  • No job-cost margin. GHL doesn't know parts cost or labor hours. Revenue minus cost = margin requires a join to your accounting tool.
  • No technician productivity. Revenue per tech per day requires dispatch data GHL doesn't carry.
  • No multi-touch attribution. GHL tracks first-touch source. If a lead saw your Facebook ad, then googled you, then filled the form, GHL says "Google" and forgets the rest.
  • No quote line-item analysis. Documents & Contracts in GHL ships PDFs, not structured line items. You can't report on "average margin on water heater jobs" inside GHL alone.
  • Limited cross-pipeline reporting. Most widgets scope to one pipeline at a time. If you split Lead and Job pipelines correctly (which you should), some cross-funnel reports take extra work.

We covered the deeper architectural problem in 8 signs you have outgrown your contractor CRM.

Step 9: When to skip the report build entirely

Honest answer: most of the time.

The report build is only worth it if the same person is going to read the same report on the same cadence forever. The moment the question changes, the report goes stale.

For everything else, use Clint. Clint reads your GHL, Gmail, Google Calendar, and CallRail data live. You text the question. You get the answer.

  • Text Clint: "Cost per booked job by source for last month vs this month."
  • Text Clint: "Which estimates over $5,000 have not been touched in 7 days?"
  • Text Clint: "Who replied to last week's review request and did the review actually post?"

The report build inside GHL is for the 4 standing weekly questions that never change. Clint is for the 100 ad-hoc questions you have between Mondays.

Sources

Frequently Asked Questions

6 questions home service owners actually ask about this.

  • 01What's the difference between Custom Reports and Custom Dashboards in GHL?

    Same widget builder, different delivery. Dashboards are interactive views you log into. Reports are scheduled email snapshots, exported as PDF. Both pull from the same data sources.

  • 02Can I include ad spend in a GHL Custom Report?

    Yes for natively connected ad accounts (Meta Ads, Google Ads, Google Analytics). For other ad platforms (Yelp, Angi, LSA, Nextdoor), you need to feed spend through Zapier into a Custom Field or upload a CSV.

  • 03How do I email a GHL report to non-GHL users?

    The Schedule feature inside Custom Reports lets you add any email address as a recipient, no GHL login required. The recipient gets a PDF attachment.

  • 04Can GHL reports include data from Jobber, Housecall Pro, or ServiceTitan?

    Not natively. You need to push data from your field service tool into GHL Custom Fields via Zapier or Make, then report on the custom fields. Most contractors run a parallel BI tool or use Clint instead.

  • 05What's the most important contractor report to build first?

    Lead source ROI. Spend, leads, booked jobs, cost per booked job, all by source. It tells you where to add or cut ad budget. Everything else is downstream of that decision.

  • 06How often should I review my reports?

    The four core reports (Lead Source ROI, Speed-to-Lead, Stalled Estimates, Reactivation) should run weekly. The Lead Source ROI report deserves a 30-minute monthly review. Everything else is ad-hoc and lives better in a chat tool than a report.

See Clint in action

Clint is the pre-built AI for home service shops. Connect your CRM, email, and phone system in minutes and the agents run on your real data.