How to Track Bing Ad Keywords in Google Analytics

Update: in 2014, Bing enabled auto-tagging: So this old post is only for reference, to remember how hard things used to be 😀

When Google Analytics tracks traffic coming in, it looks at the referring URL structure to determine if it is a search engine. This referring URL looks something like By comparing this to a list of search engines, GA can differentiate referral traffic from search traffic.

However, when a user clicks on a paid search ad rather than an organic search result, the referring URL is exactly the same. This means that in order for GA to differentiate paid search traffic from organic search traffic, paid search landing page URLs must be custom tagged with extra query strings (explained in more detail here).

Luckily for Google AdWords users, Google Analytics and AdWords have a tight integration that lets you turn on "auto-tagging" by just checking a few boxes.

For Microsoft AdCenter (which includes Yahoo ads), however, there is no such thing as auto-tagging. If you run ads through Bing/Yahoo, you need to actively tag your destination URLs to avoid incorrectly tracking your paid ad traffic as organic traffic.

The Bing Ads help section is very unhelpful on this topic so below you can find step by step instructions to track Bing adCenter data in Google Analytics.


Step By Step Instructions to Track Bing AdCenter Ads in Google Analytics

1) Log into your Bing AdCenter account

2) Click on the Ads tab.

3) Now you'll see a list of your ads. If you want to track an existing ad in GA, click the ad title in the first column. If you want to create a new ad, click the CREATE AN AD link.




4) Either way it will bring up a dialog box that prompts you to fill in the details of your ad, including title, text, and display URL. Fill in all of these, then go to the next step for the most important part - the Destination URL.




5) The Destination URL is where you can put your custom GA tags. I sometimes find that people partially tag this so that we can see it's Bing and cpc, but the actual keyword info doesn't get pulled in. So here's how to do it right!

These are the tags you'll want to use:

utm_campaign=<enter the name of your campaign here>

Put these in as they're written above.  So in this case the full URL in the Destination URL box is{QueryString}.

{QueryString} may be unfamiliar.  Make sure you enter it exactly as written, including the curly brackets.  It will dynamically change to reflect whatever the user searched for.  The official explanation is that it  "Returns the text the customer typed that triggered the display of your ad." (For more info you can check here.)


6) It's always important to test. So do some searches that trigger your ad in Bing and click on it. Here's an example from my own account of what the final result should look like after going through the previous steps.



7) That's it!  Now you can see the actual keywords people leading people to your site from Bing adCenter, just like you can with Google AdWords.  Here's a screenshot from the Paid section of the GA reports - if you've done it right, you will see visits and search terms from both Google and Bing.



NOTE: The above method will show you visits, revenue, and other site stats from Bing paid search ads, but won't show you what you're spending. If you want to also bring your Bing cost data into GA, you can import it via GA's API.

How do you tag for Bing? Do you know any good tools to automate the tagging process?

36 thoughts on “How to Track Bing Ad Keywords in Google Analytics”

  1. Great post. I was wondering if the keyword/query string is the only Bing parameter that is possible to dynamically use in the GA trackingcode? Is there anyway to get the campaign or adgroup automatically inserted?

  2. That would be great but unfortunately I don't think there is. The only dynamic Bing parameters I'm aware of are the ones referenced in the Bing help section (copy/pasted here):

    QueryString: Returns the text string the user searched for
    MatchType: Returns the type of match (exact, phrase, or broad) that triggered the display of your ad
    BidMatchType: Returns the type of match (exact, phrase, broad, or content) that you are explicitly bidding on.
    OrderItemId: Returns the keyword you bid on that was matched by the user's query
    AdId: Returns the ID number of the clicked ad

    (There's also Keyword, which is similar but different from QueryString in that it may not exactly match the keyword that users type in since it changes based on match type. Keyword is more relevant for customizing your ad rather than populating Google Analytics query strings).

    • Great info. btw, if we are to use MatchType and BidMatchType in the code, how would that look like ..? Can you please let me know here what to write in the url for these 2 items.?

      Like we are using, &utm_term={QueryString} to find out the exact text that invokes the ads. So, what and how to write for the MatchType and BidMatchType..?


      • @Sohel, I'm not sure this even works anymore as it seems Bing deleted this info from their help pages and I haven't tested it myself recently.
        But if it still works, you'd just add it into one of the Google "utm" parameters, e.g.

        You only have 5 "utm" parameters so you'd have to replace one of the existing ones or append them together like in the example above.

  3. Great info, thanks! How does this impact Yahoo? If the source is tagged in the URL as "Bing", will traffic that originates from a Yahoo search be lumped in there? Is there a way to see Bing and Yahoo separately?

    Sorry if that's a dumb question 🙂

    • This isn't a dumb question at all... Ever since the Bing/Yahoo merger a couple years ago, all the paid search traffic is lumped together, so you're exactly right - traffic from either Yahoo or Bing will be lumped together with no way to split it out. So it might make more sense to write utm_source=bing-yahoo instead of utm_source=bing to make that more clear. In fact it will even include other sites beyond Yahoo and Bing if you've checked the box to run ads on search partners as well.

      With that said, I did come across a great article here with a clever method for tracking this using filters. However I haven't tried it myself - so if you do, please return to let me know how it goes 🙂

  4. Is there any way to tie bing/yahoo campaign traffic (or any campaign like a newsletter, for that matter) to the event values stored in GA? I have an affiliate-based site and revenue is tracked through averages and click-outs. The click values are tracked using GAs events tool.

    It works perfectly with Adwords. Shows RPC averages so I can calculate if my Adwords campaigns are profitable. But I can't figure out how to do it with Bing/yahoo. Any ideas?

    If not, how do others track Bing/yahoo ad profitability on non-ecommerce sites?

    • Hi Eric, I don't know how you're passing in your RPC averages into an event -- it's not clear to me if you're just passing in the number of affiliate clicks into a GA event and then calculating it yourself (in which case it wouldn't matter if it was AdWords or Bing), or if you have some custom code that's passing in your actual AdWords RPC averages (in which case you'd need to duplicate your logic for Bing). Can you please share the event code you're using or a link to the site (send in email if you prefer). Thanks.

      • Hi Ana, thank you for the quick response.

        I am actually just calculating the event values on a monthly basis and updating them manually. e.g. 100 clicks to affiliate X earns $10. Each click out (event X) is then valued at $0.10. So then GA can assign a "revenue earned" value to my Adwords campaigns.

        To find my RPC for adwords I go to:

        Traffic Sources > Advertising > Adwords > Campaigns and then select "Clicks" under the explorer tab. It gives a nice breakdown including RPC. It also includes ROI since analytics and adwords are linked. I wouldn't expect it to do that for BIng, because it doesn't know what I am paying for each click.

        It is using my event values to determine the revenue earned on traffic from adwords. The problem is there is no "Clicks" option under Traffic Sources > Sources > Campaigns, which is where my bing data is housed.

      • Thanks, this clarifies a lot. The issue is that the RPC metric is calculated as (transaction revenue + goal value)/(ad clicks). Since you’re passing in a goal value for each click, GA is able to calculate an RPC for AdWords.

        For Bing, GA is not able to do this. Not only does it not know what you’re paying for each click, it doesn’t even know how many clicks you’re getting. It only sees how many visits you get from Bing, which should be somewhat close to clicks but is not the same thing. So there is no way for GA to give you an RPC calculation for Bing because it doesn’t have the necessary underlying click data from Bing.

        Therefore I would suggest estimating it yourself by looking at goal value against your Bing visits. Navigate to Traffic Sources > Sources > Search > Paid, click on Source to see search engine (Bing or Google) and then click on Goal Set tab at the top to see the per visit Goal value, which should be close to RPC. This may require a little tweaking if you have multiple goals with values, or if you haven’t placed your event into a goal yet, but the basic idea should work.

      • Wow, that was a big help!

        Obviously this data is much more limited than what you can get from Adwords, but this is much better than what I had before. Thank you.

        Is there any way to track at a campaign or lower level for Bing? Or just the overall campaign?

      • You have 5 "utm" slots you can populate with whatever you want. This post above shows how you can track all the way down to the exact keyword. Try it out and let me know how it goes 🙂

  5. Thank you foir the Bing tracking it's showing up on GA! However, does this mean that anyone clicking on my Paid ads on Bing would not be registered as a paid click because GA was not picking up these clicks...pardon my ignorance about this.

  6. Sorry, but failed to mention I'm talking about my paid clicks from Google's adsense program. If a Bing paid ad got clicked on, would google adsense have not picked it up as a click, because of no tracking being in place, until now?

    • Hi James, glad it's working for you! I don't quite understand your question since Bing ads and Google AdSense are two unrelated systems. Can you please shoot me an email with some screenshots or explain in more detail what you're looking to find out? Then I can answer your question better 🙂

      • I have the Google adsense ads running on all my pages. When someone clicks on an ad they pay me a few cents. If people come to my site because they found me on a Bing ad, and happen to click on one of the Google Adsense ads, will Google count that as a paid click, if they weren't tracking the Bing ads to begin with? Hope Im saying this correctly....sorry about that. Jim

      • Ah, I understand your question now. Yes! Google will still pay you every time someone clicks on your AdSense ad, regardless of how that visitor found your site (and regardless of whether or not GA was tracking the visit source).

      • Thank You much.....strange thing happened after inserting the code on the destination URL"S 2 days ago.
        Made 7cents one day and 9 cents yesterday.....never been anywhere near this low. Hope it's coincindental

  7. Hey Ana, do you find it better to use utm_term={QueryString} instead of utm_term={keyword} ? As you stated, {QueryString} will give you the query someone typed in to trigger your ad. When you use {keyword} it will insert the keyword within your account that triggered the ad.

    Strategically, do you think one is more advantageous to track than the other?

    • This is a really good question without a clear answer. I generally prefer to use utm_term={QueryString} because I like to see what people are actually searching for, not what keywords I bid on, so I can use that more granular data to improve the site/account. However, since bids are placed based on the keyword, not the query string, seeing the keyword is helpful too so you can more easily see what keywords need their bids modified. If you're importing your Bing cost data into Google Analytics, you also may need to have the keyword, not the query string. So, in short, both are valuable. I'm still thinking it through myself but one solution could be to put BOTH in (in the example above there's an empty utm_content slot).

  8. Hi Ana,

    So I've tagged all of my Bing URLs and visits are now pulling into GA fine. The problem I'm having is tracking ecomm transactions and revenue in GA. All of my AdWords data is pulling into the ecommerce tab fine. Is there something else I need to do besides tag all the URLs in Bing?


    • You shouldn't need to do anything else if your site is otherwise properly tracking ecommerce metrics. Are you seeing revenue/transactions/etc for your other marketing sources, e.g. organic search?

  9. Hi Ana,

    I have read your post and its really helpful. I have put this code into my AD and keywords destination URL.{QueryString}

    I don't know why I am getting slash before question mark :{QueryString}

    Please kindly let me know is it okay and will I get analytic data from Bing Ads through GA?


    • I'm not sure where you're seeing the slash, but if it's in GA it will be fine. GA automatically adds a slash to the end of URLs, e.g. will automatically show up as /page/ in the GA content reports. Let me know if you're still having problems and I can take a look.

  10. Aaah, I was looking for this info for so long. Always suspected that it works like that, but never could get myself throug the bing ads help. Like you said, pretty useless.
    Thanks so much for the post!

      • Absolutely, Ana. I have a real question now -- what do you suggest when wanting to track not only campaign, keyword and ad but also AD GROUP? Do we have to sacrifice one of the others in order to get Ad Group showing in GA as well? Thanks in advance!

      • Hey Zhenya, GA gives you 5 slots to play with but in my example above I only used 4 (utm_medium, utm_source, utm_campaign, and utm_term). The remaining one is utm_content, so you can put Ad Group into utm_content if you want. That will need to be done manually for each of your ads as unlike the querystring there's no way to automatically populate this field.

        So to keep going with my example above, with the extra slot in this case it would look like:


        If you need more than 5, you can start appending them together (I like to use a pipe). For example, utm_content=adgroup|broadmatch. The only problem is that once you start doing that, it becomes harder to read within the tool and you'll probably need to export it out of GA to analyze it.

        Feel free to shoot me an email if any of this isn't clear!

  11. Aw, this was an extremely good post. Spending some time and actual effort to generate a top notch article… but what can I say… I put things off a whole lot and don't manage to get nearly anything done.

  12. How do I do this in Bing's PLA's? Do I have to explicitly make a different landing page for each product in param1, or is there a way I can just tag the product url?

Comments are closed.