This document responds point-by-point to your evaluation framework. Every recommendation is backed by industry data with cited sources. Where your plan is already strong, I say so. Where I can improve upon it, I show exactly how -- with execution steps, timelines, and expected ROI.
| What You're Doing Now | What I'm Proposing |
|---|---|
| Renting leads at $200 each | Building owned lead generation assets that compound over time |
| Social posts die after 48 hours | Social posts drive traffic to permanent blog content that Google indexes |
| No keyword strategy | Complete keyword map with 2,000+ opportunity targets |
| No CRO program | Systematic testing cadence with measurable revenue impact |
| Reporting shows activity (clicks, impressions) | Reporting shows revenue per channel, per campaign, per keyword |
| Google Ads optimizes for calls (all calls = equal) | Google Ads optimizes for revenue (a $12K sewer job outweighs a $300 drain clean) |
| Budget stays flat at $35K/month regardless of season | Budget follows demand: more in peak, less in valleys, same annual total |
| No organic lead pipeline | Month 12: 30-50% of leads from organic at under $30/lead |
| Your Area | Alignment Level | Robert's Additions |
|---|---|---|
| 1. Reporting & KPI Structure | Full alignment | Revenue-per-channel attribution via ServiceTitan + GA4 integration |
| 2. Paid Media Oversight | Full alignment | Offline conversion import (56% higher booking rate -- Camp Digital, 2025) |
| 3. LSA Expectations | Full alignment + improvements | Review velocity program + LSA ranking factor optimization post-April 2025 algorithm change |
| 4. Attribution & Tracking Integrity | Full alignment + improvements | GCLID-to-invoice pipeline via ServiceTitan native integration |
| 5. CRO Expectations | Full alignment + improvements | WordPress/Oxygen Builder evaluation + multi-step form testing + speed optimization |
| 6. 30-60-90 Day Framework | Full alignment | Enhanced with specific deliverables, owner labels, and verification checkpoints per phase |
| 7. Budget Discipline | Full alignment | CPL reduction roadmap from $200 to $75-90 blended, backed by channel-level projections |
Full alignment. Every metric I track ties to revenue. No vanity metrics.
Layer 1: Weekly Pulse (Every Monday by 10 AM)
Layer 2: Monthly Deep Dive (First week of each month)
Layer 3: Quarterly Strategy Review (Every 90 days)
Tool: Looker Studio (free, connects directly to GA4 + Google Ads + Search Console)
Dashboard Sections:
| Section | Metrics | Data Source | Update Frequency |
|---|---|---|---|
| Revenue Overview | Monthly revenue, jobs completed, avg ticket | ServiceTitan | Daily |
| Lead Pipeline | Leads by channel, booking rate, cost per booked job | GA4 + ServiceTitan | Daily |
| Google Ads | Spend, CPL, ROAS, top keywords, Quality Score | Google Ads | Daily |
| LSA | Leads, CPL, booking rate, disputes, review score | LSA Dashboard | Daily |
| Organic/SEO | Rankings, organic traffic, organic leads, blog performance | Search Console + GA4 | Weekly |
| CRO | Conversion rate by page, form completions, phone calls, chat | GA4 + Clarity | Weekly |
| Reviews | Total reviews, avg rating, review velocity, response rate | GBP + ServiceTitan | Weekly |
| Step | Action | Owner | Time |
|---|---|---|---|
| 1 | Create Looker Studio account at lookerstudio.google.com | Robert | 5 min |
| 2 | Connect GA4 data source: click "Add data" > select "Google Analytics" > select Bright Side property | Robert | 10 min |
| 3 | Connect Google Ads: click "Add data" > select "Google Ads" > authorize account | Robert | 10 min |
| 4 | Connect Search Console: click "Add data" > select "Search Console" > select callbrightside.com | Robert | 10 min |
| 5 | Build Revenue Overview page: add scorecards for monthly revenue, jobs, avg ticket. Add time series chart for 12-month revenue trend | Robert | 45 min |
| 6 | Build Lead Pipeline page: add table with columns (Channel, Leads, CPL, Booking Rate, Revenue). Add pie chart for lead distribution | Robert | 45 min |
| 7 | Build remaining 5 sections following same pattern | Robert | 2 hrs |
| 8 | Share dashboard with Kalen, Stephanie, Russ: click "Share" > enter emails > set to "Viewer" | Robert | 5 min |
| 9 | Schedule weekly email: File > Schedule email delivery > set Monday 9 AM > add recipients | Robert | 5 min |
| Total | ~4 hours |
Verification: Open dashboard on phone/tablet to confirm mobile responsiveness. Ask Kalen to confirm he can access it and that the data makes sense.
The dashboard isn't a single page of numbers. It's structured into 5 purpose-built tabs so each stakeholder finds what they need without digging:
Why 5 tabs matter: Kalen needs Tab 1 (30-second revenue check). Stephanie needs Tab 2 (is the money being spent wisely?). Russ needs Tabs 3-4 (what's working, what needs fixing). Tab 5 is the autopilot: even if nobody opens the dashboard, the 5 critical numbers show up in email every Monday.
Stephanie said: "We are not interested in activity-based reporting. We are interested in revenue-tied performance." Here are the 5 numbers that answer "is this working, yes or no?" in 30 seconds:
| # | Metric | Why It Matters |
|---|---|---|
| 1 | Organic leads this month | The raw count -- are we growing? |
| 2 | Cost per organic lead | Your investment / organic leads = is SEO cheaper than ads? |
| 3 | Blended CPL (all channels) | Total spend / total leads = overall efficiency |
| 4 | Organic share of total leads | What % of leads come from organic? This should climb every month |
| 5 | Revenue attributed to organic | Tie leads to closed jobs via ServiceTitan. This is the money number |
If those 5 numbers aren't trending the right direction by month 5, something is wrong and we fix it. If they're still not moving by month 8, fire me.
Standard reporting compares this week vs last week. Cohort reporting answers a more powerful question: which month of marketing produced the best revenue?
| Cohort | Leads In | Booked | Revenue | Avg Ticket | CPL | Cost/Booked Job |
|---|---|---|---|---|---|---|
| March 2026 | 40 | 28 | $187,000 | $6,679 | $89 | $127 |
| April 2026 | 52 | 31 | $142,000 | $4,581 | $74 | $124 |
| May 2026 | 38 | 24 | $204,000 | $8,500 | $96 | $152 |
May had fewer leads but higher revenue per lead -- because more sewer line jobs came in. That changes budget allocation decisions. Cohort reporting reveals whether we should optimize for VOLUME or for TICKET SIZE. This is not a standard reporting feature. It requires joining ServiceTitan revenue data back to the marketing source by lead cohort. I've built this before.
Every Monday alongside the email, I record a 5-minute Loom video walking through the dashboard: what changed, why, and what we're doing about it. Takes the same time as writing a summary, but 10x more useful because I can point at specific charts and explain the story behind the numbers. Stephanie can watch on her phone. Kalen can skip straight to the revenue section.
Your framework didn't mention response time, but it's the single biggest predictor of booking rate in home services.
I would add a speed-to-lead metric to the dashboard: how many minutes between lead submission and first contact. If it's over 5 minutes, we're losing money regardless of how good the ads are. ServiceTitan tracks first-response time. I'd pull this into the weekly report as a standing KPI.
Before any optimization begins, these baseline metrics establish the "before" picture. Without baselines, you can't prove anything improved.
| KPI | Tool | What It Tells You | Why Day-1 Matters |
|---|---|---|---|
| Keyword Universe Size | Ahrefs / Semrush | Total keywords ranking (any position) | Typical plumbing company: 200-500. Target: 2,000+ in 12 months |
| Rankings Distribution | Ahrefs / Semrush | Keywords in positions 1-3, 4-10, 11-20, 21-50, 50+ | Shows quick wins (positions 11-20 = push to page 1) |
| Domain Authority / Rating | Moz DA / Ahrefs DR | Site authority score (0-100) | Higher = ranks faster. Baseline for backlink strategy |
| Organic Traffic | Search Console + GA4 | Monthly sessions from organic search | Baseline for growth tracking |
| Indexed Pages | Search Console > Pages | How many pages Google indexes | More quality pages = more ranking opportunities |
| Core Web Vitals | PageSpeed Insights | LCP, INP, CLS scores | Page speed directly impacts rankings AND conversions |
| GBP Metrics | GBP Insights | Profile views, searches, calls, direction requests | Local visibility baseline |
Every metric gets documented on Day 1 and compared monthly. By Day 90, you see the exact delta on every number.
Most agencies manually copy data into spreadsheets every Monday. I build automated pipelines using the Google Ads API, GA4 Data API, and Search Console API that pull data programmatically, process it, and generate the weekly report. Zero manual data entry. Zero human error. The Monday report arrives whether I'm at my desk or not.
This also enables automated competitive intelligence: using Semrush's API, I set up competitor tracking that flags ranking changes, new competitor content, and estimated spend shifts -- all surfaced automatically in the Monday report. No manual competitor research needed.
Full alignment. The 14-day audit is already in my Growth Strategy as the first deliverable.
The audit will answer 7 specific questions:
| Question | How I Answer It | Why It Matters |
|---|---|---|
| Are we separating brand from non-brand? | Campaign structure review | Brand clicks cost $1-3, non-brand cost $8-15. Blending them hides true CPL. (Source: WordStream, 2025 -- plumbing avg CPC $10.49) |
| Are we targeting the right geos? | Geo performance report by zip code | Bright Side's site shows 15 service area cities. Are ads spending in all 15 or leaking outside? |
| Are negative keywords blocking waste? | Search Terms report, last 90 days | Industry benchmark: 15-25% of plumbing ad spend goes to irrelevant searches without proper negatives (WordStream, 2025) |
| What is our Quality Score? | Keyword-level QS analysis | Every 1-point QS increase = ~13% CPC reduction. QS 10 = 50% CPC discount vs QS 5 baseline. (Source: LeadGen Economy / (un)Common Logic, 2025) |
| Is PMax cannibalizing Search? | Campaign overlap analysis | PMax can steal branded conversions from cheaper Search campaigns, inflating PMax ROAS artificially |
| Are we using offline conversions? | Conversion tracking audit | Without offline conversions, Google optimizes for form fills and calls -- not for $12K sewer jobs vs $300 drain cleans |
| What is true ROAS by campaign? | ServiceTitan revenue matched to campaign | The only metric that matters: dollars in vs dollars out |
PMax is powerful but opaque. It works well ONLY when three conditions are met simultaneously. If any are weak, PMax burns money quietly because you can't see which placements are working.
I would evaluate Bright Side's PMax asset groups against Google's best practices, check whether conversion signals are revenue-weighted (not just calls), and determine if audience signals are constraining targeting or running wide open. If misaligned, I'd recommend either a structured rebuild or shifting that budget to manual Search campaigns while we fix the foundation.
If brand and non-brand campaigns are running together, your CPA looks great because brand converts cheaply -- but it masks the real cost of acquiring NEW customers:
Separation is non-negotiable. Brand searches are customers who ALREADY know you. Non-brand searches are customers you're acquiring for the first time. Blending the two hides the true cost of growth.
Every monthly report will include a "cost to continue" analysis for each channel. This turns budget conversations into math, not gut feel:
Most agencies review ad performance manually, once a week or once a month. I build automated scripts that pull data via the Google Ads API and flag waste patterns in real time:
| Flag | What It Catches |
|---|---|
| 1 | Search terms with spend > $50 and zero conversions |
| 2 | Keywords with Quality Score below 5 |
| 3 | Campaigns with >20% impression share lost to budget |
| 4 | Ad groups with CTR below 2% |
| 5 | Landing pages with bounce rate above 70% |
| 6 | Geo locations with spend but no conversions |
| 7 | Hour-of-day segments with high spend, low conversion |
Output: prioritized waste report with dollar amounts and recommended actions for each flag. Full audit data in hours, not days.
Your 14-day audit framework is strong. I would add 4 items most audits miss:
| Audit Area | Why It Matters |
|---|---|
| Landing page quality | Ad-to-page message match, load speed, mobile UX, conversion path clarity. Mismatches inflate CPC by 30-50%. |
| Impression share | Budget-lost vs rank-lost. Determines whether underperformance is a spending problem or a quality problem. |
| Competitor ad intelligence | What competitors bid on, their ad copy, where they outbid you. Informs negative keywords and content gaps. |
| Conversion lag | Plumbing has a 24-72 hour lag (click today, call tomorrow). If attribution window is 1 day, conversions are undercounted. |
Current state: Google Ads optimizes for "leads" (calls + form fills). It cannot distinguish between a $300 drain cleaning lead and a $12,000 sewer repair lead. Both count as "1 conversion."
With offline conversions: Google receives actual revenue data from ServiceTitan. Now it knows: "This keyword, at this time, from this zip code, led to a $8,200 closed job." It then optimizes bidding to find MORE patterns like that.
Bright Side qualifies: At ~175 leads/month with 80% booking rate, that is ~140 completed jobs/month -- well above the 15-conversion minimum.
| Step | Action | Owner | Time |
|---|---|---|---|
| 1 | Verify auto-tagging is ON: Google Ads > Settings > Account Settings > Auto-tagging: confirm "Tag the URL" is checked | Robert | 5 min |
| 2 | In ServiceTitan: navigate to Settings > Marketing > Integrations > find Google Ads | Robert + Kalen | 15 min |
| 3 | Click "Connect" > authorize Google Ads account > select the correct Ads account ID | Robert | 10 min |
| 4 | Map conversion actions: Lead Created = Lead, Job Booked = Booking, Job Completed = Purchase (with invoice amount), Invoice Paid = Revenue (with payment amount) | Robert | 20 min |
| 5 | Set conversion window to 30 days (plumbing typically 1-7 day lag between click and job completion) | Robert | 5 min |
| 6 | Wait 7 days for data to start flowing | -- | 7 days |
| 7 | Verify: Google Ads > Conversions > check for offline conversion data. Compare revenue values against ServiceTitan invoices for same period | Robert | 30 min |
| 8 | After 30 days of data: switch from Manual CPC to Target ROAS bidding on top campaigns | Robert | 30 min |
| Total active time | ~2 hours |
Verification: After Step 7, pull 5 random completed jobs from ServiceTitan. Find their GCLIDs. Confirm those same GCLIDs show revenue values in Google Ads conversion report. If 4/5 match, the pipeline is working.
Current: $200 blended CPL
Target: $75-90 blended CPL within 12 months
| Channel | Current CPL | 6-Mo Target | 12-Mo Target | How |
|---|---|---|---|---|
| Google Ads | $180-220 | $120-140 | $100-120 | QS optimization + offline conversions + negative keyword cleanup |
| LSA | $80-120 | $55-70 | $50-65 | Review velocity + ranking factor optimization |
| Organic/SEO | N/A (minimal) | $40-50 | $25-35 | Content engine + technical SEO fixes |
| GBP | N/A (not tracked) | $15-25 | $10-20 | GBP post optimization + Reserve with Google |
| Blended | $200 | $120-140 | $75-90 | Channel diversification + optimization |
Full alignment on all 5 points, plus 3 improvements.
This changes the strategy. Previously, being close to the searcher helped. Now, being responsive and getting good reviews matters more than geography. This is GOOD for Bright Side -- it means you can compete for leads across the entire KC metro, not just Overland Park.
The 6 ranking factors that matter now:
| Factor | Bright Side Status | Action Needed | Impact |
|---|---|---|---|
| Review rating | 4.9 stars -- EXCELLENT | Maintain above 4.8 | HIGH |
| Review count | 384+ reviews | Accelerate to 500+ in 6 months | HIGH |
| Review recency | Unknown (need to check) | 8-15 new reviews/month minimum | HIGH |
| Responsiveness | Unknown (need to measure) | Answer/respond to every lead within 5 min | HIGH |
| Business hours | Mon-Fri 7am-6pm, Sat 9am-4pm | Consider extending or adding emergency hours | MEDIUM |
| Profile completeness | Partially complete (need audit) | Fill every field, add photos monthly | MEDIUM |
| Dispute rate | Unknown | Healthy dispute rate signals quality standards to Google | LOW-MEDIUM |
Current velocity: Unknown (need to calculate from GBP data)
Target velocity: 15+ reviews/month (180+/year)
12-month target: 500+ total reviews
The system:
| Method | Expected Reviews/Month | Owner |
|---|---|---|
| ServiceTitan automated SMS after job completion | 8-12 | Robert (setup) / Auto |
| Technician QR code cards (handed at job site) | 4-6 | Techs |
| Follow-up email (24hrs after job if no review received) | 2-4 | Robert (setup) / Auto |
| Total | 14-22/month |
| Step | Action | Owner | Time |
|---|---|---|---|
| 1 | In ServiceTitan: Settings > Customer Notifications > find "Review Request" template | Robert + Kalen | 15 min |
| 2 | Customize SMS template: "Hi [First Name], thank you for choosing Bright Side! If [Tech Name] did a great job, we'd really appreciate a quick Google review: [review link]. It helps other KC homeowners find reliable plumbing. -- Kalen" | Robert | 15 min |
| 3 | Set trigger: Send 2 hours after "Job Completed" status | Robert | 10 min |
| 4 | Set follow-up: If no review after 24 hours, send email version with same link | Robert | 10 min |
| 5 | Create QR code linking to Google review page: search "Google review link generator" > enter Place ID > generate QR code | Robert | 15 min |
| 6 | Order QR code cards from Vistaprint or Canva Print (business card size, Bright Side branding, text: "Loved your service? Scan to leave a review!") | Robert | 30 min |
| 7 | Distribute 20 cards per technician. Brief techs: "After every job, hand one card and say: 'If you were happy with the work, a quick Google review really helps us out.'" | Kalen (crew briefing) | 15 min |
| 8 | Set up Google Alert for "Bright Side Plumbing" to catch new reviews as they post | Robert | 5 min |
| 9 | Create review response templates (3 versions for 5-star, 1 for 4-star, 1 for negative) | Robert | 30 min |
| 10 | Respond to ALL existing unresponded reviews within first week | Robert | 1-2 hrs |
| Total | ~3-4 hours setup + 1-2 hrs response backlog |
Verification: After 2 weeks, check GBP Insights > Reviews. Target: 7+ new reviews in first 2 weeks. If below 5, troubleshoot SMS delivery and check tech card distribution.
Most companies track one number: CPL. I track three levels that tell a complete story:
| Level | Metric | Cadence | Action Trigger |
|---|---|---|---|
| Lead Quality | % of LSA leads that are qualified (not spam, wrong area, wrong service) | Weekly | Dispute unqualified leads for credit |
| Booking Rate | % of qualified leads that convert to booked jobs | Weekly | Flag if below 40% -- diagnose booking friction immediately |
| Revenue per LSA Dollar | Revenue from LSA-booked jobs / LSA spend | Monthly | Compare to Google Ads revenue per dollar; reallocate if needed |
The 40% booking rate threshold is critical. Below 40% means something is broken in the handoff between lead and booking -- either response time, phone scripts, or lead quality. Above 60% means the system is working and you can scale spend.
Since November 2024, Google Business Profile and LSA are explicitly linked. An inactive GBP directly hurts LSA ranking. This means GBP optimization is not a "nice to have" -- it's an LSA ranking lever.
Weekly GBP maintenance:
Beyond ranking factors, there are 18 specific tactics to increase LSA call volume. Here are the highest-impact ones not covered above:
Service Category Expansion (3-Tier Priority):
| Priority | Services | Why |
|---|---|---|
| Tier 1 (highest revenue) | Sewer line repair, Sewage system installation | $3,000-$15,000+ per job. High-intent, emergency-driven. Should get largest share of LSA budget. |
| Tier 2 (supporting) | Water heater repair/install, Drain cleaning, Leak detection, Pipe replacement, Gas line | Mid-ticket, consistent demand |
| Tier 3 (full coverage) | Faucet, Garbage disposal, Bathroom remodeling, Toilet, Water filtration, Sump pump, Backflow | Each additional category = more keyword matches = more impressions |
Each additional LSA service category creates more keyword matches. But budget weight should follow revenue weight. A $12,000 sewer job is worth 40x a $300 drain clean. Google's algorithm needs to know that through offline conversion data.
Reserve with Google (ServiceTitan Instant Booking):
Bidding Strategy Sequence:
| Phase | Timing | Strategy | Why |
|---|---|---|---|
| 1 | Weeks 1-4 | Maximize Leads | Let Google's algorithm gather data on what converts |
| 2 | After 4 weeks | Analyze conversion rates by job type | Identify which services LSA is actually generating revenue for |
| 3 | After analysis | Switch to Target CPA | Set targets based on real data, not guesses |
| 4 | Ongoing | Minimum budget: 10 leads/week | Below this threshold, the algorithm can't optimize effectively |
Lead Rating Discipline:
Category-Level Pausing:
Multi-Location Strategy:
Other Critical LSA Actions:
I would tag every LSA lead by service type in ServiceTitan so we can see which services LSA is actually generating revenue for:
| Channel | CPL | Avg Ticket | Revenue per Marketing Dollar |
|---|---|---|---|
| LSA (drain cleaning) | $55 | $200 | $3.64 |
| Google Ads (water heater) | $150 | $8,000 | $53.33 |
Google Ads leads are 14x more profitable per marketing dollar despite a higher CPL. That changes the budget allocation conversation entirely. Without service-level tagging, you can't make this comparison.
| # | Mistake | Why It Hurts |
|---|---|---|
| 1 | Incomplete profile | Every empty field costs ranking |
| 2 | Stale reviews | 384 reviews means nothing if the last one is 3 months old |
| 3 | Set-and-forget budget | Seasonal adjustment is mandatory |
| 4 | Slow call response | #1 killer -- 95%+ live answer rate or ranking drops for 90 days |
| 5 | Not rating leads | Automated credit system only works if you rate every lead |
| 6 | Not using instant booking | ServiceTitan Reserve with Google is a differentiator most plumbers skip |
| 7 | Over-broad service area | Out-of-area leads waste budget and hurt responsiveness |
| 8 | No offline conversion tracking | Without it, Google optimizes for clicks, not revenue. At $35K/month, this is negligence. |
| 9 | Ignoring GBP | GBP and LSA have been linked since Nov 2024. Inactive GBP = weaker LSA |
| 10 | Over-reliance on LSA alone | LSA should be the biggest channel but not the only one |
Every Monday, I will:
| Lead Type | Action | Expected Outcome |
|---|---|---|
| Wrong service area (outside 15 cities) | Dispute within 24 hours | Full refund |
| Spam/robocall | Dispute with recording evidence | Full refund |
| Customer looking for different service | Dispute with explanation | Case-by-case |
| Customer called but never answered | DO NOT dispute -- this is a responsiveness issue | Fix response time instead |
Full alignment. This is the technical foundation everything else depends on.
| Check | How to Verify | Expected Result | If It Fails |
|---|---|---|---|
| Auto-tagging ON | Google Ads > Settings > Account Settings > Auto-tagging | "Tag the URL that people click through from my ad" = checked | Turn it on. Without this, no GCLIDs are generated. |
| GCLID on landing pages | Click a Bright Side ad > check URL for ?gclid= parameter | URL contains gclid= with a long alphanumeric string | Check auto-tagging. Check for URL redirect stripping parameters. |
| GCLID in form submissions | Submit test form on callbrightside.com > check form data in HubSpot/ServiceTitan | GCLID value appears in lead record | Add hidden gclid field to all forms. JavaScript: capture gclid from URL and populate hidden field. |
| Call tracking active | Call the tracking number from an ad > check ServiceTitan for lead record | Lead record shows the call with marketing source attribution | Set up call tracking numbers (CallRail or ServiceTitan native) |
| ServiceTitan > Google Ads connection | ServiceTitan > Settings > Marketing > Google Ads integration | Status: "Connected" with recent sync timestamp | Re-authorize the connection. Contact ServiceTitan support if needed. |
| Offline conversions flowing | Google Ads > Conversions > filter by conversion source = "Import" | At least 1 offline conversion in last 7 days (after setup) | Check ServiceTitan sync settings. Verify conversion action mapping. |
| GBP calls not double-counted | Compare GBP call log vs website call log for same time period | No duplicate call records across tracking sources | Separate GBP tracking number from website DNI pool. Overlap inflates lead count and deflates CPL. |
Most plumbing companies track "calls" as conversions. But a 12-second call where someone hangs up is not a lead. I would set up call duration thresholds: only calls over 60 seconds count as conversions.
Current state: Need to audit whether Bright Side is using ServiceTitan's native call tracking, CallRail, or another solution.
Recommended setup:
| Channel | Tracking Method | What It Captures |
|---|---|---|
| Google Ads | Dynamic Number Insertion (DNI) via ServiceTitan or CallRail | GCLID, keyword, campaign, landing page |
| LSA | LSA-assigned number (Google controls this) | LSA lead ID, service type |
| GBP | Dedicated tracking number on GBP listing | GBP click source |
| Website (organic) | Pool of tracking numbers via DNI | Session source, landing page |
| Direct/offline | Main business number (913) 963-1029 | No digital attribution (that's ok) |
| Day | Audit Step | Method | Owner |
|---|---|---|---|
| 1 | Verify GA4 fires on all pages | GTM debug mode, real-time reports | Robert |
| 1 | Verify conversion actions measure real outcomes | Review each action in Google Ads; remove proxy metrics | Robert |
| 2 | Test call tracking number swap by source | Visit site from organic, paid, direct; verify correct number displays | Robert |
| 2 | Verify GCLID passthrough to CRM | Click a test ad; confirm GCLID appears in ServiceTitan record | Robert |
| 3 | Set call duration thresholds | Only calls over 60 seconds count as conversions | Robert |
| 3 | Test form submission tracking chain | Submit test form; follow from GA4 event to CRM record | Robert |
| 4 | Verify GBP calls tracked separately | Confirm GBP calls are NOT double-counted with website calls | Robert |
| 4 | Verify auto-tagging is ON | Google Ads > Settings > Account Settings > Auto-tagging | Robert |
| 5 | Document all conversion actions | Spreadsheet: action name, what it measures, real outcome or proxy | Robert |
| 5 | Deliver Attribution Health Check | 1-page green/yellow/red report shared with team | Robert |
Deliverable: Attribution Health Check with green/yellow/red status for each verification point. Green on all checks = attribution is solid. Yellow/red = specific remediation plan created for each gap. Shared with Kalen, Stephanie, and Russ by end of Day 5.
Full alignment, plus I add a WordPress/Oxygen Builder evaluation and specific conversion benchmarks.
Based on my audit of callbrightside.com:
What is working well:
What needs improvement (with data backing):
| Issue | Why It Matters | Industry Data |
|---|---|---|
| No heatmap data to analyze user behavior | Can't optimize what you can't measure | Heatmap-optimized pages convert 14% higher (Heatmap.com, 2025) |
| Single-step contact form | Multi-step forms convert 86% higher than single-step forms (LeadGen Economy, 2025) | Multi-step can achieve up to 300% more conversions (Venture Harbour, 2025) |
| Hero image loads via CSS background with JS injection | Delays LCP (Largest Contentful Paint), hurting Core Web Vitals | Sites loading in 1 second convert at 3.05%; at 5 seconds, only 0.6% (Portent study, 100M page views) |
| 8+ CSS files from Oxygen Builder | Render-blocking resources increase load time | 53% of mobile users abandon sites taking longer than 3 seconds (Google/SOASTA) |
| HubSpot loads from 5 domains | 5 additional DNS lookups slow initial load | 1-second delay = 7% reduction in conversions (Aberdeen Group) |
| No sticky mobile CTA | Mobile users must scroll to find the phone number | Above-the-fold CTAs outperform by 304% (Cube Creative Design, 2025) |
| Business hours inconsistency | Website shows Mon-Fri 7am-6pm but schema markup shows 7am-9pm | Confuses Google and customers. Fix to match actual hours. |
| Two addresses listed | 12022 Blue Valley Pkwy AND 8110 Carter St | NAP inconsistency hurts local SEO. Use ONE consistent address everywhere. |
| Generation claim inconsistency | Homepage says "Fourth generation" but About page says "fifth-generation" | Inconsistency undermines trust. Pick one and make it consistent everywhere. |
My recommendation: KEEP the current site and optimize it.
Here is the data-driven analysis:
| Path | Cost | Timeline | SEO Risk | Revenue Impact During Transition |
|---|---|---|---|---|
| KEEP + Optimize | $1,500-$3,000 | 2-3 weeks | Zero -- no URL changes, no migration | Zero downtime. Marketing continues uninterrupted. |
| Rebuild (new theme) | $8,000-$20,000 | 6-12 weeks | HIGH -- URL changes, redirect errors, indexing delays | 6-12 weeks of reduced lead flow during transition |
| Rebuild (new platform) | $15,000-$35,000 | 3-6 months | VERY HIGH -- complete re-indexing required | Months of disruption to lead pipeline |
Keep + Optimize path:
Rebuild path:
| Factor | Assessment |
|---|---|
| Performance | GOOD -- Oxygen outputs clean HTML/CSS (no jQuery dependency like Elementor). Lighter than most page builders. |
| Customization | EXCELLENT -- full design control, custom CSS/PHP, no theme dependency |
| Learning curve | HIGH -- but Bright Side's site is already built. No need for anyone new to learn it. |
| Plugin compatibility | GOOD -- works with Rank Math, HubSpot, WooCommerce, major plugins |
| Support/community | MODERATE -- smaller than Elementor but adequate. Active development team. |
| Risk if license lapses | LOW-MEDIUM -- Oxygen 4.0+ sites continue to function without active license. Only updates stop. |
| SEO output | GOOD -- clean semantic HTML, proper heading structure, schema-compatible |
Bottom line: Oxygen Builder is a technically superior page builder that's already built and working. Rebuilding would cost 5-10x more, take 2-3 months, risk SEO disruption, and produce the same result (a WordPress site that converts visitors to leads). Every dollar spent on a rebuild is a dollar NOT spent on marketing that generates revenue.
Not all service pages are equal. I would prioritize CRO on the pages that drive the most REVENUE per conversion, not just the highest traffic or highest conversion rate:
| Service Page | Traffic/Mo | Current CVR | Avg Ticket | Monthly Revenue Potential |
|---|---|---|---|---|
| Water Heater | 400 | 2.0% | $8,000 | $64,000 |
| Sewer Line | 200 | 1.5% | $12,000 | $36,000 |
| Drain Cleaning | 800 | 8.0% | $200 | $12,800 |
| Faucet Repair | 600 | 5.0% | $350 | $10,500 |
The math: Improving water heater CVR from 2% to 3% adds $32,000/month. Improving drain cleaning from 8% to 10% adds $3,200/month. Water heater gets priority. This is how you think like an owner -- optimize where the revenue impact is largest, not where the traffic is highest.
In the first 30 days, I would screenshot and analyze the top 5 plumbing competitor websites in the KC metro:
What are they doing that Bright Side isn't? What is Bright Side doing better? This gives us a cheat sheet of proven patterns without having to test from scratch. Combined with Clarity heatmap data from Bright Side's own site, we can prioritize CRO tests based on both competitive gaps AND user behavior data.
Showing different content based on visitor type is one of the most underused CRO tactics in home services:
Example 1: Returning visitor personalization
A returning visitor who looked at "emergency plumbing" last time sees a hero banner: "Still have that plumbing emergency? Call now: (913) 963-1029" instead of the generic homepage. This catches people who were comparing plumbers and came back.
Example 2: Geo-location personalization
A visitor from Olathe sees "Bright Side Plumbing -- Serving Olathe & Johnson County" instead of a generic headline. A visitor from Shawnee sees "Serving Shawnee & Johnson County." Same page, different headline, higher relevance. This is achievable through WordPress plugins or GTM-based content swap scripts without rebuilding the site.
Not all customers want to call. Not all customers want to fill out a form. A chat widget (even an AI-powered one like Drift or Tidio) captures leads who would otherwise bounce. For a plumbing company with emergency-driven customers searching at 11 PM on a Saturday, chat can be the difference between capturing that $12,000 sewer lead and losing it to a competitor who answers.
This is a Month 3-4 addition, not a Month 1 priority. Get the attribution and tracking right first, then layer in additional conversion paths.
| Week | Test | Hypothesis | Metric | Tool |
|---|---|---|---|---|
| 1-2 | Install Microsoft Clarity (free heatmaps) | We need baseline data before testing | Heatmap data, session recordings, rage clicks | Clarity |
| 3-4 | Add sticky mobile CTA ("Call Now" button, fixed to bottom of screen on mobile) | Mobile users can't find the phone number after scrolling | Mobile phone call conversions | Clarity + GA4 |
| 5-6 | Convert contact form to multi-step (Step 1: Service type, Step 2: Urgency, Step 3: Contact info) | Multi-step forms convert 86% higher (LeadGen Economy, 2025) | Form completion rate | GA4 + form analytics |
| 7-8 | A/B test homepage headline: Current vs "5th-Generation Master Plumber. Flat-Rate Pricing. Lifetime Warranty." | Heritage + guarantees in headline increases trust | Homepage conversion rate | VWO or Optimizely |
| 9-10 | Speed optimization: switch hero from CSS background to img tag, defer non-critical CSS/JS, preconnect HubSpot domains | Faster load = higher conversion (3.05% at 1s vs 0.6% at 5s) | LCP, conversion rate | PageSpeed Insights + GA4 |
| 11-12 | Add trust signals above the fold: "4.9 Stars -- 384+ Reviews -- A++ BBB -- Lifetime Warranty" | Trust signals reduce bounce, increase form/call engagement | Bounce rate, conversion rate | Clarity + GA4 |
Every CRO test gets a 1-page report:
| Step | Action | Owner | Time |
|---|---|---|---|
| 1 | Go to clarity.microsoft.com > click "Sign up for free" > create account with dovewebconsulting@gmail.com | Robert | 5 min |
| 2 | Create new project > name: "Bright Side Plumbing" > enter URL: callbrightside.com | Robert | 2 min |
| 3 | Copy the Clarity tracking code (JavaScript snippet) | Robert | 1 min |
| 4 | In WordPress admin: go to Oxygen > Settings > Global Settings > find "Custom CSS/JS" or use a code injection plugin (Insert Headers and Footers) | Robert | 5 min |
| 5 | Paste Clarity code into the header section > Save | Robert | 2 min |
| 6 | Alternative: If GTM is already installed (it is -- GTM-W8DXXJLT), add Clarity as a Custom HTML tag in GTM: Tags > New > Custom HTML > paste Clarity code > Trigger: All Pages > Save > Publish new GTM version | Robert | 10 min |
| 7 | Verify: Go to callbrightside.com > right-click > View Source > search for "clarity" > confirm the script is present | Robert | 2 min |
| 8 | Wait 24 hours > log into Clarity > confirm sessions are recording | Robert | 1 min |
| Total | ~15-30 minutes |
Verification: After 48 hours, log into Clarity dashboard. You should see: session recordings, heatmaps for top pages, and rage click data. If no data: check that the tracking code is on the live site (not just preview/staging).
Full alignment with your phasing. I've broken each phase into specific deliverables with owner labels and verification checkpoints.
Before I touch anything on the site, before I write a single blog post or change a single meta tag, I build the diagnostic layer.
The 7-Step Diagnostic Layer:
| # | What We Build | What It Reveals | Timeline |
|---|---|---|---|
| 1 | GA4 Funnel Tracking | Exactly WHERE visitors drop off. Maybe 500 people hit the emergency page but only 12 submit the form. Now we know the form is the leak, not the traffic. | Week 1 |
| 2 | Custom Event Tracking | Every meaningful action: CTA clicks, form starts, form completions, phone clicks, chat opens, scroll depth, time on page | Week 1 |
| 3 | Call Tracking Attribution | Dynamic numbers that tie every phone call to the exact page, campaign, or keyword. For plumbing, 40-60% of leads come by phone. Without this, you're blind to HALF your leads. | Week 1-2 |
| 4 | Heatmaps + Session Recordings | Visual maps of where visitors click, scroll, and drop off. You might think people read your whole page. Heatmaps might show they stop at 40% and never see the phone number. | Week 1 |
| 5 | Form Analytics | Which form fields cause abandonment. Every field added reduces completions by 5-10%. | Week 2 |
| 6 | Source Attribution | Separate organic vs paid vs direct vs referral leads so every channel has its own CPL. The $200 might be blended -- maybe Google Ads is $150 and Angi is $300. | Week 2 |
| 7 | Conversion Rate by Page | Which pages convert and which are dead ends. | Week 2-3 |
What I did for Bathroom Bidders (proof this works): Built this exact diagnostic system -- GA4 with 15 custom dimensions, full funnel tracking from first visit through form submission, automated event tracking on every CTA, and conversion attribution tied to revenue. Finding: their #1 landing page (256 sessions in 90 days) had ZERO conversion paths. No CTA, no phone number, no form link. 256 visitors hitting a dead end every quarter. They didn't know because they weren't measuring at the page level. We would have never found that without the diagnostic layer.
Week 1: Foundation (Mar 2-7)
| Task | Owner | Time | Deliverable | Verification |
|---|---|---|---|---|
| Sign offer letter + commission agreement | Robert + Kalen | Mon meeting | Signed docs | Docs signed |
| Complete background check + drug screening | Robert | ASAP | Cleared status | Results received |
| Get access: Google Ads, GA4, GTM, Search Console, GBP, ServiceTitan, HubSpot, WordPress admin, LSA dashboard, Metricool | Robert + Russ | 2 hrs | Access log with login method for each | Can log into every platform |
| Run Attribution Health Check (Section 4.4) | Robert | 2 hrs | 1-page green/yellow/red report | Shared with team by Day 3 |
| Install Microsoft Clarity for heatmaps (Section 5.5) | Robert | 30 min | Clarity tracking live | Session recordings appearing within 48 hrs |
| Fix NAP inconsistency: choose ONE address, update schema + footer + GBP to match | Robert | 1 hr | Consistent address across all properties | Search "Bright Side Plumbing" -- all listings show same address |
| Fix generation claim: confirm with Kalen (4th or 5th gen?), update all pages to match | Robert + Kalen | 30 min | Consistent claim site-wide | Ctrl+F "generation" on all pages returns same number |
| Fix business hours mismatch: schema markup vs website display vs GBP | Robert | 30 min | Hours consistent across schema, site, GBP | Schema.org testing tool shows matching hours |
| Data hygiene audit: verify ServiceTitan marketing source fields are populated consistently | Robert | 1 hr | Marketing source mapping document | Every lead source has a clean label -- no "Unknown" or blank entries |
Week 2: Audit (Mar 9-14)
| Task | Owner | Time | Deliverable | Verification |
|---|---|---|---|---|
| Begin 14-day Google Ads audit (Section 2.1) | Robert | 8 hrs | Audit document (7 questions answered) | Audit shared with Stephanie/Kalen by Day 14 |
| Audit LSA profile completeness: check every field, photos, business description, service categories | Robert | 2 hrs | LSA completeness checklist | Every field filled, 15+ photos uploaded |
| Expand LSA to 15+ service categories (if currently fewer) | Robert | 1 hr | Updated LSA category list | LSA dashboard shows all relevant categories active |
| Run Screaming Frog site crawl on callbrightside.com | Robert | 2 hrs | Prioritized fix list ranked by revenue impact | Exported crawl data with issues sorted by: (1) fixes that directly increase conversions, (2) fixes that improve rankings for money keywords, (3) fixes that improve site health |
| Pull 90-day GA4 data: traffic, sources, top pages, conversion events | Robert | 1 hr | Baseline report | Baseline numbers documented for comparison |
| Audit existing keyword rankings (Semrush or Ahrefs) | Robert | 2 hrs | Keyword ranking baseline | Top 50 keywords documented with current positions |
| Begin water heater URL analysis (3 URLs competing -- identify strongest) | Robert | 1 hr | Recommendation: keep/redirect/consolidate | Clear plan for URL consolidation |
Week 3-4: Quick Wins + First Report (Mar 16-28)
| Task | Owner | Time | Deliverable | Verification |
|---|---|---|---|---|
| Fix homepage title tag + meta description (include "5th-gen master plumber" + primary keyword + city) | Robert | 30 min | Updated title/meta | View source > check title and meta description tags |
| Add FAQPage schema to /faqs/ page | Robert | 1 hr | Schema markup live | Rich Results Test (search.google.com/test/rich-results) shows valid FAQPage |
| Fix logo URL (HTTP to HTTPS if applicable) | Robert | 15 min | Secure logo URL | No mixed content warnings |
| Complete Google Ads audit > deliver findings + recommendations to team | Robert | 2 hrs | Audit presentation | Meeting to discuss findings |
| Set up review acceleration program (Section 3.3) | Robert | 4 hrs | ServiceTitan automated, QR cards ordered, response templates created | First automated review request sent |
| Rate all historical LSA leads (Booked / Not Booked / Dispute) | Robert | 2 hrs | All leads rated | LSA dashboard shows updated lead ratings |
| Deliver first weekly pulse report | Robert | 1 hr | Weekly report email | Sent to Kalen, Stephanie, Russ |
| Build Looker Studio dashboard v1 (Section 1.3) | Robert | 4 hrs | Live dashboard | Shared with team, data updating |
| Deliver 30-Day Diagnostic Report: everything found, everything fixed, what's next | Robert | 3 hrs | Comprehensive diagnostic | Meeting to review + approve 31-60 plan |
| Task | Owner | Time | Deliverable | Verification |
|---|---|---|---|---|
| Enable offline conversion tracking (Section 2.3) | Robert | 2 hrs | ServiceTitan > Google Ads pipeline active | Offline conversions appearing in Google Ads within 7 days |
| Restructure Google Ads: separate brand vs non-brand campaigns | Robert | 4 hrs | New campaign structure live | Brand CPL < $5, non-brand CPL measurable separately |
| Implement water heater URL consolidation (301 redirects) | Robert | 2 hrs | Single authoritative water heater page | Old URLs redirect properly, no 404s |
| Shift $5,000-7,000 from PPC to LSA budget (if audit supports it) | Robert | 30 min | Updated budget allocation | LSA daily budget increased, PPC reduced proportionally |
| Deploy sticky mobile CTA | Robert | 1 hr | "Call Now" button fixed to bottom of mobile screen | Test on 3 different phones, confirm button works and tracks in GA4 |
| Convert contact form to multi-step | Robert | 3 hrs | Multi-step form live on contact page | Test submission end-to-end, confirm lead reaches ServiceTitan |
| Launch first A/B test (homepage headline) | Robert | 2 hrs | Test running with 50/50 traffic split | VWO or Optimizely shows test active |
| Publish 4-6 blog posts (target long-tail keywords) | Robert | 20 hrs | Posts live with schema, internal links, CTAs | Posts indexed in Google (site:callbrightside.com/blog/[slug]) |
| Build 2 missing service area pages | Robert | 8 hrs | Pages live for underserved cities | Pages ranking in Search Console within 2-4 weeks |
| Enable Reserve with Google (instant online booking via GBP) | Robert + Kalen | 1 hr | "Book Online" button on GBP | Click "Book Online" on GBP > booking flow works |
| Speed optimization: fix hero image, defer CSS/JS, preconnect | Robert | 3 hrs | Improved Core Web Vitals | PageSpeed Insights score improves by 10+ points |
| Monthly report #1 delivered | Robert | 3 hrs | Full month-over-month report | Revenue attribution by channel documented |
| Task | Owner | Time | Deliverable | Verification |
|---|---|---|---|---|
| Complete CRO audit using 60 days of Clarity data (heatmaps, session recordings, rage clicks) | Robert | 4 hrs | CRO findings report with prioritized fixes | Shared with team |
| Implement CRO fixes from audit | Robert | 8 hrs | Optimized pages live | Conversion rate trend improving in GA4 |
| Review offline conversion data (now 30+ days old) -- adjust Google Ads bidding to Target ROAS | Robert | 2 hrs | ROAS-based bidding active on top campaigns | CPA trending down, revenue per lead trending up |
| Publish 4-6 more blog posts (10-12 total) | Robert | 20 hrs | Posts live | Organic traffic increasing month-over-month |
| Complete all missing service area pages | Robert | 8 hrs | All 15 service area cities have dedicated pages | Each page indexed in Google |
| Launch remarketing campaigns (visitors who didn't convert) | Robert | 3 hrs | Remarketing audiences active in Google Ads | Display ads showing to past visitors |
| Build 5 dedicated landing pages for Google Ads (1 per top service) | Robert | 15 hrs | Service-specific landing pages live | Each landing page connected to its Google Ads campaign |
| A/B test results analysis: roll out winners, kill losers, plan next tests | Robert | 2 hrs | Test results report | Winners deployed site-wide |
| Deliver 90-Day Comprehensive Report: before/after data, ROI proof, months 4-6 plan | Robert | 5 hrs | Full report with revenue attribution | In-person meeting with Kalen, Stephanie, Russ |
| Deliver months 4-6 scaling plan | Robert | 3 hrs | Forward strategy document | Approved by team |
| KPI | Day 30 Target | Day 60 Target | Day 90 Target |
|---|---|---|---|
| Monthly Revenue | $275,000 | $325,000 | $400,000 |
| Blended CPL | $180 | $150 | $120 |
| Total Leads/Month | 190 | 240 | 300 |
| Google Reviews | 384+ | 420+ | 500+ |
| Website Conversion Rate | 3.5% | 4.5% | 5.5% |
| Organic Leads/Month | 5 | 20 | 45 |
| LSA CPL | Current | $70 | $60 |
| Google Ads Quality Score (avg) | Baseline | +1 point | +2 points |
Full alignment. No dollar gets spent without a revenue justification.
Current state: $35,000/month > $200 CPL > ~175 leads > ~140 booked jobs > ~$250,000 revenue
ROAS: $250,000 / $35,000 = 7.1x (every $1 generates $7.10 in revenue)
Principle: Don't increase total spend. Redistribute to lower-CPL channels.
| Channel | Current Monthly Spend | Proposed Month 3 | Proposed Month 6 | Proposed Month 12 |
|---|---|---|---|---|
| Google Ads (PPC) | $18,000-22,000 | $16,000 | $14,000 | $12,000 |
| LSA | $3,000-5,000 | $8,000 | $10,000 | $12,000 |
| SEO/Content | $0 | $3,500 | $4,000 | $5,000 |
| CRO Tools | $0 | $500 | $500 | $500 |
| Lead Gen Platforms | $5,000-8,000 | $4,000 | $2,000 | $0 |
| Social/Other | $2,000-3,000 | $2,000 | $2,500 | $3,000 |
| ClickCease | $500-800 | $500 | $500 | $500 |
| Metricool | $50-100 | $100 | $100 | $100 |
| Review Mgmt Tools | $0 | $200 | $200 | $200 |
| Total | ~$35,000 | ~$35,000 | ~$34,000 | ~$33,300 |
Key shift: Reduce reliance on high-CPL channels (PPC at $180-220/lead, lead gen platforms at $250-350/lead) and grow low-CPL channels (LSA at $50-70/lead, organic at $25-35/lead).
| Channel | Annual Spend | Projected Annual Leads | CPL | Projected Revenue | ROAS |
|---|---|---|---|---|---|
| Google Ads | $168,000 | 1,400 | $120 | $2,000,000 | 11.9x |
| LSA | $120,000 | 2,000 | $60 | $2,856,000 | 23.8x |
| Organic/SEO | $54,000 | 1,440 | $37.50 | $2,057,000 | 38.1x |
| Social/Referral | $30,000 | 360 | $83 | $514,000 | 17.1x |
| Total | $372,000 | 5,200 | $71.50 | $7,427,000 | 20.0x |
Plumbing has strong seasonality. Bright Side's slow months are early winter and early summer. Budget should follow demand, not sit flat at $35K/month:
Peak months (Jan-Mar, Jul-Sep): Increase LSA budget 40-60%. Highest emergency search volume. Frozen pipes in winter, AC-related plumbing in summer. Cost per lead may actually decrease because there's more search inventory.
Slow months (May, Nov-Dec): Reduce 20-30% but NEVER pause. Pausing LSA campaigns resets your quality score and momentum. Shift messaging to maintenance, inspections, winterization. This is when competitors pull back -- maintaining presence = cheaper leads for you.
| Path | Strategy | Monthly Spend | Monthly Leads | Revenue | Verdict |
|---|---|---|---|---|---|
| A: Brute Force | Double spend at $200 CPL | $70,000 | 350 | $500K ($6M/yr) | Expensive, fragile, zero efficiency |
| B: LSA-Heavy | Shift to LSA ($60 CPL) + optimize | $32,000 | 542 | $782K ($9.4M) | Good -- exceeds target on less spend |
| C: Full Stack (Best) | Path B + offline conversions + SEO + CRO + Reserve with Google | $35,000 | 550+ | $6M-$8M+ | Compounding flywheel. This is the plan. |
Path C in detail:
| Channel | Monthly Spend | CPL | Leads/Mo | Book Rate | Jobs/Mo | Revenue/Mo |
|---|---|---|---|---|---|---|
| LSA (optimized) | $12,000 | $60 | 200 | 80% | 160 | $285,760 |
| Google Ads (PPC) | $10,000 | $130 | 77 | 75% | 58 | $103,588 |
| Organic/SEO | $5,000 | $40 | 125 | 80% | 100 | $178,600 |
| Referral/Repeat | $2,000 | $25 | 80 | 90% | 72 | $128,592 |
| GBP/Maps | $3,000 | $50 | 60 | 80% | 48 | $85,728 |
| Total | $32,000 | $59 | 542 | 438 | $782,268 |
$782,268/month = $9.4M annualized. Even at 65% realization (seasonality, cancellations, callbacks), that's $6.1M on $32K/month -- less than current spend.
At current trajectory ($3M/year, $200 CPL, $35K/month spend):
The gap between $200 CPL and $75 CPL on 175 leads/month = $21,875/month being overspent. Over 12 months, that's $262,500 in wasted marketing dollars -- enough to fund the entire optimization program for 7 years.
Every budget decision follows this logic:
No budget change will be made without sharing the data with Kalen and Stephanie first. Every reallocation comes with a 1-page justification showing: current performance, proposed change, expected impact, and rollback plan if it doesn't work.
| Rule | Threshold | Action |
|---|---|---|
| No channel exceeds $250 CPL for 2 consecutive weeks | $250 CPL | Pause + investigate + report |
| No campaign runs without conversion tracking | Day 1 | Don't launch until tracking is verified |
| No budget increase without 30 days of data | 30 days minimum | Present data before requesting increase |
| Every A/B test reaches statistical significance before calling a winner | 95% confidence | Never declare winner early |
| Monthly budget variance stays within 5% of approved amount | +/- 5% | Notify Kalen before exceeding |
Kalen mentioned that part of the role would involve speaking to the crew about how marketing affects their paychecks. Your technicians are commission-based. Everything marketing does (or doesn't do) affects their income. Here's what they can do on every job to put more calls on the board.
More Google reviews = higher LSA ranking = more calls = more dispatched jobs = bigger commission checks. This isn't corporate marketing. It's a direct pipeline from their actions on the job site to the number of calls that come in next week.
| # | Action | Time | Why It Matters |
|---|---|---|---|
| 1 | Ask for a Google review on-site | 2 min | Review velocity is the #2 LSA ranking factor. 8-12 new reviews/month keeps ranking high. QR code on the invoice makes it one tap. |
| 2 | Take before/after photos on every job | 3 min | LSA profile needs fresh photos. Social media needs real work. Website needs before/after galleries. One photo set = 5 pieces of content across 5 platforms. |
| 3 | Report common customer questions | 1 min | Quick text: "Customer asked if it's normal for their water heater to make a popping noise." These become blog posts that rank on Google and drive more calls. Field intelligence is the highest-quality content source. |
| 4 | Mention additional services during jobs | 30 sec | "By the way, I noticed your water heater is 12 years old. We also do installations if you want to get ahead of a failure." Natural observation, not a sales pitch. Increases avg ticket = bigger commissions. |
| 5 | Be on time, be clean, be professional | Always | Negative reviews kill LSA ranking faster than anything else. One 1-star review takes 10-20 five-star reviews to offset in the algorithm. |
The review generation formula:
That review velocity alone can push LSA ranking up 1-2 positions, which translates to 20-40 more calls per month. At $1,786 avg ticket and 80% booking rate, that's $28,500-$57,100 in additional monthly revenue from 2 minutes of effort per job.
The commission math: If 20 extra calls per month come in because of better LSA ranking, and 80% book, that's 16 more jobs. At $1,786 avg ticket, that's $28,576 in additional monthly revenue. Split across 4 techs, each tech gets 4 more dispatched jobs per month. At commission rates, that's real money in their pockets -- from asking one question on the job site.
I read through 301+ reviews across 6 platforms. Not skimmed. Read. Here's the platform breakdown:
| Platform | Reviews | Rating |
|---|---|---|
| 384+ | 4.9 stars | |
| Birdeye (aggregated) | 301 | 4.9 stars |
| Yelp | 26 | -- |
| BBB | A+ accredited | -- |
| Chamber of Commerce | 226 | 4.9 stars |
| Angi | -- | 5.0 stars |
Four distinct customer personas emerged, each with different triggers, search behavior, and revenue profiles.
| Persona | Search Trigger | Avg Ticket | Revenue Share | Lead Share | Marketing Priority |
|---|---|---|---|---|---|
| Emergency Eric | Sewage backup, main line break, flooding | $5,000-$15,000 | 50-60% | 25-30% | #1 -- highest revenue per lead |
| Whole-House Helen | Remodel, re-pipe, water heater upgrade | $3,000-$12,000 | 20-25% | 15-20% | #2 -- high ticket, planned |
| Routine Rick (aka Maintenance Mike) | Drain clean, faucet fix, toilet issue | $200-$800 | 10-15% | 35-40% | #3 -- volume driver, HIGHEST lifetime value |
| Commercial Chris | Property management, HOA, multi-unit | $1,000-$10,000 | 10-15% | 5-10% | #4 -- repeat business |
These are real customer words about your biggest service. Every one of these should inform ad copy, landing page headlines, and content:
These stories are marketing gold. They prove same-day response, emergency capability, and sewer expertise -- the exact signals Emergency Eric needs to see before calling.
Across all 4 personas, one consistent pattern emerged: customers trust Kalen personally. Reviews mention him by name. They mention his direct involvement. They mention feeling like they're dealing with the owner, not a corporation.
This is a defensible competitive advantage. No competitor can replicate it. It should be leveraged in every ad, every landing page, every piece of content.
The Maintenance Mike paradox: Routine Rick / Maintenance Mike has the LOWEST per-transaction value ($200-$500) but the HIGHEST lifetime value. Today's $200 drain clean becomes next year's $8,000 water heater install. Convert them once, treat them well, and they come back for everything -- plus they refer friends. The review data confirms this: routine customers leave the most detailed, word-of-mouth-driving reviews.
The Emergency Eric diagnostic: Emergency Eric represents 50-60% of revenue but likely receives generic marketing today. The same ad copy, the same landing page, the same follow-up sequence as every other persona. Persona-specific LSA categories, ad copy, and landing pages would capture more of these high-ticket, high-urgency searchers. A dedicated "emergency sewer" landing page with same-day messaging converts fundamentally differently than a generic "our services" page.
This has direct implications for:
| Persona | When to Ask | How to Ask | Why Different |
|---|---|---|---|
| Emergency Eric | Same day, while relief is fresh | "I know that was stressful. If we made it less stressful, a quick Google review would mean the world." | Emergency customers have the strongest emotional response -- capture it immediately |
| Whole-House Helen | After final walkthrough | "Take a look at the finished work. If you're happy with how it turned out, we'd love a review." | They need to see the completed result before they'll review |
| Routine Rick | 2-4 hours after job | ServiceTitan automated SMS | Low-emotion, routine interaction -- automate the ask |
| Commercial Chris | After invoice is paid | Email from Kalen directly | Business relationships respond to personal owner outreach |
Capture "Above-and-Beyond Moments": Reviews mentioning extras -- "fixed a wiggly faucet at no extra cost," "stayed late to finish the job," "explained everything before starting" -- are the most powerful social proof. These moments should be systematically captured by technicians and fed into marketing. A simple end-of-day text from each tech: "Anything extra you did for a customer today?" These become social media posts, landing page testimonials, and review response themes.
| Capability | Where Applied | Specific Result |
|---|---|---|
| GA4 Admin API | Bathroom Bidders | 15 custom dimensions, 30+ events, full property config via script |
| GTM API | Bathroom Bidders | 24 tags, 30 triggers deployed and published programmatically (v8) |
| Google Ads (certified) | Optical retail client | 1.56M impressions, 8.9K clicks, 2.2K local actions, 188 calls. Clicks +30%, conversions +227%, cost per conversion -62% |
| WordPress REST API | Bathroom Bidders | Automated blog publishing, media uploads, category management |
| Google Apps Script | Multi-client | Content distribution pipelines, UTM tracking, QA validation |
| GA4 Data API | Bathroom Bidders | 10-report automated data pull for funnel analysis |
| Technical SEO at scale | A.D. Banker/CareerCertified | 5,700-URL audit across 19 subdomains; non-brand organic revenue from under 30% to approximately 50% in 90 days |
| Programmatic schema generation | Multi-client | For a multi-service plumbing company, you need LocalBusiness, Service, FAQ, and Review schema on every service page. I generate and deploy all of this programmatically instead of hand-coding each page -- faster, error-free, and auditable |
| Client | What I Did | Result |
|---|---|---|
| Bathroom Bidders | Full GA4/GTM rebuild, content system, funnel analysis, blog pipeline | 30+ events, 15 custom dimensions, GTM v8, 6 blog posts (1,800+ words each), 5 conversion leaks identified with fix plans |
| Optical retail | Rebuilt Smart Campaign structure, geo targeting, ad copy refresh, GBP alignment | +30% clicks, +227% conversions, -62% cost per conversion |
| Onspring | GA3 to GA4 migration, journey-based copy, CTA optimization, personalization | +53% lead conversion, +83% MAU |
| Oak Street Health | UTM scheme, MQL handoff SLAs, community activation | +25% qualified leads, fewer cold handoffs |
| Grapevine/Tutera | GA/UTM tracking across 30+ locations | Multi-location attribution |
Most marketing candidates will say "I'll write blog posts and do SEO." I'm saying: "I'll diagnose the entire system first, find the leaks, fix the highest-impact ones, and THEN layer on content and SEO with full measurement from day one." That's not a marketer. That's an operator.
Based on our conversations, here's how I see the role structure:
| Domain | Robert Owns | Russ Owns | We Collaborate On |
|---|---|---|---|
| Reporting | Weekly reports, live dashboard, Loom videos, cohort analysis | -- | Quarterly strategy reviews |
| Paid Media | Audit, waste detection, offline conversions, automated reporting | Day-to-day campaign management, creative direction | Budget allocation, campaign structure, bidding strategy |
| SEO/Content | Technical SEO, content calendar, blog production, schema markup | Brand consistency review | Keyword targeting priorities |
| CRO | Heatmaps, A/B testing, form optimization, page speed | Design/layout implementation in Oxygen | Test priorities, UX decisions |
| LSA | Lead quality review, dispute management, ranking factor optimization | -- | Budget cap decisions |
| Attribution | GA4, GTM, call tracking, offline conversion pipeline | -- | Conversion action definitions |
| Social | -- | Metricool management, brand voice | Content repurposing from blog/reviews |
My posture: "I lead reporting, audits, tracking integrity, CRO, SEO, and data analysis. On paid, I lead the analysis and bring the data that informs strategy. We collaborate as a team on what to do with those insights. I'm not looking to step on anyone's toes. I'm looking to give the team better data to make better decisions."
If Russ and I disagree: Data first. If the data supports his approach, great. If it supports mine, we discuss it. If it's a coin flip, he's the Director, he makes the call. No egos. The only thing I push back on is ignoring data.
| Commitment | Details |
|---|---|
| Weekly reporting | Every Monday by 10 AM, without fail |
| Response time (normal) | Same business day for non-urgent items |
| Response time (urgent) | Within 2 hours for tracking breaks, budget anomalies, or site-down issues |
| Loom video walkthrough | Every Monday alongside the weekly report |
| Monthly report | First week of each month, 15-20 minute video + written report |
| Quarterly review | In-person meeting with Kalen, Stephanie, and Russ |
I'm not a 9-to-5 clock watcher. If something breaks on a Friday afternoon, I fix it Friday afternoon. The weekly reporting cadence is non-negotiable -- it happens every Monday regardless of what else is going on.
Your technicians hear customer questions every single day. These questions are the highest-quality content source available:
How it works:
This closes the loop: The crew's observations become content. The content drives calls. The calls become jobs. The jobs generate questions. The questions become more content. It's a flywheel powered by field intelligence.
Before we write a single blog post or optimize a single page, we build the map. A complete keyword market analysis of every search term in the KC metro plumbing industry -- what people are searching, how often, what competitors rank for, and where the gaps are. This is the "north star" that guides every content decision, every ad campaign, and every service page optimization for the next 12 months.
What the analysis produces:
This isn't a "pull some keywords from SEMrush" exercise. This is the same methodology used by iQuanti (Wayne Cichanski, 28-year SEO veteran, former CIO/CMO) to build companies from zero to 200K+ monthly search volume ranking on Page 1. The process has 5 phases:
Start with Bright Side's four customer personas (identified from 301+ reviews) and map their actual search journey:
From this journey data, we compile the keyword universe through 5 sources:
The principle: 10-15 keywords = single intent = 1 page.
One page does NOT match all intents. This is where most plumbing SEO fails. They try to rank one service page for 50 different keywords. It doesn't work.
Example for sewer repair:
| Intent Group | Keywords (10-15 per group) | Page Needed |
|---|---|---|
| "What's wrong?" (Diagnostic) | sewer backing up, sewer smell in house, gurgling drain, sewage in basement, sewer line clog signs | Blog: "Signs Your Sewer Line Needs Repair" |
| "How much?" (Cost Research) | sewer repair cost, sewer line repair price Kansas City, how much to fix sewer, sewer replacement cost vs repair | Service page: Sewer Repair Pricing |
| "Who fixes it?" (Provider Search) | sewer repair Kansas City, sewer repair near me, sewer line repair Overland Park, best sewer company KC | Service page: Sewer Line Repair (main) |
| "What method?" (Solution Research) | trenchless sewer repair, pipe bursting vs pipe lining, no-dig sewer repair KC | Blog: "Trenchless vs Traditional Sewer Repair" |
| "How long?" (Timeline) | how long does sewer repair take, sewer repair timeline, can I use toilet during sewer repair | Blog: "What to Expect During Sewer Repair" |
Each intent group gets its own page. Each page targets 10-15 keywords that share the same user intent. This is how you go from ranking for 20 keywords to ranking for 200+.
Every major service becomes a pillar page with supporting cluster content:
This is the Credello/iQuanti model that drove 3.4x quarter-over-quarter traffic growth. The approach:
Priority order for pillar clusters:
Four-step process to know exactly what needs to be built:
| Step | Action | Bright Side Application |
|---|---|---|
| 1. LANDSCAPE | Group all keywords by intent, categorize by primary and secondary theme, create master view | Map every KC plumbing search term into themes and sub-themes |
| 2. URLS PUBLISHED | Inventory all published URLs, pull rankings, identify the "hero keyword" each URL targets | Audit every page on callbrightside.com -- what is it actually ranking for? |
| 3. INTENT MATCH | Verify the hero keyword matches the page's actual intent. If a sewer page is ranking for water heater terms, that's a mismatch | Identify pages targeting the wrong keywords (the water heater cannibalization is exactly this) |
| 4. EXISTING/NEW | Map existing URLs to their matching sub-themes. Every sub-theme with no URL = "net new" content needed | Deliverable: exact list of pages to create, in priority order, with target keywords |
For every top competitor, we track 4 metrics:
| Metric | What It Measures | Why It Matters |
|---|---|---|
| Market Coverage | Total keywords they rank for vs total available | Shows how much of the "fishing pond" they've claimed |
| Share of Voice | Their % of total clicks for plumbing keywords in KC | Shows who's actually getting the traffic |
| Content Gap | How many themes/sub-themes they cover vs miss | Shows where we can outflank them with new content |
| Authority Strength | Domain authority, referring domains, link quality | Shows how hard they'll be to outrank (and where they're weak) |
This becomes a living competitive dashboard updated monthly. When a competitor publishes new content or gains rankings, we see it and respond.
Not all content is created equal. We group by effort and impact for concurrent workstreams:
| Priority Tier | Tactics | Timeline |
|---|---|---|
| Low Effort / High Impact | Fix existing page SEO attributes (titles, metas, headers), fix NAP inconsistency, add FAQPage schema, fix water heater cannibalization, update stale blog content | Weeks 1-4 |
| Longer Cycles | Net new pillar pages, new cluster content (starting with sewer repair), infographics, 10x content pieces | Months 2-6 |
| Sprint Cycles | Page speed optimization, Core Web Vitals fixes, Oxygen Builder render-blocking CSS, template-level changes | Embedded in biweekly sprints |
Sprint execution model:
Coupled with the Field Intelligence System, this becomes a flywheel:
The keyword map tells us what people search. The field intelligence tells us what people actually ask when the tech is in their home. The overlap is where the best content lives -- proven demand from both Google AND real customer conversations. No guessing. No generic "10 plumbing tips" posts that don't convert. Every piece of content targets a real search term backed by real customer questions.
The AIDA funnel applied to plumbing SEO:
Each stage requires different content. The keyword north star maps which content serves which stage. The field intelligence from technicians reveals where customers drop off between stages -- so we can fill those gaps.
One critical insight that shapes this entire strategy:
This means organic leads are worth 1.5-2x more than paid leads, even before considering that organic leads cost nothing per click.
The SEO Equity Argument (The Fishing Pond Metaphor):
Think of SEO as building a fishing pond. Months 1-4 are construction -- you're digging the pond, filling it with water, stocking it. It doesn't produce fish yet. Months 4-6, the pond starts producing. By month 12, the pond generates 30-50% of total lead volume at under $30/lead. You stop renting fish at $200 each and start catching them from your own pond.
| Month | Monthly SEO Investment | Organic Leads | Lead Value (at $1,786 avg ticket x 80% booking) | Cumulative ROI |
|---|---|---|---|---|
| 1 | $4,000 | 0 | $0 | -$4,000 |
| 2 | $4,000 | 2 | $2,858 | -$5,142 |
| 3 | $4,000 | 5 | $7,144 | -$1,998 |
| 4 | $4,000 | 12 | $17,146 | +$11,148 |
| 5 | $4,000 | 20 | $28,576 | +$35,724 |
| 6 | $4,000 | 35 | $49,994 | +$81,718 |
| 7-12 | $24,000 | 360 (avg 60/mo) | $514,540 | +$572,258 |
| Year 1 Total | $48,000 | 434 | $620,258 | +$572,258 |
Year 1 ROI: 1,192% -- and it only gets better in Year 2 because the content keeps ranking.
As part of my preparation, I audited callbrightside.com. Here are the specific findings:
| # | Issue | Location | Priority | Fix Time | Revenue Impact |
|---|---|---|---|---|---|
| 1 | NAP inconsistency: Two addresses listed (12022 Blue Valley Pkwy AND 8110 Carter St) | Homepage footer + schema | CRITICAL | 30 min | Hurts Local Pack ranking |
| 2 | Generation claim inconsistency: "Fourth generation" on homepage vs "fifth-generation" on About page | Homepage + About | CRITICAL | 15 min | Undermines trust |
| 3 | Business hours mismatch: Site shows Mon-Fri 7am-6pm, Sat 9am-4pm. Need to verify these match GBP and schema | Site-wide | HIGH | 30 min | Confuses Google and customers |
| 4 | No FAQPage schema on /faqs/ page | FAQs page | HIGH | 1 hr | Missing rich result opportunity |
| 5 | Hero image loaded via CSS background with JS injection | Homepage | HIGH | 1 hr | Delays LCP, hurts conversions |
| 6 | 8+ CSS files from Oxygen Builder (render-blocking) | Site-wide | HIGH | 2 hrs | Slows page load |
| 7 | HubSpot loads from 5 domains (5 extra DNS lookups) | Site-wide | MEDIUM | 30 min | Add preconnect hints |
| 8 | No sticky mobile CTA | Mobile site | MEDIUM | 1 hr | Mobile users struggle to find phone number after scrolling |
| 9 | Single-step contact form | Contact page | MEDIUM | 3 hrs | 86% lower conversion than multi-step (LeadGen Economy) |
| 10 | Blog / Learning Center: needs audit for freshness and keyword targeting | /learning-center/ | MEDIUM | 2 hrs audit | Stale content hurts SEO authority |
| 11 | Missing AggregateRating schema on /reviews/ page | Reviews page | LOW | 1 hr | Missing star rating in search results |
| 12 | Instagram: 253 posts / low follower count | LOW | Ongoing | Low ROI channel -- deprioritize |
Total estimated fix time for top 10 issues: ~12 hours
Expected conversion impact: 25-50% improvement once all fixes are deployed
| Advantage | Why It's Defensible | Marketing Leverage |
|---|---|---|
| 5th-generation master plumber heritage | You cannot manufacture a family legacy | Lead every piece of content, every ad, every bio |
| Kalen's personal story (health crisis, wheelchair, comeback, pandemic founding) | Unique and authentic. No competitor can replicate this. | Video content, About page, brand story in ads |
| 5 specific guarantees with dollar amounts ($50 on-time, $200 clean tech, flat-rate or free, lifetime warranty, master plumber oversight) | Most competitors offer 1-2 vague guarantees | Stack all 5 on every landing page, every ad |
| 4.9 stars at 384+ reviews (growing to 500+) | Extremely hard to achieve and maintain at scale | Trust signal in every ad, landing page, email |
| Tommy Mello coaching | National-caliber business strategy at local-market size | Operational excellence that compounds over time |
To hit the ground running, I need the following access and decisions:
I respect that these accounts represent years of work. I don't need admin access on Day 1 to be productive. Here's the graduated approach:
Day 1 (Viewer/Analyst access): I can run audits, pull reports, and baseline everything with read-only access. No risk of accidental changes.
After Week 1 (Edit access): Once I've demonstrated how I work and you've seen my first deliverables, upgrade to edit access for GTM, GA4, and WordPress. I version-control everything -- GTM container versions are documented, every change has a rollback plan.
After Month 1 (Full access): Once trust is established through 30 days of clean work, full access for campaign management and optimization.
| Platform | Day 1 Access | Full Access After | Who Provides |
|---|---|---|---|
| Google Ads | Viewer (Standard) access | Week 2 (Edit) | Russ or current agency |
| GA4 / GTM | Analyst access / Viewer | Week 2 (Editor) | Russ or current agency |
| Google Search Console | Full access | Russ or current agency | |
| Google Business Profile | Owner or Manager access | Kalen | |
| LSA Dashboard | Manager access | Kalen or Russ | |
| ServiceTitan | Marketing module access | Kalen | |
| WordPress Admin | Administrator role on callbrightside.com | Russ | |
| HubSpot | Marketing access | Russ | |
| Metricool | Access to social accounts | Russ | |
| Screaming Frog | License (or I provide my own) | Robert |
| Decision | Options | My Recommendation | Why |
|---|---|---|---|
| Confirm address | 12022 Blue Valley Pkwy or 8110 Carter St? | Whichever is the actual office location | Must be consistent everywhere |
| Confirm generation | 4th or 5th generation? | Whichever is accurate | Must be consistent everywhere |
| Confirm business hours | Mon-Fri 7am-6pm, Sat 9am-4pm -- is this correct? | Match actual availability | All listings must agree |
| Review acceleration | Approve automated SMS review request after each job? | Yes | 38% response rate on SMS. Primary driver of LSA ranking. |
| Offline conversions | Approve ServiceTitan > Google Ads data sharing? | Yes | 56% higher booking rate, 69% higher ROAS. Biggest single lever. |
| Reserve with Google | Approve instant online booking via GBP? | Yes | Free. "Book Online" button on GBP within 24 hours. |
| Blog reactivation | Approve 4-6 new blog posts per month? | Yes | Companies with blogs generate 67% more leads monthly (SeoProfy, 2026) |
All industry statistics cited in this document:
| # | Stat | Source | Year | URL |
|---|---|---|---|---|
| 1 | Plumbing LSA CPL: $25-$75 typical, $69 median | The Media Captain | 2025 | themediacaptain.com |
| 2 | Competitive market LSA CPL: $60-$117 | Accelerate Your Marketing | 2025 | accelerateyourmarketing.com |
| 3 | LSA conversion rate: 31% vs 12% PPC | Home Service Direct | 2025 | homeservicedirect.net |
| 4 | LSA proximity removed April 2025 | LocalView / eSEO Space | 2025 | localview.co |
| 5 | Review recency outranks review count in LSA | Boomcycle Digital Marketing | 2026 | boomcycle.com |
| 6 | Plumbing Google Ads CPC: $10.49 | LocaliQ / WordStream | 2025 | localiq.com |
| 7 | Plumbing Google Ads CPL: $129.02 | WordStream | 2025 | wordstream.com |
| 8 | Plumbing Google Ads conversion rate: 7.63% | WordStream | 2025 | wordstream.com |
| 9 | Quality Score: ~13% CPC reduction per point | LeadGen Economy | 2025 | leadgen-economy.com |
| 10 | QS 10 = 50% CPC discount | (un)Common Logic | 2025 | blog.uncommonlogic.com |
| 11 | SEO CPL 60%+ lower than paid ads | CI Web Group | 2025 | ciwebgroup.com |
| 12 | $1 SEO = $19.90 return vs $4.40 paid ads | CI Web Group | 2025 | ciwebgroup.com |
| 13 | SEO breakeven: 7-12 months | CI Web Group / Coalmarch | 2025-2026 | ciwebgroup.com |
| 14 | Median SEO ROI: 748% | First Page Sage | 2026 | firstpagesage.com |
| 15 | Companies with blogs: 67% more leads monthly | SeoProfy | 2026 | seoprofy.com |
| 16 | Organic leads convert 30-50% higher than paid | First Page Sage | 2026 | firstpagesage.com |
| 17 | Home services conversion rate: 2-5% avg, 12-16% optimized | Plumbing Webmasters / WebFX | 2025-2026 | plumbingwebmasters.com |
| 18 | 1-second delay = 7% conversion reduction | Aberdeen Group | 2025 | wiro.agency |
| 19 | 53% mobile users abandon sites >3 seconds | Google / SOASTA | 2025 | thinkwithgoogle.com |
| 20 | Sites loading 1s = 3.05% conversion, 5s = 0.6% | Portent (100M page views) | 2025 | fleexy.dev |
| 21 | Above-fold CTAs outperform by 304% | Cube Creative Design | 2025 | cubecreative.design |
| 22 | Multi-step forms convert 86% higher | LeadGen Economy | 2025 | leadgen-economy.com |
| 23 | Multi-step forms: up to 300% more conversions | Venture Harbour | 2025 | ventureharbour.com |
| 24 | Phone calls convert 10-12x better than web forms | OneWebCare / Cube Creative | 2025 | onewebcare.com |
| 25 | Review signals = ~20% of Local Pack ranking | BrightLocal / Whitespark | 2025 | brightlocal.com |
| 26 | 83% consumers use Google for reviews | BrightLocal LCRS | 2025 | brightlocal.com |
| 27 | 88% would use business replying to ALL reviews | BrightLocal LCRS | 2026 | brightlocal.com |
| 28 | 80% revenue growth for responding to >30% reviews | BrightLocal | 2025 | brightlocal.com |
| 29 | 4.5-star businesses earn 25% more clicks | BrightLocal | 2025 | brightlocal.com |
| 30 | SMS review requests: 38% vs 27% email | Birdeye | 2025 | birdeye.com |
| 31 | Offline conversions: 56% higher booking, 69% higher ROAS | Camp Digital (plumbing case study) | 2025 | campdigital.com |
| 32 | 51% profit increase, 23% lower CPA with offline conversions | GetNinjas / Google | 2025 | singlegrain.com |
| 33 | 20% incremental revenue + 30% cost efficiency | Boston Consulting Group / Google | 2025 | singlegrain.com |
| 34 | 15 conversions/month minimum for Smart Bidding | Optmyzr | 2025 | optmyzr.com |
| 35 | ServiceTitan: 35% faster response, 28% higher booking, 42% repeat business | Proven ROI | 2025 | provenroi.com |
| 36 | Reserve with Google: free, 24hr activation | ServiceTitan Help Docs | 2025 | help.servicetitan.com |
| 37 | 83% homeowners prefer to call | HomeAdvisor | 2025 | ambscallcenter.com |
| 38 | 28% of plumbing calls missed, 85% hang up at voicemail | AgentZap / Suzee AI | 2025-2026 | agentzap.ai |
| 39 | Plumbing booking rate: 30-43% avg, 77% top performers | ServiceTitan Data Report | 2025 | servicetitan.com |
| 40 | Plumbing CAC: $150-$400, LTV:CAC benchmark 3:1 | Financial Models Lab | 2025 | financialmodelslab.com |
| 41 | Plumbing gross margin: 71% | Financial Models Lab | 2025 | financialmodelslab.com |
| 42 | A/B testing: avg 18% conversion lift after 6 months, 223% ROI | Heatmap.com / Marketing LTB | 2025 | heatmap.com |
| 43 | Heatmap-optimized pages: 14% higher conversion | Heatmap.com | 2025 | heatmap.com |
| 44 | Lead-to-contact time >5 min = 80% drop in conversion | InsideSales.com / ServiceTitan | 2025 | servicetitan.com |
| 45 | First contractor to reach homeowner wins 78% of the time | InsideSales.com | 2025 | insidesales.com |
| 46 | Live chat lifts conversion 20-45% for home services | Drift / Intercom | 2025 | drift.com |
| 47 | Organic leads convert at 14-20% vs 8-12% paid | BrightLocal / First Page Sage | 2025-2026 | firstpagesage.com |
| 48 | Every form field added reduces completions by 5-10% | Formstack / HubSpot | 2025 | hubspot.com |
| 49 | Google removed LSA manual disputes mid-2024, replaced with automated credit system | Google LSA Support | 2024 | support.google.com |
| 50 | Google consolidated LSA badges into single "Google Verified" checkmark (Oct 2025) | Google LSA Support | 2025 | support.google.com |
| 51 | GBP verification now MANDATORY for LSA eligibility (since Nov 2024) | Google LSA Support | 2024 | support.google.com |
| 52 | Google updated LSA terms -- deadline June 5, 2025 (failure = ads paused) | Google LSA Support | 2025 | support.google.com |
| 53 | Google retired LSA mobile app January 2025 | Google LSA Support | 2025 | support.google.com |
| 54 | Monthly inaction cost: ~$25,000 in leads lost to CPL inefficiency | Calculated: ($200-$75) x 175 leads/month | 2026 | -- |
| 55 | Mismatched landing pages inflate CPC by 30-50% | Google Ads Quality Score documentation | 2025 | support.google.com |
| 56 | Call duration threshold changes reported CPA by 20-30% | CallRail / ServiceTitan | 2025 | callrail.com |
| 57 | Plumbing conversion lag: 24-72 hours between ad click and call | Google Ads attribution data | 2025 | support.google.com |
Prepared by Robert Dove | Dove Web Consulting
dovewebconsulting@gmail.com | 913.439.0166
March 2, 2026
Built specifically for Bright Side Plumbing.
Kalen Barker, Stephanie Barker, and Russ Satterfield.
This document contains proprietary strategy and competitive analysis.
Do not distribute outside of Bright Side Plumbing leadership.