Molitaris Consulting

2 Sons Audit

Incorrect password
Press Enter to continue

P3 Services

×

Molitaris Consulting

2 Sons · Full audit
Fixes rolling out Window Jun 30 – Jul 29 Account 8891984598
01

The number this account runs on

Two CPAs live in this account. One is what Google Ads reports about itself. The other is what the money actually bought.

Reported CPA
$134
Propped up by brand spend and three stacked call trackers counting the same calls. Not a number to run the business on.
The number
Cost per ServiceTitan booked job
$361
Spend divided by ServiceTitan-reported booked jobs. Worst of the three P3 priority accounts, which makes it the biggest opportunity.
Booked jobs (30d)
51
45 from the call extension, 6 from the website. Already flowing from ServiceTitan into Google Ads.
Spend (30d)
$18,423
Highest spend of the three priority accounts over the audit window.

Cost per booked job (a booked appointment in ServiceTitan) is the one number that means the same thing across every P3 OpCo, no matter how each account's tracking is wired. $361 is 2 Sons' baseline, locked as of this window, and it is the number we drive down from here. For context, the portfolio blended baseline across all three priority accounts is $295 (170 booked jobs on $50,178), so 2 Sons is the account with the most ground to make up and the most to gain.

02

Executive summary

Read this first. Every claim below is expanded, with the evidence, in the sections that follow. Changes now roll out as items clear the sign-off list on the hub, and each push gets logged there.

  • This is the biggest-spend account of the three, and the least efficient per real job. $18,423 in 30 days produced 138 reported conversions ($133.50 reported CPA), but ServiceTitan booked only 51 jobs (45 from the call extension, 6 from the website). Cost per ServiceTitan-reported booked job is $361, the worst of the three P3 priority accounts.
  • Tracking is the constraint, same as the others. 21 conversion actions are enabled and the primary goal is a pile of overlapping call trackers across three different phone numbers. The bidding algorithm is chasing raw calls, not booked jobs. The ServiceTitan booked-job data is flowing and sums to 51 in Google Ads, though ServiceTitan itself shows 79 for July. We need to close that import gap and make booked jobs the goal.
  • Brand is doing most of the visible work. The brand campaign is 42% of spend but 64% of reported conversions at a flattering $88 CPA. It is harvesting people who already typed "2 sons plumbing." The engine that actually grows the business (non-brand) is starved and inefficient.
  • Non-brand is both budget-starved and quality-starved. Non-brand ads show for only about 1 in 6 relevant searches; the daily budget runs out (that costs about a third of the chances to show), and weak Quality Score keeps the ads out of most of the rest. Non-brand keywords average a Quality Score of 4.2 (versus 8.3 on brand), which is why clicks cost about $51 each. More budget alone will not fix this; Quality Score has to come up too.
  • The structure is a graveyard. 55 campaigns, only 3 enabled today, and one of those three ("Landing Page Test") spends $0 because it shares another campaign's budget. Three PMAX retargeting campaigns were paused mid-window by an internal shared-Gmail user.

The one-line version: fix tracking first so the bid signal is honest, then lift non-brand Quality Score and budget together (the landing page rebuild is half of that), then clean the structure and negatives. In that order.

03

Performance reality: reported vs ServiceTitan reporting

The reported $133.50 CPA is not a real number. It counts the same phone call two or three times, because three separate call-tracking actions across three phone numbers are all set as primary. Anchored to ServiceTitan booked jobs, which the account already records and which sum to 51 in Google Ads, the cost per booked job reads $361. ServiceTitan itself shows 79 booked jobs for July, so the real number is likely near $233 once the import gap closes. It is not a crisis; it is a starting line we can finally see. The ServiceTitan figures here are the numbers recorded in Google Ads through the offline import, pending reconciliation with ServiceTitan's own reports.

Reported vs ServiceTitan
MetricReported in Google AdsServiceTitan reporting
Spend (30d)$18,423$18,423
"Conversions"138n/a
Booked jobsn/a51 (45 call ext + 6 website)
Cost per event$133.50 reported CPA$361 per booked job
Where the spend went
CampaignSpendShare of spendReported convShare of convReported CPA
2Son-SEM-Brand-Seattle$7,81042%8964%$88
2Sons-SEM-LG-Plumbing (non-brand)$7,60141%2619%$292
3x PMAX Retargeting (paused mid-window)$3,01216%2317%n/a

The brand-dependence story

Strip brand out and the picture changes hard. Brand's $88 CPA looks great, but brand is mostly capturing demand that already exists: the top brand search term "2 sons plumbing" alone spent $3,469 for 162 clicks. That is people who were going to call 2 Sons anyway. The brand campaign already shows for nearly every brand search, and it has an $800/day budget it does not use (it actually spends about $260/day), so most of that budget sits idle.

The non-brand campaign is the actual customer-acquisition engine, and it is running at a $292 reported CPA while showing for only about 1 in 6 relevant searches. That is what the account looks like with brand stripped out, on reported numbers. Growth has to come from here, and it is the most constrained part of the account.

04

Conversion tracking today, and the fix

Offline conversion imports from ServiceTitan are the backbone of long-term optimization on this account. They already flow in: 51 booked jobs landed in Google Ads last month, matching ServiceTitan exactly. The problem is that bidding ignores them, because they sit marked secondary while raw call trackers hold the primary slot. The fix is a settings change, not a rebuild: make bidding use the booked jobs. Later this same pipe becomes job-value import and revenue bidding, so the account can bid toward dollars, not just job counts.

The problem in one line

21 conversion actions are enabled and 6 are primary. The primary goal is a stack of call trackers spread across three different phone numbers, while the real money event (ServiceTitan booked job) sits secondary. A single call gets counted through whichever number it hit, so reported conversions (138) are about 2.7x the ServiceTitan-reported booked jobs (51).

Target state

The two ServiceTitan Booked Job actions (Call Extension + Website) become the only primary goal. Together they are "a booked job," split only by source, and they sum to 51 for the window, giving a clean $361 cost per booked job. At 51/month this clears the ~30-conversions-per-month 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.

Why no call action stays primary: adding a call action alongside booked jobs would re-introduce call-to-job double counting (the same call counts once as a call and again when it books) and push reported volume back up, which muddies the $361 booked-job number. Because booked-job volume already clears the bidding threshold, the cleaner answer is booked-jobs-only as primary. This matches how we set up Pride and Rolland.

Which of the three phone numbers survives: we keep (206) 710-2259 as the one live tracking number in the ads and on the site, and retire the other two (the "Joe's 2 Sons" ad-call number and the (206) 487-1757 website number), since the two AD_CALL trackers are duplicates on different numbers. Three numbers on one business fragments the call data and makes any single report wrong. The de-duplicated "ServiceTitan Calls Conversion Action" (id 7049322959) stays as the designated secondary backup: if booked-job volume ever dips below ~30/month, that action is the bridge we promote to primary, not one of the raw Google call trackers.

Full mapping: all 21 enabled actions
#ActionTypeCurrent30d volProposedWhy
1ServiceTitan Booked Job (Call Extension)Upload callsSecondary45PRIMARYReal money event, phone side. Half of the 51.
2ServiceTitan Booked Job (Website)Upload clicksSecondary6PRIMARYReal money event, web side. Other half of the 51.
3Calls from ads (206) 710-2259Ad callPrimary71SECONDARYRaw call, double counts vs booked jobs. This number stays live; the action goes secondary.
4Joe's 2 Sons Ad Phone CallAd callPrimary49RETIRE #Duplicate ad-call on a second number. Retire the number, mute the action.
5Calls to a number on the website (206) 487-1757Website callPrimary18RETIRE #Third phone number. Consolidate to one; mute the action.
6Clicks to callGoogle-hostedPrimary9SECONDARYButton-click proxy, not a real outcome.
7ServiceTitan Calls Conversion ActionUpload clicksSecondary10BACKUPDe-duplicated call action. The bridge to primary only if booked-job volume drops below ~30/mo.
8ServiceTitan Inbound Call - ExtensionUpload callsSecondary151SECONDARYCounts all inbound calls, not just ad-driven. Too broad to bid on. Keep for insight.
9ServiceTitan Inbound Call - WebsiteUpload clicksSecondary12SECONDARYSame, web side.
10ServiceTitan Lead - ExtensionUpload callsSecondary86SECONDARYUpstream of a booked job. Insight only.
11ServiceTitan Call Extension Completed Job ConversionsUpload callsSecondary42SECONDARY"Completed" is downstream of booked. Overlaps booked jobs. Insight only.
12ServiceTitan Completed Jobs Conversion ActionUpload clicksSecondary6SECONDARYSame, web side. Insight only.
13ServiceTitan JVP (Call Extension)Upload callsSecondary44SECONDARYJob value/potential signal. Overlaps booked jobs. Insight only.
14ServiceTitan JVP (Website)Upload clicksSecondary6SECONDARYSame, web side. Insight only.
15Contact 2023Web formSecondary4RETIRELegacy duplicate of the thank-you form. Archive.
16Submit lead form (thank-you, no slash)Web form (codeless)Secondary4SECONDARYKeep this single thank-you form as the web-lead signal.
17Submit lead form (thank-you/, trailing slash)Web form (codeless)Secondary4RETIREExact duplicate of #16 (same page, trailing slash). Counts the same submit twice. Archive.
18Emergency Sewer Repair Lead FormWeb formSecondary0SECONDARYNo volume this window. Keep, monitor.
192 Sons Plumbing - GA4 (web) BookingBookedGA4 page viewSecondary0SECONDARYGA4 page-view proxy. Keep for GA4 continuity, never primary.
20local_services_phone_leadLSAPrimary0SECONDARYLSA campaign is paused. Mute now; revisit if LSA turns back on.
21local_services_message_leadLSAPrimary0SECONDARYSame.
Σ

Net effect: primary goes from 6 muddy call actions to 2 clean booked-job actions. Three phone numbers collapse to one. Two duplicate form actions are retired. Nothing about ad delivery breaks; we are re-labeling which actions count, not removing tracking.

Expected effects

  • Reported conversions drop from 138 toward ~51 to 55. The triple-counted phone events collapse and booked jobs become the count. The top of the range allows for keeping the single de-duplicated web-lead form visible; the core number is the 51 booked jobs.
  • Reported CPA reads honestly at ~$361 per booked job instead of the fictional $133.50. That $361 becomes the number we drive down, and it is finally a real target.
  • Bidding optimizes to booked jobs, not button clicks. Maximize Conversions stops chasing raw calls (part of why non-brand pays $51/click) and starts pulling toward searches that produce actual jobs.
  • The three-number call data unifies. One tracking number means call reports finally reconcile.

Verification plan (after the change goes live)

  1. Day 0 (change day): screenshot the conversion-actions table showing exactly 2 primary (both Booked Job) and everything else secondary. Confirm the two retired form actions (Contact 2023, thank-you-with-slash) are archived. Log the change with date, who, and why, closing the shared-Gmail no-log gap.
  2. Day 1 to 3: confirm reported "Conversions" is trending toward the ~51 to 55 range, not 138. Confirm the ServiceTitan Booked Job actions still show "recording conversions" status (imports healthy).
  3. Day 3 to 7: reconcile Google Ads booked jobs against the ServiceTitan job list for the same window. They should match within normal import lag. If they diverge, check the offline-conversion upload and GCLID stitching before touching bids.
  4. Day 7 to 14: watch that Maximize Conversions has not over-throttled on the smaller (but honest) conversion count. Non-brand may briefly pull back as the algorithm relearns; that is expected. Hold bids steady and let it settle.
  5. Day 30: compare cost per booked job versus the $361 baseline. That is the first honest before/after we will have on this account, and the number we report to Natalie.
05

Non-brand starvation and Quality Score

Non-brand is the growth engine, and its ads show for only about 1 in 6 relevant searches, while brand shows for nearly every brand search. It misses the rest two ways at once: the daily budget runs out (that costs about a third of the chances to show), and weak Quality Score and bids keep the ads out of most of what remains, even when there is money left.

Budget and how often the ads show
CampaignDaily budgetActual daily spendShows for (share of relevant searches)Missed because budget ran outMissed on Quality Score and bids
Brand$800~$26096%0%~4%
Non-brand$300 (shared)~$25317%34%~49%

Non-brand keywords average Quality Score 4.2, with 14 of 22 scored keywords at 4 or below. Brand averages 8.3. Low Quality Score is why non-brand clicks cost about $51 each (versus $22 on brand), why the ads show for only about 1 in 6 relevant searches, and why single clicks on terms like "auburn plumbers" ($277 for 2 clicks) and "24 7 plumbers" ($187 for 1 click) are burning the budget.

A rebalance has two moves, and both are needed:

  • Shift idle brand budget to non-brand. Brand uses only ~$260 of its $800/day. Non-brand's budget runs out daily, which costs it about a third of its chances to show. Moving brand's unused budget to non-brand is close to free.
  • Lift Quality Score so the extra budget is not wasted at $51/click. Tighter match types (124 broad-match keywords are pulling competitor and out-of-scope traffic), better ad-to-keyword-to-landing-page relevance, and the non-brand landing page rebuild. Our proposed page is live as a mock at 2sons-lpmock.vercel.app, built to raise landing-page experience, one of the three Quality Score inputs.

Budget without Quality Score just buys more $51 clicks. Quality Score without budget still leaves the ads showing for only about 1 in 6 relevant searches. We do them together.

The test that cannot run

The "Landing Page Test" campaign is enabled but has spent $0, because it shares the same budget (ID ...220844) as the non-brand campaign. Two campaigns on one shared budget compete for the same dollars, and the established non-brand campaign consumes them. The LP test cannot get incremental spend without starving non-brand. The fix: give it its own budget and point it at the new mock, or pause it until the LP rebuild is ready. Right now it is a test that cannot run.

The July 20 PMAX pauses

Three Performance Max retargeting campaigns (Sewer & Drain, General Plumbing, Water Heater) spent $3,012 for 23 reported conversions before being paused. The change history shows three campaign edits on July 20 at 10:28am by p3servicesmarketingteam3@gmail.com (a shared Gmail account, via the web UI), lining up exactly with the three pauses.

Our read: the pause was probably the right call on the merits, but it was done blind. Retargeting is a weak fit for emergency plumbing; someone with a burst pipe calls the first credible result, they do not need to be followed around the web. PMAX retargeting also tends to claim credit for conversions that brand or direct would have captured anyway, which inflates its apparent 23 conversions. The problem is process, not outcome: no documentation, a shared internal login, no before/after measurement, so we would not know if it helped or hurt. When P3 gives the go-ahead, we would formalize the decision (keep it paused, redirect that ~$3,000/month toward non-brand) and note it, so the next person understands why.

06

Search terms and the draft negative list

The top search terms carried $2,434 of zero-conversion spend in 30 days, about $29,600/year at this rate. The competitor-name group is in today's push wave; the rest waits on the business profiles.

The real leak is competitor names and commercial HVAC. Everything below is genuinely wasteful regardless of geography.

T1

Out-of-footprint geography (outside King and Pierce counties)

These name places outside the targeted footprint. Add to General Negatives - Master as phrase match (the city word is the signal). Kitsap and Bremerton are across Puget Sound in Kitsap County, so these are true bleed; confirm before adding if 2 Sons services the peninsula.

TermMatch typeSetEvidence (30d)
spokanePhraseGeneral Negatives - Master"action drain spokane" $45, 1 click, 0 conv
orcasPhraseGeneral Negatives - Master"morris plumbing orcas" $88, 1 click, 0 conv
kitsapPhraseGeneral Negatives - Master"swift plumbing kitsap" $14, 0 conv
bremertonPhraseGeneral Negatives - Master"plumbing bremerton" $20, 1 click, 0 conv
T2

Competitor names

Rival plumbers leaking through broad match. A Competitors set already exists (397 members); these slipped past it. Add as phrase match to Competitors. Hold out for review: "nw sundance services" ($95, 1 conv) and "trusted plumbing and heating," "van's plumbing," "erik d plumber," which each recorded 1 conversion.

TermMatch typeSetEvidence (30d)
harolds plumbingPhraseCompetitors"harolds plumbing auburn wa" $80, 0 conv
ayers plumbingPhraseCompetitors$67, 0 conv
psr mechanicalPhraseCompetitors"psr mechanical seattle" $61, 0 conv
prokash plumbingPhraseCompetitors$59, 0 conv
quality plumbing ballardPhraseCompetitors$57, 3 clicks, 0 conv
cahill's plumbingPhraseCompetitors"cahill's plumbing & heating" $53, 0 conv
mitchel plumbingPhraseCompetitors$44, 0 conv
hd partnersPhraseCompetitors"hd partners seattle" $33 + $18, 0 conv
hunt's plumbingPhraseCompetitors"hunt's plumbing tacoma" $29, 0 conv
collier plumbingPhraseCompetitors$24, 0 conv
royal rooterPhraseCompetitors"royal rooter plumbing" $21, 0 conv
john the plumberPhraseCompetitors"john the plumber near me" $19, 0 conv
joe the plumberPhraseCompetitors"joe the plumber near me" $18, 0 conv (not the 2 Sons owner "Joe")
rick wilson plumbingPhraseCompetitors$12, 0 conv
pelican plumbingPhraseCompetitors$11, 0 conv
jd plumbingPhraseCompetitors"jd plumbing & fire protection" $9, 0 conv
sundance plumbing / nw sundancePhraseCompetitors"sundance plumbing" $8 + "nw sundance services" $95 (1 conv, review before adding)
splash plumbingPhraseCompetitors"splash plumbing seattle" $7, 0 conv
pars plumbingPhraseCompetitors$5, 0 conv
2 guys plumbing / 3 sons plumbingPhraseCompetitorsLook-alike brands, ~$14 combined, 0 conv
T3

Commercial intent (out of scope)

2 Sons is residential-focused, but a Commercial Plumbing ad group does convert, so we do not blanket-negative "commercial." Only the commercial HVAC queries are clear waste. Add to Different Service or Trade as phrase.

TermMatch typeSetEvidence (30d)
commercial hvacPhraseDifferent Service or Trade"commercial hvac companies seattle" $140; "best commercial hvac companies" $80; $220 total, 0 conv
T4

DIY and research / cost shoppers

Low purchase intent, comparison and cost research. Add to Costs, Discounts (currently only 1 member) and DIY (currently only 1 member). Both sets are nearly empty and need building out.

TermMatch typeSetEvidence (30d)
replacement costPhraseCosts, Discounts"garbage disposal replacement cost" $35; "labor cost to replace garbage disposal" $14; 0 conv
how much doesPhraseCosts, Discounts"how much does drain cleaning cost" $23, 2 clicks, 0 conv
costcoPhraseCosts, Discounts"water heater replacement costco" $29, 0 conv
lowesPhraseCosts, Discounts"lowes plumbing dept" $7, 0 conv
plumbing storePhraseDIY"plumbing store seattle" $5; "plumbing dept" $7; 0 conv
apollo hydroheatPhraseDIY"apollo hydroheat water heater replacement" $5 (product/brand research), 0 conv
T5

Wrong service or trade

Services 2 Sons does not lead with. Add to Different Service or Trade as phrase. Confirm each against the current service menu first.

TermMatch typeSetEvidence (30d)
irrigationPhraseDifferent Service or Trade"irrigation plumbing near me" $49, 0 conv
well pump / well servicesPhraseDifferent Service or Trade"well pump company near me" $10; "well services near me" $2; 0 conv (confirm 2 Sons does not do wells)
plomeroPhraseDifferent Service or Trade"plomero hispano" $9 (Spanish-language, no Spanish LP), 0 conv, review
T6

Brand queries leaking into non-brand

2 Sons brand searches landing in the non-brand campaign. Not waste (high intent, cheap), but they belong in the brand campaign, which is cheaper and already shows for nearly every brand search. Add to Brand Terms - 2sons so non-brand excludes them and brand catches them. The set is attached to non-brand already (21 members) but these slipped past it, so it needs topping up.

TermMatch typeSetEvidence (30d)
2 sons plumbing & sewerPhraseBrand Terms - 2sons$62, 4 clicks, 0 conv in non-brand
2 sons plumbing tacomaPhraseBrand Terms - 2sons$39, 3 clicks, 0 conv
joe's 2 sons plumbingPhraseBrand Terms - 2sons$29, 2 clicks, 0 conv
joe's two sons plumbingPhraseBrand Terms - 2sons$3, 0 conv
2 sons plumbing heating & airPhraseBrand Terms - 2sons$13, 0 conv
2 sons plumbing sewer heating & airPhraseBrand Terms - 2sons$10, 0 conv
2 sons and joe's plumbingPhraseBrand Terms - 2sons$2, 0 conv
sons plumbingPhraseBrand Terms - 2sons$25 + $2, 0 conv
T7

Employment / hiring

No hiring terms surfaced in this window's top terms (a "2sons-SEM-LG-Hiring" campaign exists but is paused). If we turn on hiring or acquisition campaigns later, employment negatives ("jobs," "careers," "hiring," "salary") should be added to the lead-gen campaigns then. Nothing to push today.

What this does not touch (leave running)

Generic in-area plumbing terms that did not convert this window but are legitimate demand: "plumber near me," "plumbers near me," "plumbing in seattle," "plumbing company," "plumbing services near me." These are the core of the non-brand campaign. The fix for their efficiency is Quality Score and bidding, not negatives. We do not exclude them.

The bigger lever behind this list: most of these leaks come through 124 broad-match keywords in the non-brand campaign feeding a Maximize Conversions bid that is chasing a muddy call signal. Negatives treat the symptom; tightening those broad-match keywords toward phrase and exact stops most of this at the source. We recommend both: push these negatives now, tighten match types during the week-2 Quality Score work.

07

Structure cleanup and governance

55 campaigns exist. Only 3 are enabled, and only 2 actually spend. One correction to a pre-audit headline: we counted 3 enabled campaigns today, not 4 (the third, the Landing Page Test, spends nothing); the paused PMAX trio brought the "recently active" count higher earlier in the window.

CampaignStatusNote
2Son-SEM-Brand-SeattleEnabledSpending, healthy, over-budgeted
2Sons-SEM-LG-Plumbing (non-brand)EnabledSpending, starved and low QS
2Sons-SEM-LG-Plumbing Landing Page TestEnabled$0 spend: shares budget ID ...220844 with non-brand, so it can never spend (section 05)
3x PMAX RetargetingPausedPaused July 20, $3,012 spent first (section 05)
~48 othersPausedThree generations of dead structure

The graveyard

The ~48 paused campaigns are three generations of past-agency structures: manual-CPC relics with $1,000+/day budgets left attached (Water Heater Repair at $1,000/day, Sewer Pipe Lining at $1,500/day), an "H - {city} - {service}" grid (H - Seattle - Plumbing, H - Tacoma - HVAC, and so on), and WS-era 2023 campaigns. None are spending, so they are not urgent, but they make the account hard to read and carry oversized budgets that could be triggered by accident. Cleanup is a later, low-risk tidy.

Governance observations (factual, no blame)

  • A shared Gmail login is making live changes. p3servicesmarketingteam3@gmail.com paused three PMAX campaigns on July 20 via the web UI. Shared logins make it impossible to know who changed what, and they are a security exposure. We recommend named user access with appropriate roles.
  • Multiple hands, no change log. July edits came from jared.tuttle@ and farrukh.saleem@ (P3 domain) plus the shared Gmail. Changes are not documented anywhere we can see, so intent is lost.
  • Three phone tracking numbers ((206) 710-2259, the "Joe's 2 Sons" number, and (206) 487-1757) fragment the call data. Consolidating to one number simplifies both tracking and the customer experience.
  • Oversized budgets on paused relics (up to $1,500/day) sit ready to fire if a campaign is toggled on by accident. Worth zeroing out during cleanup.

None of this is a blame point for Natalie. It is the inherited state of the account, and it is fixable.

08

Prioritized recommendations

In order, and the order matters: this 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. Non-brand Quality Score is the second constraint, and it gets the landing-page and match-type work once the signal is honest.

First moves after approval (week of Aug 3)

  1. Fix conversion tracking. Make ServiceTitan Booked Job (Call Extension + Website) the only primary goal. Demote all call trackers, JVP, Completed Jobs, and Lead actions to secondary. Retire the duplicate thank-you form actions. This makes the $361 honest and lets Maximize Conversions bid to real jobs.
  2. Consolidate the three phone numbers to one and keep a single call action enabled as the secondary backup signal.
  3. Rebalance budget: trim brand's unused $800/day toward ~$400 and move the freed-up budget to non-brand. Give the Landing Page Test its own budget so it can actually run, or pause it until the LP rebuild is ready.
  4. Push the negative list (section 06): out-of-footprint, competitor, commercial HVAC, DIY/cost, and brand-into-non-brand terms.

Later (weeks 2 to 4, once the signal is clean)

  1. Lift non-brand Quality Score: tighten the 124 broad-match keywords toward phrase/exact, align ad copy to keyword themes, and ship the non-brand landing page rebuild (mock at 2sons-lpmock.vercel.app). Target: pull the $51 CPC down and get non-brand ads showing for more than 1 in 6 relevant searches.
  2. Formalize the PMAX decision: keep retargeting paused, redirect that ~$3,000/month to non-brand, and document it.
  3. Clean the graveyard: archive the ~48 dead campaigns and zero out their oversized budgets so the account is readable and safe.
  4. Confirm service area with the client: is Tacoma/south Pierce a real target, or should the footprint tighten to Seattle core? This decides whether Auburn/Tacoma get geo bid adjustments or stay as-is.