From our Aug 3 call: the changes queued and ready, in priority order. Reply "approved" by text or email per line (or all at once) and we push the same day. Every change gets logged on this page, so you always see what moved and when.
| # | Change | Status | What happens |
|---|---|---|---|
| 1 | Conversion tracking consolidationAll three accounts | Awaiting your go | Booked jobs become the primary conversion, overlapping call trackers demoted to secondary. Reported CPA will rise to the booked-job number; actual booked jobs do not change. This is the fix that makes bidding chase jobs instead of calls. |
| 2 | Negative keyword listsAll three accounts | Awaiting your go | The drafted lists: competitor names and confirmed waste only. Anything that could be a real service line is held until we read the business profiles you are sending. |
| 3 | Turn off the last auto-applyPride | Awaiting your go | "Optimize ad rotation" is the one auto-apply still on anywhere. Off in one click. |
| 4 | Brand bid capRolland Reash | Awaiting your go | Stops paying up to $57 a click for people already typing the company name. Frees an estimated $2,500 to $3,500/mo for the non-brand engine that is already working. |
Live numbers pulled straight from the Google Ads API, last 30 days. "Reported CPA" is what each account says about itself today. "Cost per booked job" is spend divided by ServiceTitan booked jobs, which is the number we think you should actually run the portfolio on. The gap between those two numbers is most of what this audit is about.
The standard checks we run on every account, side by side. Green means healthy, yellow means it works but is leaking money or trust, red means it needs to be fixed before we can optimize on top of it. This same scorecard scales to all 13 OpCos: one row per check, one column per account.
| Check | Pride Plumbing | Rolland Reash | 2 Sons |
|---|---|---|---|
| Auto-apply recommendationsIs Google making changes on its own? | WARN "Optimize ad rotation" auto-apply is ON. 9 others paused. We'd switch the last one off. |
PASS All 25 auto-apply types paused. Google is not self-driving this account. |
PASS All auto-apply types paused. |
| Negative keyword listsDo shared negative lists exist and cover the campaigns? | PASS 4 shared lists, 252 terms, plus 1,537 campaign-level negatives. |
PASS 9 shared lists, 746 terms, plus 2,240 campaign-level negatives. Well organized. |
PASS 8 shared lists (~1,085 terms), plus 5,000+ campaign-level negatives. |
| Search-term wasteIs money still leaking past the negatives? | WARN $445 on local competitor-brand searches with zero booked jobs (17 brands missing from the Competitors list). The bigger "geo" bucket turned out to be in-area demand worth keeping. Draft list ready. |
WARN $1,555 on competitor-name searches, leaking mainly through a Dynamic Search ad group. St. Augustine is only $202. "Near me" terms are core demand and stay. Draft list ready. |
WARN Competitor names and commercial HVAC queries are the real leak. Auburn and Tacoma are inside the deliberate King and Pierce county footprint, so those terms stay and get fixed with Quality Score and bids. Draft list ready. |
| One clean primary conversionDoes "a conversion" mean one thing? | FIX 10 of 16 actions are primary. One phone call can count 3+ times (call tracker, ST inbound, ST booked, JVP). |
FIX Every ServiceTitan action is secondary. The account bids on raw calls and form fills instead of real jobs. |
FIX 5 overlapping call trackers across 3 phone numbers are all primary. ServiceTitan all secondary. Duplicate thank-you page actions. |
| Reported CPA trustworthyCan you make budget decisions from the CPA on screen? | FIX $102 reported vs $295 per ServiceTitan-reported booked job. Overcounting flatters everything by ~3x. |
WARN $184 reported, but it measures calls, not jobs. ServiceTitan reporting: $245 per booked job. |
WARN $134 reported, propped up by brand. ServiceTitan reporting: $361 per booked job, ~$292 CPA on non-brand. |
| ServiceTitan data flowingIs ServiceTitan reporting reaching Google Ads? | PASS Imports are live: calls, booked jobs, completed jobs all arriving. The plumbing works, the wiring is wrong. |
PASS Imports live. 67 booked jobs recorded in 30 days, just not being used for bidding. |
PASS Imports live. 51 booked jobs recorded. |
| Brand vs non-brand balanceIs growth spend actually going to new customers? | WARN 27% of spend on brand. Non-brand is starved: its daily budget runs out before the demand does. |
WARN 40% of spend on brand at an average $45.28 per click (top terms $50 to $57). Uncapped bidding is buying your own name at non-brand prices. A cap frees an estimated $2,500 to $3,500/mo. |
FIX 42% of spend on brand, using ~$260 of an $800/day budget. Brand drives 64% of conversions while non-brand shows for only a small fraction of relevant searches: its budget runs out daily and weak Quality Score keeps it out of the rest. |
| Account hygienePaused clutter, legacy experiments, structure debt | WARN 32 campaigns, 3 doing all the work, 29 paused experiments from past agencies. In the active build: 80 broad-match keywords and 15 keywords at Quality Score 3. |
WARN 18 campaigns, 3 active. Old smart campaigns and one-off promos linger. |
FIX 55 campaigns, 3 enabled, 2 spending. Three generations of past agency structures. The landing page test campaign shares the non-brand budget, so it can never actually spend. |
One headline per account, in plain English, with the first move we would make once you give the go-ahead. Nothing here has been changed yet.
10 of the 16 conversion actions are set to primary, so a single phone call can be counted three or more times: once by the call tracker, again as a ServiceTitan inbound call, again as a booked job. The account reports a $102 CPA while ServiceTitan reporting shows $295 per booked job. Every bidding decision Google makes is trained on that inflated number.
All 12 ServiceTitan actions are marked secondary, so Google optimizes toward any phone call or form fill. The clearest symptom: uncapped bidding pays an average $45 per click for people already typing the company name, 40% of the whole budget. Competitor-name searches leaked another $1,555 last month. Meanwhile 67 booked jobs flowed in from ServiceTitan and were ignored by the bidding.
42% of spend goes to brand terms, and brand delivers 64% of all conversions. Strip brand out and non-brand converts around a $292 CPA while showing for only a small fraction of relevant searches: its keywords average Quality Score 4.2 against 8.3 on brand, which drives ~$51 clicks and keeps the budget running out early. The growth engine is small and expensive, and the reported $134 CPA hides that.
Everything Molitaris Consulting has touched since access was granted on Jul 27, and where each workstream stands going into the Aug 3 walkthrough.
| Workstream | Status | Where it stands |
|---|---|---|
| Account access & wiringAll three OpCos | Done · Jul 27 | Invitations accepted, read-only data access wired up for the whole Molitaris Consulting team. MCC linking to follow the week of Aug 3. |
| Fresh-eyes data pullAll three OpCos | Done · Jul 30 | Full 30-day pull: performance, campaign structure, conversion actions, negative coverage, search terms, auto-apply settings, change history. |
| Audit scorecard & this hubPortfolio-wide | Live | You are looking at it. This page will stay current as the standing visibility layer, and the format extends to all 13 accounts as we onboard them. |
| Full audit writeupsOne per account | Done · Jul 31 | Three deep-dive audits published on this hub, with the evidence behind every scorecard row and recommendations split into first moves and later: Pride · Rolland Reash · 2 Sons. We walk through them together on Aug 3. |
| Draft negative keyword listsOne per account | Ready for review | Drafted for all three accounts, grouped by theme with the dollars behind every term. Biggest clean win is local competitor names. In-area city terms were deliberately kept: they are demand, not waste. |
| Conversion tracking fix planOne per account | Ready for review | Exact primary/secondary mapping drafted for every conversion action in all three accounts. It is a settings change, not a rebuild: the ServiceTitan booked-job reporting already flows into each account. See section 05. |
| Proposed landing pagesPride · Rolland · 2 Sons | Ready for review | Three working mocks are built and live at private preview links (section 06). Nothing is connected to any campaign. |
| ServiceTitan import verificationAll three OpCos | In progress | First reconciliation happened live on the Aug 3 call: ServiceTitan shows 56 / 95 / 79 July booked jobs vs 52 / 67 / 51 reaching Google Ads. Rolland and 2 Sons each lose roughly 28 jobs in the import. With ServiceTitan access we hunt down the drop-off; the same access opens the job-value / lifetime-value layer. |
| Changes in the accountsAll accounts | Unlocked · Aug 4 | The audit lock is off per our Aug 3 call. Pushes happen as you approve sign-off items, and each one gets logged on this page the day it ships. |
| High-value job skewAll OpCos · the value layer | Planned · after tracking | Once booked jobs flow correctly, we import job values from ServiceTitan and find which searches and service lines produce the big tickets (specific searches usually mean less price sensitivity). Then campaigns get split by service line and budget steers toward the higher-value work. Volume stays the near-term goal; this layers on top without trading it away. |
Today every account defines "a conversion" differently, so no two CPAs can be compared. The one number that means the same thing in every OpCo is a booked job in ServiceTitan (a booked appointment). We have locked the last 30 days as the historical baseline below. From the day the tracking fix goes live, this is the number we manage to, report on, and beat.
Same booked-job math, split by where the money goes. This is why the rebalances are drafted the way they are: brand is efficient everywhere, and non-brand is where the tracking fix and Quality Score work have to earn their keep.
| Account | Brand spend | Brand booked jobs | Brand cost / job | Non-brand spend | Non-brand booked jobs | Non-brand cost / job |
|---|---|---|---|---|---|---|
| Pride Plumbing | $4,075 | 35 | $117 | $10,172 | 14 | $718 |
| Rolland Reash | $6,565 | 25 | $259 | $9,305 | 40 | $233 |
| 2 Sons | $7,810 | 43 | $182 | $10,614 | 9 | $1,179 |
Read this honestly: brand partly harvests demand the rest of the marketing creates, so a $117 brand job is not a reason to move everything to brand. It is a reason to cap brand where it overpays (Rolland), protect it where it is cheap, and drive the non-brand number down with booked-job bidding, Quality Score, and the negative lists. Rolland shows what healthy looks like: non-brand at $233 beats its own brand. LSA books through its own lead type, so it sits outside this table. Campaign-split totals can differ from the account totals by a job or two because of how Google attributes offline imports.
We compared the three non-brand builds keyword by keyword. Rolland's is noticeably smaller and more curated, and it happens to be the one with the best cost per booked job. Market differences mean we cannot pin the whole gap on structure, but the differences are consistent enough to be worth carrying across.
| Non-brand build | Rolland Reash | Pride Plumbing | 2 Sons |
|---|---|---|---|
| Active keywords | 47, all phrase/exact | 200 | 301, of which 88 broad match |
| Ad group structure | 8 tight service themes, 5-8 keywords each, plus a dedicated "Near Me" group | 15 groups incl. seasonal relics (a 50-keyword winter campaign group) | 9 groups incl. one 120-keyword catch-all |
| Avg Quality Score | 5.8 (2 keywords at 4 or below) | 3.6 | 4.2 |
| Negative list stack | 9 themed shared sets | 4 sets | 8 sets, patchier |
| Cost per booked job | $233 ("Near Me" group: $176) | $718 | $1,179 |
What we'd look to carry over to Pride and 2 Sons, tested account by account rather than assumed: a leaner phrase/exact keyword set, tighter service-themed ad groups so ads match queries and Quality Score can recover, a dedicated "Near Me" group, Dynamic Search fenced in its own ad group, and deeper negative stacks. All of it on top of booked-job bidding. Jacksonville's market density clearly helps Rolland, so the aim is closing the structural gap and seeing how much of the performance gap follows.
The goal is identical wiring in all three accounts (and eventually all 13): ServiceTitan booked jobs and qualified calls as the primary conversions Google bids on, everything else kept as secondary diagnostics. Then every CPA on every dashboard means the same thing.
Today: 16 actions, 10 primary, heavy double counting.
After the fix: booked job + qualified call primary, calls/JVP/completed jobs secondary. Reported CPA becomes the real cost per booked job.
Today: 23 actions, ServiceTitan entirely secondary, bidding on raw calls.
After the fix: the 67 monthly booked jobs become the bidding signal instead of a footnote.
Today: 21 actions, 5 overlapping call trackers on 3 phone numbers all primary.
After the fix: one call source, booked jobs primary, duplicate form actions retired.
Working mocks for all three OpCos. They are private previews on our hosting, not connected to any campaign or domain; production versions go to help.[domain] subdomains once DNS and the ServiceTitan tracking snippet are in. The checklist under each shows what happens between "you like it" and "it takes traffic."
Outcomes from the Aug 3 kickoff and the standing rhythm from here.