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.
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).
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.
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.
| Metric | Google Ads reports | ServiceTitan reporting |
|---|---|---|
| Spend (30d) | $15,350 | $15,350 |
| "Conversions" | 150 | 52 booked jobs 37 from call extension, 15 from website |
| Cost per conversion | $102.34 | $295.19 per booked job |
| Campaign | Type | Spend | Share | Reported conv | Ads showed for |
|---|---|---|---|---|---|
| Pride-SEM-NB-LG-Plumbing-N.Carolina-202509 | Non-brand search | $9,864 | 64% | 53.2 | 40% of searches |
| Pride-SEM-B-N.Carolina-202509 | Brand search | $4,075 | 27% | 77.8 | 98% of searches |
| LocalServicesCampaign (LSA) | Local Services | $1,103 | 7% | 15 | n/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.
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.
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.
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.
| # | Conversion action | Type | Current | Proposed | Why |
|---|---|---|---|---|---|
| 1 | ServiceTitan Booked Job (Originated from Call Extension) | Upload calls | Secondary | Primary | Booked job from a call. Core money outcome. 37 in window. |
| 2 | ServiceTitan Booked Job (Originated from Website) | Upload clicks | Primary | Primary | Booked job from web. 15 in window. #1 + #2 = 52, matching the ServiceTitan reporting. |
| 3 | ServiceTitan JVP (Originated from Call Extension) | Upload calls | Primary | Secondary | JVP is an earlier job-value stage on the same job as #1. Counting both double counts. Keep for insight. |
| 4 | ServiceTitan JVP (Originated from Website) | Upload clicks | Primary | Secondary | Same as #3 for web. Overlaps #2. |
| 5 | ServiceTitan Completed Jobs Conversion Action | Upload clicks | Primary | Secondary | Completion is the same job as the booking, just later. Useful later for value-based bidding, not as a primary now. |
| 6 | ServiceTitan Call Extension Completed Job Conversions | Upload calls | Primary | Secondary | Same-job completion via call. Overlaps #1 and #5. |
| 7 | ServiceTitan Calls Conversion Action | Upload clicks | Primary | Secondary | Upstream call lead. Overlaps the booked job it becomes. Designated backup primary if job volume drops below ~30/mo. |
| 8 | ServiceTitan Inbound Call - Website | Upload clicks | Secondary | Secondary | Raw inbound call. Upstream of a job. Keep secondary. |
| 9 | ServiceTitan Inbound Call - Extension | Upload calls | Secondary | Secondary | Raw inbound call (126 in window, the single biggest inflator). Keep secondary. |
| 10 | ServiceTitan Lead - Extension | Upload calls | Secondary | Secondary | Raw lead signal (68 in window). Keep secondary. |
| 11 | ServiceTitan Integrated Bookings | Upload clicks | Secondary | Secondary | Low volume (1). Keep secondary. |
| 12 | Calls from ads | Ad call | Primary | Secondary | Google's own call counter (75 in window). Overlaps the ServiceTitan call data. Demote. |
| 13 | Calls to a phone number on website 910-208-6211 | Website call | Primary | Secondary | Google website-call counter. Overlaps ServiceTitan web calls. Demote. |
| 14 | Clicks to call | Google hosted | Primary | Secondary | Counts taps on the call button, not actual calls. Weak signal. Demote (consider disabling later). |
| 15 | local_services_phone_lead | LSA | Primary | Primary (LSA) | LSA leads are billed and optimized inside the LSA product, separate from search bidding. Leave as is. 12 in window. |
| 16 | local_services_message_lead | LSA | Primary | Primary (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.
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 bucket | Spend | Verdict |
|---|---|---|
| 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.
| 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.
| 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.
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.
jobs · hiring · salary · careers · apprentice · job openings
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.
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.
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.
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.