There was a time when bidding on your own brand terms in Google Shopping felt unnecessary. If someone searched your brand name, your products would show up. You owned that space. Spending budget to compete for your own customers felt like paying rent in a house you already owned.

That calculus has changed and if you’re still operating under the old assumptions, you’re likely losing branded traffic to competitors without realizing it.

The Platform Has Shifted Under Your Feet

The rise of Smart Bidding, broad match, AI Max, and Performance Max hasn’t just changed how campaigns are managed it’s changed the competitive landscape for brand terms across the board.

Here’s what’s happening: when your competitors run broad match keywords or AI Max campaigns, Google’s systems are increasingly matching those campaigns to branded queries. Someone searches your brand name and a competitor’s broad match campaign targeting something like a generic category term can now legitimately show up for that query. The machine learning models are optimized for conversion probability, not advertiser intent. If Google’s system thinks a branded query is likely to convert for a competitor, it’ll serve their ad.

Performance Max layers this problem on top. PMax campaigns are designed to find conversions wherever they exist across Google’s inventory, and Shopping placements are a primary surface. Without deliberate controls in place, PMax campaigns yours or a competitor’s will chase high-intent queries, including branded ones, and the auction gets more expensive for everyone involved.

The result: CPCs on brand-adjacent and competitive brand queries have climbed. Advertisers who used to own their brand traffic cheaply are now paying more for less certainty.

The Tempting Fix That Doesn’t Work

The obvious response is to exclude brand terms from Shopping campaigns entirely. If brand queries are inflating CPCs and muddying your data, why not just wall them off?

I tested this. I excluded all brand terms from Shopping across accounts and monitored the results.

The outcome was clear: non-brand terms increase but overall performance either dropped or stayed flat. The reason isn’t complicated. Brand queries in Shopping aren’t just brand protection plays they’re high-intent, high-conversion signals. Someone searching your brand name is often ready to buy. Pulling your products out of those results doesn’t lower your costs, it just removes you from an auction where you have a strong conversion advantage. A competitor steps in and takes the sale.

Excluding brand from Shopping entirely is giving up ground you’ve earned.

The Right Answer: A Dedicated Brand Shopping Campaign

The solution isn’t exclusion it’s isolation. A dedicated brand Shopping campaign lets you:

  • Bid aggressively on branded queries without inflating CPCs across your general Shopping campaigns
  • Control budget specifically allocated to brand traffic
  • Keep brand and non-brand performance data cleanly separated
  • Protect your brand SERP real estate from competitors running broad or AI Max campaigns

The setup follows the same logic as a brand Search campaign running alongside a general Search campaign it’s segmentation, not duplication.

How to Build It

Step 1: Create a new Shopping campaign and label it clearly as your brand campaign. Standard Shopping works well here. You want full control over search terms and ad inventory.

Step 2: Set bid strategy to reflect the intent of the traffic. Brand queries convert well. Start with a manual CPC so you can cap the traffic.

Step 3: Set campaign priority to Low. If you’re running multiple Shopping campaigns, campaign priority controls which one enters the auction for a given query. Set your brand campaign to Low priority and your general campaigns to Medium or High. This ensures your general campaigns take precedence for non-brand queries, while your brand campaign picks up the slack for any branded queries that slip through.

Step 4: Exclude brand terms from all other Shopping campaigns. Add exact match negatives for your brand name and key brand variations across all non-brand Shopping campaigns. Otherwise you’re running both campaigns in competition with each other on brand queries.

Step 5: Exclude non-brand terms from the brand campaign. This is the ongoing maintenance work and where automation saves you. Because Shopping campaigns pull from your product feed rather than a keyword list, non-brand queries can bleed into your brand campaign over time. You need a system to catch and exclude them on a regular basis.

Automating the Cleanup: A Brand Negative Keyword Script

Keeping a brand Shopping campaign clean is not a one-time task. As new search terms come through each week, some will inevitably be non-brand queries that matched your products. Left unmanaged, these pollute your brand campaign data and gradually erode the segmentation you’ve built.

The script below runs on a schedule in Google Ads Scripts and automatically identifies any non-brand search terms that have triggered your brand Shopping campaign, then adds them as exact match negatives to a shared negative keyword list attached to the campaign.

How It Works

The script pulls all search terms from your brand campaign over the last 30 days using the Google Ads Query Language. It checks each term against your defined list of brand keywords. Any term that doesn’t contain a brand keyword gets flagged as non-brand and added as an exact match negative.

It also handles list capacity automatically — Google caps shared negative keyword lists at 5,000 terms. When a list approaches that limit, the script creates a new overflow list, applies it to the campaign, and sends you an alert so you’re never caught off guard.

Setup

Configure four variables at the top of the script:

  • ALERT_EMAIL — where you want email alerts sent (new lists created, lists near capacity, script errors)
  • CAMPAIGN_ID — the numeric ID of your brand Shopping campaign (find this in the URL when viewing the campaign in Google Ads)
  • BRANDED_KEYWORDS — an array of your brand terms. Include your brand name and any common misspellings or abbreviations
  • LIST_BASE_NAME — the name prefix for your shared negative keyword lists. The script will create [Name] 1, [Name] 2, etc. as needed

Schedule it weekly under Tools > Bulk Actions > Scripts in Google Ads. That’s frequent enough to catch new non-brand bleed without unnecessary API overhead.

The Script

The full script is available on GitHub:

brand-shopping-negative-keywords.js

The file includes setup instructions in the header. The only things you need to change are the four configuration variables at the top before running.

The Broader Picture

The push toward AI-driven bidding across Google Ads isn’t reversing. Smart Bidding, broad match, AI Max, and Performance Max are all moving in the same direction: more automation, more signal aggregation, and more blurring of the lines between campaign types and query intent.

That’s not inherently bad. But it means the strategic layer the decisions about campaign structure, segmentation, and traffic ownership matters more, not less. The accounts that will perform best in this environment are the ones where advertisers have been deliberate about what each campaign owns, and built the controls to enforce those boundaries.

A brand Shopping campaign is one of those controls. It’s not complex to build. It just requires making the decision that brand traffic is worth owning deliberately and then putting the structure in place to protect it.

The script handles the ongoing maintenance automatically. Your job is to set the strategy correctly at the start and let the system do the rest.