written by:

One of my biggest gripes about Google AdWords is the insanity that can be their “expanded broad match”, which just so happens to be Google’s default keyword setting. You can read one of my earlier rants about broad match here , but this time we will focus on a great way to actually solve the problem!

So, quick recap: when you enter a keyword into Google – let’s use “purse” as a real life example that we saw with a client. Google’s broad match algorithm will match your keyword to a wide variety of user queries. Some of them are helpful: “buy purse”, “coach purse”, “leather purse” might be okay. But others, “wallet”, “luggage”, “lottery purse” are obviously a waste of money!


The real problem, however, is how to actually determine what queries Google is matching your keyword to; if you log into AdWords you will see that “dvd player” received a click, when in actuality that is the keyword that it matched to, and the actual query may have been far worse in quality.

Google will claim that the algorithm is “learning” and those poor quality matches will not remain over time. Well, with all due respect: Google, I don’t want to fund your research with my AdWords campaign.

So, what do to? Well, you can start by using Google’s “Search Query Report”, but it is incomplete, often hiding low quality queries in the ambiguous “all other queries” result. Alternatively, you can dive into your raw server logs, but this is exhausting. What we recommend is to employ what we call the “Google Analytics Raw Query Hack”. Best of all, it is easy, non-technical and completely free!


So, let’s get to it!

Step 1 – Install Google Analytics and link your Analytics account with your Google AdWords account. This will allow Google Analytics to see the keywords, clicks, adgroups, cost, etc. from your AdWords campaign.


Step 2– Create 2 filters in the “settings” section of Google Analytics. Basically, just copy the filter images that you see below, exactly as they are entered. Quite simply, you are instructing Google Analytics with these filters to remember both the keyword that was triggered as well as the user search query that triggered it.

And the second filter…


That’s pretty much it! From that point forward, when you are looking at keyword data in Google Analytics, you will see both the keyword which generated the click as well as the raw query that triggered it – so cool!


Now that we have this data, we can use it to optimize the performance of our PPC campaign!



8 thoughts on “Evil Google Broad-Match Solved with Raw Query Hack
  1. qts says:

    what do field A and B in the first filter say? it’s a little blurry on my screen but looks like this
    A – (\?|&)(q|p|query)=([^&
    B- (cpc|opc)

  2. nam says:

    The last part of the A in the view appears to be missing the closing brackets at the end… ])

    B should be (cpc|ppc) I think.

    I still can’t see it in Analytics. Am I missing something?


  3. Mike Stone says:


    For the first filter, the filter name is AdWords Query Step 1.

    The filter type is custom, then select advanced. Field A –> Extract A should be Referral. Then (\?|&)(q|p|query)=([^8

    Hopefully this helps clarify!

    if not feel free to shoot me an email. Sales at Wpromote works.

  4. Kevin says:

    “(\?|&)(q|p|query)=([^&” is not a valid regular expression.
    “(\?|&)(q|p|query)=([^8” is not a valid regular expression.

    Neither seem to work. Anybody else have any success? I didn’t think it looked right.


  5. Not my real name says:

    I’m excited. This is exciting stuff. I hope I can get it to work. I found another post referrring to the ‘bogus broad match’ but it was 5 years old. I was inspired to Google ‘adwords ambiguous match type’ after trying to add multiple new keywords on AdWords Editor, selecting the box that tells it to replace all keywords in the group with the new list. It says it’s going to ignore some keywords, reason: ambiguous match. Some keyword phrases could overlap others in broad match; I’ve seen this for ages but been unsure what to do about it.

    Getting serious now.

  6. Thomas says:

    “(\?|&)(q|p|query)=([^8” is not a valid regular expression.

    Looks like the expression is wrong. Any correction available?

  7. It’s supposed to be (\?|&)(q|p|query)=([^8])

  8. What a great blog! I agree with you

Leave a Reply

Your email address will not be published.

Viral Marketing

Viral Video Friday!

6 Quick Tips On Making Your Content More Readable

The Google Stimulus Plan: 2 Improvements That Hurt Or Help?
Thinking about writing for the Wpromote Blog?
Check out our Guest Blogging Guidelines!
Become An Insider! Never Miss Our Industry-Leading Content

Thanks for signing up to be a Wpromote Insider.
You’ll be the first to get the scoop on our latest services, promotions and industry news.