Case Study #1: Record Contamination Case Study #2: Dashboard Intelligence Case Study #3: Zapier Elimination Case Study #4: PestRoutes Discovery Case Study #5: Jobber Bridge
Case Study #2

From Data Chaos to Real-Time Intelligence

How AGM Pro Tools unified three disconnected systems into a single live dashboard — in one session.

3
Systems Unified
5 min
Data Refresh
18
Sales Tracked
$154K
Revenue Visible

Heavenly Greens Artificial Turf

Heavenly Greens is a Northern California artificial turf installer serving the Bay Area through a Costco partnership program. Leads flow in through CENTAH (Costco's call center), appointments are set and run by a dedicated sales rep, and jobs are managed across multiple platforms.

The Tech Stack (Before AGM Pro Tools)

Salesforce — CRM, lead tracking, opportunity stages, appointment scheduling
AGM (GoHighLevel) — Pipeline management, contact records, custom fields, workflow automation
CENTAH / M365 — Costco lead intake emails, call center notes
Zapier — 42 automations gluing the systems together (previously; 4 replaced, 38 pending)

"How many appointments did we run this week?"

A question any contractor should be able to answer in seconds. For Heavenly Greens, it required stitching together data from three separate systems — and the answer was still wrong.

Stale Dashboard Data

The Costco pipeline dashboard hadn't refreshed in over 24 hours. No automated refresh existed — data only updated when someone manually ran a script.

Wrong Sold Count

Dashboard showed 16 sales. The actual number was 18. Two sales were invisible because AGM's pipeline stage names didn't match the dashboard's lookup table.

Missing Product Data

The Shaw Turf Products breakdown — which products were sold, how much square footage, at what revenue — was completely empty. Wrong custom field ID in the API query.

Phantom Appointment Counts

Appointments "set this week" showed 1. The real number was 8. Appointments "ran this month" showed 3. The real number was 30. The dashboard was counting by lead creation date, not actual appointment date.

"You're way smarter than me, and my brain is catching the gaps. Don't you find that to be a conundrum?"
— Troy Scott, Founder, AGM Pro Tools

Five Systems, Zero Agreement

Every data point on the dashboard required reconciling information from multiple sources. Each source used different field names, different stage names, and different date conventions.

The Mismatches We Found

Data Point Salesforce Says AGM Says Dashboard Showed
Matthew Degroot's status "1st Presentation Set" "Proposal/Contract Approved" "Appointment Booked" (wrong)
Pipeline stage name N/A "Proposal/Contract Approved" Not recognized (expected "Contract Approved")
Shaw Products field N/A Field ID: AytQaekFFJOfbIZQRS2a Querying wrong ID (bMsGjVxsVlc05ZCekUyJ)
Appointment dates Next_Appointment_Date__c Not tracked Using lead CreatedDate instead
"Appointments ran" 30 past appointment dates Only 4 at post-appointment stages 3 (using AGM stage, not SF date)

One Session. Every Number Corrected.

Problem Identified

Dashboard data was 24+ hours stale

No automated refresh existed. The generation script ran locally, required manual execution, and wrote to a static JSON file on GitHub Pages.

Fix Deployed

Live API endpoint with 5-minute auto-refresh

Moved data generation to a cloud function (Modal) running every 5 minutes. Dashboard now fetches live from the API endpoint. Fallback to static JSON if the endpoint is down.

Problem Identified

Sold count wrong: 16 instead of 18

AGM pipeline stages use names like "Proposal/Contract Approved" and "Total Collected (Paid in Full)" — the dashboard only recognized "Contract Approved" and "Paid in Full." Two sales invisible.

Fix Deployed

Complete AGM stage map — all 12 stages mapped

Pulled the actual pipeline stage names from the AGM API and mapped every one. Dashboard picks the more progressed status between SF and AGM. Matthew Degroot's $4,700 sale immediately appeared.

Problem Identified

Shaw Turf Products card empty

The API query was using the wrong custom field ID. "Costco - Shaw Turf Products" lives at field AytQaekFFJOfbIZQRS2a — the code was querying a non-existent field.

Fix Deployed

Correct field IDs + live API fallback

Fixed the Shaw Products field ID. Added live AGM API calls as fallback when local cache files don't exist (cloud environment). Product breakdown restored: Foundations Freedom, K9 Park, etc.

Problem Identified

Appointment counts completely wrong

"Appointments set this week: 1" — actual: 8. "Appointments ran this month: 3" — actual: 30. The dashboard was using lead creation date, not the actual appointment date from Salesforce.

Fix Deployed

Real appointment dates from SF + new activity rows

Added Next_Appointment_Date__c from Salesforce opportunities. New dashboard rows: Appointments Set Today/This Week/This Month + Appointments Ran This Month. Numbers now match Anthony's actual schedule.

The Same Dashboard, Corrected

Metric Before After
Data freshness 24+ hours stale (manual refresh) 5-minute auto-refresh (live API)
Sales tracked 16 (missed 2 sales) 18 (all accounted for)
Revenue visible $149,029 $154,353
Shaw product breakdown Empty (wrong field ID) Foundations Freedom: 4 jobs, K9 Park: 1 job
Appts set this week 1 (using wrong date field) 8 (real SF appointment dates)
Appts ran this month 3 (required stage change) 30 (past appointment date = ran)
Lead list order Unsorted Alphabetical by last name
Lead activity tracking None Today / This Week / This Month

Every Contractor Running Multiple Systems Has This Problem

For the Owner

You can't manage what you can't measure. If your dashboard says 3 appointments ran this month when the real number is 30, every decision you make about sales staffing, marketing spend, and revenue forecasting is wrong.

For the Sales Team

Anthony ran 30 appointments this month. The dashboard said 3. That's not just a data bug — it's a morale problem. Your best performer's work was invisible.

For the Client Conversation

When you're sitting across from a Costco member showing them your pipeline and the numbers are wrong, you lose credibility. Real-time data isn't a feature — it's table stakes.

For the Business

Three systems that don't talk to each other means three sources of truth — which means zero sources of truth. Every manual reconciliation is time spent not selling, not installing, not growing.

"This thing is only thirteen days old. We can't expect it overnight, right?"
— Troy Scott, on the AGM Pro Tools system continuously improving through real-world use

Delivered in One Session

3 → 1
Data sources unified into one dashboard
24h → 5m
Data refresh interval
8
Data accuracy issues fixed
$5,324
Revenue that was invisible, now tracked
30
Appointments now accurately counted
$0
Downtime during the fix

This Is Why AGM Pro Tools Exists

Heavenly Greens isn't unusual. Every contractor running Salesforce, ServiceTitan, Jobber, Housecall Pro, or Field Routes alongside a CRM has this exact problem: systems that don't agree on basic facts.

AGM Pro Tools doesn't just connect your systems — it reconciles them. It understands that "Proposal/Contract Approved" in AGM means the same thing as "Sales Closed Won" in Salesforce. It knows that an appointment date in the past means the appointment happened, even if nobody updated the stage.

The result: one dashboard you can trust. Real numbers. Real-time. Ready for the client conversation.

Ready to see what your data actually looks like?

Tell us about your business and we'll show you where the gaps are.

Book a Free Strategy Call