Molitaris Consulting

Pride Plumbing Audit

Incorrect password
Press Enter to continue

P3 Services

×

Molitaris Consulting

Pride Plumbing · Full audit
Fixes rolling out Window Jun 30 – Jul 29 Account 8728625584
01

The one number that matters

Pride Plumbing Services, LLC · Mount Gilead NC · callprideplumbing.com · Service area: Stanly, Richmond, Montgomery, Moore, Randolph counties plus Winston-Salem. The audit reflects the read-only window below. Changes now roll out as items clear the sign-off list on the hub, and each push gets logged there.

Reported CPA
$102
What the account says about itself today. Inflated by overlapping conversion actions.
Not trustworthy
Cost per ServiceTitan booked job
$295
Spend divided by booked appointments in ServiceTitan. The number we manage to.
The metric
Booked jobs (30d)
52
37 from the call extension, 15 from the website. ServiceTitan's own July count is 56; the small import gap is being reconciled.
Spend (30d)
$15,350
Non-brand search, brand search, and Local Services combined.

The reported $102 is inflated by overlapping conversion actions counting the same phone call several times, so we do not trust it and neither should you. Cost per booked job (a booked appointment in ServiceTitan) is the one number that means the same thing across every P3 OpCo, and $295 is Pride's baseline, locked as of this window, the number we manage to and beat from here. For context, the portfolio blended baseline across all three priority accounts is also $295 (170 booked jobs on $50,178).

02

Executive summary

Five findings, in the order they matter. The one-line version: fix tracking first so the bidding signal is honest, then feed the non-brand campaign, then tidy the keyword and competitor negatives. In that order.

03

Performance reality: reported vs ServiceTitan reporting

The 150 reported conversions are not real leads. They are the sum of overlapping conversion actions firing on the same events. Per ServiceTitan reporting, the cost per booked job is $295, which is not bad for plumbing, and it is the number to plan against. The problem is not the $295, it is that the account cannot currently see the $295, so it cannot optimize toward it. The ServiceTitan numbers below are as recorded in Google Ads through the offline import, pending reconciliation with ServiceTitan's own reports.

MetricGoogle Ads reportsServiceTitan reporting
Spend (30d)$15,350$15,350
"Conversions"15052 booked jobs
37 from call extension, 15 from website
Cost per conversion$102.34$295.19 per booked job

Spend split for the 30 days

Three active campaigns carry all the spend
CampaignTypeSpendShareReported convAds showed for
Pride-SEM-NB-LG-Plumbing-N.Carolina-202509Non-brand search$9,86464%53.240% of searches
Pride-SEM-B-N.Carolina-202509Brand search$4,07527%77.898% of searches
LocalServicesCampaign (LSA)Local Services$1,1037%15n/a

Note that brand reports more conversions (77.8) than non-brand (53.2) on 40% of the spend. That is the double-counting showing up: brand callers get logged across several call actions. It is not that brand is three times more productive than non-brand.

Budget and coverage

The sequence matters: tracking fix first, then a measured non-brand budget increase once bids are chasing booked jobs. A budget increase before the tracking fix would scale the waste.

04

Conversion tracking today, and the fix

16 conversion actions are enabled, 10 are primary. Call trackers, JVP, completed jobs, and booked jobs are all primary at once, so a single call-that-becomes-a-job counts 3+ times. Reported conversions (150) are roughly 2.9x the ServiceTitan-reported booked jobs (52). The good news: the two ServiceTitan Booked Job actions already sum to exactly 52, matching ServiceTitan. The ServiceTitan reporting is already in the account. We just need to make it the goal and mute the noise.

Target state

One honest goal: ServiceTitan booked jobs

Primary (counted, bid toward): ServiceTitan Booked Job (Originated from Call Extension) and ServiceTitan Booked Job (Originated from Website). Together these are "a booked job," split only by source. They sum to 52 for the window, which matches the ServiceTitan reporting and gives a clean $295 cost per booked job. At 52/month this clears the roughly 30-conversions threshold Maximize Conversions needs to bid well, so we do not need a second primary to prop up volume. Everything else goes secondary: still recorded and visible for insight, not counted in the bidding goal.

A note on the "one qualified call action primary" idea: if we added a call action to primary alongside booked jobs, we would re-introduce call-to-job double counting and push reported volume above 60, which muddies the $295 booked-job number. Because booked-job volume (52/mo) already clears the bidding threshold, the cleaner answer is booked-jobs-only as primary. If booked-job volume ever dips below about 30/mo, the designated backup is to promote ServiceTitan Calls Conversion Action (the de-duplicated upload call action) to primary as a bridge, accepting the tradeoff. Until then it stays secondary.

Full mapping: all 16 enabled actions

Every action, where it is today, where it goes, and why
#Conversion actionTypeCurrentProposedWhy
1ServiceTitan Booked Job (Originated from Call Extension)Upload callsSecondaryPrimary
Booked job from a call. Core money outcome. 37 in window.
2ServiceTitan Booked Job (Originated from Website)Upload clicksPrimaryPrimary
Booked job from web. 15 in window. #1 + #2 = 52, matching the ServiceTitan reporting.
3ServiceTitan JVP (Originated from Call Extension)Upload callsPrimarySecondary
JVP is an earlier job-value stage on the same job as #1. Counting both double counts. Keep for insight.
4ServiceTitan JVP (Originated from Website)Upload clicksPrimarySecondary
Same as #3 for web. Overlaps #2.
5ServiceTitan Completed Jobs Conversion ActionUpload clicksPrimarySecondary
Completion is the same job as the booking, just later. Useful later for value-based bidding, not as a primary now.
6ServiceTitan Call Extension Completed Job ConversionsUpload callsPrimarySecondary
Same-job completion via call. Overlaps #1 and #5.
7ServiceTitan Calls Conversion ActionUpload clicksPrimarySecondary
Upstream call lead. Overlaps the booked job it becomes. Designated backup primary if job volume drops below ~30/mo.
8ServiceTitan Inbound Call - WebsiteUpload clicksSecondarySecondary
Raw inbound call. Upstream of a job. Keep secondary.
9ServiceTitan Inbound Call - ExtensionUpload callsSecondarySecondary
Raw inbound call (126 in window, the single biggest inflator). Keep secondary.
10ServiceTitan Lead - ExtensionUpload callsSecondarySecondary
Raw lead signal (68 in window). Keep secondary.
11ServiceTitan Integrated BookingsUpload clicksSecondarySecondary
Low volume (1). Keep secondary.
12Calls from adsAd callPrimarySecondary
Google's own call counter (75 in window). Overlaps the ServiceTitan call data. Demote.
13Calls to a phone number on website 910-208-6211Website callPrimarySecondary
Google website-call counter. Overlaps ServiceTitan web calls. Demote.
14Clicks to callGoogle hostedPrimarySecondary
Counts taps on the call button, not actual calls. Weak signal. Demote (consider disabling later).
15local_services_phone_leadLSAPrimaryPrimary (LSA)
LSA leads are billed and optimized inside the LSA product, separate from search bidding. Leave as is. 12 in window.
16local_services_message_leadLSAPrimaryPrimary (LSA)
Same as #15 for LSA messages. Leave as is. 3 in window.

Actions #15 and #16 are Local Services Ads actions and live in the LSA product, which optimizes on its own. They do not pollute the search-campaign bidding goal, so they stay primary within LSA. The demotions above all concern the search campaigns. Note the odd current state: the two Booked Job actions, the ones that carry the ServiceTitan reporting, are partly set to secondary today while noisier actions are primary.

Expected effect

Verification plan (after it goes live)

How we prove it worked
  1. Day 0 (change day): screenshot the Conversions summary "Include in Conversions" column showing only the two Booked Job actions marked primary. Confirm the "Optimize ad rotation" auto-apply is off.
  2. Day 1 to 2: confirm reported daily conversions have stepped down toward the booked-job level and that no demoted action is still counting.
  3. Weekly reconciliation: pull Google Ads reported conversions vs ServiceTitan booked jobs for the same week. Target: within about 10% of each other. If they diverge, we check the ServiceTitan import (GCLID stamping and offline upload timing).
  4. Two-week bidding check: confirm Maximize Conversions has settled (cost per booked job stabilizing, ads still showing about as often as before). Only then consider the non-brand budget increase.
  5. Standing report: add "reported conversions vs ServiceTitan booked jobs" as a recurring line so this never silently drifts again.
05

Search terms and draft negatives

The corrected story first: this account is not bleeding money on out-of-area geography. Its geo targeting is granular (86 positive locations, 126 location exclusions, plus proximity radius on the active campaigns). The biggest zero-conversion bucket, about $866 of in-service-area city searches, is core demand and stays. The clean waste is local competitor-brand searches, about $445 with zero booked jobs. Only terms the data justifies are listed below. Nothing has been pushed.

Zero-conversion bucketSpendVerdict
In-service-area city searches$866
NOT waste. Asheboro (Randolph), Southern Pines (Moore), Rockingham/Hamlet (Richmond), Albemarle (Stanly), Winston-Salem. Core demand that did not convert in a 30-day window. Do not negate.
Generic plumbing terms$575
Review, do not blanket-negate. Many convert elsewhere. A few DIY/handyman terms are trimmable.
Competitor-brand searches$445
Clean negatives. 17 local competitor names, several of them also out-of-area towns.
DIY / research$22
Trim a few tokens (rental, how-to).
Genuinely out-of-area geo$10
Effectively nil once competitor names are handled.

Total zero-conversion spend in the pulled terms is $2,016 ($1,919 of it non-brand). One item flagged pre-audit as a possible routing bug, "pride plumbing near me" ($97, 0 conversions), verified fine: it serves from the brand campaign, which is correct. It is simply 3 brand clicks that did not convert in the window. No action needed.

Existing shared negative sets on the account: Negative keywords for Pride (2 members, attached only to two paused campaigns, effectively unused), Brand Terms (28 members, attached to non-brand so brand queries route to the brand campaign), Competitors (119 members, attached to brand + non-brand), and Master Negative List (103 members, attached to brand + non-brand). The active non-brand campaign already has Brand Terms, Competitors, and Master Negative List attached, so anything we add to those sets takes effect immediately on the campaign that matters.

Theme 1: Competitor names (highest-value, clean)

Destination: "Competitors" shared set · Match type: phrase (catches town and "near me" variants without blocking generic plumbing) · Zero booked jobs, about $445 in the window, and they recur. The existing 119-member set is not catching these local names.
Negative (phrase)Evidence (zero-conv spend, clicks)
doby plumbing
$94, 1 click (also out-of-area: West Jefferson)
dyers plumbing
$80, 1 click (also out-of-area: Eden)
spencer plumbing
$50, 1 click (Midland)
flowrite plumbing
$37, 1 click
cenergy plumbing
$31, 1 click
hall plumbing
$21 zero-conv (had 1 conv on a separate variant; phrase still net-positive to exclude)
patriot plumbing
$20, 1 click
reece plumbing
$20, 1 click (Winston-Salem)
fields and fowler
$19, 1 click (Carthage)
saunders plumbing
$17, 2 clicks (Asheboro)
fields plumbing
$17, 1 click
billingsley plumbing
$12, 2 clicks (Reidsville)
roto rooter
$11, 1 click ("roto rooter septic", national competitor)
go forth
$8, 1 click (HVAC/plumbing/electrical competitor)
er plumbing
$8, 1 click
3 way plumbing
$6, 1 click (Concord)
providence plumbing
$5, 1 click (Concord)

Two more competitor names appeared with a conversion attached, so we hold them for review rather than auto-adding: "brandon plumbing co clemmons" (1 conv) and "hall plumbing reidsville" (1 conv on one variant). We recommend adding the brand token but confirming with Natalie first, since they did produce a booked job. Estimated recovery for the theme: $400 to $450 per 30 days, redeployable to in-area demand.

Theme 2: DIY / research

Destination: "Master Negative List" · Match type: broad (token-level) · Low volume ($22 total) but cheap insurance against tire-kicker clicks. Pride is a licensed plumber, not a how-to resource or equipment rental.
Negative (broad)Evidence
rental
"underground water leak detector rental" $2
how to
research-intent phrasing, preventive
yourself
DIY intent, preventive
diy
DIY intent, preventive

Optional, lower confidence: "handyman" (from "handyman toilet repair near me", $12, 0 conv). Pride is licensed; handyman-seekers may be price-shopping below Pride's service level. We recommend it as a broad negative on Master Negative List, but flag it for Natalie since some handyman searchers do convert to real jobs.

Theme 3: Wrong service

No clear wrong-service waste surfaced in this window. Pride's ad groups (water heater, gas line, hydro jetting, repiping, etc.) are matching relevant intent. Nothing to add today. We re-check after 30 days on the clean tracking signal.

Theme 4: Employment / recruiting (preventive)

Destination: "Master Negative List" · Match type: broad · None appeared in the 30-day window; this is a standard preventive block so recruiter and job-seeker traffic never starts costing money.

jobs · hiring · salary · careers · apprentice · job openings

Do NOT negate

In-service-area city searches (~$866)

This is the important call. These zero-conversion terms look like waste on a raw scan, but every one of these cities is inside Pride's stated service area: Asheboro and Randolph county, Southern Pines (Moore), Rockingham and Hamlet (Richmond), Albemarle and Stanly county, and Winston-Salem (a named service area). Negating them would cut off core demand that simply did not convert in a 30-day sample.

The right response is not to block them. It is to fix the tracking (so we can see if they actually did book jobs the account is not crediting), improve Quality Score on the general-plumbing keywords that serve them, and make sure the landing page converts local intent. Blocking them would be the amateur move.

Settings fix, not negatives

Geo terms

Genuinely out-of-area, non-competitor geo waste is about $10 in the window ("oak island nc plumbers", "plumbers pinehurst nc"; Pinehurst is actually Moore county, in area). The out-of-area towns that show up (West Jefferson, Eden, Midland, Concord, Reidsville) appear almost entirely inside competitor-brand searches, which Theme 1 already handles.

Instead of city negatives: (1) confirm the location option on the active campaigns is "Presence: people in your targeted locations" and not "Presence or interest", the one setting that lets someone searching about a far-off town trigger an ad; (2) review the 86 positive location targets and remove any outside Stanly, Richmond, Montgomery, Moore, Randolph, and the Winston-Salem area. A negative like "asheboro" would block a real Randolph-county customer. Location targeting for location problems.

Housekeeping: the "Negative keywords for Pride" shared set (2 members) is attached only to two paused campaigns, so it protects nothing live. When we consolidate, we recommend either retiring it or repurposing it as the account's single working negative set attached to the active campaigns. Not urgent, but worth cleaning up so there is one obvious place negatives live.

Summary of what we push on approval: 17 competitor phrase negatives into "Competitors" (about $445/mo recovery, 2 held for Natalie's sign-off), 4 DIY/research broad negatives into "Master Negative List" (plus "handyman" pending sign-off), 6 employment broad negatives into "Master Negative List" (preventive), and the geo settings check (Presence-only, trim out-of-area positive locations). No city negatives.

06

Structure, Quality Score and account observations

Structure is basically sound underneath the clutter. The weak spots are match type, Quality Score on the money keywords, and governance. None of this is a crisis; it is the normal residue of an account that has passed through several agencies. The fix is one owner and one clean process.

07

Prioritized recommendations

Sequenced deliberately: the tracking fix comes first because everything downstream depends on an honest signal. This audit follows the Google Ads Success Formula (right traffic, right tracking, right bidding) and the conversion-tracking-first principle. The constraint here is tracking, so we stop and fix that before anything downstream.

First moves after approval · week of Aug 3

Fix the signal, cut the clean waste

  1. Remap conversion actions so only the two ServiceTitan Booked Job actions are primary; everything else goes secondary. The single highest-leverage change. Reported conversions drop to about 52 and CPA rises to about $295. That is the point: the numbers become true.
  2. Turn off the "Optimize ad rotation" auto-apply at the same time, so ad serving stops chasing the old signal.
  3. Push the competitor negative list (about $445/mo of clean waste) into the existing "Competitors" shared set, plus the DIY and employment preventives into "Master Negative List".
  4. Let bidding recalibrate for 1 to 2 weeks on the booked-job signal before touching budgets. Maximize Conversions needs a short relearn once the goal changes.
Later · weeks 2 to 4, once the signal is clean

Feed the growth engine, tidy the rest

  1. Raise the non-brand budget in measured steps so it no longer runs out before the day's demand does, now that bids chase booked jobs.
  2. Tighten match types: review the 80 broad-match keywords; move the weak performers to phrase, keep broad only where it is earning booked jobs.
  3. Quality Score work on the QS 1 to 4 non-brand keywords: ad-to-keyword-to-landing-page relevance, especially "plumbers near me" and the general-plumbing group.
  4. Archive the 29 paused legacy campaigns to declutter the account and reporting.
  5. Governance: consolidate to named logins, agree one owner, set a change cadence.