Golden Rule
Command Center
Golden Rule
Command Center
March 2026
Strangers
Visitors
Leads
Customers
Members
Advocates
Scale
TLDR FOR MARK
  • 🚨 Utah website showing Iowa content to Utah visitors. Mark's Ogden GM confirmed Mar 6: Iowa cities and (515) phone number appear on every page. Ad dollars going to a black hole. TOP PRIORITY — not yet fixed.
  • $4,912 in Google Ads spend with zero conversions. Every dollar wasted.
  • 6 landing pages getting 770 sessions/month with zero leads — ad black holes eating the budget.
  • 11 pages that DO convert at 5–16% prove the model works — city+service pages are the answer.
  • Phase 1 (stop the bleeding) takes 2 hours today. Phase 2 (fix site) takes 2 weeks. Phase 3 (scale) starts when conversion rate hits 5%.

GTM Engine — Customer Journey Map

The complete demand-to-advocacy loop. Click any zone to navigate to its pillar.

DEMAND FUNNEL
AWARENESS
Google AdsLSASEOCTV/DisplayGBP
CONSIDERATION
WebsiteReviewsSocial Proof
PURCHASE
Phone CallFormBooking
ADOPTION BRIDGE
Where Most Growth Breaks
Onboarding ST dispatch
Activation Tech service
First Outcome Working HVAC
RELATIONSHIP FLYWHEEL
AdoptionMembership sign-up
RetentionMaintenance & tune-ups
LoyaltyMulti-year member
AdvocacyReviews & referrals
ExpansionAdditional services

Constraint Diagnosis — Where Growth Is Breaking

Constraint Journey Stage Status Current Reality Action Required
ICP / Message Fit Awareness Broken 🚨 CONFIRMED: Mark's Ogden GM sees Iowa cities + (515) phone on every Utah page. Geo-targeting/localization completely broken. 50+ pages affected. Screenshot evidence from Mar 6. Fix all Utah pages: replace Iowa phone with (801) 218-2225, remove Iowa city references, fix geo-routing. NOT YET STARTED.
Channel Efficiency Awareness Broken $4,912 spend, zero conversions. Brand terms at $40/click. Pause waste, reallocate to converting terms
Conversion System Purchase Broken Main page 0.59% conversion. No phone number, no CTA. Even pages WITH forms show Iowa (515) number instead of Utah (801) number. Add (801) 218-2225 + click-to-call to all Utah pages. Add CTAs above fold. Fix urgent-repair landing page. NOT YET STARTED.
Time-to-Value Adoption Bridge Needs Data Dispatch time, completion rate unknown Connect ServiceTitan reporting
Retention Drivers Flywheel Needs Data Membership conversion rate, churn unknown Connect ServiceTitan membership data
Expansion Motion Flywheel Needs Data Cross-sell rate unknown Track multi-service adoption
BINDING CONSTRAINT

CONVERSION SYSTEM

The fastest growth comes from fixing the bottleneck closest to revenue.

🚨 CONFIRMED Mar 6: Mark's Ogden-area GM logged in from home — Iowa cities and (515) phone number appear on every Utah page. This means every Utah visitor sees Iowa content. Ad dollars going to a black hole. Demand reaches the site but gets the wrong message, wrong phone number, wrong city.

  1. Fix Iowa content on ALL 50+ Utah pages immediate — NOT YET STARTED
  2. Replace (515) 393-4526 with (801) 218-2225 on every Utah page immediate — 50+ pages identified
  3. Fix urgent-repair landing page (ID 22208) immediate — 0.59% conv, no phone number
  4. Add CTAs + contact forms to city pages this week
  5. Build dedicated Ogden landing pages next 2 weeks
Google Ads ROI
$74K lifetime spend, CPA rose from $67→$261. Utah ads now PAUSED.
BROKEN
🚨 Utah Site — Iowa Content
CONFIRMED: All Utah pages show Iowa cities + (515) phone. Ogden GM verified Mar 6. Not yet fixed.
TOP PRIORITY
Main Landing Page
0.59% conversion rate — no phone number, no CTA. FIX PENDING.
BROKEN
Brand Terms
Paying $40/click for own name, should be $1–2
BROKEN
Competitor Waste
$2,415 paying for people searching competitors
BROKEN
LSA Leads
9.4/month — should be 25–30
UNDERPERFORMING
City Pages
11 pages converting 5–16% — the proven model
WORKING
GA4 Analytics
Live API connected, pulling data
CONNECTED
Account Autopilot
ZERO campaign changes in 12 months
NEGLECTED

Site Health Board

goldenrulephc.com — 11 diagnostic items (22 pages audited Mar 7)
Yoast SEO — Installed & Configured
Title tags, meta descriptions, and XML sitemap now active on all pages
FIXED TODAY
301 Redirects — Cleaned Up
Broken redirect chains resolved, 404 errors mapped to correct pages
FIXED TODAY
WordPress REST API — Secured
App passwords configured, unauthenticated endpoints disabled
FIXED TODAY
Phone Number Audit — Complete
Identified all pages showing Iowa (515) number to Utah visitors
FIXED TODAY
Gravity Forms Audit — Complete
All forms inventoried, submission paths documented, broken forms identified
FIXED TODAY
🚨 Utah Header/Footer — Iowa Phone on ALL 71 Utah Pages
CONFIRMED Mar 7 audit (22 pages checked, 13/13 location pages affected): Global header shows (515) 393-4526 instead of (801) 218-2225. Footer shows Grimes, IA address. Root cause: Cornerstone theme element e21064 hardcoded to Iowa. Greg must fix in Cornerstone Builder. NOT YET FIXED.
TOP PRIORITY
🚨 /urgent-repair-salt-lake-city/ — 404 Page Not Found
CONFIRMED Mar 7: This Utah urgent repair landing page returns a 404 error. If paid traffic is directed here, those ad clicks are 100% wasted. Previously had 0.59% conversion — now 0%. NOT YET FIXED.
BROKEN
Utah Service Sub-Pages — Iowa Body Content
CONFIRMED Mar 7: Service sub-pages (cooling-services, heating-services, plumbing-services) contain "Des Moines", "Central Iowa" references in body content. Affects at least Ogden, Sandy, SLC sub-pages. NOT YET FIXED.
BROKEN
Utah Urgent Repair Pages — No Phone / No Nav
CONFIRMED Mar 7: /location-utah-urgent-repair/ and /location-utah-urgent-repair-plumbing/ have NO phone number and NO navigation. /urgent-repair-electrical/ shows Iowa phone (515) 310-1425. 4 of 9 landing pages have working 801 numbers. NOT YET FIXED.
BROKEN
Gravity Forms — Missing on Key Pages
Service pages and city landing pages missing contact forms entirely
BROKEN
GTM Container — 43 Tags, No Governance
Parsed from gtm.js. Tags verified but no change-management process in place.
NEEDS REVIEW
Mobile Speed — Needs Improvement
LCP above 3s on mobile. Large hero images uncompressed. Render-blocking CSS/JS.
SLOW

Utah Site Fix Tracker

22 pages audited Mar 7, 2026 — 71 Utah location pages in sitemap. Zero clean pages found. Email sent to Mark & Greg with annotated screenshots.

Issue Pages Affected Owner Priority Status
Global header phone shows Iowa (515) 393-4526
Cornerstone element e21064. Must add conditional logic for Utah → (801) 218-2225
All 71 Utah location pages Greg (Cornerstone) CRITICAL NOT FIXED
Global footer shows Grimes, IA address + Iowa phone
Footer on all Utah pages shows Iowa HQ address instead of Utah office
All 71 Utah location pages Greg (Cornerstone) CRITICAL NOT FIXED
/urgent-repair-salt-lake-city/ returns 404
Page is completely broken. Paid traffic hitting a dead page = 100% waste
1 page (landing page) Greg CRITICAL NOT FIXED
Urgent repair pages missing phone number
/location-utah-urgent-repair/ and /location-utah-urgent-repair-plumbing/ have no phone. /urgent-repair/ also no phone.
3+ landing pages Greg HIGH NOT FIXED
Service sub-pages have Iowa body content
"Des Moines", "Central Iowa" in cooling/heating/plumbing sub-pages (Cornerstone elements)
20+ service sub-pages Greg (Cornerstone) HIGH NOT FIXED
/location/utah/ main page — Iowa CTAs & fleet text
"Looking for Des Moines Metro Area?" button, "Central Iowa", fleet text mentions Des Moines/Omaha
1 page (main Utah hub) Greg (Cornerstone) MEDIUM NOT FIXED
/urgent-repair-electrical/ shows Iowa phone
Displays (515) 310-1425 + "Des Moines" content. May be intentionally Iowa-targeted.
1 page Greg LOW NOT FIXED
Audit Details

71 Utah pages found in sitemap. 22 audited (13 location + 9 landing). 13/13 location pages show Iowa phone in header. 16/22 pages have Iowa references in body. 9/9 landing pages missing nav. 1 page (urgent-repair-salt-lake-city) returns 404. Phone numbers found: (515) 393-4526 (Iowa, wrong), (801) 218-2225 (Utah, correct), 801-901-8553, 801-624-6836, 801-901-8519 (Utah PPC tracking), (515) 310-1425 (Iowa, on electrical page), 1-888-986-2424 (toll-free).

Data Connections
GA4 Analytics — LIVE API Google Ads — LIVE (Admin) GBP Iowa — LIVE (Manager) GBP River City — LIVE GBP Cornerstone — LIVE GBP PHCE — LIVE GSC — LIVE WordPress (3 sites) — LIVE API GTM — Parsed from gtm.js — 43 tags verified ServiceTitan — LIVE via MCP HubSpot — Portal 42521627 Avoca — LIVE via MCP LSA Leads — CSV Change History — CSV
🔗
Source Properties
All admin dashboards — Google Ads, GA4, Search Console, GBP, GTM, LSA, WordPress, directories, social
Direct links to every platform Golden Rule uses
📊 Google Analytics (GA4)
Property: 319584840 (goldenrulephc.com)
🔍 Google Search Console
Site: goldenrulephc.com
💰 Google Ads (PPC/Utah)
Account: 448-550-2333 (Utah)
🏆 Google LSA (Utah)
Account: 189-035-6117
🏆 Google LSA (Iowa/DSM)
Account: 274-787-7158
📍 Google Business Profile
Multiple locations (Iowa + Utah)
🏷️ Google Tag Manager
Container: GTM-K7JHHJD
GA4: G-3PG7L9B0RM | Ads Conv ID: 10854236492
🌐 WordPress (GRPHC)
Site: goldenrulephc.com
🌐 WordPress (River City AC)
Site: rivercityac.com
🌐 WordPress (Cornerstone)
Site: cornerstoneroofingexteriors.com
🧲 HubSpot CRM
Portal: 42521627
📺 Datorama (CTV/Display)
MediaSpark managed
Yelp Business
North Salt Lake listing
🅱️ BBB
Accredited since 2003
🔧 Angi
SLC listing
🏠 HomeAdvisor
Screened & Approved
📘 Facebook
Iowa page
📸 Instagram
@utgoldenrule (Utah)
🏘️ Nextdoor
Business page
MCP Data Pipeline
41 live API tools across 7 connectors. Endpoint: gr-connectors-web.vercel.app/api/mcp
Real-time data pipeline powering automated dashboards
Connector Tools Status What It Provides
ServiceTitan 4 Connected Jobs, Calls, Invoices, Customers
Avoca (AI Voice) 3 Connected Call Events, Call Stats, Call Detail
Google Ads (PPC/Utah) 3 Connected Campaign Stats, LSA Leads, Keywords
Google Ads (LSA/DSM) 3 Connected Campaign Stats, LSA Leads, Keywords
Google Ads (LSA/Utah) 3 Connected Campaign Stats, LSA Leads, Keywords
GA4 + Search Console (GRPHC) 3 Connected Site Traffic, Conversions, Search Performance
GA4 + Search Console (River City) 3 Connected Site Traffic, Conversions, Search Performance
GA4 + Search Console (Cornerstone) 3 Connected Site Traffic, Conversions, Search Performance
Google Business Profile 2 Connected Business Metrics, Reviews
WordPress (GRPHC) 3 Connected Posts, Form Submissions, SEO Data
WordPress (River City) 3 Connected Posts, Form Submissions, SEO Data
WordPress (Cornerstone) 3 Connected Posts, Form Submissions, SEO Data
Pipeline Engine 5 Connected Revenue by Channel, Funnel, Match Rates
Revenue Attribution Engine

The MCP pipeline connects all demand capture, call handling, CRM, and analytics into one revenue attribution engine. When the dashboard goes live with real-time data, every metric on this dashboard will be pulled automatically through these connectors — no manual exports needed.

Source code: github.com/GetFresh-Ventures/Golden-Rule MCP Endpoint: gr-connectors-web.vercel.app/api/mcp
✅ Access Status — All Systems Connected
Google Ads: Admin access on MCC (235-544-6862). Keyword API verified live. Campaign data accessible via Pipedream.
Google Business Profile: Manager on all 4 locations — Iowa (confirmed), River City, Cornerstone, PHCE (accepted).
WordPress: REST API live on goldenrulephc.com, rivercityac.com, cornerstoneroofingexteriors.com via App Passwords.
GA4 + GSC: Live API connections on Property 319584840 and goldenrulephc.com.
GTM: Container GTM-K7JHHJD — parsed from gtm.js, 43 tags verified and cataloged.
ServiceTitan: Connected via MCP Pipeline (4 tools: Jobs, Calls, Invoices, Customers). Grimes tenant LIVE. River City, Utah, Cornerstone tenants — Derrick configuring by Mon Mar 9.
HubSpot: Portal 42521627 — Connected via MCP Pipeline (5 tools).
!Avoca: MCP tools exist but return empty data. API access blocked — no developer API in dashboard. Arvin contacting Tyson/Barron for access. Avoca currently serves as spam gateway only (removed from UT front-end Feb 25).
10 of 11 data sources connected. Avoca API access blocked — pending developer credentials from Avoca team (Tyson/Barron).

Demand Performance

All channels → Site → Conversions
Organic Search
76,732sessions
2,345key events
Primary traffic driver
Paid Search
17,075sessions
825key events
Utah paused — CPA was $260 in Q3
Direct
18,007sessions
1,735key events
Brand recognition strong
LSA
104leads total
9.4/moavg rate
Should be 25–30/mo
Cross-network
12,682sessions
1,608key events
CTV/Display — awareness only
Referral
4,248sessions
78key events
Low conversion from referrals
Social
6,983sessions
31key events
Near zero conversions
Email
1,365sessions
391key events
Highest event rate (7.8%)
Google Business Profile
7,500+reviews (Iowa)
4locations
Utah GBP needs reviews & optimization

Conversion Funnel — Utah has a landing page problem, not a traffic problem

Utah Overall
5,975
sessions
205
conversions
3.4% rate
Iowa Benchmark
1,662
sessions
216
conversions
13% rate
City+Service Pages
~13%
conv rate
Matches Iowa — proves the model
"utah-urgent-repair"
2,560
sessions wasted
0.6%
conv rate
The black hole
The gap: Utah converts at 1/4 the Iowa rate. City+service pages match Iowa at ~13%. The generic "utah-urgent-repair" page at 0.6% is the single biggest leak.

Spend Status

Google Ads Utah PAUSED — was bleeding money
Google Ads Iowa Active — stable performance
LSA Utah Active — underperforming, 9.4 leads/mo
LSA Iowa Active — strong volume
CTV/Display PAUSED — no attribution path
🔗
Attribution Pipeline
Calls → Bookings → Revenue pipeline. Maps every data source from ad click to collected revenue, identifies gaps, and shows what’s needed to close the attribution loop.
Campaign → Revenue linkage is the #1 data gap
A. The Pipeline Funnel
Ad / Campaign
Google Ads, LSA, SEO, CTV, Radio
campaignId, UTM, tracking # 🟡 Partial
Call Comes In
Avoca / ServiceTitan
callType, from, duration, recordingUrl 🟢 Live (ST)
Lead Created
ServiceTitan
leadCallId, customerId, campaignId 🟢 Live
Job Booked
ServiceTitan
jobNumber, bookingId, businessUnitId 🟢 Live
Revenue Collected
ServiceTitan Invoices
total, paidOn, subTotal, salesTax 🟢 Live
B. What We Have Connected
Data Source Status Key Fields Available Attribution Fields
ServiceTitan Jobs 🟢 Live via MCP jobStatus, total (revenue), businessUnitId, completedOn campaignId, leadCallId, bookingId
ServiceTitan Calls 🟢 Live via MCP callType (Booked/Lead), duration, from/to, recordingUrl customer address, zip code, campaign link
ServiceTitan Invoices 🟢 Live via MCP line items, subTotal, salesTax, total, paidOn job linkage, business unit per line
Avoca Calls 🟡 Connected — No Data call events, outcomes, stats Needs API credentials on Vercel
Pipeline Funnel (DSM) 🟢 Active — Low Confidence 2 completed, $2,700 revenue 0% match rate — identity resolution needed
Pipeline Funnel (Utah) 🟢 Active — Low Confidence 3 inquiries, 2 booked, $0 revenue 0% match rate — identity resolution needed
Google Ads PPC 🟢 Live via MCP campaigns, keywords, ad groups, spend No revenue linkage yet
Google Ads LSA 🟢 Live via MCP leads, lead detail, status No ST job linkage yet
C. The Missing Link: Campaign → Revenue
🔑 DNI Is the Bridge

ServiceTitan has a campaignId on every job — this connects to their internal campaign tracking. ST Marketing Pro ($2,500/mo) provides DNI (Dynamic Number Insertion) — this is the bridge between ad clicks and booked jobs.

Once DNI maps tracking numbers to campaigns, we get the full chain:

Google Ads Campaign X Tracking Number Y ST Call Z Job ABC Invoice $1,800

The MCP pipeline engine has the Neon Postgres DB ready to store matched records, but needs automated ingestion from ServiceTitan + Google Ads to start correlating.

D. Pipeline Data Gaps — What Needs to Happen
Configure Avoca API credentials on Vercel deployment Connector is live but returns 0 calls — likely missing env vars
Automate ServiceTitan → Pipeline Engine data ingestion (jobs + calls) Currently manual queries via MCP — need scheduled daily sync
Map ServiceTitan campaignId values to campaign names IDs exist on every job but need a lookup table to be meaningful
Set up identity resolution: match ST calls to Google Ads clicks Match via phone number + timestamp window — Pipeline Engine 0% match rate today
Connect ST Marketing Pro DNI data to close the attribution loop DNI maps tracking numbers to campaigns — the critical missing link
Build automated daily sync: Pipeline Engine queries ST + Ads + Avoca Correlate and store in Neon Postgres — infrastructure is ready
Add QuickBooks revenue reconciliation QBO is connected via Pipedream — need to reconcile ST invoices with QBO deposits
📡
Digital Channels & Weighting
10-channel ranking with cost per lead, budget allocation, and OWN vs RENT analysis. Includes quarterly investment model ($5K→$10K/mo, $88.5K total year) with 7 detailed channel playbooks.
SEO delivers 27.46x median ROI — invest in OWN channels first
⚠️ Revenue Ops Gate

Any channel you fund must be wired to the <60s speed-to-lead SLA — otherwise you buy leads that decay before contact. Utah budget expansion is frozen until first-line AI is stable. See Implementation for the full checklist.

Channel Ranking

Rank Channel CPL Speed to Results Asset Type Budget %
1Email/SMS to Past Customers<$101–2 weeksOWN10%
2Referral Programs$0–502–4 weeksOWN5%
3Google Business Profile / Local SEO$47 avg3–6 monthsOWN20%
4Nextdoor + Facebook Groups<$362–6 weeksRENT/OWN10%
5Google LSA$45–85DaysRENT20%
6Meta Ads (FB/IG)$20–751–3 weeksRENT15%
7Organic SEO (Website)Lowest LT6+ monthsOWN10%
8Google PPC (Search)$89–156HoursRENT5%
9YouTube Pre-Roll~$0.10–0.30/view2–4 weeksRENT3%
10Geofencing$1K–3K/mo1–2 weeksRENT2%

OWN vs RENT Channels

OWN 45%
RENT 55%

OWN channels build equity — reviews, SEO, email lists stay when you stop spending. RENT channels — leads stop the day you stop paying. Target shift to 60/40 OWN by Month 6.

🌙 After-Hours Marketing Weapon

After-hours/overflow/weekend AI coverage is live via Avoca. Run time-window campaigns (evenings, weekends) because the system now captures demand that previously leaked. Fund "urgent intent" campaigns during off-hours when competitors still leak calls.

Key Channel Data

27.46x SEO median ROI (HVAC)
52% organic revenue from GBP
80% Nextdoor users hire from app
$0.69 avg FB click for HVAC
98% SMS open rate in 20 min
31% LSA conversion rate
20–30% lower CPL on Bing

12-Month Investment Summary

Quarter Monthly Budget Total Spend Leads/Month Blended CPL
Q1 (Mo 1–3)$5,000$15,00056–89$56–79
Q2 (Mo 4–6)$6,500$19,50082–137$47–79
Q3 (Mo 7–9)$8,000$24,000102–159$51–80
Q4 (Mo 10–12)$10,000$30,000130–203$49–76
YEAR TOTAL$7,375 avg$88,500~120 avg/mo~$62

At avg $285 ticket and 40% close rate: ~48 new jobs/month × $285 = $13,680/month revenue. Annual: $164,160 revenue on $88,500 spend = 1.85x ROAS Year 1 (growing to 3x+ in Year 2 as organic compounds).

Channel Playbooks

📍 Google Business Profile (GBP) — #1 Priority

Why: 52% of organic closed revenue. 80%+ of HVAC leads start from Google Maps.

Step-by-Step:

  1. Claim & verify at business.google.com
  2. Primary category: "HVAC Contractor" — Secondary: "Plumber", "Electrician", "Air Conditioning Repair Service", "Furnace Repair Service"
  3. Business description (750 chars max) emphasizing family-owned, 24/7, no surprise fees, Gold Club from $99/yr
  4. Upload 10+ real photos — trucks, techs, completed jobs. Google rewards active listings with 2x more direction requests
  5. Weekly GBP posts — seasonal tips, offers. "$49 AC Tune-Up" with CTA button
  6. Respond to EVERY review within 24 hours
  7. Pre-populate Q&A with 10 FAQs
  8. Add every service with keyword-rich descriptions
  9. Enable call button, messaging, booking link
  10. NAP consistency: exact Name/Address/Phone across all directories

AI/Low-Effort: Publer ($10/mo) for weekly posts. AI to draft 12 posts in 30 minutes.

Expected: 35–60% increase in map views within 90 days. Top 3 Map Pack within 6 months.

Monthly Cost: $10/mo

🏆 Google Local Service Ads (LSA)

Why: Appears above ALL other ads. Pay only for leads. Google Guaranteed badge = instant trust. Converts at 31% vs 12% for PPC.

  1. Create LSA account at ads.google.com/local-services-ads
  2. Select services: HVAC Repair, AC Installation, Furnace Repair, Plumbing, Electrical
  3. Service area: Salt Lake County + Utah County + Davis County ZIP codes
  4. Upload insurance, license, background check docs
  5. Set weekly budget: Start at $500/week ($2,000/month)
  6. Upload 5+ professional team/truck photos
  7. Hours: Mon–Sat 7am–9pm, emergency 24/7
  8. Connect ServiceTitan CRM for auto-booking
  9. Critical: Dispute bad leads within 30 days for credits

Only run ads during hours you can answer phone within 90 seconds. Avoca AI already handles this.

Expected: 15–30 qualified leads/month at $45–85/lead.

Monthly Cost: $1,500–2,500/mo

📘 Meta Ads (Facebook/Instagram)

Why: $0.69/click avg — cheapest paid click. $49 tune-up campaigns = $36/lead.

Campaigns:

  1. Seasonal Tune-Up: "$49 AC Tune-Up Special" Lead Ad. Target: Homeowners, 30–65, within 25mi of SLC. $15/day.
  2. Emergency Awareness: "No Heat? Call Now" Call Ad. Run Oct–Feb.
  3. Gold Club: "Protect your home for $99/year" with competitor price comparison.
  4. Retargeting: Ads to goldenrulephc.com visitors who didn't call (last 30 days).
  5. Lookalike Audiences: Upload customer list → FB finds similar homeowners.

Expected: $20–75/lead for service, $75–200/lead for installs. At $750/mo → 10–20 leads.

Monthly Cost: $500–1,000/mo self-serve

✉️ Email/SMS Re-activation

Why: Cheapest channel. 98% SMS open rate in 20 min. One HVAC company: $150 email → 17 service calls ($8.82 CPS).

Campaign Templates:

  1. Winter Prep (Oct): "Hi [Name], it's been [X months] since we serviced your furnace. Book before the rush."
  2. Summer Cool-Down SMS (May): "AC tune-up season! Book this week & save $25. Reply YES."
  3. Anniversary Email (12 mo): Time for a check-up reminder + Gold Club priority.
  4. Emergency Weather Alert SMS: "SLC freeze warning! Is your furnace ready? Same-day appointments."
  5. Referral Ask (2 weeks post-service): Refer a friend — both get $25 off.

Setup: All 5 as automated sequences in Mailchimp ($20/mo). One-time setup, runs forever.

Expected: 5–15 calls per campaign. $8–50 CPS.

🏘️ Nextdoor

Why: 80% of users hire businesses referred on app. 17% web-visit-to-lead conversion.

  1. Claim business page (free)
  2. Post helpful content 2–3x/week: "5 Signs Your AC Needs Attention" (NOT sales pitches)
  3. Answer questions in "Recommendations" — be the helpful neighbor
  4. Run Local Deals: "$49 AC Tune-Up" targeted to older-home ZIPs
  5. Ask satisfied customers to recommend you on Nextdoor

Expected: 5–10 leads/month at <$100 CPS within 60 days.

Monthly Cost: $0 organic or $100–300/mo with Local Deals

🔍 Organic SEO

Why: 27.46x median ROI. 42% of all HVAC leads. Lowest long-term CPL ($10–15 once ranking).

Location Pages: Create pages for top 20 areas: "/hvac-repair-salt-lake-city", "/furnace-repair-sandy-ut", "/ac-installation-west-jordan". 800–1,200 words each.

Content (4 posts/month):

  • "How Much Does a New Furnace Cost in Utah? (2026 Pricing Guide)"
  • "5 Signs Your AC Is About to Fail"
  • "Choosing an HVAC Company: Family-Owned vs Corporate"

Expected: First organic leads in 4–6 months. 20–40 leads/month by month 12.

Monthly Cost: $500–1,500 or $0 if done in-house with AI

🔵 Bing Ads

Why: 20–30% lower CPL than Google. Older homeowner demographic = Golden Rule's ideal customer.

Setup: Import Google Ads campaigns into Bing in one click. Same structure, lower cost.

Budget: $150–300/mo. Small but consistent.

Expected: 3–8 additional leads/month at 20–30% lower cost than Google.

Note: Yelp is directory-only (not a funded channel). TikTok is Phase 5 only (Month 6+, brand awareness, not lead gen).

📋
Marketing Playbook
SLC-specific keyword cost data and tactical playbook. HVAC repair SLC: $9–15 CPC, emergency plumber SLC: $15–25 CPC. Blended industry CPL benchmark: $104.
Blended HVAC CPL benchmark: $104 — Golden Rule target: $62

SLC Market Keyword Data

Keyword Avg CPC Monthly Searches Competition
"HVAC repair Salt Lake City"$9–151,200High
"AC repair near me"$12–183,400Very High
"furnace repair Utah"$8–12800Medium
"emergency plumber SLC"$15–25600High
"HVAC company Salt Lake City"$7–12900High
LSA cost per lead (SLC)$45–85N/AMedium
Geofencing$1K–3K/moN/ALow
Blended HVAC CPL benchmark$104N/A

Channel ROI Comparison

Golden Rule's blended target of ~$62 CPL beats the $104 industry benchmark by 40%. This is achievable because OWN channels (Email/SMS, GBP, SEO) have near-zero marginal cost once established. For detailed channel playbooks, see Digital Channels.

💡 Recommendations
  1. Focus PPC on "emergency" and "repair" terms — These have highest intent. "HVAC repair Salt Lake City" at $9–15 CPC with a 5% conversion rate = $180–300 CPA. Acceptable for a $500+ avg ticket.
  2. Block competitor name terms NOW — Add negative keywords for all competitor brand names (Smedley, Genuine Comfort, Anytime, etc.). You're currently spending $2,415 on clicks for people searching competitor names. See Search Terms section.
  3. Launch branded search protection — You're paying $980 for your own brand name clicks. Run a brand protection campaign at $0.50–1.00 CPC max bid to prevent competitors from bidding on "Golden Rule."
  4. Invest in LSA over PPC for cost efficiency — LSA at $45–85/lead beats PPC at $104 CPL. Goal: push LSA to 25–30 leads/month by increasing budget to $500/week and optimizing GBP reviews.
  5. Build SEO content around $0 CPC long-tail terms — Blog posts targeting "furnace making noise," "AC not cooling upstairs," "water heater pilot light won't stay lit." These get 500–1,000 searches/month with $0 CPC because they're informational. Convert with "Call us for a diagnosis" CTA.
  6. Track blended CPL weekly — Combine all channel costs ÷ all leads. Target: $62 blended. Currently unknown because ServiceTitan isn't connected. This is the single most important metric once data flows.
💸
Google PPC Audit (MediaSpark)
MediaSpark audit of Golden Rule SLC Google Ads: plumbing Search at 9.3% conversion (benchmark 39.59%), $175 CPA (benchmark $65). HVAC campaigns PAUSED (were the best performers at $45.71 CPA). No brand protection. Cross-reference with real data in Utah Digital Performance section.
$175 CPA vs $65 benchmark — but real data shows PMax HVAC was $45.71
🚨 Bottom Line for Mark

Your current Google Ads account is bleeding money. For every $175 you spend to get one lead, competitors pay $65. That’s $110 wasted per lead — at ~17 leads/month, that’s roughly $1,870/month in overspend. Worse: HVAC campaigns aren’t even running in SLC, and no one is protecting your brand name from competitor bidding. The fixes below are straightforward and most can be done this week.

Campaign Performance vs Benchmarks

Campaign Type Status Conv. Rate Benchmark Your CPA Benchmark CPA Verdict

CPA Gap — What You Pay vs What You Should Pay

Search Plumbing
$175 (yours)
$65 (benchmark)
▲ $110/lead overspend (2.7x)
PMax Plumbing
$70 (yours)
$24 (benchmark)
▲ $46/lead overspend (2.9x)
HVAC Campaigns
⏸️ PAUSED — Was your best performer ($45.71 CPA, 360 conversions). See Utah Digital Performance for real data.
Brand Campaigns
❌ NOT RUNNING — Competitors can bid on your name

Conversion Tracking Is Broken

Why Your Numbers Look Bad (And Actually Are Bad)

Google’s algorithm is optimizing for the wrong things. Right now, it counts YouTube subscriptions and page views as “conversions” — so it’s sending budget toward people who watch videos, not people who need a plumber. Fix the conversion hierarchy and the algorithm will start finding real leads.

❌ Demote to Secondary (Today)
  • YouTube Channel Subscriptions
  • Page View: Book Urgent Repair
  • YouTube Follow-On Views

These don’t represent business value and are polluting bid optimization.

✅ Create as Primary (This Week)
  • Immediate Service Request (emergency)
  • Free Online Quote Submission
  • Schedule Service Booking
  • Live Chat Engagement

These are real leads. Google will optimize toward them once set as Primary.

⚠️ Disable AI Max Immediately

AI Max is enabled but showing minimal delivery. Low delivery combined with unpredictable behavior makes it a liability — potential for surprise spend spikes that blow your budget. Turn it off today. Re-evaluate once campaigns are restructured and conversion tracking is fixed.

MediaSpark’s Recommended Action Plan

Action When Impact Detail

Projected Outcomes (Post-Fix)

Current State
~17 leads/mo
$3K spend → $175 CPA → plumbing only
Proposed State
~46 leads/mo
$5K spend + $1.5K mgmt → ~$109 CPA blended
Projected Monthly Return
$23,077
46 leads × 40% close × $285 avg ticket
Projected ROAS
3.55x
$23K return on $6.5K total spend

MediaSpark Investment Proposal

Item Current Proposed Change
Monthly Ad Spend$3,000$5,000+$2,000 (+67%)
Management Fee$0 (self-managed)$1,500/moNew — professional management
Total Monthly$3,000$6,500+$3,500 (+117%)
Expected Leads~17/mo~46/mo+170% more leads
Expected Revenue≈$5K/mo≈$23K/mo+360% revenue
🎯 Mark’s Decision Point

Before approving the $6,500/mo proposal: The free fixes (negative keywords, conversion tracking, AI Max disable) should be done first regardless. Those alone will improve CPA by 20–40%. Once the account is clean, evaluate whether professional management at $1,500/mo is justified by the additional optimization MediaSpark can provide. The biggest quick win is launching HVAC and brand campaigns — that’s where the real money is.

Source: MediaSpark Google PPC Campaign Audit (March 2026). Benchmarks from MediaSpark client portfolio. Projections assume proper conversion tracking and negative keyword cleanup.

🔍
Search Terms Deep Dive
100 search terms analyzed. $4,912 total spend with ZERO conversions. $2,415 wasted on competitor names, $980 on your own brand. Every dollar here produced nothing.
$4,912 spent → 0 conversions — 100% waste rate
🚨 Every Dollar Wasted — Zero Conversions Across All 100 Terms

This is the single clearest proof that negative keywords are missing. You paid $2,415 for people searching for your competitors by name (Smedley, Genuine Comfort, Anytime, etc.) and $980 for your own brand name (Golden Rule) — clicks you should get organically for free. The fix is adding negative keywords + launching a brand protection campaign (see Phase 1 items 4 and 5).

Total Spend Analyzed
$4,912
100 search terms, Feb 2022 – Mar 2026
Competitor Name Waste
$2,415
Smedley, Genuine Comfort, Anytime, etc.
Brand Name Waste
$980
Golden Rule queries — should be free organic
Total Conversions
0
Not a single lead from any of these terms
Brand Your own brand name ($980) Competitor Competitor names ($2,415) Service Generic service terms Supply/Parts Wholesale/parts searches

All 100 Search Terms — Sorted by Cost

Click any column header to sort. Color-coded by category. Every term with spend and zero conversions is money you can recover by adding negative keywords.

Search Term Category Cost Clicks Impressions CPC Conv.

Source: Google Ads Search Terms Export (Feb 2022 – Mar 2026). All terms shown had impressions ≥ 34. Zero conversions across entire dataset.

💡 Recommendations
  1. Add negative keywords IMMEDIATELY — This is the single fastest money save. Add every competitor name as an exact-match negative keyword: Smedley, Genuine Comfort, Anytime Heating, Valley Plumbing, Manwill, etc. Saves $2,415 instantly.
  2. Create a brand protection campaign — Separate campaign for "Golden Rule" terms at $0.50 max CPC. This prevents competitors from stealing your brand traffic and stops you from overpaying for your own name.
  3. Audit the remaining $1,517 in generic waste — Review all non-brand, non-competitor terms with zero conversions. Common culprits: "HVAC supply," "furnace parts," "plumbing supplies" — people looking to buy parts, not hire a service company.
  4. Set up monthly search term audits — Every 30 days, export search terms, filter for $50+ spend with 0 conversions, add as negatives. This should be a recurring MediaSpark deliverable. Estimated monthly waste prevention: $200–400.
  5. Build a positive keyword list from converting terms — Cross-reference with terms that DO convert (need Google Ads conversion tracking working first). Double down on what works, kill what doesn't.
  6. Request MediaSpark negative keyword report — Ask Dana for the current negative keyword list. If it has fewer than 50 terms, it's dangerously thin. A healthy HVAC account should have 200+ negative keywords.
🕳️
Ad Black Holes — Zero-Conversion Pages
6 landing pages received 770 sessions with ZERO conversions. Every visitor to these pages was wasted traffic. From GA4 live data (Dec 2025 – Mar 2026).
770 sessions → 0 conversions — fix or redirect these pages
These Pages Are Eating Your Budget

770 real visitors landed on these 6 pages and not a single one converted. If even 3.6% had converted (the site average), that's 28 leads you missed. Each page needs to be rebuilt with a clear CTA, a scheduling widget, or redirected to a page that actually converts.

Total Wasted Sessions
770
Across 6 zero-conversion pages
Missed Leads (at 3.6% avg)
~28
If these pages converted at site average

Zero-Conversion Landing Pages

Landing Page Sessions Users Conv. Rate Avg Duration (s) Recommended Fix

Source: GA4 Property 319584840. Utah landing pages with 80+ sessions and 0 conversions. Date range: Dec 1, 2025 – Mar 5, 2026.

🏆
High-Converting Pages — What's Working
11 pages converting at 5%+ (with 10+ sessions). Top performer: Kaysville Plumbing at 16.67%. These pages are the blueprint — replicate this pattern across all city pages.
Top page converts at 16.67% vs 3.63% site average — 4.6x better
🎯 The Blueprint Is Right Here

These 11 pages prove what works: city name + specific service = high conversion. Kaysville Plumbing converts at 16.67% — nearly 5x the site average. North Salt Lake gets 479 sessions with 6% conversion and 211s average time on page. The common pattern: specific city, specific service, clear CTA, local trust signals. Clone this approach for every city page.

Site Average Conv. Rate
3.63%
205 conversions from 5,975 sessions
High Performers Avg Rate
8.6%
These 11 pages, 5%+ conversion

Top-Performing Landing Pages (5%+ Conv. Rate, 10+ Sessions)

Landing Page Sessions Users Conversions Conv. Rate Avg Duration (s)

Source: GA4 Property 319584840. Pages with 10+ sessions and 5%+ conversion rate. Date range: Dec 1, 2025 – Mar 5, 2026.

📞
LSA Lead Intelligence
103 LSA leads analyzed (Apr 2025 – Feb 2026). 79 charged, 17 not charged, 7 credited. Top cities: Salt Lake City (13), North Salt Lake (11), Ogden (8). 47 phone calls, 56 messages.
103 total leads — 76.7% charge rate | Top job: HVAC maintenance (16 leads)
🎯 LSA Lead Profile

HVAC maintenance dominates (16 leads) followed by water heater installs (5) and water heater repairs (4). Salt Lake City and North Salt Lake generate the most leads. 54% of leads come via message vs 46% phone — fast message response is critical. 7 leads were credited (disputed), mostly from outer service areas. The charge rate of 76.7% is healthy — aim to maintain by responding within 5 minutes.

Total LSA Leads
103
Apr 2025 – Feb 2026
Charged
79
76.7% charge rate
Not Charged
17
Likely duplicate or spam
Credited
7
Disputed — refund received
Phone Calls
47
45.6% of all leads
Messages
56
54.4% of all leads — fast reply critical

Leads by Location

City Lead Count

Leads by Job Type

Job Type Lead Count

Recent LSA Leads (Last 30)

Most recent leads from the LSA inbox export. Click column headers to sort.

Date Location Job Type Lead Type Charge Status

Source: Google LSA Leads Inbox Export (Apr 2025 – Feb 2026). 103 total leads for Golden Rule PHC Utah.

💡 Recommendations
  1. Increase LSA weekly budget to $500 — At 9.4 leads/month, you're underperforming vs. the 25–30 target. Higher budget = more impression share. LSA is your cheapest lead channel.
  2. Respond to messages within 5 minutes — 54% of leads come via message. Google tracks response time and it directly affects your LSA ranking. Set up Avoca or a dedicated person to monitor LSA messages. Every minute matters.
  3. Dispute invalid leads within 30 days — You've successfully credited 7 leads. Keep disputing duplicates, spam, and out-of-area leads within the 30-day window. At $45–85/lead, each successful dispute is real money back.
  4. Upload professional photos and update GBP — LSA ranking is heavily influenced by your GBP profile quality: reviews, photos, response rate, and business info completeness. Professional truck/team photos increase click-through.
  5. Expand service categories — If you're only listed for HVAC, add plumbing and electrical categories. More categories = more impression opportunities. HVAC maintenance (16 leads) dominates — water heater and plumbing could add 30%+ lead volume.
  6. Track charge rate monthly — target 80%+ — Current 76.7% is healthy but improvable. Faster response times and tighter service area = fewer invalid leads. Every 5% improvement in charge rate saves ~$300/month.
📈
Utah Digital Performance (Real Data)
Live GA4, Google Ads, and LSA data for Utah. 5,972 Utah sessions converting at 3.42% vs Iowa's 13%. Best campaign (PMax HVAC, $45.71 CPA) is paused. Worst performer (Plumbing Search, $239 CPA) is running.
Utah converts at 1/4 the rate of Iowa — landing pages are the bottleneck
🚨 Bottom Line for Mark

Your Utah digital presence has a conversion problem, not a traffic problem. Nearly 6,000 visitors land on Utah pages, but only 204 convert — a 3.42% rate. Iowa's location pages convert at 13% — nearly 4x better. The single biggest issue: your main paid ad landing page (/location-utah-urgent-repair) gets 2,560 sessions and converts at just 0.59%. Meanwhile your best campaign (PMax HVAC at $45.71/lead) is paused, and the worst performer (Plumbing Search at $239/lead) is running. Fix the landing pages and un-pause PMax HVAC — those two moves alone could double your Utah leads.

Utah vs Iowa: Conversion Gap

Utah Sessions
5,972
89 Utah landing pages (Jun '25 – Mar '26)
Utah Conversion Rate
3.42%
204 key events from 5,972 sessions
Iowa Conversion Rate
13.00%
216 key events from 1,662 sessions
Gap
3.8x
Iowa converts 3.8x better on the same site

Utah Landing Pages — By Traffic Volume

Your main ad landing page gets the most traffic but barely converts. City-specific pages convert 3-10x better. The pattern is clear: localized pages with specific service content outperform generic "urgent repair" pages.

Landing Page Sessions Key Events Conv. Rate Avg Engagement Status

Highest-Converting Utah Pages

These pages prove the model that works: city name + specific service = higher conversion. Kaysville plumbing converts at 16.1% — nearly 5x the Utah average. This is the blueprint for every city page.

Landing Page Sessions Key Events Conv. Rate

Zero-Conversion Pages (Wasted Traffic)

855 Sessions → 0 Conversions

These 10 pages received real traffic but produced zero key events. They need to be rebuilt or redirected to pages that actually convert. Every visitor to these pages is wasted ad spend or wasted organic opportunity.

Landing Page Sessions (Wasted) Recommended Action

Google Ads Campaigns — Actual Performance

This is your real Google Ads data, not MediaSpark estimates. Total spend: $74,137 across 4 Utah campaigns. The PMax HVAC campaign was your best performer at $45.71/lead — but it's paused.

Campaign Status Total Spend Conversions CPA Assessment

CPA by Campaign — Visual Comparison

Utah-PMAX-HVAC (PAUSED)
$45.71 — Best CPA
Utah-PMAX-Plumbing (ACTIVE)
$85.30
Utah-HVAC Search (PAUSED)
$215.62
Utah-Plumbing-Search (ACTIVE)
$239.24 — Worst CPA
🎯 Mark's Immediate Move

Un-pause Utah-PMAX-HVAC today. It delivered 360 conversions at $45.71 each — that's 5.2x more efficient than the Plumbing Search campaign that's currently running. At the same time, either fix the Plumbing Search campaign's landing pages (they convert at 0.59%) or pause it and shift budget to PMax. This one change could cut your effective CPA in half.

Quarterly Performance Trend

Q2 2025 was the sweet spot: $49.30 CPA on $13K spend. Then HVAC campaigns got paused in Q3 and CPA exploded to $260. Q1 2026 is recovering but still 2x the Q2 level.

Quarter Spend Clicks Conversions CPA Trend

Auction Insights — Who You're Competing Against

Golden Rule has only 14.59% impression share — meaning you're invisible for 85% of searches. Competitors with lower share are still outranking you 14% of the time and appearing above you 45-66% of the time.

Advertiser Impression Share Top of Page Rate Outranking Share Position Above Rate

Device & Demographics

📱 Device Split
Mobile85.5% of spend ($63.4K)
Desktop13.2% ($9.8K)
Tablet + TV1.3% ($942)

544 of 671 conversions (81%) came from mobile. Landing pages must be mobile-first.

👥 Audience Profile
Male68.4%
Female31.6%

Peak ages: 25-54 (59% of impressions). This is homeowners in prime home-maintenance years.

⚠️ Weekend Blind Spot

Your ads run Monday–Friday 7am–5pm only. Saturday had 450 impressions, Sunday had zero. Emergencies don't take weekends off. Your competitors are capturing every Saturday broken furnace and Sunday burst pipe while your ads are dark. At minimum, test weekend hours for emergency services — HVAC and plumbing emergencies peak Saturday 9am–3pm.

Spend by Network

Network Spend Clicks Avg CPC Note

Top Search Keywords

Your highest-spend keywords are all HVAC-related — and they're all paused. The active plumbing keywords have lower volume and higher CPA. This is the data behind why un-pausing HVAC is the single most impactful move.

Keyword Spend Clicks CTR Status

Local Services Ads — Lead Breakdown

104 LSA leads from April 2025 to February 2026. 71% are charged leads (meaning Google deemed them valid). Salt Lake City generates the most leads, followed by Ogden and Layton — matching your ZIP code coverage areas.

Leads by City
City Leads
Leads by Job Type
Job Type Leads
Total LSA Leads
104
Apr 2025 – Feb 2026 (11 months)
Lead Type Split
60/40
62 messages / 42 phone calls
Charged Rate
71%
74 charged / 30 not charged
Avg Leads/Month
~9.5
Low volume — needs GBP optimization to increase

Full Site Traffic Channels (GA4)

Organic Search drives 49% of all traffic (76.7K sessions) with solid engagement. Cross-network (PMax) has the highest conversion rate at 8.6%. The "Unassigned" channel showing 13,707 key events at 70% rate is almost certainly misconfigured tracking — investigate and clean up.

Channel Sessions Active Users Key Events Engagement Rate Event Rate
🎯 Data Access Status — What We Have vs. What We Need

Current access status for live dashboard integration:

  • GA4 ✅ CONNECTED — Property 319584840 live via API. Landing pages, sessions, conversions flowing.
  • Google Ads ✅ UNBLOCKED — Greg provided goldenruleatgmail.com credentials (Mar 6). Google connector now active. Campaign data accessible.
  • Google Business Profile ❌ BLOCKED — API connected but returns no locations. Root cause: diraj@getfreshventures.com is not a Manager/Owner on the GBP listings. Greg must add under Users in GBP Manager.
  • Google Search Console ✅ LIVE — Connected and pulling keyword rankings, impressions, CTR, and device data for goldenrulephc.com.
  • GTM ❓ UNKNOWN — Need to verify Google Tag Manager access for conversion tracking fixes.
  • Campaign Change History ❓ UNKNOWN — Needed to verify what MediaSpark has actually changed vs. recommended.

Sources: GA4 Landing Pages (Jun 2025–Mar 2026), GA4 Traffic Acquisition (Aug 2024–Aug 2025), Google Ads Overview Export (Feb 2025–Mar 2026), Google LSA Leads Inbox (Apr 2025–Feb 2026). All data from Golden Rule PHC property.

📺
CTV & Display Intelligence (MediaSpark / Datorama)
$29,444 total CTV spend across Des Moines. 531,849 impressions, 186 tracked conversions (view-through). All delivery is Iowa only — zero Utah impressions visible.
$158 cost per tracked conversion — awareness channel, not performance

Campaign Overview

Total Impressions
531,849
Jan 2025 – Mar 2026
Total Spend
$29,444
Across all CTV tactics
Tracked Conversions
186
View-through, not direct
Cost Per Conversion
$158
For tracked actions
⚠️ CTV Is an Awareness Channel Being Measured as a Performance Channel

The 0.003% CTR is normal for CTV — it's TV advertising, not search ads. The $29K spend generated 531K impressions across Des Moines. This is brand awareness, not direct response. Evaluate CTV by brand lift and recall, not by clicks or direct conversions.

Tactic Breakdown

Tactic Impressions Clicks Spend Conversions CPM
Premium Publisher AGF374,33511$16,36099$43.70
Live Sports82,0895$6,32375$77.03
YouTube TV48,9620$5,7000$116.42
Site Retargeting26,4630$1,06112$40.11

Geographic Delivery

City ZIP Impressions Conversions
Ankeny5002320,8550
West Des Moines5026513,1661
West Des Moines5026611,4441
Des Moines503128,4530
Waukee502637,7020
Urbandale503226,9570
Johnston501315,7630
Grimes501114,7110
🚩 Zero Utah Impressions

ALL CTV delivery is Iowa/Des Moines ONLY. Zero Utah impressions. If you're paying for CTV in Utah, that money isn't showing up here. Ask MediaSpark to confirm Utah CTV status.

Conversion Breakdown

124 Click-to-Call
28 Book/Schedule Form Fill
34 Same-Day Booking Form

Note: These are view-through conversions — someone saw a CTV ad and later took action. Not direct click-to-convert.

💡 Recommendations

1. STOP measuring CTV like Search/PPC — it's an awareness channel. Track brand search lift after CTV flights, not CTR.

2. CONFIRM Utah CTV status — zero Utah impressions visible. Is there a separate Utah CTV campaign? If so, where's the data?

3. Site Retargeting is the most efficient tactic at $40 CPM with 12 conversions — consider shifting more budget here.

4. Premium Publisher AGF has highest volume but lowest conversion rate — review creative rotation.

5. YouTube TV: $5,700 spent with ZERO conversions — either the attribution is broken or the creative isn't working.

Current Month Trend

Mar 1–6 Impressions
27,097
-31% vs prev
Mar 1–6 Clicks
0
-100% vs prev
Mar 1–6 Conversions
19
-17% vs prev
Mar 1–6 Spend
$1,175
Week 1 of March

Source: Datorama (MediaSpark) — Golden Rule 2026 campaign. Data range: Jan 1, 2025 – Mar 6, 2026. Conversions are view-through attribution.

📍
ZIP Code Drilldowns
50 target ZIPs across SLC/Wasatch Front with demographics, housing age, income, and geofencing priority. Color-coded by zone type for campaign targeting.
50 ZIPs analyzed — click any row for marketing playbook
🔴 Hot Zone: Pre-1980 >50%, high income, high owner-occ — upgrades
🟠 Warm Zone: Mixed age, moderate income — maintenance
🔵 Growth Zone: New construction >40% — warranty capture
ZIP City/Area Population Housing Units Med Year Built % Pre-1980 Med HH Income Owner-Occ % Zone Geo Priority

Data: ACS 2023 5-year, Census 2020. "—" indicates data not available in public sources for that ZIP.

💡 Recommendations
  1. Prioritize Hot Zone ZIPs for direct mail — Focus first 3 campaigns on the highest-density Hot Zone ZIPs (pre-1980 homes, high income, high owner-occupied). These homes need upgrades NOW. Budget $0.50–0.75/piece, 1,000 per ZIP per drop.
  2. Create zone-specific landing pages — Build 3 landing pages: /hvac-older-homes (Hot Zone pitch: "Your 40-year-old furnace is costing you $800+/year extra"), /hvac-maintenance (Warm Zone: tune-up plans), /new-home-warranty (Growth Zone: builder warranty expiring).
  3. Geofence the top 10 Hot Zone ZIPs — Run display/CTV ads geo-targeted to the top 10 ZIPs by pre-1980 housing percentage. Creative: "Is your home's heating system older than your car?"
  4. Cross-reference with ServiceTitan job history — When connected, overlay actual Golden Rule job locations on this ZIP map. Find ZIPs with high potential but zero jobs = untapped territory. Find ZIPs with lots of jobs = testimonial goldmine.
  5. Use ZIP income data for pricing tiers — ZIPs with median income >$100K can absorb Premium membership ($299). ZIPs under $75K respond better to Basic ($99) with financing options.
🗺️
Post-Purchase Journey
The complete post-service lifecycle — from job completion through renewal and referral. Each stage shows the responsible system and current activation status.
7 stages — 2 planned, 3 need setup
🟢 Active
Service Complete
ServiceTitan
🟡 Planned
Follow-up
Avoca AI (pilot)
🟡 Planned
Review Request
QR Sticker + Google Link
🟡 Planned
Membership Offer
ServiceTitan (no auto-trigger)
⚪ Needs Setup
Seasonal Maintenance
ServiceTitan
⚪ Needs Setup
Renewal
ServiceTitan
⚪ Needs Setup
Referral
ServiceTitan + HubSpot
Journey Gap Analysis

Only the first stage (Service Complete) is fully automated. The follow-up call, review request, and membership offer stages have plans but no automated triggers. Seasonal maintenance, renewal, and referral stages are entirely unbuilt. Priority: Wire Avoca AI follow-up + QR sticker review flow to activate the first 3 post-service touchpoints.

📊
Relationship Metrics
What we can track today vs. what we need. 2 live metrics from Google Business Profile, 8 gaps requiring ServiceTitan, Avoca, or new tools.
🟢 2 live — 🟡 1 pending — ⚪ 7 need data
Metric Current Value Source Status
Google Review Rating 4.6 stars (Iowa) Google Business Profile 🟢 Live
Total Google Reviews ~1,200 Google Business Profile 🟢 Live
Review Response Rate TBD GBP — needs Account ID 🟡 Pending
Avg Days to First Review Unknown ServiceTitan + GBP Needs Data
Membership Conversion Rate Unknown ServiceTitan Needs Data
Member Churn Rate (Annual) Unknown ServiceTitan Needs Data
Cross-sell Rate (HVAC→Plumbing) Unknown ServiceTitan Needs Data
Referral Rate Unknown ServiceTitan + HubSpot Needs Data
Avoca AI Answer Rate Unknown Avoca MCP (connected) Needs Baseline
Customer Lifetime Value Unknown ServiceTitan + Accounting Needs Data
Data Priority

ServiceTitan MCP is already connected with 4 tools (Jobs, Calls, Invoices, Customers). Querying membership enrollment, churn, and cross-sell data is the single highest-leverage data pull — it unlocks 5 of the 7 missing metrics above.

Review Intelligence
Analysis of 44 negative competitor reviews across 15 companies. Six pain patterns identified with counter-positioning playbooks for Golden Rule.
34% of complaints = surprise fees — your #1 counter-positioning opportunity

Pain Pattern Analysis

34%
Surprise Fees & Hidden Costs
"Quoted $200, billed $800"
→ Counter: Publish pricing ranges on website. Written estimates before work begins. "No Surprise Guarantee" badge.
28%
Aggressive Upselling
"Tech said I needed $12K system, second opinion said $200 fix"
→ Counter: Train techs on honest diagnosis. Offer "Get a Second Opinion" guarantee.
19%
Call Center Runaround
"Transferred 4 times, no one could help"
→ Counter: Avoca AI answers within 2 rings. No call center — same local team every time.
11%
Different Tech Every Time
"New person every visit, had to re-explain everything"
→ Counter: Assign dedicated techs by area/customer. "Same Tech Every Time" promise.
5%
Pressure Sales Tactics
"Wouldn't leave until I signed"
→ Counter: Never push. "Take your time, we'll be here when you're ready."
3%
4-Hour Wait Windows
"Sat home all day waiting"
→ Counter: 2-hour arrival windows with real-time tech GPS tracking.

All 44 Competitor Negative Reviews

Source: Google Reviews from 15 competitor companies. Click column headers to sort.

Company Rating Date Key Quote Responded?
💡 Recommendations
  1. Launch "No Surprise Guarantee" landing page — Create a dedicated page at goldenrulephc.com/no-surprises with written estimate policy, real customer testimonials, and a price-match promise. 34% of competitor complaints are about surprise fees — this is your #1 differentiation opportunity.
  2. Train technicians with competitor pain script — Give techs a one-page card with the top 6 competitor complaints and Golden Rule's counter-promise for each. When a customer says "I'm getting other quotes," the tech should address these fears proactively.
  3. Build a "Why Golden Rule" comparison page — Not a direct competitor attack, but a values-based page: "What we promise" covering same-tech guarantee, 2-hour windows, upfront pricing, no-pressure diagnostics. Optimize for "best HVAC company SLC" searches.
  4. Monitor competitor reviews monthly — Set up Google Alerts or BirdEye for top 5 competitors. New negative reviews = new content opportunities. Each pain pattern is a blog post and Google Ads headline.
  5. Weaponize the "Second Opinion" offer — 28% of complaints are aggressive upselling. Run a Google Ads campaign: "Told you need a $12K system? Get a free second opinion from Golden Rule." Target competitor brand names.
🚀
Review Generation Engine
Compliant 3-prong review system: tech bonuses, NiceJob automation, and QR codes. Legal framework to avoid Google/FTC violations while scaling from 800 to 2,000+ reviews.
Target: 50-70 new reviews/month by Month 3
⚠️ CRITICAL LEGAL WARNING

Google PROHIBITS offering customers any incentive for reviews — no discounts, no free membership, no credits, no contest entries. FTC 2024 rule: $51,744 per violation. Google increased enforcement in January 2025. The system below is fully compliant.

The Compliant Review Machine — 3 Prongs

💰 Prong 1: Technician Bonus Program (THE legal way)
  • $10 per 5-star Google review tied to tech's name
  • Monthly leaderboard: #1 gets $250, #2 gets $150, #3 gets $100
  • One pest control company went from 3 → 100+ reviews/month using tech bonuses
  • Techs verbally ask: "If you're happy, I'd really appreciate a Google review. It helps me out!"
  • Cost: $500–1,500/month → generates 50–150 reviews/month
  • ROI: 50 new reviews = jump from #6 to #3 in Map Pack within 90 days
🤖 Prong 2: Automated Review Requests (NiceJob)
  • Deploy NiceJob ($75/mo) — integrates with ServiceTitan
  • Triggers SMS + email within 2 hours of job completion
  • 70% of customers leave a review WHEN ASKED
  • SMS: "Hi [Name], your tech [Tech Name] would love your feedback. [Google review link]"
  • 98% open rate within 20 minutes. One-tap link to Google.
📱 Prong 3: QR Code on Equipment
  • Every install/service gets branded sticker with QR code
  • QR links to: "How was your service?" → Google review link
  • Captures reviews weeks/months later when customer interacts with equipment
  • See full QR Sticker Strategy for details

Outbound texting pilot is already running (~5 weeks). Tie review velocity to the outbound program as customers respond to outreach.

🏆 Gold Club — The Elegant Play

DON'T: "Free membership for a review" (ILLEGAL).
DO: After service, offer Gold Club at discounted rate as part of service package (independent of review). SEPARATELY, send automated review request (no mention of membership). Members naturally become repeat customers who leave MORE reviews. The membership IS the retention engine; reviews come from great service + automated asks.

Review Velocity Targets

Timeframe Target How
Month 120–30 new reviewsTech bonuses + NiceJob automation
Month 350–70 new reviews/moFull team engaged + QR stickers deployed
Month 680–100 new reviews/moFlywheel running
Month 12100+ new reviews/mo1,200+ total. Competitive with top players
📱
QR Sticker Strategy
Equipment stickers with dynamic QR codes for seasonal messaging, review capture, and repeat business. $200 investment → 60%+ repeat rate based on Applewood Plumbing model.
$200 investment → projected $2,850 revenue from 10 converted calls
60%+ repeat business (Applewood Denver)
70% repeat calls via QR (Indiana HVAC)
$0.15–0.50 per sticker cost

Program Details

  • Design: 2"×2" waterproof vinyl, gold/dark branded, Golden Rule logo, "Scan for Service" CTA
  • Dynamic QR (PairedQR $20/mo or Bitly): Change destination by season — Summer: "Book AC Tune-Up" / Winter: "Schedule Furnace Check" / Year-round: Direct call to (801) 218-2225
  • Placement: Every service call — furnace, AC, water heater, electrical panel
  • Landing page: One-tap call, "Book Service", seasonal offer, Gold Club signup, "Rate Your Last Service" → Google review
  • Bonus: Emergency shutdown instructions for that equipment type (Applewood model)

Cost Analysis

Item Cost ROI Projection
1,000 stickers$150–300If 10% scan, 10% convert = 10 calls
Dynamic QR platform$20–50/moSeasonal messaging flexibility
Landing page$0 (built into website)Captures reviews + bookings
10 converted calls × $285= $2,850 revenueOn $200–350 investment

Vendors: Comgraphx, PairedQR, Websticker, StickerGiant

🏆
Membership Plans
Gold Club 3-tier pricing ($99/$199/$299) vs competitor plans ($240–350). Revenue potential: 200 members × $99 = $19,800/yr ARR, growing with Plus/Premium upsells.
$99 Gold Club Basic = cheapest major plan in Utah market
Basic
$99
per year
  • 1 annual HVAC tune-up
  • Diagnostic fee waived
  • 10% parts discount
  • Next-day priority scheduling
  • Standard after-hours rate
  • Water heater flush
  • Electrical panel check
  • 1-year price lock
Premium
$299
per year
  • 2 tune-ups + plumbing inspection
  • Diagnostic fee waived
  • 20% parts discount
  • 4-hour window priority
  • 25% off after-hours rate
  • Water heater flush
  • Electrical panel check
  • 3-year price lock + transferable

Competitor Comparison

Company Plan Name Annual Cost Includes Gold Club Advantage
Any Hour ClubMaintenance Plan$240/yr1 tune-up, 10% partsBasic is 58% cheaper
Lex AirPremium Club$350/yr2 tune-ups, priorityPlus saves $151/yr for same benefits
My BuddyService Plan$199/yr1 tune-up, diagnostic waivedBasic saves $100/yr
Industry Average$240–350/yrVariesGold Club: 58–72% cheaper
Revenue Potential

200 members × $99 Basic = $19,800/yr ARR. Plus/Premium upsells add 30–50% more. Upsell path: Basic → Plus conversion at 12-month mark with "loyalty upgrade" offer.

💡 Recommendations
  1. Launch Basic at $99 as a loss-leader — Your $99 plan is 58–72% cheaper than competitors. Lead EVERY marketing piece with "$99/year — cheapest HVAC plan in Utah." The goal isn't the $99 — it's the lifetime customer relationship and upsell to Plus/Premium.
  2. Create a 12-month auto-upsell sequence — At the 10-month mark, email Basic members: "Upgrade to Plus for just $100 more — includes 2 tune-ups + 15% parts discount." Target 25% Basic→Plus conversion. ServiceTitan can automate this when connected.
  3. Bundle membership into every repair quote — Every tech quote over $500 should include: "Add Gold Club membership and save $X on this repair + get annual tune-ups included." Make the savings math obvious.
  4. Offer 1-year free membership for negative review recovery — When a customer has a bad experience, offer a free Gold Club year ($99 value) as a recovery gesture. This turns a 1-star review into a retained customer. NOT for review incentivization (that violates Google policy) — purely for service recovery.
  5. Set 500-member target for Year 1 — 500 × $99 = $49,500 ARR. At 25% upsell to Plus: additional $12,500. Total membership revenue target: $62K/year. Track monthly sign-ups on this dashboard.
  6. Add membership to the website with online sign-up — Currently membership requires calling in. Add a /gold-club page with Stripe or ServiceTitan checkout. Reduce friction to zero.
⚙️
Automation Hub
12+ recurring tasks with automation tools, costs, and priorities. Avoca AI already in production for 24/7 call handling. Total stack: ~$160–475/mo saves 15–20 hrs/week.
15–20 hours/week saved at ~$160–475/mo total stack cost
Task Frequency Manual Time Automation Tool Monthly Cost Priority
Phone call handling24/7N/AAvoca AI (live)Existing✅ Active
Review request after servicePer job5 minNiceJob$75🔴 Critical
Email/SMS seasonal remindersMonthly2 hrsMailchimp$20–50🔴 Critical
Review responsePer review10 minBirdeye AI / templates$0–299🔴 Critical
Social media postingWeekly3 hrsBuffer$15–50🟠 High
GBP postsWeekly30 minPubler$10–25🟠 High
LSA budget monitoringDaily15 minGoogle auto-rules$0🟠 High
QR sticker link updatesSeasonal15 minPairedQR$20–50🟠 High
Membership renewal remindersPer customer5 minServiceTitan CRMIncluded🟠 High
Blog post draftsMonthly4 hrsAI (ChatGPT/Claude)$20🟠 High
Competitor price monitoringMonthly4 hrsManual or SEMrush$0–130🔵 Low
Referral trackingOngoing1 hr/wkManual or ReferralCandy$0–50🔵 Low
$160–475/month total automation stack
15–20 hrs/week time saved
📲 Outbound Demand Board Fill

Outbound texting via Avoca is already in pilot (~5 weeks). Treat as production line:
Weekly list build → enrichment → campaign → booked → show rate → revenue per job
Plumbing/Electrical target: ≥10–12% outbound→booking conversion. Extend to HVAC after "unknown 10+" enrichment reduces from ~30% to ≤15%.

Avoca Capabilities Already in Production

After-hours/overflow/weekend call handling is LIVE. CSR headcount reduced from 7+1PT to 5 while maintaining coverage. Per-call feedback logging active. Speed-to-lead: first touch under 60 seconds for LSA/ENG + web leads. Gap to close: Utah first-line performance, post-handoff visibility.

💡 Recommendations
  1. Implement NiceJob for review requests FIRST — This is the #1 priority automation. Reviews drive LSA ranking, GBP visibility, and trust. $75/mo to automate post-service review requests. Target: 20+ new Google reviews/month within 60 days.
  2. Set up Mailchimp seasonal sequences — 4 automated emails: Winter prep (Oct), AC tune-up (May), anniversary reminder (12 months post-service), and weather-triggered alerts. One-time setup, $20–50/mo, runs forever. Email has the highest conversion rate of any channel (7.8%).
  3. Automate LSA budget rules — Set up Google's automated rules: increase budget 20% when lead volume drops below 2/day, decrease when CPA exceeds $85. Zero cost, prevents budget waste.
  4. Launch Buffer for social posting — 3 posts/week: 1 job photo, 1 tip/educational, 1 community/team content. $15–50/mo. Social isn't a lead gen channel for HVAC, but it builds trust and supports other channels.
  5. Connect ServiceTitan to automate membership renewals — When ST is connected via the MCP pipeline, automate: 60-day renewal reminder, 30-day "last chance" email, auto-renewal confirmation. This prevents membership churn.
  6. Prioritize by ROI: Reviews > Email > LSA rules > Social — Don't try to launch everything at once. Week 1: NiceJob. Week 3: Mailchimp. Week 5: LSA rules. Week 7: Buffer. Each one gets 2 weeks to stabilize before adding the next.
📡
Data Gaps & Missing Intelligence
12 intelligence gaps across the GTM engine. Connected data sources that haven’t been queried, partial integrations, and research not yet started.
🟢 6 connected but unqueried — 🟡 3 partial — 🔴 2 not started
What This Section Is

Growth Intelligence surfaces the data and research we still need to process across the entire GTM engine. If we don’t have an actionable activity to track, the gap lives here until we can turn it into a Demand Engine or Relationship Engine metric.

Intelligence Gap Engine Source Needed Connection Status Impact if Unresolved
Job completion rate & dispatch time Relationship ServiceTitan MCP 🟢 Connected — not yet queried Can’t measure time-to-value or tech efficiency
Membership enrollment & churn Relationship ServiceTitan MCP 🟢 Connected — not yet queried Can’t size retention opportunity or calculate LTV
Avoca AI call metrics Demand + Relationship Avoca MCP 🟢 Connected — not yet queried Can’t measure speed-to-lead or call handling quality
HubSpot lead pipeline stages Demand HubSpot Portal 42521627 🟢 Connected — not yet queried Can’t see lead-to-customer conversion funnel
GBP search insights (all locations) Demand GBP MCP 🟡 Needs Account ID from Greg Can’t see how customers find us on Maps
River City AC performance Demand GA4 River City MCP 🟢 Connected — not yet queried No visibility on brand #2 marketing
Cornerstone performance Demand GA4 Cornerstone MCP 🟢 Connected — not yet queried No visibility on brand #3 marketing
Competitor actual pricing Growth Manual research 🔴 Not started Can’t benchmark membership pricing
Customer lifetime value (LTV) Relationship ServiceTitan + Accounting 🟡 Partial — needs financial data Can’t calculate true CAC payback period
Net Promoter Score (NPS) Relationship Survey tool needed 🔴 Not started No customer satisfaction baseline
Referral source tracking Relationship ServiceTitan + CRM 🟡 Partial Can’t attribute revenue to word-of-mouth
Seasonal demand patterns Demand ServiceTitan + GA4 historical 🟡 Partial — GA4 has some Can’t optimize seasonal budget allocation
Quick Win

6 of 12 gaps have connected data sources that just haven’t been queried yet. A single day of MCP queries against ServiceTitan, Avoca, HubSpot, and the GA4 sub-properties would close half the intelligence gaps on this board.

⚔️
Competitive Intel
15 competitor profiles with ownership, ratings, reviews, and vulnerabilities. 12 of 15 are PE-owned with shared weaknesses: surprise fees, upselling, and call center runaround.
Avg 3.2★ on negative reviews — exploit the trust gap
Key Insight

12 of 15 top competitors are PE-owned. Their playbook: acquire local brands, centralize operations, raise prices, push high-margin upsells. Consumer trust is eroding — 500+ HVAC contractors now adopting "radical transparency" pricing to combat this. Golden Rule can lead the counter-movement.

Company Ownership Rating Reviews Key Weakness PE Parent
Any Hour ServicesPE (Wrench Group)4.8★26,808Surprise fees, upsellingWrench Group
Whipple Service ChampionsPE4.7★12,000+Pressure salesUnknown PE
My Buddy the PlumberPE4.6★8,500+Scheduling issuesUnknown PE
Quick Quality PlumbingPE4.6★4,200+Call center runaroundUnknown PE
Expert Services (Lex Air)PE4.5★3,500+High membership ($350/yr)Unknown PE
Yes! Air ConditioningPE4.3★2,800+Aggressive upsellingUnknown PE
S.O.S. HeatingIndependent4.8★2,600+None — strong competitorN/A
Action PlumbingPE (Connectionz)3.8★1,800+Elder abuse lawsuitConnectionz Acq.
Blue Best PlumbingIndependent (Women-owned)5.0★1,600+None — strong competitorN/A
Golden RuleIndependent (Family)4.6★800+Review count gapN/A
Black Diamond ExpertsPE4.2★2,200+RICO lawsuit (July 2025)Unknown PE
Manwill P&HIndependent (4th gen)4.5★~100Low digital presenceN/A
Thornton P&HIndependent4.3★~500Aging leadershipN/A
Salmon HVACIndependent (Family)4.5★415Small — growth playN/A
Eagar H&CIndependent4.8★~400Small tuck-in candidateN/A
🤝
Acquisition Targets
3 tier-A prime targets, 4 tier-B good fits, and 5 not-recommended. Focus: legacy brands with aging ownership in SLC/Utah County. EBITDA target: $500K–$2.2M at 3–5x multiples.
Tier A: Thornton (92 yrs), Winsness (104 yrs), Bernie's (45 yrs)
Tier A — Prime Targets
Company Est. Revenue Years Location Rating Reviews Why Prime
Thornton P&H$6.5M92 yrsMidvale4.3★~500Legacy brand, aging leadership speculation
Winsness Plumbing$4M104 yrsMurray4.5★~300Century-old brand equity, owner aging
Bernie's P&H$1–2M45 yrsProvo3.7★~12Owner aging, Utah County, low online = easy uplift
Tier B — Good Fit
Company Est. Revenue Years Location Rating Reviews Notes
Manwill P&H$3–5M106 yrsSLC4.5★~1004th gen, smooth succession done
Salmon HVAC$2–3M47 yrsCenterville4.5★415Family-run, Davis County
Eagar H&C$1–2M25 yrsCedar Hills4.8★~400Small tuck-in, Utah County
E.R.S. H&C$1–2M26 yrsPlain City5.0★586Small, Northern UT expansion
Tier C — Not Recommended
  • Blue Best — Women-owned, 5.0★, 1,600 reviews, growing fast. Too strong.
  • S.O.S. Heating — Young owners, 2,600 reviews. Not selling.
  • ABT Heating — 2nd gen active, small.
  • Neerings — 4th gen, 51 employees, stable.
  • Thompson's Comfort — 4th gen, stable.
Mark's CRM Reference

EBITDA target: $500K–$2.2M | Target multiples: 3–5x EBITDA | Outreach status: Most in "Research" phase | B&M Plumbing: Multi-state (5 states), $2–5M range — strategic play.

💡 Recommendations
  1. Start relationship-building with Tier A owners NOW — Don't cold-approach with "want to sell?" Instead, join the same trade associations, attend the same HVAC supplier events, invite to Golden Rule community events. Acquisitions take 12–24 months of relationship.
  2. Hire a local M&A broker with HVAC experience — Look for brokers who specialize in home services. They'll know which owners are quietly exploring options. Budget $5K–10K retainer + success fee (typically 5–8% of deal value).
  3. Prioritize Thornton Plumbing & Heating — 92 years old, $6.5M revenue, aging leadership signals. This is the #1 acquisition target. A Thornton acquisition adds Midvale territory + 500 reviews + a century of brand equity.
  4. Run a "acqui-hire" play on Bernie's — $1–2M revenue, 3.7 stars, only 12 reviews. This is a distressed asset opportunity. The value is the Utah County territory, not the brand. Offer to hire their techs and absorb the customer list.
  5. Build an acquisition scorecard — Track each target monthly: owner age, recent leadership changes, review sentiment trending, job postings (hiring = growing, not selling; NOT hiring = possible wind-down). Add to this dashboard when ServiceTitan connects.
  6. Get pre-approved for SBA 7(a) financing — For acquisitions under $5M, SBA loans offer 10-year terms at prime + 2.75%. Get pre-approved now so you can move fast when an opportunity opens. Mark's 27-year track record is strong for SBA approval.
🎯
Implementation Gameplan
5-tier capacity-based framework from revenue ops prerequisites through month 6+ brand building. Each tier with time-to-value, effort rating, and automation flags. Includes campaign launch gating checklist.
Tier 0 (Rev Ops prerequisites) must clear before scaling spend
🚦 Campaign Launch Checklist (Gating Controls)

A campaign can scale ONLY when:

Spam exclusion is live — deployed Jan 21, 2026. Grimes: ~10 spam/wk, Utah: ~30% spam. True booking rates: Grimes 43%, Utah 12%.
Speed-to-lead SLA can be met (<60s)
Post-handoff visibility exists (or campaigns stay small)
Utah first-line switched to humans (Feb 25) — Avoca retained as spam gateway only. Voice latency unresolved.
Tier 0Revenue Ops Prerequisites
Before scaling Utah marketing: stabilize first-line AI, get bookable booking rate to ≥70%, get transfer rate trending toward ≤10%. Q1 budget assumes Iowa-primary — Utah ramp depends on operational readiness.
Action Target Status Marketing Implication
Stabilize UT first-lineHumans on front-end✅ Done (Feb 25)Humans replaced Avoca on UT front-end. Avoca = spam gateway only.
Reduce AI→human transfers≤10%⚠️ N/A (humans now)Metric shifts to human speed-to-lead SLA
Spam exclusion≥90% accuracy✅ Live (Jan 21)Grimes: 43% true booking rate. Utah: 12%. Grace (Avoca) refining logic.
Build post-handoff visibilityEnd-to-end tracking🔴 GapGating dependency for scaling. Needs ServiceTitan API.
Tier 1Do This Week ($0–200, 2–3 hours)
Action Time to Value Effort Automate? Expected Uplift
Set up NiceJob ($75/mo)3–5 days⭐⭐Yes — NiceJob+20–30 reviews/month
Launch tech review bonus ($10/review)1 weekManual initially+15–25 reviews/month
Optimize GBP1–2 weeks⭐⭐Partial — Publer35–60% map view increase
Order QR stickers ($200)2 weeksN/ALong-term repeat business
Set up Nextdoor page1 weekBuffer3–5 leads/month
Set up Mailchimp + first campaign1 week⭐⭐Yes — automated5–15 service calls
Tier 2Do This Month ($1,500–2,500/mo)
Action Time to Value Effort Automate? Expected Uplift
Launch Google LSA ($1,500/mo)3–7 days⭐⭐Semi — budget rules15–30 leads/month
Deploy email/SMS reactivation1–2 weeks⭐⭐Yes — Mailchimp/CC$8–50 CPS
Join 5–10 local FB groups2–3 weeks⭐⭐Partial — AI content5–10 leads/month
Begin Gold Club membership push2–4 weeks⭐⭐CRM automation+10 members/month
Tier 3Month 2 ($500–1,000 additional)
Action Time to Value Effort Automate? Expected Uplift
Launch Meta Ads ($750/mo)3–7 days⭐⭐⭐Meta Advantage+8–12 leads/month
Start SEO location pages4–6 months⭐⭐⭐AI draftsLong-term compound
Deploy QR stickers on ALL callsOngoingTech protocol60%+ repeat business
Begin Bing Ads test ($150/mo)1 week⭐⭐Import from Google3–8 leads at 20–30% lower CPL
Tier 4Month 3+ (Data-Driven Scaling)
Action Time to Value Effort Expected Uplift
Add geofencing around PE locations1–2 weeks⭐⭐⭐Conquest leads from competitor ZIPs
Launch YouTube pre-roll test2–3 weeks⭐⭐⭐Brand awareness lift in SLC metro
Begin content marketing (blog)3–6 months⭐⭐⭐Organic SEO growth compound
Evaluate Tier A acquisition outreachOngoing⭐⭐⭐⭐⭐Market expansion via roll-up
Tier 5Month 6+ (Brand Building & Dominance)
  • SEO pages ranking for 10+ local keywords, organic leads = 25–30% of pipeline
  • OWN channels at 45–50% of total leads, blended CPL trending down
  • Gold Club: 200+ active members = $19,800+ ARR
  • Review count competitive with top 5 in market (300+ new YTD)
  • Acquisition: active conversations with Tier A targets
  • TikTok brand awareness campaigns (brand building only, not lead gen)
  • QR sticker flywheel generating repeat business at near-zero cost
📋
How this plan works: Checkboxes persist between visits using cookies. Items connected to live data (GA4, GSC) will eventually auto-verify. Manual items need Greg or the team to check off once complete.
Phase 1

Stop the Bleeding — Do Today

No-brainer actions. Every day delayed costs real money. Total: ~2 hours in Google Ads. Zero additional budget required.

Gate: None — start immediately
5 of 15 complete
🔧 Greg Romans / MediaSpark
#1 Pause Utah-Plumbing-Search Campaign 5 min Saves ~$1,870/mo Not Started

This campaign spent $12K at $239 CPA. Benchmark is $65. Every day it runs = ~$174 overpaid per lead. PMax Plumbing runs alongside it at $85 CPA and should absorb the budget.

Steps (Greg or MediaSpark, ~5 min):
  1. Open Google Ads → 448-550-2333 account
  2. Campaigns → find "Utah-Plumbing-Search"
  3. Toggle status to Paused
  4. Go to Utah-PMAX-Plumbing → increase daily budget by the amount freed from Plumbing Search
  5. Confirm PMax Plumbing is absorbing spend within 48 hours
LIVE — Google Ads Export | Est. savings: ~$1,870/month
#2 Fix Conversion Tracking — Demote Junk Conversions 20 min 20–40% CPA improvement Not Started

Google counts YouTube subscriptions and page views as "conversions." The algorithm optimizes toward video watchers instead of people who need a plumber. This single issue corrupts every campaign's bidding.

Steps (Greg or MediaSpark, ~20 min):
  1. Google Ads → Goals → Conversions → Summary
  2. Find "YouTube Channel Subscriptions" → Edit → Change to Secondary
  3. Find "Page View: Book Urgent Repair" → Edit → Change to Secondary
  4. Find "YouTube Follow-On Views" → Edit → Change to Secondary
  5. Create NEW Primary conversions:
    • "Service Request Submitted" (form submission on contact/booking pages)
    • "Phone Call from Ad" (call extension clicks, 60s+ duration)
    • "Schedule Service Booking" (booking widget completion)
  6. Wait 48 hours for Smart Bidding to recalibrate against real signals
LIVE — MediaSpark Audit | Impact: 20–40% CPA improvement within 2 weeks
#3 Disable AI Max 3 min Prevents surprise spend spikes Not Started

AI Max is enabled with minimal delivery. Low delivery + unpredictable behavior = risk of surprise spend spikes that blow the daily budget with no return.

Steps (Greg or MediaSpark, ~3 min):
  1. Google Ads → Campaigns → each active campaign
  2. Settings → "AI Max" or "Automatically created assets"
  3. Toggle OFF
  4. Re-evaluate only after conversion tracking is clean (Phase 2 complete)
LIVE — MediaSpark Audit | Risk: surprise spend spikes
#4 Add Negative Keywords — Stop Wasting Clicks 45 min Stops $4,912 waste Not Started

$4,912 total spend across 100 search terms with ZERO conversions. Breakdown: $2,415 on competitor names (Smedley, Genuine Comfort, Anytime, etc.), $980 on your own brand name (Golden Rule, Golden Rule Plumbing — you're paying for clicks you should own organically), and $346 on supply/parts searches (HVAC supply, Goodman distribution, etc.).

Steps (Greg or MediaSpark, ~30 min):
  1. Google Ads → Keywords → Search Terms tab
  2. Sort by cost, descending — see the full list in the Search Terms Deep Dive section
  3. Create shared negative keyword list: "Golden Rule Negatives"
  4. Add all competitor names as negatives: Smedley, Genuine Comfort, Anytime, Comfort Systems, SOS, Anderson, Jerry's, Standard Plumbing, Lennox, Royal Plumbing, One Hour, etc.
  5. Add supply/parts terms: HVAC supply, Goodman distribution, Rheem, HVAC parts, plumbing supply, Daikin, Johnstone supply, carrier
  6. Apply list to ALL active campaigns
LIVE — Google Ads Search Terms Export | Total waste: $4,912 | Brand waste: $980 | Competitor waste: $2,415
#5 Create Brand Protection Campaign 30 min ~$300/mo investment Not Started

No campaign bids on "Golden Rule" or "Golden Rule Plumbing." Competitors can bid on your brand name and steal traffic for pennies. You're paying for brand awareness through other channels and competitors harvest it at the search level.

Steps (Greg or MediaSpark, ~45 min):
  1. Google Ads → New Campaign → Search → Leads
  2. Campaign name: "Utah-Brand-Protection"
  3. Budget: $10/day ($300/month) — brand clicks cost $1–2
  4. Ad group keywords:
    • [golden rule plumbing] (exact match)
    • [golden rule heating] (exact match)
    • [golden rule hvac utah] (exact match)
    • "golden rule plumbing salt lake" (phrase match)
  5. Write 3 responsive search ads emphasizing: family-owned, 27 years, no surprise fees
  6. Expected: 30–40% CTR at $1–2 CPC. Cheapest insurance in the account.
LIVE — Keyword Export confirms zero brand bidding | Cost: ~$300/mo
🚀 GetFresh Ventures — Site & Data
#6 Install & Configure Yoast SEO Done SEO foundation Done
#7 Fix 301 Redirects & Broken Chains Done Stops link equity loss Done
#8 Secure WordPress REST API Done Security fix Done
#9 Complete Phone Number Audit Done Identified all misrouted pages Done
#10 Gravity Forms Audit & Inventory Done All forms documented Done
#11 Add (801) Phone Number to All Utah Pages 1 hr Stops misrouted calls Not Started

Right now, Utah visitors see the Iowa number (515) 393-4526 on every page except /location/utah/. Every misrouted call is a lost lead. Hard-code (801) 218-2225 in header, footer, CTA buttons, and mobile sticky bar on all Utah landing pages.

Phone audit complete — fix ready to implement
#12 Replace Iowa Numbers on Shared Pages 45 min Geo-correct routing Not Started

Pages shared across markets (service pages, about, etc.) need geo-detection or at minimum a Utah-specific variant. Until ServiceTitan call tracking is live, hardcode the Utah number on Utah-targeted pages.

Phone audit — priority pages list ready
#13 Add Gravity Form to Key Landing Pages 1 hr Captures leads on high-traffic pages Not Started

The main landing page and top city pages have zero forms. Add a Gravity Form above the fold on /utah-urgent-repair/, /location/utah/, and the 5 highest-traffic city pages. Match the Iowa booking form pattern.

Gravity Forms audit — form templates identified
#14 Pause Competitor Keyword Campaigns 15 min Stops $2,415/mo waste Not Started

$2,415 spent on competitor name searches (Smedley, Genuine Comfort, Anytime, etc.) with zero conversions. Pause all competitor keyword ad groups immediately. Reallocate budget to brand protection and city-specific campaigns.

LIVE — Google Ads Search Terms Export
#15 Build Master Negative Keyword List 30 min Prevents future waste Not Started

Create a shared negative keyword list covering: all competitor names, supply/parts terms (HVAC supply, Goodman, Rheem, Lennox, etc.), DIY searches, job searches, and review-only queries. Apply across all active campaigns to prevent future bleed.

LIVE — Search Terms analysis, 100+ zero-conversion terms identified
Phase 1 Summary — Same Day, ~2 Hours Total

Who does it: Greg Romans or MediaSpark in the Google Ads account (448-550-2333).
Total new spend: $300/month (brand campaign only — everything else is pausing waste).
Expected savings: $1,870+/month in wasted CPA from Plumbing Search pause alone.
Expected CPA improvement: 20–40% within 2 weeks from conversion tracking fix.
Confirmation: Check back in 48 hours — Smart Bidding needs time to recalibrate. CPA should start dropping within 5–7 days.

Phase 2

Fix the Site & Tracking — Week 1–2

Rebuild the broken landing pages and fix the data pipeline. Don't scale spend until conversion rates confirm the foundation works.

Gate: Phase 1 complete (campaigns paused, tracking fixed)
0 of 7 complete
💻 Web Developer
#6 Rebuild Main Ad Landing Page (0.59% → target 5%+) 4–6 hrs Recover 100+ leads/mo Not Started

/location-utah-urgent-repair — 2,560 sessions, 15 conversions. Iowa pages convert at 13%. This single page is the biggest leak in the funnel. 43% of all Utah ad traffic lands here and bounces.

Steps (Web developer in WordPress backend, ~4–6 hours):
  1. Model the rebuild after /location/utah/north-salt-lake (5.64% conversion, 48s engagement)
  2. Above the fold: Utah phone number (801) 218-2225 as click-to-call button, NOT Iowa number
  3. Hero section: "Utah's Family-Owned HVAC Experts — No Surprise Fees, Guaranteed"
  4. Add scheduling widget or form (ServiceTitan booking embed)
  5. Trust badges: BBB, Google Guaranteed, "Family-Owned Since 1999"
  6. 3 localized testimonials from Utah customers (pull from GBP)
  7. Service cards with pricing transparency: "Diagnostic: $49 | AC Tune-Up: $49 | Gold Club: $99/yr"
  8. Sticky mobile CTA bar (phone + schedule) — 85.5% of ad traffic is mobile
  9. Duplicate structure for /location-utah-urgent-repair-plumbing-ppc (409 sessions, same issues)
LIVE — GA4 Landing Pages | This single fix could recover 100+ leads/month
#7 Redirect/Rebuild 10 Dead Pages (855 sessions → 0 conv) 3–4 hrs Recover 855 sessions Not Started

These pages receive real traffic and produce zero conversions. Every visit is wasted ad spend or wasted organic opportunity.

Steps (Web developer in WordPress, ~2–3 hours):
  1. /location-utah-hvac-estimate (194 sessions, 0 conv) → 301 redirect to rebuilt urgent repair page
  2. /utah-hvac-system-check (154 sessions, 0 conv) → 301 redirect to rebuilt urgent repair page
  3. /sump-pump-inspection-utah (119 sessions, 0 conv) → 301 redirect to /location/utah/
  4. /utah-pe (114 sessions, 0 conv) → DELETE or redirect to main Utah page
  5. /location-utah-urgent-repair-plumbing (102 sessions, 0 conv) → redirect to PPC plumbing page
  6. 5 additional city pages with traffic but 0 conversions → rebuild with city+service model (see #8)

Use Redirection plugin in WordPress for 301s. Check Google Ads to make sure no ads point to the deleted URLs.

LIVE — GA4 Landing Pages | Recovers 855 wasted sessions
#8 Build City+Service Landing Pages (the proven model) 1–2 weeks 8 new pages Not Started

Data proves localized pages convert 3–10x better: Kaysville plumbing 16.1%, Eden 15%, North Salt Lake 5.64%. The generic "urgent repair" pages fail because they're not specific to any city or service.

Steps (Web developer or AI-assisted, ~1 hour per page):
  1. Template: /location/utah/{city}/{service}-services
  2. Priority cities (highest traffic + population): Salt Lake City, Ogden, Layton, Bountiful, Sandy, West Jordan, Provo, Draper
  3. Each page: city name in H1, local landmarks/neighborhoods, city-specific weather callouts, (801) number prominent
  4. Services per city: plumbing, HVAC, electrical, drain (4 pages per city)
  5. Phase 1 batch: top 8 cities × 1 primary service each = 8 pages. Expand to 32 pages in Phase 3.
  6. Use AI (Claude/ChatGPT) to generate 800–1,200 word content per page. Human review for accuracy.
LIVE — GA4 proves model works | Target: 8 pages in 2 weeks, 32 by month 2
#9 Fix Utah Phone Number — Sitewide 1–2 hrs Every misrouted call = lost lead Not Started

(801) 218-2225 only appears in body text on /location/utah/. No geo-detection. Utah visitors see Iowa number (515) 393-4526 on every other page, header, and footer. Every misrouted call is a lost lead.

Steps (Web developer in WordPress, ~1–2 hours):
  1. Option A (Quick): Hard-code (801) 218-2225 on ALL Utah landing pages — header, footer, CTA buttons, mobile sticky bar
  2. Option B (Better): Add JavaScript geo-detection snippet:
    • Use fetch('https://ipapi.co/json/') to detect visitor state
    • If Utah → swap all phone number elements to (801) 218-2225
    • If Iowa → keep (515) 393-4526
    • Add to WordPress header via Code Snippets plugin or theme functions.php
  3. Verify: test from Utah VPN/mobile to confirm number swaps correctly
LIVE — Site Audit | Every misrouted call = lost lead
🔧 Greg Romans + Web Developer
#10 Clean GA4 Tracking ("Unassigned" Channel: 70% False Event Rate) 1–2 hrs Blocks trust in ALL data Not Started

19,577 sessions labeled "Unassigned" with 13,707 key events. Normal channels run 2–9%. Almost certainly misconfigured tracking — internal traffic, bots, or duplicate tags counted as conversions. Until this is clean, no conversion metric is trustworthy.

Steps (Greg or web developer in GA4 admin, ~1–2 hours):
  1. GA4 Admin → Data Streams → check for duplicate Google Tags on the site
  2. Use Google Tag Assistant (Chrome extension) on goldenrulephc.com to verify single clean tag fire
  3. GA4 Admin → Data Settings → Data Filters → Create "Internal Traffic" filter:
    • Add office IP addresses for Iowa and Utah offices
    • Filter state: Active
  4. Check GA4 → Events → verify no custom events are auto-logging page_views as key events
  5. DebugView: test from a clean browser to confirm events fire correctly
  6. Mark "Unassigned" data as unreliable in all reports until fixed
LIVE — GA4 Traffic Acquisition | Blocks trust in ALL conversion data
🔧 Greg Romans / MediaSpark
#11 Optimize LSA Listings (Currently ~9.5 leads/month) 1 hr Target 25–30 leads/mo Not Started

104 leads over 11 months. Low for SLC market size. GBP optimization and review velocity directly impact LSA ranking and lead flow.

Steps (Greg, ~1 hour):
  1. LSA Dashboard → Utah account (189-035-6117) → ensure ALL service categories are active (HVAC, plumbing, electrical, drain)
  2. Update business hours to match Avoca AI coverage (Mon-Sat 7am-9pm, emergency 24/7)
  3. Upload 5+ professional photos (trucks, team, completed jobs)
  4. Review and dispute invalid leads within 30-day window for credits
  5. Increase weekly budget from current to $500/week once landing pages are fixed
LIVE — LSA Leads Inbox | Target: 25–30 leads/month by month 2
#12 Enable Weekend Ad Coverage 15 min GATED on items 6–9 Not Started

Zero impressions Sunday, 450 Saturday. Ads run Mon–Fri 7am–5pm only. Emergencies don't follow business hours — competitors capture every weekend burst pipe. Avoca AI already covers weekends.

Steps (Greg or MediaSpark, ~15 min — AFTER items 6–9 complete):
  1. Google Ads → Campaign Settings → Ad Schedule
  2. Add Saturday 8am–4pm as test window
  3. Start with 50% bid adjustment (conservative test)
  4. Monitor for 2 weeks — if CPA stays under $100, expand to Sunday and full Saturday
  5. Verify with Avoca that weekend call handling is active and bookable rate ≥ 70%
LIVE — Google Ads Day/Hour | Gated: do NOT enable until landing pages convert ≥5%
Phase 2 Summary — Weeks 1–2

Who does it: Web developer (WordPress backend access), Greg Romans (GA4/LSA admin).
Access needed: WordPress admin for GRPHC site, GA4 admin for Golden Rule PHC property, LSA accounts (189-035-6117 for Utah, 274-787-7158 for DSM).
Total cost: Dev time only (web developer hours). No additional ad spend until Phase 3.
Expected impact: Landing page conversion from 0.59% → 5%+ (8x improvement). If achieved on 2,560 monthly sessions, that's ~128 leads instead of 15.
Gate check: Landing page conversion rate ≥5% for 7 consecutive days before moving to Phase 3.

Phase 3

Graduate the Dollars — Week 3+ (gated on Phase 2)

Once landing page conversion rates hit ≥5% and tracking is clean, re-enable and scale. Do NOT start Phase 3 until the gate check passes.

Gate: Landing page conversion ≥5% for 7 consecutive days + clean tracking
0 of 5 complete
🔧 Greg Romans / MediaSpark
#13 Un-Pause PMax HVAC Campaign ($45.71 CPA) 5 min 30+ additional leads/mo Not Started

360 conversions at $45.71/lead — best campaign in the entire account by far. It was paused and that single decision caused CPA to explode from $49 to $260+ in Q3 2025.

Steps (Greg or MediaSpark, ~5 min):
  1. Google Ads → Campaigns → find "Utah-PMAX-HVAC"
  2. Toggle status to Enabled
  3. Set daily budget: $50/day ($1,500/month) to start
  4. Monitor: CPA should be under $60 with clean conversion tracking. If above $80 for 7 days, check conversion actions.
  5. Scale to $100/day ($3,000/month) after 14 days of clean data

Gate: Landing page conversion rate ≥5% + Primary conversion actions confirmed.

LIVE — Google Ads Export | Potential: 30+ additional HVAC leads/month
#14 Scale PPC Budget $3K → $5K/mo Ongoing 46 leads/mo target Not Started

MediaSpark projects 46 leads/mo at $5K spend once campaigns are restructured. Only worthwhile if conversion tracking is clean and landing pages convert.

Steps (Greg, incremental over weeks 3–6):
  1. Week 3: Increase total daily budget by $20/day across PMax campaigns
  2. Week 4: Review CPA trend — if holding under $80 blended, add another $20/day
  3. Week 5: Budget should be at ~$5K/month. Monitor impression share (target: 25%+)
  4. Week 6: Evaluate MediaSpark management proposal ($1,500/mo). Only if their optimizations show measurable CPA improvement beyond what Phase 1 fixes achieved.

Gate: 30 days of clean conversion data with ≤5% CPA variance from target.

MediaSpark Proposal | Target: 46 leads/mo at ~$109 blended CPA
#16 Increase Impression Share from 14.59% Ongoing 14.59% → 40%+ Not Started

Currently invisible for 85% of searches. Budget increase + quality score improvement from clean tracking will push share up. But budget without conversion = throwing money at the same broken funnel.

Steps (Greg/MediaSpark, ongoing):
  1. Increase budget in $1K/month increments as CPA allows
  2. Quality Score improvements from new landing pages will naturally boost share
  3. Target milestones: 25% by month 2, 40% by month 4, 60%+ by month 6
  4. Track via Auction Insights report — monitor rank vs. Any Hour, S.O.S., Whipple

Gate: Phases 1 & 2 fully complete.

LIVE — Auction Insights | Current: 14.59%, Target: 40%+ by month 4
👔 Mark Paup + Ops Team
#15 Launch Review Generation Engine 1 week setup 50–70 reviews/mo by Month 3 Not Started

Golden Rule has 800 reviews. Top competitor Any Hour has 26,808. Review velocity directly impacts LSA ranking, Map Pack position, and customer trust. Target: 50–70 new reviews/month by Month 3.

Steps (Mark + ops team, ~1 week setup):
  1. Deploy NiceJob ($75/mo) — integrates with ServiceTitan for auto-review requests 2 hours after service
  2. Launch tech bonus: $10 per 5-star Google review tied to tech's name. Monthly leaderboard: #1=$250, #2=$150, #3=$100
  3. Order QR stickers (1,000 @ $200) for equipment placement
  4. Train techs on the verbal ask: "If you're happy, I'd really appreciate a Google review. It helps me out!"
  5. LEGAL: Never incentivize customers for reviews (Google prohibition, FTC $51,744/violation). Incentivize technicians only.

Timeline: Month 1: 20–30 new reviews. Month 3: 50–70. Month 12: 100+/month.

See Review Generation section for full program | Cost: ~$575–1,500/mo
🔌 Diraj / GetFresh Ventures
#17 Wire Dashboard to Live APIs Ongoing Real-time data In Progress

Connect all 4 Google APIs to replace stale CSV exports with live data. Current status:

GA4 Property 319584840 — ✅ LIVE (auto-verified)
Google Search Console goldenrulephc.com — ✅ LIVE (auto-verified)
Google Ads MCC 448-550-2333 — ✅ UNBLOCKED (Greg provided goldenruleatgmail.com credentials Mar 6)
Google Business Profile — ❌ BLOCKED (needs Greg to add as Manager/Owner)
GAP — Need MCC and GBP access from Greg (see Access Requirements above)
Phase 3 Summary — Weeks 3–6+

Who does it: Greg Romans (campaign management), Mark (review program), Web developer (ongoing page builds), Diraj/GetFresh (dashboard wiring).
Monthly investment increase: $1,500–3,000/mo additional ad spend + $575–1,500 review program + optional $1,500/mo MediaSpark management.
Expected outcome: 46+ leads/month (vs ~17 today), $23K/month revenue on $6.5K spend (3.55x ROAS), 50+ new reviews/month, impression share from 14.59% → 40%+.
The sequence matters: Stop bleeding → Fix foundation → Then spend. Skipping to Phase 3 without completing Phase 2 = pouring money into the same broken funnel.

📝
Audit Log
Loading...
Every programmatic change to Golden Rule's digital properties
Date Property Action Status By

Tech Stack & Budget Map

Full view of every tool, its cost, integration level, and where it sits in the customer journey. Based on Mark's 2026 Marketing Budget.

Customer Journey Tool Map — $10,905/mo Software + $39,326/mo Media

Software
$10,905/mo
$130,860/yr
Media
~$39,326/mo
~$471,912/yr
Total Marketing
~$52,731/mo
~$632,772/yr
% of Revenue
~2.9%
of Jan $1.8M — within 2–5% HVAC benchmark
1
AWARENESS
TV / KCCI + WHO🟢
$18,500/mo
Brand awareness — local TV spots
Standalone
CTV / Connected TV🟢
$11,000/mo
Targeted video — streaming platforms
Standalone
Radio🟢
$6,826/mo
Brand awareness — local radio
Standalone
SEMrush🟢
$539/mo
SEO & PPC competitive intelligence
Standalone
SEO🟢
$1,250/mo
Organic search rankings & content
Standalone
Direct Mail🟢
$3,000/mo
Customer Lobby — targeted mailers
Deep ST Integration
2
CONSIDERATION
ST Marketing Pro🟢
$2,500/mo
Email campaigns, attribution, DNI
Native ST Module
Vidyard🟡
$300/mo
Video marketing & testimonials
Standalone
Exclaimer🟢
$58/mo
Email signature banners
Standalone
BBB🟢
$333/mo
Trust signal listing
Standalone
Website🟢
$1,250/mo
Design, development & hosting
Standalone
3
CALL & BOOKING
Schedule Engine🟢
$3,500/mo
24/7 online booking + live agents
Native ST Integration
Avoca🟡
Spam Gateway
Spam filter (UT/IA). Removed from UT front-end (Feb 25). API access blocked — Arvin contacting Avoca.
API Access Pending (Tyson/Barron)
Chiirp🟢
$1,500/mo
Missed call texts, abandoned call recovery
Deep ST Integration
4
DISPATCH & SERVICE
ProBook🟢
in ST cost
AI dispatch optimization
Native ST Module
ServiceTitan🟢
core platform
Jobs, scheduling, invoices, CRM
Core Platform
5
RETENTION & ADVOCACY
HubSpot🟢
$1,833/mo
CRM, lifecycle nurture sequences
MCP Connected
Chiirp🟢
included
Review requests, renewal nudges
Deep ST Integration
ST Marketing Pro🟢
included
Review requests, direct mail triggers
Native ST Module
Geckoboard🟡
$175/mo
Office KPI scoreboard display
Pulls from ST + others
🟢 Active 🟡 Underutilized 🔴 Not Connected Unknown | Integration: Deep ST Integration Native ST Module MCP Connected Standalone
💰 ROI Watch: Schedule Engine

Schedule Engine is the most expensive single tool at $3,500/mo. Track its after-hours booking volume and conversion rate to justify ROI. If it books 30+ jobs/month at $400+ avg ticket, the math works. Below that, renegotiate or replace.

🚨 HubSpot Exit: ~$24K/yr Savings

HubSpot (~$2,000/mo) is only used for 3-question web forms — massive overkill. Contract believed to expire ~June 2026. Greg documenting what breaks if removed. Replacement: WordPress forms ($0). See HubSpot Audit section below for full exit plan.

📋 Replacement Candidate: Geckoboard

Geckoboard ($175/mo) could potentially be replaced by this dashboard once live data is flowing. It currently serves as an office KPI display — a wall-mounted browser showing this dashboard achieves the same goal at zero marginal cost.

Budget Analysis

Tool / Channel Category Monthly Cost Annual Cost Status Integration Recommendation
HubSpot Software $1,833 $21,996 Active MCP Connected Overlaps with Chiirp — evaluate consolidation
TV (KCCI + WHO) Media $18,500 $222,000 Active Standalone Track with promo codes & vanity URLs
CTV / Connected TV Media $11,000 $132,000 Active Standalone Monitor view-through attribution
Radio Media $6,826 $81,912 Active Standalone Track with unique phone number
Schedule Engine Software $3,500 $42,000 Active Native ST Integration Track after-hours bookings/month — need 30+ at $400+
Direct Mail Media $3,000 $36,000 Active Deep ST Integration Strong ROI through Customer Lobby
ST Marketing Pro Software $2,500 $30,000 Active Native ST Module Core attribution + email + DNI — keep
SEO & Website Services $2,500 $30,000 Needs Audit Standalone Identify SEO provider — Mark to confirm
Chiirp Software $1,500 $18,000 Active Deep ST Integration Overlaps with HubSpot — consolidation candidate
SEMrush Software $539 $6,468 Active Standalone Essential for competitive intelligence
BBB Software $333 $3,996 Active Standalone Trust signal — low cost, keep
Vidyard Software $300 $3,600 Underutilized Standalone Activate or cancel — currently idle
Geckoboard Software $175 $2,100 Replaceable Pulls from ST This dashboard can replace it — save $175/mo
Exclaimer Software $58 $696 Active Standalone Low cost, useful for branding — keep
Misc Tools Software $167 $2,004 Unknown Various Mark to identify in contract audit
Software Total
$10,905/mo
$130,860/yr
Media Total
$39,326/mo
$471,912/yr — TV, CTV, Radio, Mail
Total Marketing Spend
$52,731/mo
$632,772/yr
% of Revenue
~2.9%
of Jan $1.8M — within 2–5% HVAC benchmark

Vendor Contracts — Audit Status

Mark was assigned to compile all vendor contract terms, costs, modules, and expiration dates (from today's sync meeting, March 6).

Action Required: Contract Audit

Mark Paup committed to collecting contract terms, costs, module breakdowns, and expiration dates for all vendor software. Drop into Google Drive when ready.

Priority 1 — HubSpot

$1,833/mo — overlaps with Chiirp. What modules are active? What functions does Golden Rule actually use?

Priority 2 — Schedule Engine

$3,500/mo — Greg to document: how many after-hours bookings/month? What's the ROI?

Priority 3 — SEO Provider

$2,500/mo combined. Who is the SEO provider? What specific activities? Mark to identify.

Priority 4 — Chiirp vs HubSpot

$1,500/mo overlaps with HubSpot automation. Which wins? Greg to document both flows.

Missing Data — Contracts Not Yet Received

Once Mark provides the contract documents, this section will be populated with: contract terms, renewal dates, cancellation windows, module breakdowns, and cost-per-feature analysis. Until then, the budget numbers above are from Mark's 2026 marketing budget spreadsheet.

HubSpot Audit — ~$2,000/month

🚨 Verdict: Overkill — Exit Plan Underway

From the March 6 sync with Mark: HubSpot is only being used for website lead capture forms (a 3-question version rebuilt from Schedule Engine because the SE 5-question form had too much drop-off). That's it. No CRM, no email marketing, no automation. Mark's reaction: "That's what I saw today and I'm like, 'What are we doing here?'"

"You don't need HubSpot. It's overkill, you're using a sledgehammer when you just need a finger." — Diraj Goel, March 6, 2026

Current HubSpot Cost
~$2,000/mo
~$24,000/year for web forms only
Actual Usage
Forms Only
3-question lead capture on website
Contract Expiry
~June 2026
Target exit date — Mark confirming terms

How It Got Here

Jesse (former marketing director) originally set up HubSpot and Schedule Engine. When Schedule Engine's 5-question form had too much drop-off, someone rebuilt a shorter 3-question form in HubSpot. Greg inherited the setup but doesn't fully understand the configuration.

There's also a pricing estimator on the website that redirects to a separate site and creates leads in HubSpot — this flow needs to be mapped before cancellation.

Exit Plan

  1. Greg documents everything — What forms exist, what fields they capture, where leads go, what triggers fire. Assigned March 6.
  2. Mark confirms contract terms — End date, auto-renewal clause, cancellation window. Believed to be ~June 2026.
  3. Build replacement forms — WordPress + Gravity Forms or native ServiceTitan web forms. 3 questions, same fields, same lead routing.
  4. Migrate pricing estimator flow — Map the external pricing tool integration and reroute lead creation.
  5. Cancel at contract expiry — Do NOT cancel early (penalty risk). Target: June 2026.

Savings: ~$24,000/year. Replacement cost: $0 (WordPress forms are free).

Consolidation Map (Updated)

HubSpot Function Replacement Status
Web Lead Capture Forms (3-question) WordPress + Gravity Forms or ST Web Forms ✅ Easy — straightforward rebuild
Pricing Estimator Lead Routing Direct-to-ServiceTitan or WordPress webhook ⚠️ Needs Greg to map the flow
CRM / Contact Management Not used in HubSpot N/A — already in ServiceTitan
Email Marketing / Sequences Not used in HubSpot N/A — Chiirp + ST Marketing Pro
Reporting / Dashboards Not used in HubSpot N/A — Command Center + GA4

Source: March 6, 2026 Diraj/Mark sync call (CAAI Transcript IDs: 5573, 5574). Greg's system flow documentation still pending for final validation.