Brand Search CPC Analysis

Summary

The “Brand Search - SC” campaign (ID 66) experienced a sudden CPC increase of ~4x starting January 29, 2026. Daily spend nearly tripled while clicks dropped. The root cause has been confirmed via the Google Ads change_event API:

  1. Jan 29 — A new “Hairpin” ad group was added with generic keywords “hairpin” and “hairpin.com” (both EXACT, £10 CPC bid). Google ignores the “.com” punctuation, so both effectively match “hairpin” — a generic word with no brand intent. Under Maximize Conversion Value (tROAS 4x), Smart Bidding tested these aggressively.
  2. Jan 29 — The primary domain was switched from thehairpinlegcompany.co.uk to hairpin.com, and Google Merchant Centre was temporarily suspended (~24 hours).
  3. Feb 3 — In response to the elevated CPCs, the bidding strategy was switched from Maximize Conversion Value (tROAS 4x) to Target Spend with a £5 CPC ceiling. This stopped the worst blowouts but locked CPCs at ~£4.80.

The campaign was not on Target Spend when the spike began. The previous analysis incorrectly attributed the spike to a competitor entering brand auctions — the changelog shows it was the generic keyword addition combined with the domain migration.

Campaign Configuration

SettingCurrent ValueBefore Jan 29Notes
Campaign ID6666
NameBrand Search - SCBrand Search - SC
TypeSearch (SEARCH_STANDARD)Search (SEARCH_STANDARD)
Bidding strategyTARGET_SPEND (£5 CPC ceiling)MAXIMIZE_CONVERSION_VALUE (tROAS 4x)Changed Feb 3 — reactive, not the cause
Daily budget£200£200
Serving statusSERVINGSERVING

Bidding Strategy Timeline (from change_event API)

DateChangeDetail
Pre Jan 29Maximize Conversion ValuetROAS target 4x
Feb 3 12:24tROAS raised4x → 5x (attempted fix)
Feb 3 12:38Strategy switchedMaximize Conversion Value → Target Spend with £5 CPC ceiling (damage control)

Ad Groups

IDNameStatusMax CPC BidFirst DataTotal ClicksRevenueConversions
298The Hair Pin Leg CompanyENABLED£10.00Dec 12 (at least)2,085£14,377136.1
513HairpinENABLED£10.00Jan 2914£00

Hairpin Ad Group: The Problem

The Hairpin ad group was created Jan 29 at 12:54pm as a copy of the THLC ad group (315 keywords in common). It has 2 unique keywords:

  • “hairpin” (EXACT) — a generic word meaning hair accessories, road bends, crochet stitches, etc. Not a brand term.
  • “hairpin.com” (EXACT) — Google Ads ignores punctuation, so this is treated identically to “hairpin”. A navigational query that organic handles.

Under Maximize Conversion Value (tROAS 4x), Smart Bidding tested these generic keywords aggressively — bidding up to £10/click trying to find conversions from “hairpin” searchers who have no intent to buy table legs. The generic keywords also likely degraded campaign-level quality signals, raising CPCs on all keywords in the campaign.

Changelog (change_event API) for the Hairpin ad group:

  • 12:54:08 — Created as “The Hair Pin Leg Company #2” (PAUSED), copied from THLC ad group, £10 CPC bid
  • 12:54:10 — Hundreds of negative keywords and positive keywords copied in
  • 12:54:21 — 7 responsive search ads created
  • 12:55:12 — Renamed to “Hairpin”
  • 12:58:00 — Status changed to ENABLED

The CPC Regime Change

Before/After January 29

MetricDec 12 – Jan 28 (48 days)Jan 29 – Feb 10 (13 days)Change
Avg CPC£1.47£6.05+312%
Avg daily spend£55£158+187%
Budget utilisation28% of £20079% of £200+183%
Avg daily clicks3826-32%
Avg impression share93.5%74.7%-20%
ROAS3.97x1.93x-51%

Weekly Progression

WeekImprClicksCostCPCConvROASAvg IS
Dec 8–1432598£147£1.507.03.04x96.6%
Dec 15–21692200£350£1.7514.04.08x95.1%
Dec 22–28487152£215£1.419.03.67x95.5%
Dec 29–Jan 4925286£354£1.2421.03.97x93.9%
Jan 5–111,114352£496£1.4125.04.45x92.1%
Jan 12–181,050312£491£1.5718.04.20x92.0%
Jan 19–25968298£449£1.5114.03.00x91.0%
Jan 26–Feb 1754215£1,231£5.7316.21.66x84.2%
Feb 2–8570166£929£5.5912.02.85x69.8%
Feb 9 (1 day)7520£98£4.890.00.00x63.2%

Extreme CPC Days

DateClicksCostCPCNote
Jan 3026£363£13.98Highest CPC day — 9.5x the Dec average
Jan 3120£274£13.68Second highest
Feb 219£225£11.85
Feb 120£155£7.74

Root Cause Analysis

The Google Ads change_event API (29-day lookback) and domain migration records together confirm the full causal chain. The previous analysis incorrectly attributed the spike to competitor entry and TARGET_SPEND overbidding. Both were wrong.

1. Generic “hairpin” keyword added to brand campaign (primary cause)

On Jan 29 at 12:54pm, a new “Hairpin” ad group was created in Brand Search with two unique keywords: “hairpin” (EXACT) and “hairpin.com” (EXACT). Google Ads ignores punctuation, so both effectively match the generic term “hairpin.”

“Hairpin” is not a brand term — it’s a common English word meaning a hair accessory, a type of road bend, or a crochet stitch. Adding it to a brand campaign under Smart Bidding (Maximize Conversion Value, tROAS 4x) caused:

  • Aggressive bid testing — Smart Bidding had no conversion history for the new keyword, so it tested aggressively with the £10 CPC bid ceiling, bidding up to £14/click trying to find conversions from people searching for hair pins
  • Campaign-level quality signal degradation — low CTR and zero conversions on the generic keyword dragged down quality signals across the entire campaign, raising CPCs on established brand terms too
  • Impression share loss — not from a competitor entering the auction, but from the campaign’s own degraded quality reducing ad rank

While the Hairpin ad group itself only accounts for ~3% of post-spike clicks directly, its indirect effect on campaign quality signals likely inflated CPCs on all 630+ keywords across both ad groups.

2. Ad final URLs pointed to the old domain during the spike (contributing factor)

The changelog confirms that ad final URLs were not updated as part of the domain migration. All 7 Hairpin ad group ads were created at 12:54pm on Jan 29 with https://www.thehairpinlegcompany.co.uk/ as the final URL. The existing THLC ad group ads also still had the old domain. New ads with https://www.hairpin.com/ URLs weren’t created in the THLC ad group until Feb 3 at 12:29pm (“We’re Now Hairpin.com!” ad).

During the entire Jan 29 – Feb 3 spike period, most ads were serving with the old domain as the final URL, which 301-redirected to hairpin.com. This would have gradually degraded Quality Score’s landing page experience component — Google sees a mismatch between the ad’s declared landing page and the actual destination, plus the redirect adds latency.

However, this was a slow-burn factor, not the spike trigger. Quality Score recalculation happens over days to weeks, not hours. The 301 redirect alone would not cause CPC to jump from £1.47 to £13.98 overnight. It compounded the damage from the generic keyword by making QS recovery slower, but the immediate spike was caused by Smart Bidding’s aggressive testing of the new “hairpin” keyword.

Ad URL migration timeline (from change_event API):

Date/TimeEventDetail
Pre Jan 29THLC ad group7 existing RSA ads with thehairpinlegcompany.co.uk final URLs
Jan 29 12:54Hairpin ad group created7 RSA ads copied with thehairpinlegcompany.co.uk final URLs
Feb 3 12:292 new THLC ads createdWith hairpin.com final URLs (incl. “We’re Now Hairpin.com!“)
Feb 3 12:32New THLC ad enabled”We’re Now Hairpin.com!” switched from PAUSED to ENABLED
Feb 3 12:36Old THLC ad pausedOne pre-existing ad switched from ENABLED to PAUSED
UnknownRemaining ads updatedAll 14 other ads now show hairpin.com — change not captured in changelog

Current state (16 ads total):

  • THLC ad group: 9 ads (2 ENABLED, 7 PAUSED) — all hairpin.com
  • Hairpin ad group: 7 ads (2 ENABLED, 5 PAUSED) — all hairpin.com

3. Domain migration (background factor, same day)

At 12:15pm on Jan 29 — 40 minutes before the ad group was created — the primary domain was switched from thehairpinlegcompany.co.uk to hairpin.com. The new domain had no Google Ads quality history (no landing page experience scores, no conversion data). This meant Quality Score’s landing page component needed to be re-evaluated from scratch — a gradual process that would have dragged on quality signals over the following weeks.

Like the URL mismatch above, this is a background factor that slowed recovery rather than caused the spike.

GMC suspension did not affect Brand Search. Google Merchant Centre was suspended for ~24 hours after the domain switch. This impacted Shopping campaigns (which pull product data from GMC), but GMC and Google Ads Search are separate systems. There is no documented mechanism by which a GMC suspension degrades Search campaign quality scores or bidding. The earlier version of this analysis overstated the GMC impact on Brand Search.

4. Bidding strategy switch was reactive (Feb 3)

The switch from Maximize Conversion Value to Target Spend was not the cause — it was damage control. The changelog shows:

  • Feb 3 12:24 — tROAS raised from 4x to 5x (attempted to make Smart Bidding more conservative)
  • Feb 3 12:38 — 14 minutes later, abandoned Smart Bidding entirely and switched to Target Spend with £5 CPC ceiling

This stopped the £14/click blowouts (Jan 30–31) but locked CPCs at ~£4.80 — the ceiling acts as both a cap and a floor, since Google bids close to the maximum allowed under Target Spend.

5. Competitor entry was not confirmed

The previous analysis attributed the impression share drop to a competitor entering brand auctions. The changelog shows no evidence of this. The IS decline is more consistent with the campaign’s own quality degradation — lower Quality Score means lower ad rank, which means fewer auctions won, which looks like an impression share loss even without a new competitor.

Financial Impact

Estimated waste (Jan 27 – Feb 9, 14 days):

  • Actual spend: £2,215 (at £6.05 avg CPC, 366 clicks)
  • Expected spend at pre-change rates: ~£535 (at £1.47 CPC, 26 clicks/day)
  • Excess cost: ~£1,680 (~£120/day)

This assumes clicks would have remained at the post-change level of 26/day. The actual waste may be higher if the inflated CPCs also suppressed click volume (impression share dropping suggests fewer total impressions to click on).

Device Breakdown (30 days, Jan 11 – Feb 9)

DeviceSpend% SpendClicksCPCConvRevenueROAS
Mobile£1,69951.4%610£2.7936.9£4,3012.53x
Desktop£1,53046.3%423£3.6228.2£4,2602.78x
Tablet£742.2%29£2.551.0£400.54x

Key findings:

  • Desktop CPC is 30% higher than mobile (£3.62 vs £2.79) but ROAS is only marginally better (2.78x vs 2.53x). Desktop is where the TARGET_SPEND overbidding hits hardest — brand searches on desktop are more competitive.
  • Mobile accounts for more conversions (36.9 vs 28.2) at a lower cost per click. The campaign’s CPC inflation problem is amplified on desktop.
  • Tablet is negligible — £74 spend, 1 conversion, not worth optimising for.

If switching to Target Impression Share (recommended above), consider setting a lower CPC cap on desktop than mobile, or applying a negative device bid adjustment on desktop to counteract the CPC premium.

Search Term Cannibalization with Brand Shopping

Search term data (30 days) shows Brand Search and Brand Shopping compete on the same queries:

Search TermBrand SearchBrand Shopping
Clicks / Cost / ConvCPCClicks / Cost / ConvCPC
hairpin leg company605 / £1,797 / 40.2£2.9753 / £60 / 2.0£1.14
the hairpin leg company153 / £326 / 8.0£2.1314 / £15 / 1.0£1.08
the hairpin leg co35 / £112 / 1.0£3.202 / £1 / 0.0£0.25
hairpin leg co27 / £71 / 1.0£2.622 / £1 / 0.0£0.42
hairpin legs30 / £97 / 2.0£3.2419 / £15 / 0.6£0.81
hairpin10 / £49 / 0.0£4.931 / £1 / 0.0£0.97

Combined overlap spend: £413 (Search: £385 + Shopping: £28)

The pattern is stark: Brand Search pays 2–5x higher CPC than Brand Shopping for the same queries. Shopping ads show product images and prices, making them naturally more click-efficient for brand queries. The search text ads are overbidding due to TARGET_SPEND.

This reinforces the recommendation to switch away from TARGET_SPEND. A well-configured Brand Shopping campaign could capture most brand traffic at a fraction of the CPC, with Brand Search serving as a safety net at a capped CPC.

Data Gaps (Updated)

QuestionStatusResolution
What keywords are in each ad group?Closedkeyword_view synced. THLC: 321 keywords, Hairpin: 317 keywords (315 shared). Hairpin has 2 unique generic keywords: “hairpin” (EXACT) and “hairpin.com” (EXACT)
Did someone change the bidding strategy?Closedchange_event API confirmed: campaign was on Maximize Conversion Value (tROAS 4x) until Feb 3. Switch to Target Spend was reactive damage control
Are keywords using broad match?ClosedBoth ad groups use a mix of EXACT, PHRASE, and BROAD. The generic “hairpin” keywords are EXACT match, but Google’s close variant matching still expands these to “hair pin”, “hairpins”, etc.
Which competitor started bidding on brand terms?Likely not applicableThe impression share drop is better explained by campaign quality degradation from the generic keyword, not competitor entry. Auction insights data could confirm but may not be necessary

Step 1: Immediate (do first)

  1. Remove “hairpin” and “hairpin.com” keywords — these are generic terms, not brand terms. “hairpin” matches hair accessories and road bends. “hairpin.com” is treated as “hairpin” by Google (punctuation ignored). Neither needs paid protection — organic handles navigational queries for the domain, and “hairpin” as a standalone word has no brand intent. This is the primary cause of the CPC spike.
  2. Consider removing the entire Hairpin ad group — after removing the 2 generic keywords, it has 315 keywords identical to the THLC ad group. Two near-identical ad groups create noise for any bidding strategy. If the Hairpin ad group has ad copy tailored to the new brand name, move those ads into the THLC ad group instead of keeping a duplicate ad group.
  3. Reduce daily budget to £60–80 — even at peak (early Jan), natural demand never exceeded £105/day. £200 gives automated bidding too much room.

Step 2: After keyword removal (stagger by a few days)

Stagger bidding strategy changes separately from keyword removal. Changing everything simultaneously makes it impossible to isolate the impact of each fix.

  1. Switch bidding strategy to Target Impression Share — set to 95% absolute top of page with a max CPC cap of £2.50. This directly optimises for the thing brand search exists to do: show up when someone searches your name. The £2.50 cap prevents overpaying while remaining above the pre-spike ~£1.50 average. Can tighten further once Quality Score recovers. Alternative: Manual CPC at £1.50–2.00 for full control.

Step 3: Investigate and monitor

  1. Clarify what “Branded Bid Test” campaign is doing — a separate enabled campaign with Manual CPC at £60/day budget. Zero performance data synced to our system. If it targets the same brand keywords, it could be duplicating spend or competing with Brand Search for the same auctions. Needs clarification on its purpose — if it’s a leftover test, consider pausing.
  2. Monitor Quality Score recovery over 2–4 weeks — after removing the generic keywords, campaign quality signals should gradually recover. CPCs should drift back toward the £1–2 range. Don’t make further bidding changes during this recovery period — let the signals stabilise before evaluating whether the new strategy is working.

Already resolved

  1. Pull change_event to confirm whether config was modifiedDone. Changelog confirms: tROAS 4x → 5x → Target Spend switch on Feb 3 was reactive. Hairpin ad group created Jan 29 12:54pm. No other campaign-level changes near the inflection point.
  2. Keyword dataDone. Both ad groups synced. Hairpin ad group has 2 unique generic keywords causing the issue.

Context

  • Sync job: app/Jobs/AdPlatforms/Google/SyncGoogleAdsDataJob.php
  • Campaign model: app/Models/AdPlatforms/AdCampaign.php (ID 66)
  • Ad group model: app/Models/AdPlatforms/AdGroup.php (IDs 298, 513)
  • Related: shopify-app/docs/ad-platform/campaign-config-history.md (config tracking gap)