<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;A0cCQX4zfyp7ImA9WxNUEkU.&quot;"><id>tag:blogger.com,1999:blog-10373715</id><updated>2009-11-03T14:57:40.087-08:00</updated><title type="text">AdWords API Blog</title><subtitle type="html">The official source of information about the AdWords API.</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://adwordsapi.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://adwordsapi.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>251</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/blogspot/Xqnd" type="application/atom+xml" /><feedburner:emailServiceId>blogspot/Xqnd</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;A0cCQX8-eyp7ImA9WxNUEkU.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-5048862771018040844</id><published>2009-11-03T14:46:00.000-08:00</published><updated>2009-11-03T14:57:40.153-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-03T14:57:40.153-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009" /><category scheme="http://www.blogger.com/atom/ns#" term="placements" /><category scheme="http://www.blogger.com/atom/ns#" term="sitesuggestionservice" /><category scheme="http://www.blogger.com/atom/ns#" term="keywords" /><category scheme="http://www.blogger.com/atom/ns#" term="keywordtoolservice" /><category scheme="http://www.blogger.com/atom/ns#" term="targetingideaservice" /><category scheme="http://www.blogger.com/atom/ns#" term="discover_v2009" /><title>Discover v2009: Getting ideas with TargetingIdeaService</title><content type="html">&lt;span class="Apple-style-span"  style="font-family:verdana;"&gt;&lt;span class="Apple-style-span" style="font-family: 'Times New Roman'; font-size: medium; "&gt;&lt;div style="margin-top: 6px; margin-right: 6px; margin-bottom: 6px; margin-left: 6px; padding-top: 0px; padding-right: 0px; padding-bottom: 0px; padding-left: 0px; font-family: Verdana; font-size: 10pt; background-color: rgb(255, 255, 255); min-height: 1100px; counter-reset: __goog_page__ 0; line-height: normal; direction: ltr; "&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;As we announced recently, &lt;a id="h33b" href="http://code.google.com/apis/adwords/docs/developer/KeywordToolService.html" title="KeywordToolService" style="color: rgb(85, 26, 139); "&gt;KeywordToolService&lt;/a&gt; and &lt;a id="mwt9" href="http://code.google.com/apis/adwords/docs/developer/SiteSuggestionService.html" target="_blank" title="SiteSuggestionService" style="color: rgb(85, 26, 139); "&gt;SiteSuggestionService&lt;/a&gt; were among the services deprecated to make way for their v2009 successors. In designing their new replacement, we sought to create a unified experience similar to our other v2009 services. The new &lt;a id="ynb4" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.html" title="TargetingIdeaService" style="color: rgb(85, 26, 139); "&gt;TargetingIdeaService&lt;/a&gt; combines queries for both keywords and placements into one service with a common method to retrieve &lt;a id="m01h" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.TargetingIdea.html" title="TargetingIdeas" style="color: rgb(85, 26, 139); "&gt;TargetingIdeas&lt;/a&gt;. In this blog post, we will discuss querying the new service for ideas to aid you in shaping your campaign and how you would go about migrating from v13.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Similar to our other new services, the TargetingIdeaService uses a get method along with a selector to query for both keywords and placements. There are currently two types of requests that can be made - &lt;a id="ck5h" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.RequestType.html#IDEAS" target="_blank" title="ideas" style="color: rgb(85, 26, 139); "&gt;ideas&lt;/a&gt; and &lt;a id="dho2" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.RequestType.html#STATS" target="_blank" title="stats"&gt;stats&lt;/a&gt;. We will discuss querying for &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;ideas&lt;/span&gt; here and save &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;stats&lt;/span&gt; for a future blog post.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;There are 4 main parameters of the selector which are used for querying ideas:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;ul style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;b&gt;requestType &lt;/b&gt;- the request type equal to &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;IDEAS&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;STATS&lt;/span&gt;.&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;b&gt;ideaType &lt;/b&gt;- the type of idea to get equal to &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;KEYWORD&lt;/span&gt; or &lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;PLACEMENT&lt;/span&gt;.&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;b&gt;searchParameters &lt;/b&gt;- contains both the seed parameters as well as filters to apply to the results, which are specific to the ideaType.&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;b&gt;requestedAttributeTypes &lt;/b&gt;- narrows the attributes returned to only those requested, which are specific to the searchParameters and ideaType.&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Using these 4 parameters, you will have a vast degree of customization for your results. Each of these parameters and their limitations is best described in the &lt;a id="e1c:" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.TargetingIdeaSelector.html" target="_blank" title="TargetingIdeaSelector" style="color: rgb(85, 26, 139); "&gt;TargetingIdeaSelector&lt;/a&gt; documentation page. We will now walk through a few examples on how you would replicate v13's functionality, and how you can improve upon it with v2009.&lt;/div&gt;&lt;h4 style="font-size: 10pt; "&gt;Replicating KeywordToolService.getKeywordVariations&lt;/h4&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;In v13, you would typically retrieve a list of keyword variations from the &lt;a id="a_06" href="http://code.google.com/apis/adwords/docs/developer/KeywordToolService.html#getKeywordVariations" target="_blank" title="getKeywordVariations" style="color: rgb(85, 26, 139); "&gt;getKeywordVariations&lt;/a&gt; method. Below is a snippet of code which replicates the basic functionality of this method.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;Keyword keyword = new Keyword();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyword.setText("cheap airline tickets");&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;keyword.setMatchType(KeywordMatchType.BROAD);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LanguageTarget language = new LanguageTarget();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;language.setLanguageCode("en");&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CountryTarget country = new CountryTarget();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;country.setCountryCode("US");&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TargetingIdeaSelector selector = new TargetingIdeaSelector();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setRequestType(RequestType.IDEAS);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setIdeaType(IdeaType.KEYWORD);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setSearchParameters(new SearchParameter[] {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new RelatedToKeywordSearchParameter(null, new Keyword[] {keyword}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new LanguageTargetSearchParameter(null, new LanguageTarget[] {language}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new CountryTargetSearchParameter(null, new CountryTarget[] {country})});&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setPaging(new Paging(0, 6));&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;The results you get back may resemble keywords like:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cheap airline tickets/EXACT&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cheap airline tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cheap airline tickets/PHRASE&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;airline tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;airline tickets/EXACT&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;airline tickets/PHRASE&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;As you can see, since the results were not filtered, they weren't that great. You can improve the results by specifying additional search parameters in the selector:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// Using the same keyword from above, filter by removing the original&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// keyword, by keeping the same match type, and by only choosing&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// "long-tail" keywords.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new ExcludedKeywordSearchParameter(null, new Keyword[] {keyword}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new KeywordMatchTypeSearchParameter(null,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new KeywordMatchType[] {keyword.getMatchType()}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new CompetitionSearchParameter(null,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new CompetitionSearchParameterLevel[] {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CompetitionSearchParameterLevel.LOW}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;The results are now more interesting:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;legion air tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;air tram tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;block air tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sheap air tickets/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cheap airfare tracker/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;cheap airfare forum/BROAD&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;You will notice now that the results are beginning to give you a better idea on how you would shape your campaign. We will now explore placement functionality, formerly found within the SiteSuggestionService.&lt;/div&gt;&lt;h4 style="font-size: 10pt; "&gt;Replicating SiteSuggestionService.getSitesByUrls&lt;/h4&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;In v13, you would typically retrieve a list of similar websites to expand your content network campaign using the &lt;a id="epnh" href="http://code.google.com/apis/adwords/docs/developer/SiteSuggestionService.html#getSitesByUrls" target="_blank" title="getSitesByUrls" style="color: rgb(85, 26, 139); "&gt;getSitesByUrls&lt;/a&gt; method. Below is a snippet of code which replicates the basic functionality of this method.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;String[] urls = new String[] {"made-up-tickets-site.com",&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;"made-up-ticket-seller.com"};&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;LanguageTarget language = new LanguageTarget();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;language.setLanguageCode("en");&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;CountryTarget country = new CountryTarget();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;country.setCountryCode("US");&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;TargetingIdeaSelector selector = new TargetingIdeaSelector();&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setRequestType(RequestType.IDEAS);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setIdeaType(IdeaType.PLACEMENT);&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setSearchParameters(new SearchParameter[] {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new RelatedToUrlSearchParameter(null, urls, true),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new PlacementTypeSearchParameter(null,&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new SiteConstantsPlacementType[] {SiteConstantsPlacementType.SITE}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new LanguageTargetSearchParameter(null, new LanguageTarget[] {language}),&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;new CountryTargetSearchParameter(null, new CountryTarget[] {country})});&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setPaging(new Paging(0, 6));&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;The results you get back may resemble placements like:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;made-up-tickets-site.com&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;made-up-tickets-site.com::Search Results,Top center&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;made-up-ticket-seller.com&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;made-up-ticket-seller.com::Homepage,Bottom right&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;another-made-up-ticket-seller.com&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;yet-another-made-up-ticket-seller.com&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;Though you now have a better idea of which placements you would like to pursue, you may still have difficulty ranking your results. We will finally discuss pulling additional attributes to help better evaluate targeting ideas.&lt;/div&gt;&lt;h4 style="font-size: 10pt; "&gt;Requesting more attributes&lt;/h4&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;The TargetingIdeaService adds new functionality not previously found in v13 to help you better understand your results. For example, you may notice from the results above that "another-made-up-ticket-seller.com" looks interesting, but does not offer much information beyond its URL. To investigate, you can request that a sample URL for each placement be supplied to determine if this is the right website for you. You can do this by adding the SAMPLE_URL attribute to the requestedAttributeTypes parameter:&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;// PLACEMENT is added to associate with SAMPLE_URL.&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;selector.setRequestedAttributeTypes(new AttributeType[] {&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:'Courier New';"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;AttributeType.PLACEMENT, AttributeType.SAMPLE_URL});&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;When the results are returned, you will then be able to visit each sample URL to investigate the location and quality of placement yourself, something that was not previously possible with v13's SiteSuggestionService. All available attributes are listed in the &lt;a id="py1q" href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.AttributeType.html" target="_blank" title="AttributeType" style="color: rgb(85, 26, 139); "&gt;AttributeType&lt;/a&gt; documentation page.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;As we've shown in this blog post, there are many new and exciting uses for the TargetingIdeaService. We've included examples of using this service in all of our &lt;a id="pdmi" href="http://code.google.com/apis/adwords/docs/clients.html" target="_blank" title="client libraries" style="color: rgb(85, 26, 139); "&gt;client libraries&lt;/a&gt; to help get you started, so please jump in and let us know of any feedback you may have on our forums.&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;-- Adam Rogal, AdWords API Team&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-5048862771018040844?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=TZRHVEwuznA:l8OgjXExpWQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=TZRHVEwuznA:l8OgjXExpWQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=TZRHVEwuznA:l8OgjXExpWQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/TZRHVEwuznA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5048862771018040844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5048862771018040844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/TZRHVEwuznA/discover-v2009-getting-ideas-with.html" title="Discover v2009: Getting ideas with TargetingIdeaService" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/11/discover-v2009-getting-ideas-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkUDSX04cCp7ImA9WxNVF0s.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-5081652394406574065</id><published>2009-10-28T09:03:00.000-07:00</published><updated>2009-10-28T15:17:58.338-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T15:17:58.338-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009" /><category scheme="http://www.blogger.com/atom/ns#" term="BulkMutateJobService" /><category scheme="http://www.blogger.com/atom/ns#" term="bulk job" /><category scheme="http://www.blogger.com/atom/ns#" term="asynchronous" /><category scheme="http://www.blogger.com/atom/ns#" term="discover_v2009" /><title>Discover v2009: Asynchronous requests with the BulkMutateJobService</title><content type="html">Delegation of tasks: we use this concept in our everyday lives when we pay someone to make us coffee, ask a colleague to take care of something while we run to the dentist, or tell our kids or younger siblings to handle a chore. What's common in all these situations? Well, you assign someone a task, possibly consisting of several parts, and then you wait for it to be completed. You can focus on other things while the task is being worked on, but you can still periodically ask what the status is (not too often, or they'll think you're annoying). Eventually they'll tell you it's done, and let you know whether it was successful or not. It's a simple process, and we intuitively know what to expect from it.&lt;br /&gt;&lt;br /&gt;Well, you can now delegate complex tasks via the AdWords API! v2009 introduced a unified interface across all services for performing changes: the &lt;span style="font-family:courier new;"&gt;mutate&lt;/span&gt; method. This unification allowed us to develop the &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.html"&gt;BulkMutateJobService&lt;/a&gt;, where you can provide a list of &lt;span style="font-family:courier new;"&gt;mutate&lt;/span&gt; operations to be performed for a number of different services, by scheduling a job which gets executed asynchronously. Much like the &lt;a href="http://code.google.com/apis/adwords/docs/developer/ReportService.html"&gt;v13 ReportService&lt;/a&gt;, you can then poll for the job status, and once you get back the signal that it's been completed, you can ask for the results.&lt;br /&gt;&lt;br /&gt;Let's dive into the details. &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.BulkMutateJob.html"&gt;BulkMutateJobs&lt;/a&gt; consist of the following:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.BulkMutateRequest.html"&gt;BulkMutateRequests&lt;/a&gt;: these are the different parts of the job. The first one you submit should include a count of how many parts your job has; you submit one at a time, and once the last one is submitted, the job automatically starts. This helps build very large jobs, by avoiding the sending of a single, gigantic request.&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.OperationStream.html"&gt;OperationStreams&lt;/a&gt;: a &lt;span style="font-family:courier new;"&gt;BulkMutateRequest&lt;/span&gt; contains one or more &lt;span style="font-family:courier new;"&gt;OperationStreams&lt;/span&gt;, which can be executed in parallel (only in certain conditions, namely if their scopes target different campaigns).&lt;/li&gt;&lt;li&gt;&lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.Operation.html"&gt;Operations&lt;/a&gt;: each &lt;span style="font-family:courier new;"&gt;OperationStream&lt;/span&gt; contains a list of &lt;span style="font-family:courier new;"&gt;Operations&lt;/span&gt;, which are performed sequentially.&lt;/li&gt;&lt;/ul&gt;So to create a job with two parts, you would simply do:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;BulkMutateJob job = new BulkMutateJob();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job.setNumRequestParts(2);&lt;/span&gt;&lt;/blockquote&gt;and fill in the details for the first part:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;BulkMutateRequest part1 = new BulkMutateRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;part1.setPartIndex(0);&lt;/span&gt;&lt;/blockquote&gt;Then create an operation stream, consisting of several operations (they can even use different operators) and use it in the part:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;OperationStream adStream = new OperationStream();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;adStream.setScopingEntityId(scopingEntityId);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;adStream.setOperations(new Operation[] {&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  new AdGroupAdOperation(Operator.ADD, null, adGroupAd1, null),&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;  new AdGroupAdOperation(Operator.ADD, null, adGroupAd2, null)});&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;part1.setOperationStreams(new OperationStream[] {adStream});&lt;/span&gt;&lt;/blockquote&gt;Once we're done with that, we can create the &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.JobOperation.html"&gt;JobOperation&lt;/a&gt; and submit the first part to the service:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;JobOperation jobOperation = new JobOperation();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;jobOperation.setOperand(job);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;jobOperation.setOperator(Operator.ADD);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = bulkMutateJobService.mutate(jobOperation);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;Long jobId = job.getId();&lt;/span&gt;&lt;/blockquote&gt;Submitting the second part is similar, but now we must use the &lt;span style="font-family:courier new;"&gt;SET&lt;/span&gt; operator, since we're adding to an existing job, not creating a new one. Also, we must provide the job ID, so that the system knows which job we're submitting a new part for.&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;BulkMutateRequest part2 = new BulkMutateRequest();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;part2.setPartIndex(1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;// ... OperationStream code goes here ...&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = new BulkMutateJob();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job.setId(jobId); // Here we set the ID to the one we got from&lt;br /&gt;                           // the response to the first part&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job.setRequest(part2);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = bulkMutateJobService.mutate(new JobOperation(Operator.SET, null, job));&lt;/span&gt;&lt;/blockquote&gt;Once all the parts are submitted, the system automatically starts the job. Querying the status is easy, just perform a &lt;span style="font-family:courier new;"&gt;get&lt;/span&gt; with the job ID:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;BulkMutateJobSelector selector = new BulkMutateJobSelector();&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;selector.setJobIds(new long[] {jobId});&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;BulkMutateJob[] jobs = bulkMutateJobService.get(selector);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = jobs[0];&lt;/span&gt;&lt;/blockquote&gt;Don't query too often, though, or you may run trigger a rate-limiting protection! We recommend 30 seconds as a good value to wait between queries. Once the response comes back with a &lt;span style="font-family:courier new;"&gt;COMPLETED&lt;/span&gt; status, we can retrieve the results for both parts, by setting the &lt;span style="font-family:courier new;"&gt;resultPartIndex&lt;/span&gt;:&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;&lt;/span&gt;&lt;blockquote&gt;&lt;span style="font-family:courier new;"&gt;selector.setResultPartIndex(0);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;jobs = bulkMutateJobService.get(selector);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = jobs[0];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;OperationResult[] operationResults1 =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    job.getResult().getOperationStreamResults()[0].getOperationResults();&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;selector.setResultPartIndex(1);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;jobs = bulkMutateJobService.get(selector);&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;job = jobs[0];&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;OperationResult[] operationResults2 =&lt;/span&gt;&lt;br /&gt;&lt;span style="font-family:courier new;"&gt;    job.getResult().getOperationStreamResults()[0].getOperationResults();&lt;/span&gt;&lt;/blockquote&gt;The &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.BulkMutateResult.html"&gt;BulkMutateResult&lt;/a&gt; object in the &lt;span style="font-family:courier new;"&gt;result&lt;/span&gt; field of the response includes a list of &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.OperationStreamResult.html"&gt;OperationStreamResults&lt;/a&gt;, which themselves are an array of &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/BulkMutateJobService.OperationResult.html"&gt;OperationResults&lt;/a&gt;. Going through this hierarchy allows you to see which operations were successful and which ones failed, and act accordingly.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Note&lt;/span&gt;: If you're looking for a more complete example of using the &lt;span style="font-family:courier new;"&gt;BulkMutateJobService&lt;/span&gt;, please check the &lt;span style="font-family:courier new;"&gt;examples/demo&lt;/span&gt; folder in the &lt;a href="http://code.google.com/apis/adwords/docs/clients.html"&gt;client library of your choice&lt;/a&gt;. Also check &lt;a href="http://code.google.com/apis/adwords/v2009/docs/bulkjobs.html"&gt;Performing Bulk Jobs with BulkMutateJobService&lt;/a&gt; in the API documentation.&lt;br /&gt;&lt;br /&gt;With the &lt;span style="font-family:courier new;"&gt;BulkMutateJobService&lt;/span&gt; you can provide as much work as possible to the API in one go and let it do its processing, without worrying about timeouts or broken connections. It won't affect your error handling, either, since the responses detail exactly what happened to all of the operations you performed. It's just an efficient way of getting a lot of work done in a single task. Come in and have a seat, the AdWords API is ready to take your order!&lt;br /&gt;&lt;br /&gt;--Sérgio Gomes, AdWords API Team&lt;br /&gt;&lt;br /&gt;This is the first of a series of posts on the exciting features of AdWords API v2009. In next week's edition of &lt;i&gt;Discover v2009&lt;/i&gt;, we'll tell you all about getting ideas from the new &lt;a href="http://code.google.com/apis/adwords/v2009/docs/reference/TargetingIdeaService.html" target="_blank"&gt;TargetingIdeaService&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-5081652394406574065?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=BZHT-aqaGgI:DIosr26o9J4:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=BZHT-aqaGgI:DIosr26o9J4:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=BZHT-aqaGgI:DIosr26o9J4:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/BZHT-aqaGgI" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5081652394406574065?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5081652394406574065?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/BZHT-aqaGgI/asynchronous-requests-with.html" title="Discover v2009: Asynchronous requests with the BulkMutateJobService" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/10/asynchronous-requests-with.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0YMRHc8fCp7ImA9WxNVF0k.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-2786189899638403316</id><published>2009-10-27T08:07:00.000-07:00</published><updated>2009-10-28T07:46:25.974-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-28T07:46:25.974-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009" /><category scheme="http://www.blogger.com/atom/ns#" term="units" /><category scheme="http://www.blogger.com/atom/ns#" term="holiday" /><title>Happy Holidays! Enjoy more API units</title><content type="html">We know the holiday season is a busy time for you and often means a number of updates to your campaigns. We'd once again like to help out by providing you with more API units.&lt;br /&gt;&lt;br /&gt;Starting now and extending through January 15th of next year, all developers will receive a bonus of 20% more API units at no additional cost.&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Developers can purchase API units at the rate of 1250/$0.25, up from 1000/$0.25&lt;/li&gt;&lt;li&gt;Advertisers who are &lt;a href="http://www.google.com/support/adwordsapi/bin/answer.py?answer=45891" target="_blank"&gt;eligible for free API&lt;/a&gt; units will receive credit at the rate 300/$ of AdWords spend, up from 250/$ of AdWords spend. They will be credited the holiday bonus based on their spend in previous months&lt;/li&gt;&lt;/ul&gt;You can view your API usage &lt;span dir="ltr" id="ccgn"&gt;in your MCC account, by clicking the &lt;span dir="ltr" id="a1mi"&gt;&lt;b&gt;AdWords API Center&lt;/b&gt;&lt;/span&gt; link under the &lt;b&gt;My Account&lt;/b&gt; tab.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;As always, we encourage you to use the API as efficiently as possible. See our blog post on &lt;a href="http://adwordsapi.blogspot.com/2008/09/your-software-on-diet.html" id="s1wf" target="_blank" title="efficient software"&gt;efficiency best practices&lt;/a&gt; to learn about ways to get more out of your API units. For more general API best practices, see our previous post dedicated to &lt;a href="http://adwordsapi.blogspot.com/2008/07/adwords-api-ten-best-practices.html" id="cl63" target="_blank" title="just that topic."&gt;just that topic&lt;/a&gt;. Finally, we encourage developers to take advantage of the efficiencies and cost savings associated with &lt;a href="http://code.google.com/apis/adwords/v2009/docs/" id="u.pu" target="_blank" title="v2009"&gt;API v2009&lt;/a&gt;.&lt;p&gt;&lt;/p&gt;Happy Holidays,&lt;br /&gt;-Shreyas Doshi, Product Manager&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-2786189899638403316?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=zZYg22rr33k:AIwLLOr4yaI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=zZYg22rr33k:AIwLLOr4yaI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=zZYg22rr33k:AIwLLOr4yaI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/zZYg22rr33k" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/2786189899638403316?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/2786189899638403316?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/zZYg22rr33k/happy-holidays-enjoy-more-api-units.html" title="Happy Holidays! Enjoy more API units" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/10/happy-holidays-enjoy-more-api-units.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkYDQHc4cCp7ImA9WxNVEkk.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-7526009737048513131</id><published>2009-10-22T09:56:00.000-07:00</published><updated>2009-10-22T14:49:31.938-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-22T14:49:31.938-07:00</app:edited><title>AdWords API v200909 now available!</title><content type="html">We're happy to announce the newest version of AdWords API v2009 beta! v200909 introduces several new features to the AdWords API; we've highlighted the main points below. For a complete list of the changes in v200909, please see our &lt;a href="http://code.google.com/apis/adwords/v2009/docs/releasenotes.html"&gt;release notes&lt;/a&gt;.&lt;div&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;v200909 Highlights&lt;/span&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt; &lt;span style="font-weight: bold;"&gt;Asynchronous calls&lt;/span&gt; - Asynchronous calls allow you to work with large sets of data faster and more easily. Instead of having to wait for our system to fully complete your request before you can make another one, you’re now able to make another call as soon as the API service confirms that it has received your previous call. No more waiting for the server to complete large requests. V200909 will continue to support Synchronous methods as well.&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Keyword and placement ideas&lt;/span&gt; - With the new TargetingIdeaService, you'll be able to get keyword and placement ideas through the API, leveraging the functionality of the &lt;a href="http://www.google.com/support/sktool/bin/answer.py?hl=en&amp;amp;answer=108044"&gt;search-based keyword tool&lt;/a&gt;. &lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;"&gt;Location Extensions preview&lt;/span&gt; - Limited location extensions functionality is now available as a preview of the full functionality in development.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;span style="font-weight: bold;"&gt;Coming soon&lt;/span&gt;: Over the next few months, we'll continue to introduce new features and additional AdWords functionality.  Upcoming features include ReportService, AccountService and the ability to pre-check for errors.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;v13 Sunset in 2010&lt;/span&gt;:&lt;br /&gt;With the release of equivalent functionality in v200909, the following v13 services will be sunset on April 22, 2010: &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#CampaignService_section"&gt;CampaignService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#AdGroupService_section"&gt;AdGroupService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#CriterionService_section"&gt;CriterionService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#AdService_section"&gt;AdService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#InfoService_section"&gt;InfoService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#KeywordToolService_section"&gt;KeywordToolService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#SiteSuggestionService_section"&gt;SiteSuggestionService&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Given that v2009 introduces new concepts and features, we have extended the sunset period for deprecated services to 6 months. If you haven't already begun migrating your systems to the v2009 API, we strongly encourage you to start right away. The deprecation of remaining v13 services (&lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#AccountService_section"&gt;AccountService&lt;/a&gt;, &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#TrafficEstimatorService_section"&gt;TrafficEstimatorService&lt;/a&gt;, and &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_services.html#ReportService_section"&gt;ReportService&lt;/a&gt;) and accompanying sunset dates will be announced on a future date.&lt;br /&gt;&lt;br /&gt;As with every new version of the AdWords API, we encourage you to review the resources in the &lt;a href="http://code.google.com/apis/adwords/v2009/docs/"&gt;Developer's Guide&lt;/a&gt; to learn more. Additionally, if you aren't using the &lt;a href="http://code.google.com/apis/adwords/docs/clients.html"&gt;AdWords API client libraries&lt;/a&gt; yet, this is a good time to check them out as they are designed to work with both v2009 and v13.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;&lt;br /&gt;Shreyas Doshi, Product Manager and Adam Wooley, Product Marketing Manager&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-7526009737048513131?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=1GqsgjYnCLk:h6OdiO-jJnU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=1GqsgjYnCLk:h6OdiO-jJnU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=1GqsgjYnCLk:h6OdiO-jJnU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/1GqsgjYnCLk" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7526009737048513131?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7526009737048513131?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/1GqsgjYnCLk/were-happy-to-announce-newest-version.html" title="AdWords API v200909 now available!" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/10/were-happy-to-announce-newest-version.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0ACQ3c9fSp7ImA9WxNXGEo.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-3652186044292375681</id><published>2009-10-06T16:27:00.000-07:00</published><updated>2009-10-06T16:29:22.965-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-06T16:29:22.965-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: October 10th, 10am-2pm PDT</title><content type="html">We'll be performing routine system maintenance on Saturday, October 10th from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;-Eric Koleda, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-3652186044292375681?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=5Ov8miJlJGo:81BTTc8Z1-U:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=5Ov8miJlJGo:81BTTc8Z1-U:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=5Ov8miJlJGo:81BTTc8Z1-U:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/5Ov8miJlJGo" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3652186044292375681?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3652186044292375681?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/5Ov8miJlJGo/adwords-downtime-october-10th-10am-2pm.html" title="AdWords Downtime: October 10th, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/10/adwords-downtime-october-10th-10am-2pm.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkIHSH08fyp7ImA9WxNRFEg.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-3829953349223062938</id><published>2009-09-08T15:53:00.000-07:00</published><updated>2009-09-08T15:55:39.377-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-09-08T15:55:39.377-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: September 12th, 10am-2pm PDT</title><content type="html">&lt;span class="Apple-style-span"    style="font-family:Arial, sans-serif;font-size:100%;color:#333333;"&gt;&lt;span class="Apple-style-span" style="font-size: 13px;"&gt;&lt;div&gt;We'll be performing routine system maintenance on Saturday, &lt;span class="Apple-style-span" style="color: rgb(0, 0, 0); font-family: Arial; white-space: pre; "&gt;September&lt;/span&gt; 12th from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Best,&lt;/div&gt;&lt;div&gt;-Eric Koleda, AdWords API Team&lt;/div&gt;&lt;/span&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-3829953349223062938?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=ypphcFcdOyU:w7RaN__TPvQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=ypphcFcdOyU:w7RaN__TPvQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=ypphcFcdOyU:w7RaN__TPvQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/ypphcFcdOyU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3829953349223062938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3829953349223062938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/ypphcFcdOyU/adwords-downtime-september-12th-10am.html" title="AdWords Downtime: September 12th, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/09/adwords-downtime-september-12th-10am.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4FQHY7eip7ImA9WxNSFEw.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-1877365967766261619</id><published>2009-08-26T19:34:00.000-07:00</published><updated>2009-08-27T15:08:31.802-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-27T15:08:31.802-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009 launch" /><category scheme="http://www.blogger.com/atom/ns#" term="v2009" /><category scheme="http://www.blogger.com/atom/ns#" term="beta" /><title>AdWords API v2009 (beta) now available to all advertisers</title><content type="html">Today, we are pleased to announce that AdWords API v2009, which we released to a limited whitelist in &lt;a href="http://adwordsapi.blogspot.com/2009/06/adwords-api-v2009-launch.html"&gt;June&lt;/a&gt;, is now available to all API users! Compared to previous versions of the AdWords API, v2009 offers you new features and greater speed at a lower cost.  &lt;br /&gt;&lt;br /&gt;&lt;div&gt;Because it offers nearly all of the campaign management functionality you're used to from the AdWords API, along with a new &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_ratesheet.html"&gt;rate sheet&lt;/a&gt; representing lower costs, now is a great time to start developing for v2009.  Over the next couple of months, we'll be releasing more functionality like asynchronous calls, partial failure acceptance, keyword optimization tools, and reporting.&lt;br /&gt;&lt;br /&gt;To get started writing code for v2009, check out the developer documentation on the &lt;a href="http://code.google.com/apis/adwords/v2009/"&gt;v2009 homepage&lt;/a&gt;. Additionally, we have a v2009 sandbox available to all users for experimentation and testing. The sandbox doesn't charge for API units, and all you need to access it is your current Google Account username and password. Beforehand, read up on &lt;a href="http://adwordsapi.blogspot.com/2009/03/adwords-api-sandbox-best-practices.html"&gt;sandbox best practices&lt;/a&gt;. &lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Because there are significant changes between v13 and v2009, we've extended the length of time that we'll support both versions. Our plan is to retire v13 in early 2010, and we'll share exact dates within the next couple of months. In anticipation of retiring v13, we strongly encourage you to begin development for v2009 as soon as possible. We're still working on making v2009 better, so this is also a great opportunity to provide us your early &lt;a href="http://groups.google.com/group/adwords-api"&gt;feedback&lt;/a&gt;.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;&lt;br /&gt;John Fitzpatrick, AdWords API Team&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-1877365967766261619?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=YQl5xgG_Gko:WVe0MHpFf2w:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=YQl5xgG_Gko:WVe0MHpFf2w:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=YQl5xgG_Gko:WVe0MHpFf2w:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/YQl5xgG_Gko" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1877365967766261619?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1877365967766261619?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/YQl5xgG_Gko/adwords-api-v2009-beta-now-available-to.html" title="AdWords API v2009 (beta) now available to all advertisers" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/08/adwords-api-v2009-beta-now-available-to.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUAGQnc_cCp7ImA9WxJaE0Q.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-1967319097340566578</id><published>2009-08-04T07:54:00.000-07:00</published><updated>2009-08-04T07:55:23.948-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-04T07:55:23.948-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: August 8, 10am-2pm PDT</title><content type="html">We'll be performing routine system maintenance on Saturday, August 8 from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;br /&gt;&lt;br /&gt;Best,&lt;br /&gt;-Eric Koleda, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-1967319097340566578?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=eIZMUcO2dl0:qT7qHAgaris:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=eIZMUcO2dl0:qT7qHAgaris:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=eIZMUcO2dl0:qT7qHAgaris:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/eIZMUcO2dl0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1967319097340566578?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1967319097340566578?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/eIZMUcO2dl0/adwords-downtime-august-8-10am-2pm-pdt.html" title="AdWords Downtime: August 8, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/08/adwords-downtime-august-8-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0UBQ3oycCp7ImA9WxJVGUQ.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-3881993157254693863</id><published>2009-07-07T13:40:00.001-07:00</published><updated>2009-07-07T13:40:52.498-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-07T13:40:52.498-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: July 11, 10am-2pm PDT</title><content type="html">&lt;div&gt;We'll be performing routine system maintenance on Saturday, July 11 from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheers,&lt;/div&gt;&lt;div&gt;-Jeffrey Posnick, AdWords API Team&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-3881993157254693863?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=oM7dKmiISQY:iBKZH4LnACQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=oM7dKmiISQY:iBKZH4LnACQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=oM7dKmiISQY:iBKZH4LnACQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/oM7dKmiISQY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3881993157254693863?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/3881993157254693863?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/oM7dKmiISQY/adwords-downtime-july-11-10am-2pm-pdt.html" title="AdWords Downtime: July 11, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/07/adwords-downtime-july-11-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkEERX85fip7ImA9WxJVE0s.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-6223410161244194371</id><published>2009-06-30T06:30:00.000-07:00</published><updated>2009-06-30T06:30:04.126-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-30T06:30:04.126-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009 launch" /><title>AdWords API v2009 Launch</title><content type="html">&lt;span class="Apple-style-span"   style="  ;font-family:Verdana;font-size:13px;"&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;p  style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px;  font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"   style="font-family:Verdana;font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-family:Verdana;"&gt;&lt;span class="Apple-style-span"   style="font-family:Verdana;font-size:100%;"&gt;&lt;p  style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;span class="Apple-style-span"  style=" color: rgb(51, 51, 51); font-family:Verdana;"&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-size:100%;"&gt;&lt;p style="margin-top: 0px; padding-top: 0px; "&gt;&lt;span class="Apple-style-span"  style=" ;font-size:13px;"&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;Hello all,&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p  style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;The AdWords API team is &lt;/span&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;pleased to announce the launch of AdWords API v2009 in production!  v2009 offers more speed, scale, and flexibility to developers, at a lower cost.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p face="Verdana" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;Back in April, we released a sandbox for our newest version of the AdWords API so you could begin experimenting.  &lt;/span&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;As mentioned in that &lt;a href="http://adwordsapi.blogspot.com/2009/04/hello-all-as-we-mentioned-in-our.html" id="wtk:" title="blog post"&gt;blog post&lt;/a&gt;&lt;/span&gt;&lt;span style="font-size:85%;"&gt;, we're using a new version naming convention to highlight the significant differences between this version, called AdWords API v2009, and v13.&lt;span style="color: rgb(0, 0, 0); "&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;This launch is a &lt;span style="background-color: rgb(255, 255, 255); "&gt;production &lt;/span&gt;beta, and we're asking developers to sign up for access &lt;a href="http://code.google.com/apis/adwords/v2009/docs/signup.html" id="h644" title="here"&gt;here&lt;/a&gt;.  We'll add you to our whitelist on a rolling basis,and send each of you a confirmation email once you've been added.&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p face="Verdana" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p face="Verdana" style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit;  "&gt;&lt;span style="font-size:85%;"&gt;&lt;span style="color: rgb(0, 0, 0); "&gt;We've made a few policy changes in the API v2009 as well: &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; font-family: Verdana; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;ul  style="margin-top: 0px; margin-bottom: 0px;  font-family:Verdana;"&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Revised  Terms and Conditions&lt;/b&gt; - We've updated our &lt;a href="http://code.google.com/apis/adwords/docs/terms.html" id="ayos" title="Terms and Conditions"&gt;Terms and Conditions&lt;/a&gt; to improve clarity.  This change includes a more comprehensive explanation of our policy regarding the commingling of data, and also redefines the &lt;b&gt;required minimum AdWords functionality&lt;/b&gt; for third party developers.  You can see the list of required and optional features &lt;a href="http://code.google.com/apis/adwords/docs/requirements.html" id="gbk3" title="here"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Lower costs &lt;/b&gt;- v2009 comes with a new &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_ratesheet.html" id="qc7n" title="Rate Sheet"&gt;Rate Sheet&lt;/a&gt; that reflects the improved efficiency of the new system.  We've lowered the cost of v2009 for the average developer by approximately 20% through reducing the unit cost of our most commonly called operations -- add criteria, add add, and set adgroup.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;div  style="margin-top: 0px; margin-bottom: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div  style="margin-top: 0px; margin-bottom: 0px; direction: inherit;  font-family:Verdana;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:85%;"&gt;Getting started with v2009:&lt;/span&gt;&lt;/b&gt;&lt;/div&gt;&lt;div face="Verdana" style="margin-top: 0px; margin-bottom: 0px; direction: inherit;  "&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;span style="font-size:85%;"&gt;Once you'v&lt;span style="background-color: rgb(255, 255, 255); "&gt;e &lt;/span&gt;&lt;a href="http://code.google.com/apis/adwords/v2009/docs/signup.html" id="h9.:" title="applied for access"&gt;applied for access&lt;/a&gt;, you can find comprehensive developer documentation on our &lt;a href="http://code.google.com/apis/adwords/v2009/" id="kued" title="v2009 homepage"&gt;v2009 homepage&lt;/a&gt;.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;span style="font-size:85%;"&gt;While you're waiting for access to the v2009 beta, we encourage you to begin experimenting immediately with the v2009 sandbox. The sandbox doesn't charge for quota, and all you need to access it is your current Google account username and password.  Please remember that the sandbox is a testing and development environment, so changes made there won't affect your live AdWords account. You can read more about sandbox best practices &lt;a href="http://adwordsapi.blogspot.com/2009/03/adwords-api-sandbox-best-practices.html" id="t7g0" title="here"&gt;here&lt;/a&gt;.&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;/p&gt;&lt;span class="Apple-style-span"  style="font-size:13px;"&gt;&lt;b&gt;&lt;span class="Apple-style-span"  style="font-size:85%;"&gt;What to expect next:&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; color: rgb(0, 0, 0); "&gt;&lt;span style="font-size:85%;"&gt;Over the next few months, we'll continue to introduce new features and additional AdWord&lt;span style="background-color: rgb(255, 255, 255); "&gt;s functionality&lt;/span&gt;.  Prior to moving added features to production, they'll be released to the v2009 sandbox so that you can try them out in advance.  As they become available, we'll announce them on &lt;a href="http://adwordsapi.blogspot.com/" id="xoa9" title="our blog"&gt;our blog&lt;/a&gt;.  Some of the most notable are:&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; color: rgb(0, 0, 0); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;ul style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Partial failure acceptance&lt;/b&gt; - We plan to support partial failures, which means that large posts won't be completely rolled back due to a few small errors. This allows you to keep moving forward with development without halting to re-do posts.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Asynchronous calls&lt;/b&gt; - We’ll offer asynchronous calls, which will allow you to work with large sets of data faster and more easily. Instead of having to wait for our system to fully complete your request before you can make another one, you’ll be able to make another call as soon as the API service confirms that it’s received your previous call. No more waiting for large requests to be finished. (Synchronous methods will still be supported as well.)&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;ul style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;Keyword Tools&lt;/b&gt; - With new keyword management tools, you'll be able to directly access new&lt;span style="background-color: rgb(255, 255, 255); "&gt; URL-specific&lt;/span&gt; keyword suggestions from the AdWords Keyword Tool and the &lt;a href="http://www.google.com/sktool" id="lfq9" title="Search-based Keyword Tool" style="color: rgb(85, 26, 139); "&gt;Search-based Keyword Tool&lt;/a&gt; through the API.&lt;/span&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-size:85%;"&gt;&lt;b&gt;MCC &lt;/b&gt;and &lt;b&gt;Reporting&lt;/b&gt; functionality.&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; color: rgb(0, 0, 0); "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; color: rgb(0, 0, 0); "&gt;&lt;span style="font-size:85%;"&gt;While we continue to roll out these offerings, both AdWords API v13 and v2009 will be fully supported. We'll begin the sunset countdown for v13 once we remove the v2009 whitelist and all developer have acquired access. Because we're introducing more changes than usual with this version, we'll extend the normal sunset period for v13, so it won't sunset until early 2010.  By signing up for the v2009 whitelist now, you have the opportunity to get a head start on development.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;span style="font-size:85%;"&gt;Best,&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;span style="font-size:85%;"&gt;Doug Raymond&lt;/span&gt;&lt;/p&gt;&lt;p style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; direction: inherit; "&gt;&lt;span style="font-size:85%;"&gt;Product Manager, AdWords API&lt;/span&gt;&lt;/p&gt;&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/span&gt;&lt;/span&gt;&lt;p&gt;&lt;/p&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-6223410161244194371?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=VH3-KacE7l0:CqYaqNXRXWU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=VH3-KacE7l0:CqYaqNXRXWU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=VH3-KacE7l0:CqYaqNXRXWU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/VH3-KacE7l0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6223410161244194371?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6223410161244194371?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/VH3-KacE7l0/adwords-api-v2009-launch.html" title="AdWords API v2009 Launch" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/06/adwords-api-v2009-launch.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUMHQXk5cCp7ImA9WxJWF0U.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-9035309853338697670</id><published>2009-06-23T11:56:00.000-07:00</published><updated>2009-06-23T11:57:10.728-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-23T11:57:10.728-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="v2009" /><category scheme="http://www.blogger.com/atom/ns#" term="sandbox" /><title>AdWords API v2009 Sandbox Update</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Verdana, sans-serif; font-size: 13px; "&gt;&lt;span style="font-family: arial, sans-serif; "&gt;We are making major updates to the v2009 Sandbox environment starting today and continuing throughout the week. Because of these changes, the v200902 Sandbox environment will be unavailable. We will post more information about what's new in the v2009 Sandbox environment once the work is complete--please stay tuned, and apologies for the downtime.&lt;/span&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span style="font-family: arial, sans-serif; "&gt;The v13 Sandbox environment should remain functional throughout this process.&lt;/span&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;span class="Apple-style-span"  style="font-family:arial, sans-serif;"&gt;&lt;i&gt;-The AdWords API Team&lt;/i&gt;&lt;/span&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-9035309853338697670?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=6oIYmLYMXv4:o_yoL6EJ2Qk:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=6oIYmLYMXv4:o_yoL6EJ2Qk:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=6oIYmLYMXv4:o_yoL6EJ2Qk:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/6oIYmLYMXv4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/9035309853338697670?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/9035309853338697670?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/6oIYmLYMXv4/adwords-api-v2009-sandbox-update.html" title="AdWords API v2009 Sandbox Update" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/06/adwords-api-v2009-sandbox-update.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QGSXk_fCp7ImA9WxJXFkg.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-7930984840022250095</id><published>2009-06-10T09:28:00.001-07:00</published><updated>2009-06-10T09:28:48.744-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-10T09:28:48.744-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: June 13, 10am-2pm PDT</title><content type="html">&lt;div&gt;We'll be performing routine system maintenance on Saturday, June 13 from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Cheers,&lt;/div&gt;&lt;div&gt;-Jeffrey Posnick, AdWords API Team&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-7930984840022250095?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=85-xZ1P4e40:dG3OGwEaHYw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=85-xZ1P4e40:dG3OGwEaHYw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=85-xZ1P4e40:dG3OGwEaHYw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/85-xZ1P4e40" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7930984840022250095?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7930984840022250095?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/85-xZ1P4e40/adwords-downtime-june-13-10am-2pm-pdt.html" title="AdWords Downtime: June 13, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/06/adwords-downtime-june-13-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQGQH44eCp7ImA9WxJUGE4.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-6107839796756344958</id><published>2009-06-10T07:55:00.000-07:00</published><updated>2009-07-17T06:45:21.030-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-17T06:45:21.030-07:00</app:edited><title>Client Library Updates: Part 2</title><content type="html">Last month we announced an update of our client libraries to improve their feature sets and make them more consistent across the various programming languages we support. This coincided with the release of the v2009 Sandbox, and a lot of those changes were meant to ensure that the client libraries were still just as easy to use, but also supported the newly-released v200902 API version.&lt;br /&gt;&lt;br /&gt;We've continued our work on the client libraries and are now making more features available:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Utility methods that make use of the API to retrieve a breakdown of API usage per method or per client.&lt;/li&gt;&lt;li&gt;The ability to retrieve report data in CSV format.&lt;/li&gt;&lt;li&gt;Utility methods for retrieving several types of codes used with the API (cities, metros, timezones, etc.).&lt;/li&gt;&lt;li&gt;Full NDoc/JavaDoc/RDoc/Epydoc/perldoc documentation for the client library code.&lt;/li&gt;&lt;li&gt;Unit tests for the core library functionality and utility modules.&lt;/li&gt;&lt;li&gt;Finer-grained handling of API exceptions.&lt;/li&gt;&lt;li&gt;Improved runtime validation on the client side.&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Some of these features are already present in a few client libraries, but we're now making them all available across Java, .NET, Python, Ruby and, where applicable, our newly released Perl libraries (which only support v200902).&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Update&lt;/b&gt;: the client libraries have now been updated to support the latest API version, v200906, in both the sandbox and production environments. An updated version of the PHP library is coming soon.&lt;br /&gt;&lt;br /&gt;You can find all the client libraries at the usual place: &lt;a title="http://code.google.com/apis/adwords/docs/clients.html" href="http://code.google.com/apis/adwords/docs/clients.html" id="tls9"&gt;http://code.google.com/apis/adwords/docs/clients.html&lt;/a&gt;. Don't miss out on all the cool new stuff!&lt;br /&gt;&lt;br /&gt;&lt;i&gt;-- Sérgio Gomes, AdWords API Team&lt;/i&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-6107839796756344958?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=ywoTHmAreY4:7guO5BdSNlc:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=ywoTHmAreY4:7guO5BdSNlc:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=ywoTHmAreY4:7guO5BdSNlc:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/ywoTHmAreY4" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6107839796756344958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6107839796756344958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/ywoTHmAreY4/client-library-updates-part-2.html" title="Client Library Updates: Part 2" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/06/client-library-updates-part-2.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0cNQHc4eCp7ImA9WxJRGU4.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-1282604891587102319</id><published>2009-05-21T13:51:00.000-07:00</published><updated>2009-05-21T13:51:31.930-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-21T13:51:31.930-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="twitter" /><title>We Tweet</title><content type="html">For those who consider &lt;a href="http://adwordsapi.blogspot.com/" id="f.bu" title="blogs"&gt;blogs&lt;/a&gt; or &lt;a href="http://groups.google.com/group/adwords-api/" id="xdab" title="discussion groups"&gt;discussion groups&lt;/a&gt; passé, we wanted to let you know that you can now stay up to date on the latest AdWords API announcements by following &lt;a href="http://twitter.com/adwordsapi" id="j6mm" title="@adwordsapi"&gt;@adwordsapi&lt;/a&gt; on Twitter.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-1282604891587102319?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=54-2hEwM1QY:1FleVIPtQkE:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=54-2hEwM1QY:1FleVIPtQkE:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=54-2hEwM1QY:1FleVIPtQkE:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/54-2hEwM1QY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1282604891587102319?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/1282604891587102319?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/54-2hEwM1QY/we-tweet.html" title="We Tweet" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/05/we-tweet.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkAMSXg-cCp7ImA9WxJRF0o.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-8288182810990164105</id><published>2009-05-19T15:06:00.000-07:00</published><updated>2009-05-19T15:06:28.658-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-19T15:06:28.658-07:00</app:edited><title>AdWords API on App Engine (Python)</title><content type="html">Most of you have probably heard about &lt;a href="http://code.google.com/appengine/"&gt;Google App Engine&lt;/a&gt;, which lets you write web applications that run on Google's infrastructure.  But did you know that the code which you develop using the AdWords API can be easily hosted on App Engine, thus making it many times easier to build, maintain, and scale your application as your traffic grows?&lt;br /&gt;
&lt;br /&gt;
Today, we'd like to release a &lt;a href="http://google-api-adwords-python-lib.googlecode.com/files/awapi_python_appengine_demo_1.0.0.tar.gz"&gt;demo application&lt;/a&gt; that can be hosted on App Engine and is uses the AdWords API to communicate with the Sandbox environment (it is just as easy to access production AdWords accounts).  In this demo, we access a given Sandbox account using the AdWords API and illustrate the following operations and features:&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;Retrieve existing campaigns.&lt;/li&gt;
&lt;li&gt;Retrieve stats for each campaign.&lt;/li&gt;
&lt;li&gt;Add new campaigns.&lt;/li&gt;
&lt;li&gt;Update a campaign's budget.&lt;/li&gt;
&lt;li&gt;Retrieve existing ad groups.&lt;/li&gt;
&lt;li&gt;Add new ad groups.&lt;/li&gt;
&lt;li&gt;Keep track of API usage for each user in a datastore. &lt;br /&gt;
&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
We hope this demo will start you off in creating innovative and cool applications that take advantage of the AdWords API's ease of use and Google's infrastructure.&lt;br /&gt;
&lt;br /&gt;
-- Stan Grinberg, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-8288182810990164105?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=hFWyIhEcfkQ:unUy6OshZTo:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=hFWyIhEcfkQ:unUy6OshZTo:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=hFWyIhEcfkQ:unUy6OshZTo:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/hFWyIhEcfkQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/8288182810990164105?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/8288182810990164105?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/hFWyIhEcfkQ/adwords-api-on-app-engine-python.html" title="AdWords API on App Engine (Python)" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/05/adwords-api-on-app-engine-python.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkUGQng5fyp7ImA9WxJRE04.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-5135951160396903726</id><published>2009-05-14T12:43:00.000-07:00</published><updated>2009-05-14T12:43:43.627-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-14T12:43:43.627-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="client libraries" /><title>Client Library Updates: Part 1</title><content type="html">&lt;span class="Apple-style-span"   style="  ;font-family:Verdana;font-size:13px;"&gt;&lt;div id="r.z5" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;There are a lot &lt;span id="u6_r" style="background-color: rgb(255, 255, 255); "&gt;of&lt;/span&gt; changes going on with the AdWords API lately and &lt;span id="h2q-" style="background-color: rgb(255, 255, 255); "&gt;we'd like to take a minute to talk about what else we have in store&lt;/span&gt;. In recent news, we released the &lt;span id="qa.c" style="font-weight: normal; "&gt;API v2009 Sandbox and we appreciate all the great feedback we are getting (keep it coming!). With the release the v200902 API, we also have begun updating the client libraries for each of the supported languages. The client libraries have always made it simple for both first time developers and experts to use our API and we are now adding even more features to improve your API experience.&lt;/span&gt;&lt;/div&gt;&lt;div id="ldp1" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="g8_8" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;Above all, we want to allow you to experiment with the API v2009 Sandbox while still being able to make production calls to the v13 version. To that extent, each client library now has cross-version compatibility so that v200902 code and v13 code can be run together. It still stands, though, that v200902 can only operate within the Sandbox. Included in each client library are some examples showing you how to use the v13 code along with v200902 to supplement your learning.&lt;/div&gt;&lt;div id="u-ah" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="r.z5" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;In addition to our existing list of supported client libraries, a new Perl client library, found here &lt;a id="a.80" href="http://code.google.com/p/google-api-adwords-perl/" title="http://code.google.com/p/google-api-adwords-perl/"&gt;http://code.google.com/p/google-api-adwords-perl/&lt;/a&gt;, has been developed specifically for use with v200902. This library does not include support for the v13 services, but it does offer most of the functionality that our other client libraries offer.&lt;/div&gt;&lt;div id="ky68" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="oe3x" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;span id="senh" tyle="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;The support for v200902 in the APIlity (PHP) client library is in the works as well.&lt;/span&gt;&lt;/div&gt;&lt;div id="cmnh" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="oe35" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;Here's some other features that you'll find in the new refresh of each client library:&lt;/div&gt;&lt;div id="nfxi" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="g91:" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;ul style="margin-top: 0px; margin-bottom: 0px; "&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;Improved logging support.&lt;br /&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;Reports can now be downloaded through the client library.&lt;br /&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;Full support for UTF-8 encoding.&lt;br /&gt;&lt;/li&gt;&lt;li style="margin-top: 0px; margin-bottom: 0px; "&gt;Thread-safe architecture.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;/div&gt;&lt;div id="lfqz" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="i9e-" style="text-align: left; margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;div id="kk:e" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;As always, you can find a list of supported client libraries here: &lt;a href="http://code.google.com/apis/adwords/docs/clients.html" id="n0ps"&gt;http://code.google.com/apis/adwords/docs/clients.html&lt;/a&gt;&lt;/div&gt;&lt;div id="f39u" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="he58" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;We'll be releasing more features as the client library update continues, so stay tuned!&lt;br /&gt;&lt;/div&gt;&lt;div id="p5-l" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;br /&gt;&lt;/div&gt;&lt;div id="y2fx" style="margin-top: 0px; margin-bottom: 0px; direction: inherit; "&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;-- Adam Rogal, AdWords API Team&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;/div&gt;&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-5135951160396903726?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=Yt7ruxvQF40:O30kc6zTC9k:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=Yt7ruxvQF40:O30kc6zTC9k:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=Yt7ruxvQF40:O30kc6zTC9k:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/Yt7ruxvQF40" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5135951160396903726?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5135951160396903726?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/Yt7ruxvQF40/client-library-updates-part-1.html" title="Client Library Updates: Part 1" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/05/client-library-updates-part-1.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEMBQ346fip7ImA9WxJREk4.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-2789432536426733330</id><published>2009-05-13T10:40:00.001-07:00</published><updated>2009-05-13T10:40:52.016-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-13T10:40:52.016-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: May 16, 10am-2pm PDT</title><content type="html">We'll be performing routine system maintenance on Saturday, May 16 from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;-Jeffrey Posnick, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-2789432536426733330?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=Hq9BoCVd0Bs:iY2TSiFTmco:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=Hq9BoCVd0Bs:iY2TSiFTmco:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=Hq9BoCVd0Bs:iY2TSiFTmco:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/Hq9BoCVd0Bs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/2789432536426733330?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/2789432536426733330?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/Hq9BoCVd0Bs/adwords-downtime-may-16-10am-2pm-pdt.html" title="AdWords Downtime: May 16, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/05/adwords-downtime-may-16-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEcFSXY8fyp7ImA9WxJSF08.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-5277486649552087980</id><published>2009-05-07T12:53:00.000-07:00</published><updated>2009-05-07T12:53:38.877-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-07T12:53:38.877-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="budget optimizer" /><category scheme="http://www.blogger.com/atom/ns#" term="changes" /><title>Upcoming Budget Optimizer Changes</title><content type="html">We want to take a minute to notify all AdWords API developers about an upcoming change in the way bids are handled in campaigns that make use of the &lt;a href="http://adwords.google.com/support/bin/answer.py?answer=16271" id="rffu" title="Budget Optimizer"&gt;Budget Optimizer&lt;/a&gt;. If none of your campaigns use the Budget Optimizer, or if you never plan on turning the Budget Optimizer off, then feel free to stop reading (and get back to trying out the new &lt;a href="http://adwordsapi.blogspot.com/2009/04/hello-all-as-we-mentioned-in-our.html" id="dh0u" title="v2009 Sandbox"&gt;v2009 Sandbox&lt;/a&gt;!).&lt;br /&gt;&lt;br /&gt;Each &lt;span style="font-family:Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/Campaign.html" id="g3gp" title="Campaign"&gt;Campaign&lt;/a&gt;&lt;/span&gt; object has a &lt;span style="font-family:Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/BudgetOptimizerSettings.html" id="pwkp" title="budgetOptimizerSettings"&gt;budgetOptimizerSettings&lt;/a&gt;&lt;/span&gt; property, which in turn has a &lt;span style="font-family:Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/BudgetOptimizerSettings.html#takeOnOptimizedBids" id="hcux" title="takeOnOptimizedBids"&gt;takeOnOptimizedBids&lt;/a&gt;&lt;/span&gt; setting. Currently, if &lt;span style="font-family:Courier New;"&gt;takeOnOptimizedBids&lt;/span&gt; is set to &lt;span style="font-family:Courier New;"&gt;false&lt;/span&gt; and you turn off the Budget Optimizer in a campaign, the original bids that were manually set for the ad groups and criteria contained in the campaign will be restored. In other words, the AdWords API will save your old bids from before the Budget Optimizer was turned on, and restore them when it is turned off. If &lt;span style="font-family:Courier New;"&gt;takeOnOptimizedBids &lt;/span&gt;is set to &lt;span style="font-family:Courier New;"&gt;true&lt;/span&gt;, however, the old bids will not be restored when the Budget Optimizer is turned off. Instead, the last bids that were automatically set by the Budget Optimizer will persist for the ad groups and criteria in your campaign.&lt;br /&gt;&lt;br /&gt;You can, if you wish, use the AdWords API to manually update the bids for ad groups and criteria once the Budget Optimizer is turned off in either scenario.&lt;br /&gt;&lt;br /&gt;The upcoming change will effectively treat &lt;span style="font-family:Courier New;"&gt;takeOnOptimizedBids &lt;/span&gt;as if it were set to &lt;span style="font-family:Courier New;"&gt;true&lt;/span&gt; (regardless of what it is actually set to) for all campaigns using the Budget Optimizer. Once the Budget Optimizer is turned off, all bids will be set to the last bid used by the Budget Optimizer. This change will match the behavior currently in place when the Budget Optimizer is turned off via the AdWords web interface.&lt;br /&gt;&lt;br /&gt;We're planning on making this change to AdWords API behavior on May 19. It is not likely that you will have to make any substantial changes to your code in advance of this change, but please take the new behavior into account when you write code that turns the Budget Optimizer off.&lt;br /&gt;&lt;i&gt;&lt;br /&gt;-Jeffrey Posnick, AdWords API Team&lt;/i&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-5277486649552087980?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=0ntE3Y14Nxc:2RqiXzoBIDA:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=0ntE3Y14Nxc:2RqiXzoBIDA:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=0ntE3Y14Nxc:2RqiXzoBIDA:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/0ntE3Y14Nxc" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5277486649552087980?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/5277486649552087980?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/0ntE3Y14Nxc/upcoming-budget-optimizer-changes.html" title="Upcoming Budget Optimizer Changes" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/05/upcoming-budget-optimizer-changes.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0AHSHYyeCp7ImA9WxJTGUs.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-7562778958003868160</id><published>2009-04-28T16:25:00.000-07:00</published><updated>2009-04-28T16:35:39.890-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-28T16:35:39.890-07:00</app:edited><title>AdWords API v2009 Sandbox Launch</title><content type="html">&lt;span style="color: rgb(0, 0, 0);font-family:georgia;font-size:100%;"  &gt;Hello all,&lt;br /&gt;&lt;br /&gt;As we mentioned in our December blog post "A preview of 2009 API changes," we've been hard at work on re-building the AdWords API to offer our developers improved speed, functionality, and flexibility.&lt;br /&gt;&lt;/span&gt;&lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Today, we're announcing the launch of the API 2009 sandbox, so you can begin experimenting with the latest version of the AdWords API.  We're using a new version naming convention to highlight the significant differences between this version, called AdWords API v2009, and v13.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;There are several key differences in how API v2009 works:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;More operations in a single call: We're changing the way services&lt;br /&gt;are constructed so that you'll be able to accomplish more work per&lt;br /&gt;call. Specifically, operations will accept a variety of modifiers&lt;br /&gt;acting on elements across ad groups. For example, you'll be able to&lt;br /&gt;add, update, and delete keywords across ad groups, all within a single&lt;br /&gt;call.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;Lower costs: We will reduce API units consumed for the new&lt;br /&gt;asynchronous methods, and are exploring other ways to improve the&lt;br /&gt;value you get from the AdWords API by lowering costs and increasing&lt;br /&gt;efficiency of quota use.  The v2009 sandbox is free to use, and once&lt;br /&gt;these services are in production, they will be tied to a new rate&lt;br /&gt;sheet that lowers the average cost of an operation. The new rate sheet&lt;br /&gt;will apply only to API v2009, and will be launched when v2009 goes&lt;br /&gt;into production.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Most AdWords functionality is available in the core services we&lt;br /&gt;exposed today:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;AdGroupAdService &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;AdGroupCriterionService &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; AdGroupService &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt; CampaignCriterionService &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;CampaignService &lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-size:100%;"&gt;CampaignTargetService &lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Forthcoming features include:&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;ul  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Asynchronous calls:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; We'll offer asynchronous calls, which will allow&lt;br /&gt;you to work with large sets of data faster and more easily. Instead of&lt;br /&gt;having to wait for our system to fully complete your request before&lt;br /&gt;you can make another one, you'll be able to make another call as soon&lt;br /&gt;as the API service confirms that it's received your previous call. No&lt;br /&gt;more waiting for large requests to be finished. (Synchronous methods&lt;br /&gt;will still be supported as well).&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;li&gt;&lt;span style="font-weight: bold;font-size:100%;" &gt;Partial failure acceptance:&lt;/span&gt;&lt;span style="font-size:100%;"&gt; We plan to support partial failure, so&lt;br /&gt;large posts aren't rolled back due to a few errors. This allows you to&lt;br /&gt;keep moving forward with development and not have to re-do the same&lt;br /&gt;posts.&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;&lt;/ul&gt;  &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;We'll release the remaining features needed for full AdWords parity in the coming months. Forthcoming features include: Reporting, Keyword tools, MCC functionality, and change history.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;How to access the API v2009 Sandbox:&lt;/span&gt;&lt;br /&gt;The API v2009 Sandbox does not charge for quota, and will accept your current Google account login.  In addition, the backend database for the v2009 Sandbox is shared with the v13 Sandbox environment. This means that any existing campaigns, ad groups, ads, and keywords that&lt;br /&gt;you created under your login email using the v13 Sandbox will exist in the v2009 Sandbox.  Please remember that the sandbox is a testing and development environment. The changes made here will not impact your live AdWords account.  You can read more about Sandbox best practices here: &lt;a target="_blank" rel="nofollow" href="http://adwordsapi.blogspot.com/2009/03/adwords-api-sandbox-best-practices.html"&gt;http://adwordsapi.blogspot.com/2009/03/adwords-api-sandbox-best-pract...&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="font-weight: bold;"&gt;What comes next:&lt;/span&gt;&lt;br /&gt;We plan to launch the core functionality of API v2009 on our production servers in about 2 months, with the remaining functionality needed for AdWords parity released over the following 3 months.  During that time, both AdWords API v13 and v2009 will be fully supported.  We'll begin the sunset period for v13 once we've reached feature parity in API v2009.  Since we're introducing more changes than usual, we'll extend the normal 4-month sunset period for v13, so it won't sunset until sometime in early 2010.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Documentation for the API v2009 sandbox is available on our codesite at: &lt;a target="_blank" rel="nofollow" href="http://code.google.com/apis/adwords/v2009/docs/"&gt;http://code.google.com/apis/adwords/v2009/docs/&lt;/a&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;We hope you'll kick the tires of our new API and give us plenty of feedback. We've established a special email address for you to share your thoughts: adwordsapi-relaunch@google.com&lt;/span&gt;&lt;span style="font-size:100%;"&gt;&lt;span style="text-decoration: underline;"&gt;&lt;/span&gt;.  We look forward to your comments, suggestions and questions.&lt;br /&gt;&lt;/span&gt;&lt;/p&gt; &lt;p  style="color: rgb(0, 0, 0);font-family:georgia;"&gt;&lt;span style="font-size:100%;"&gt;Thank you,&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;&lt;span style="color: rgb(0, 0, 0);font-family:georgia;font-size:100%;"  &gt; Doug Raymond&lt;br /&gt;Product Manager, AdWords API &lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-7562778958003868160?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=r61DCu7FJSU:bfKQVmwGubI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=r61DCu7FJSU:bfKQVmwGubI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=r61DCu7FJSU:bfKQVmwGubI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/r61DCu7FJSU" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7562778958003868160?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7562778958003868160?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/r61DCu7FJSU/hello-all-as-we-mentioned-in-our.html" title="AdWords API v2009 Sandbox Launch" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/04/hello-all-as-we-mentioned-in-our.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkENQHc5fip7ImA9WxVaGE0.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-6486285033757618976</id><published>2009-04-15T08:12:00.000-07:00</published><updated>2009-04-15T08:18:11.926-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-15T08:18:11.926-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: April 18, 10am-2pm PDT</title><content type="html">The system maintenance we had intended for last Saturday, April 11, did not take place. As a result, we have rescheduled it for this Saturday, April 18, from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;-Jeffrey Posnick, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-6486285033757618976?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=asGCYlnUvMY:wCcLSR9nHDQ:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=asGCYlnUvMY:wCcLSR9nHDQ:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=asGCYlnUvMY:wCcLSR9nHDQ:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/asGCYlnUvMY" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6486285033757618976?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6486285033757618976?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/asGCYlnUvMY/adwords-downtime-april-18-10am-2pm-pdt.html" title="AdWords Downtime: April 18, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/04/adwords-downtime-april-18-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMARno7fip7ImA9WxVaF0k.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-566429441269394213</id><published>2009-04-13T15:02:00.000-07:00</published><updated>2009-04-14T15:34:07.406-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-14T15:34:07.406-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="spanish" /><category scheme="http://www.blogger.com/atom/ns#" term="japanese" /><category scheme="http://www.blogger.com/atom/ns#" term="portuguese" /><category scheme="http://www.blogger.com/atom/ns#" term="documentation" /><category scheme="http://www.blogger.com/atom/ns#" term="chinese" /><category scheme="http://www.blogger.com/atom/ns#" term="korean" /><category scheme="http://www.blogger.com/atom/ns#" term="translation" /><title>Developer Docs: v13 in Chinese, Japanese, and now Korean (updated)</title><content type="html">When we &lt;a href="http://adwordsapi.blogspot.com/2009/02/adwords-api-developer-docs-now-in.html"&gt;first announced&lt;/a&gt; non-English translations of our AdWords API Developer's Guide, we provided Japanese and Chinese versions of the v12 documentation. Our team has been hard at work since then, and we're happy to announce that the existing &lt;a href="http://code.google.com/intl/zh-CN/apis/adwords/docs/developer/"&gt;Chinese&lt;/a&gt; and &lt;a href="http://code.google.com/intl/ja/apis/adwords/docs/developer/"&gt;Japanese&lt;/a&gt; translations have been updated to cover v13 of the AdWords API. In addition, a &lt;a href="http://code.google.com/intl/ko/apis/adwords/docs/developer/"&gt;Korean&lt;/a&gt; translation of the v13 documentation is now available.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Update&lt;/span&gt;: Developers who speak &lt;a href="http://code.google.com/intl/es/apis/adwords/docs/developer/"&gt;Spanish&lt;/a&gt; and &lt;a href="http://code.google.com/intl/pt-BR/apis/adwords/docs/developer/"&gt;Portuguese&lt;/a&gt; will be happy to know that we've released the v13 documentation in their languages as well.&lt;br /&gt;&lt;br /&gt;We'll continue to release translations for additional languages in the future, so stay tuned for more updates!&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style: italic;"&gt;--The AdWords API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-566429441269394213?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=LrjCu2dXOqs:1VV10XtpKKg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=LrjCu2dXOqs:1VV10XtpKKg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=LrjCu2dXOqs:1VV10XtpKKg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/LrjCu2dXOqs" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/566429441269394213?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/566429441269394213?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/LrjCu2dXOqs/developer-docs-v13-in-chinese-japanese.html" title="Developer Docs: v13 in Chinese, Japanese, and now Korean (updated)" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/04/developer-docs-v13-in-chinese-japanese.html</feedburner:origLink></entry><entry gd:etag="W/&quot;C0QERnk7fCp7ImA9WxVaEkw.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-6771134406288579922</id><published>2009-04-08T10:19:00.000-07:00</published><updated>2009-04-08T10:21:47.704-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-08T10:21:47.704-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="downtime" /><title>AdWords Downtime: April 11, 10am-2pm PDT</title><content type="html">&lt;span class="Apple-style-span" style="font-family: Arial; color: rgb(51, 51, 51); font-size: 13px; "&gt;We'll be performing routine system maintenance on Saturday, April 11 from approximately 10:00am to 2:00pm PDT. You won't be able to access AdWords or the API during this time frame, but your ads will continue to run as normal.&lt;br /&gt;&lt;br /&gt;Cheers,&lt;br /&gt;-Jeffrey Posnick, AdWords API Team&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-6771134406288579922?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=difmUIdqptQ:jPqNRDi6JwI:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=difmUIdqptQ:jPqNRDi6JwI:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=difmUIdqptQ:jPqNRDi6JwI:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/difmUIdqptQ" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6771134406288579922?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/6771134406288579922?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/difmUIdqptQ/adwords-downtime-april-11-10am-2pm-pdt.html" title="AdWords Downtime: April 11, 10am-2pm PDT" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/04/adwords-downtime-april-11-10am-2pm-pdt.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEUDQnYzfip7ImA9WxVbFkU.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-4643973480596557844</id><published>2009-04-02T07:49:00.000-07:00</published><updated>2009-04-02T08:31:13.886-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-02T08:31:13.886-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="ad scheduling" /><title>Ad Scheduling: it's all about timing</title><content type="html">&lt;span style="font-size:100%;"&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;"There's a time for everything." This is something I've been hearing since I was a kid, but today I'm not here to tell you that you shouldn't have your dessert before your meal or play with noisy toys after dark; rather, I'd like to talk to you about whether it's really a good idea to advertise your lunch menu or your toy shop discount when your customers are sleeping.&lt;br /&gt;&lt;br /&gt;Advertising, as is the case with most things in life, is all about timing. A lot of businesses have special advertising needs during certain times of day, and they'd like their customers to know about them at the right time.&lt;br /&gt;&lt;br /&gt;Let's take the example of a newly opened downtown coffee shop that's looking to let people know about its great selection by advertising with AdWords. What happens when their ad runs at night? Well, people will learn about the menu, but at the wrong time. Since it's now after hours, and the place is closed, they might forget about it overnight and not visit the coffee shop the next day; all of this simply because that was the wrong time to be seeing that ad. Another example would be a toy shop running a special "lunchtime craze" deal to try to increase sales during that time of day; advertising after the event is not very useful and may even be counter-productive, as it's disappointing for people to realize that the promotion hours are over.&lt;br /&gt;&lt;br /&gt;Fortunately, there are mechanisms built into AdWords and the AdWords API to allow you to decide when to run your ads, automatically, without requiring you to manually enable and disable them; this is called "Ad Scheduling".&lt;br /&gt;&lt;br /&gt;Scheduling works at the campaign level, so it applies to all active ad groups and ads inside it. The &lt;span style="font-family:Courier New;"&gt;AdSchedule&lt;/span&gt; object contains two items:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;  an "intervals" list, containing any number of &lt;span style="font-family:Courier New;"&gt;SchedulingInterval&lt;/span&gt; objects&lt;br /&gt;&lt;/li&gt;&lt;li&gt;  a "status" field, that enables or disables the &lt;span style="font-family:Courier New;"&gt;AdSchedule&lt;/span&gt;&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Each &lt;span style="font-family:Courier New;"&gt;SchedulingInterval&lt;/span&gt; not only allows you to define a number of properties, such as day and starting/ending times, but also, notably, a multiplier. This multiplier is a very useful tool, as it provides a way to enable and disable displaying of the ad (by setting to a non-zero and zero value, respectively), as well as a way to increase or decrease your bids at certain times.&lt;br /&gt;&lt;br /&gt;In our coffee shop example, to make sure the ads run mostly during opening hours, we would set displaying of ads to start a bit before opening and to end a little bit before closing:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;blockquote&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;SchedulingInterval[] days = new SchedulingInterval[6];&lt;br /&gt;&lt;br /&gt;days[0].setDay(DayOfWeek.Monday);&lt;br /&gt;days[1].setDay(DayOfWeek.Tuesday);&lt;br /&gt;days[2].setDay(DayOfWeek.Wednesday);&lt;br /&gt;days[3].setDay(DayOfWeek.Thursday);&lt;br /&gt;days[4].setDay(DayOfWeek.Friday);&lt;br /&gt;days[5].setDay(DayOfWeek.Saturday);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Set weekday and Saturday schedule&lt;/span&gt;&lt;br /&gt;for (int i = 0; i &lt; 6; i++) {&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Start at 8:45 am...&lt;/span&gt;&lt;br /&gt;days[i].setStartHour(8);&lt;br /&gt;days[i].setStartMinute(45);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// ... and end at 7:45 pm&lt;/span&gt;&lt;br /&gt;days[i].setEndHour(19);&lt;br /&gt;days[i].setEndMinute(45);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Run at normal bid rates&lt;/span&gt;&lt;br /&gt;days[i].setMultiplier(1.0);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Closed on Sunday, so we're omitting it from the array&lt;/span&gt;&lt;/pre&gt;&lt;/blockquote&gt;&lt;/pre&gt;&lt;br /&gt;As for our toy shop, in order to give customers fair warning about the special lunchtime deal, advertising would start early in the morning and increase significantly during the promotion hours:&lt;br /&gt;&lt;br /&gt;&lt;pre style="background: rgb(255, 255, 255) none repeat scroll 0% 0%; color: rgb(0, 0, 0); -moz-background-clip: border; -moz-background-origin: padding; -moz-background-inline-policy: continuous;"&gt;&lt;blockquote&gt;SchedulingInterval early = new SchedulingInterval();&lt;br /&gt;SchedulingInterval peak = new SchedulingInterval();&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Sample schedule for Monday&lt;/span&gt;&lt;br /&gt;early.setDay(DayOfWeek.Monday);&lt;br /&gt;peak.setDay(DayOfWeek.Monday);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Start at 8:00 am...&lt;/span&gt;&lt;br /&gt;early.setStartHour(8);&lt;br /&gt;early.setStartMinute(0);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// ... and run until promotion starts&lt;/span&gt;&lt;br /&gt;early.setEndHour(12);&lt;br /&gt;early.setEndMinute(0);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Run at normal bid rates&lt;/span&gt;&lt;br /&gt;early.setMultiplier(1.0);&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// Start higher bidding at noon...&lt;/span&gt;&lt;br /&gt;peak.setStartHour(12);&lt;br /&gt;peak.setStartMinute(0);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// ... and run until promotion ends...&lt;/span&gt;&lt;br /&gt;peak.setEndHour(14);&lt;br /&gt;peak.setEndMinute(0);&lt;br /&gt;&lt;span style="color: rgb(63, 127, 89);"&gt;// ... at double the bid!&lt;/span&gt;&lt;br /&gt;peak.setMultiplier(2.0);&lt;/blockquote&gt;&lt;br /&gt;&lt;/pre&gt;(And &lt;a title="Here's how you can add a campaign with scheduling" href="http://code.google.com/apis/adwords/docs/developer/CampaignService.html#addCampaign" id="j2ry"&gt;here's how you can add a campaign with scheduling&lt;/a&gt; in your language of choice)&lt;br /&gt;&lt;br /&gt;With these small changes to your campaigns, you should be able to make the most out of your ads by having them show at the right time. That likely means better, more focused targeting, with higher returns, all for just a little bit of setup work; that's like eating your cake and keeping it too! Just make sure you don't do it before lunch, otherwise it'll spoil your appetite.&lt;br /&gt;&lt;br /&gt;--Sérgio Gomes, AdWords API Team&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-4643973480596557844?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=2y615cHfWs0:OmWtru0hjbw:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=2y615cHfWs0:OmWtru0hjbw:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=2y615cHfWs0:OmWtru0hjbw:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/2y615cHfWs0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/4643973480596557844?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/4643973480596557844?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/2y615cHfWs0/ad-scheduling-its-all-about-timing.html" title="Ad Scheduling: it's all about timing" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/04/ad-scheduling-its-all-about-timing.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A0AGRng7eSp7ImA9WxJRGEg.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-7107209436516942951</id><published>2009-03-27T14:40:00.000-07:00</published><updated>2009-05-20T15:48:47.601-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-20T15:48:47.601-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="infoservice" /><title>Better know a service: InfoService</title><content type="html">We, at the AdWords API Team, are often asked questions such as "&lt;i&gt;Where have all my units gone?" &lt;/i&gt;and &lt;i&gt;&lt;i&gt;"&lt;/i&gt;&lt;i&gt;How many API units has a particular account used in the last month?"&lt;/i&gt; &lt;/i&gt;Luckily, we have supplied you with a great set of tools with &lt;a href="http://code.google.com/apis/adwords/docs/developer/InfoService.html" id="h9mw" style="color: rgb(85, 26, 139);" target="_blank" title="InfoService"&gt;InfoService&lt;/a&gt; to answer these questions. In this blog post, we'll talk about some basic uses of this service, as well as some caveats that can be solved using some more advanced techniques. All code examples have been coded using the &lt;a href="http://code.google.com/p/google-api-adwords-java/" id="oj-a" target="_blank" title="AdWords Java Client Library"&gt;AdWords Java Client Library&lt;/a&gt;&lt;i&gt;.&lt;/i&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;i&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;&lt;span class="Apple-style-span" style="font-style: normal;"&gt;Update: &lt;span class="Apple-style-span" style="font-weight: normal;"&gt;both of these examples have now been included as utility methods in the file &lt;/span&gt;&lt;a href="http://code.google.com/p/google-api-adwords-java/source/browse/trunk/src/com/google/api/adwords/lib/utils/UnitsUtils.java"&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;UnitsUtils.java&lt;/span&gt;&lt;/a&gt;&lt;span class="Apple-style-span" style="font-weight: normal;"&gt;. The example links below have been updated as well.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/i&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-style: italic;"&gt;&lt;br /&gt;&lt;/span&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;Where have all my units gone?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;span style="font-style: normal; font-weight: normal;"&gt;&lt;span style="font-style: italic;"&gt;"&lt;/span&gt;&lt;i&gt;Where have all my units gone?" &lt;/i&gt;is o&lt;span style="font-style: normal; font-weight: normal;"&gt;&lt;span style="font-style: normal; font-weight: normal;"&gt;ne of the most frequent questions asked by our developers seeking to trim down their API usage. Although InfoService provides the method &lt;a href="http://code.google.com/apis/adwords/docs/developer/InfoService.html#getUnitCountForMethod" id="dhlt" target="_blank" title="getUnitCountForMethod"&gt;getUnitCountForMethod&lt;/a&gt;, it is not inherently obvious how to generate a full mapping of usage. The heart of the problem is that, to call getUnitCountForMethod, you must pass it a service name and method. To get a full mapping of method to usage, getUnitCountForMethod must be called for each service and method pair. In the method &lt;a href="http://code.google.com/p/google-api-adwords-java/source/browse/trunk/src/com/google/api/adwords/lib/utils/UnitsUtils.java#63" id="rte8" target="_blank" title="UnitUtils.getMethodUsage"&gt;UnitUtils.getMethodUsage&lt;/a&gt;, I have shown how you might do this.&lt;br /&gt;&lt;br /&gt;The method is broken into two parts: populating a full mapping of service name to list of method names, and calling getUnitCountForMethod for each mapping. The result of each call is then put into a new map, referred to as &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="font-family:Courier New;"&gt;methodUsage&lt;/span&gt; in the method. When the method has finished running, which may take a few seconds, &lt;span style="font-family:Courier New;"&gt;methodUsage&lt;/span&gt; will have a mapping of &lt;span style="font-family:Courier New;"&gt;serviceName.methodName&lt;/span&gt; to &lt;span style="font-family:Courier New;"&gt;quotaUsage&lt;/span&gt; and the output will resemble:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;blockquote class="webkit-indent-blockquote" style="border: medium none ; margin: 0pt 0pt 0pt 40px;"&gt;AccountService.getAccountInfo = 3&lt;br /&gt;AccountService.getClientAccountInfos = 257&lt;br /&gt;AccountService.getClientAccounts = 0&lt;br /&gt;AccountService.getMccAlerts = 0&lt;br /&gt;AccountService.updateAccountInfo = 0&lt;br /&gt;...&lt;br /&gt;&lt;div&gt;AdService.addAds = 5005&lt;/div&gt;&lt;div&gt;AdService.checkAds = 0&lt;/div&gt;&lt;div&gt;AdService.findBusinesses = 0&lt;/div&gt;&lt;div&gt;AdService.getActiveAds = 0&lt;/div&gt;&lt;div&gt;AdService.getAd = 0&lt;/div&gt;&lt;div&gt;AdService.getAdStats = 0&lt;/div&gt;&lt;div&gt;AdService.getAllAds = 0&lt;/div&gt;&lt;div&gt;AdService.getMyBusinesses = 0&lt;/div&gt;&lt;div&gt;AdService.getMyVideos = 0&lt;/div&gt;&lt;div&gt;AdService.updateAds = 0&lt;/div&gt;&lt;div&gt;...&lt;/div&gt;TrafficEstimatorService.checkKeywordTraffic = 0&lt;br /&gt;TrafficEstimatorService.estimateAdGroupList = 0&lt;br /&gt;TrafficEstimatorService.estimateCampaignList = 0&lt;br /&gt;TrafficEstimatorService.estimateKeywordList = 0&lt;/blockquote&gt;&lt;br /&gt;&lt;div&gt;As you can see, many of my units went towards adding Ads. Using this data, I could enter my monthly values into a spreadsheet and plot my usage over several months. Not only could I easily spot where all of my units have gone, but I would also be able to spot any out of the ordinary behavior as well.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;As a side note, regardless of the credentials supplied to the service, this method will only gather data against the developer token. Meaning that, supplying a clientEmail or clientCustomerId will not give a finer grained set of results.&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;b&gt;How many API units has a particular child account used in the last month?&lt;/b&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;Another great feature of InfoService is that it allows you to determine how many units a particular child account has used over a period of time. This information can be used to invoice clients, if you are developing for an Agency, or to perform cost/ctr analysis, if you wished to optimize your accounts per API spend.&lt;br /&gt;&lt;br /&gt;There is one caveat, however. Let's say that we have an account structure that resembles the one below:&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;img src="http://3.bp.blogspot.com/_9nPzN1kh_V0/Sc0pWkXF-lI/AAAAAAAAANs/Px4Kj07hpGY/s400/bfd65_87.png" style="cursor: move;" border="0" /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;/div&gt;&lt;div style="text-align: center;"&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;br /&gt;We have a top most MCC, Top-MCC, which is the root of our tree. Since our goal is to generate a mapping of child account to the amount of quota used, a first approach may be to run &lt;a href="http://code.google.com/apis/adwords/docs/developer/InfoService.html#getUnitCountForClients" id="obtf" target="_blank" title="getUnitCountForClients"&gt;getUnitCountForClients&lt;/a&gt; for each client, as shown below:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 40px;"&gt;&lt;span style="font-family:Courier New;"&gt;InfoService.getUnitCountForClients(["Sub-MCC-1",&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;&lt;span style="font-family:Courier New;"&gt;"Sub-MCC-2", "Client-1", "Client-2",&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;&lt;span style="font-family:Courier New;"&gt;"Client-3", "Client-4"],&lt;/span&gt;&lt;/div&gt;&lt;div style="margin-left: 80px;"&gt;&lt;span style="font-family:Courier New;"&gt;"3/1/2009", "3/31/2009");&lt;/span&gt;&lt;/div&gt;&lt;br /&gt;From the results, you can create a mapping that resembles:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 40px;"&gt;Sub-MCC-1 = 55&lt;br /&gt;Sub-MCC-2 = 70&lt;br /&gt;Client-1 = 500&lt;br /&gt;Client-2 = 650&lt;br /&gt;Client-3 = 600&lt;br /&gt;Client-4 = 400&lt;/div&gt;&lt;br /&gt;You'll notice that while this data gives you some idea of client usage, there's no aggregation of client usage up to the MCC; Sub-MCC-1 returns just the number of units called directly on that account, such as from a command with headers:&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div style="margin-left: 40px;"&gt;&amp;lt;email&amp;gt;Top-MCC&amp;lt;/email&amp;gt;&lt;br /&gt;&amp;lt;password&amp;gt;passwordForTop-MCC&amp;lt;/password&amp;gt;&lt;br /&gt;&amp;lt;developerToken&amp;gt;...&amp;lt;/developerToken&amp;gt;&lt;br /&gt;&amp;lt;applicationToken&amp;gt;...&amp;lt;/applicationToken&amp;gt;&lt;br /&gt;&amp;lt;userAgent&amp;gt;...&amp;lt;/userAgent&amp;gt;&lt;br /&gt;&amp;lt;clientEmail&amp;gt;Sub-MCC-1&amp;lt;/clientEmail&amp;gt;&lt;br /&gt;&lt;br /&gt;&lt;/div&gt;&lt;div style="margin-left: 40px;"&gt;&lt;/div&gt;What you may actually want is an aggregation of unit usage such as:&lt;br /&gt;&lt;br /&gt;&lt;div style="margin-left: 40px;"&gt;Top-MCC = 2275&lt;br /&gt;Sub-MCC-1 = 1305&lt;br /&gt;Sub-MCC-2 = 470&lt;br /&gt;Client-1 = 500&lt;br /&gt;Client-2 = 650&lt;br /&gt;Client-3 = 600&lt;br /&gt;Client-4 = 400&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;span style="font-style: normal; font-weight: normal;"&gt;&lt;span style="font-style: normal; font-weight: normal;"&gt;&lt;span style="font-style: normal; font-weight: normal;"&gt;In the method &lt;a href="http://code.google.com/p/google-api-adwords-java/source/browse/trunk/src/com/google/api/adwords/lib/utils/UnitsUtils.java#100" id="rte8" target="_blank" title="UnitUtils.getClientUnitsUsage"&gt;UnitUtils.getClientUnitsUsage&lt;/a&gt;, I show how to traverse the full account tree below the top most MCC and sum the units for each client to produce a mapping like the one above.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt; However, if by some chance, a client has two parent accounts, linked through UI/API and API, and those parents are both distant children of the same parent, that client will be doubly counted. We've also shown how to keep track of these doubly counted clients in the demo.&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;We hope that these new utility methods will help you keep track of your API usage and stay tuned for more great demos like these!&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;br /&gt;&lt;i&gt;--Adam Rogal, AdWords API Team&lt;/i&gt;&lt;br /&gt;&lt;i&gt;&lt;/i&gt;&lt;/div&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-7107209436516942951?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=tPT5Gx8dlM0:xWeatGgresU:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=tPT5Gx8dlM0:xWeatGgresU:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=tPT5Gx8dlM0:xWeatGgresU:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/tPT5Gx8dlM0" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7107209436516942951?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/7107209436516942951?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/tPT5Gx8dlM0/better-know-service-infoservice.html" title="Better know a service: InfoService" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_9nPzN1kh_V0/Sc0pWkXF-lI/AAAAAAAAANs/Px4Kj07hpGY/s72-c/bfd65_87.png" height="72" width="72" /><feedburner:origLink>http://adwordsapi.blogspot.com/2009/03/better-know-service-infoservice.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Ck4ASX89eyp7ImA9WxVUFUo.&quot;"><id>tag:blogger.com,1999:blog-10373715.post-903471369897749449</id><published>2009-03-20T10:42:00.000-07:00</published><updated>2009-03-20T10:42:28.163-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-20T10:42:28.163-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="best practices" /><category scheme="http://www.blogger.com/atom/ns#" term="sandbox" /><title>AdWords API sandbox - Best practices</title><content type="html">&lt;span style="color: black;"&gt;The &lt;/span&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_sandbox.html" id="dsps" title="API sandbox"&gt;API sandbox&lt;/a&gt;&amp;nbsp;is open to anyone who wants to test code during development, and it's completely free. We recommend using the sandbox as much as possible to catch your bugs during development so they won't hit your production account later. Here are some tips on using the sandbox effectively:&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Initialize your sandbox account&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Make sure that the first call to the sandbox is a get() call from &lt;span style="font-family: Courier New;"&gt;AccountService&lt;/span&gt;, preferably &lt;span style="font-family: Courier New;"&gt;AccountService&lt;/span&gt;'s &lt;span style="font-family: Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/AccountService.html#getClientAccounts" id="py_2" title="getClientAccounts"&gt;getClientAccounts&lt;/a&gt;(). &lt;/span&gt;Assuming you use &lt;i&gt;user@domain.com&lt;/i&gt; as the login email, this call will initialize the sandbox and create 5 test client accounts, namely &lt;i&gt;client_1+user@domain.com&lt;/i&gt; to &lt;i&gt;client_5+user@domain.com&lt;/i&gt; for your sandbox account. While making this call you should not provide the &lt;span style="font-family: Courier New;"&gt;clientEmail &lt;/span&gt;or &lt;span style="font-family: Courier New;"&gt;clientCustomerId &lt;/span&gt;headers, since this call expects an MCC account to succeed.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;While making a &lt;span style="font-family: Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/AccountService.html#getClientAccounts" id="py_2" title="getClientAccounts"&gt;getClientAccounts&lt;/a&gt;()&lt;/span&gt; call to the sandbox, set the SOAP headers as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;email&lt;/span&gt;: address of any google account, such as a Gmail account &lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;password&lt;/span&gt;: password of the account&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;useragent&lt;/span&gt;: set to any identifying string&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;developerToken&lt;/span&gt;: set to the value for email, with the string '++USD' (or the currency code of your choice) appended&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;applicationToken&lt;/span&gt;: ignored, and could be set to anything or left out&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;clientEmail&lt;/span&gt;: should be either set to the empty string or left out&lt;/div&gt;&lt;div&gt;&lt;span style="font-family: Courier New;"&gt;clientCustomerId&lt;/span&gt;: should be either set to the empty string or left out&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
The sandbox database is usually refreshed once every month, wiping out all client accounts. Making &lt;span style="font-family: Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/AccountService.html#getClientAccounts" id="py_2" title="getClientAccounts"&gt;getClientAccounts&lt;/a&gt;()&lt;/span&gt; as your application's first API call ensures that all your calls happen against a properly initialized sandbox account.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;b&gt;Simulate error responses&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
Because a good application needs to gracefully handle errors thrown by the AdWords API, the sandbox provides a mechanism for simulating error messages. If you use &lt;i&gt;user@domain.com&lt;/i&gt;++errorCode as the email for a call to the sandbox, the sandbox will return an error response with error code set as the desired errorCode, and a text message indicating that an error response has been forced by the sandbox.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The error code should be set to one of the valid &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_error_codes.html"&gt;error codes&lt;/a&gt;. For instance, by providing login email as user@domain.com++17, I can simulate error code 17 (account exceeded maximum number of allowed campaigns).&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;The SOAP response looks as follows: &lt;br /&gt;
&lt;br /&gt;
&lt;span style="font-family: Courier New;"&gt;&amp;lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp; &amp;lt;soapenv:Body&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;soapenv:Fault&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;faultcode&amp;gt;soapenv:Server.userException&amp;lt;/faultcode&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;faultstring&amp;gt;Error forced by the request (Sandbox)&amp;lt;/faultstring&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;detail&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:fault xmlns:ns1="https://adwords.google.com/api/adwords/v13"&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:code&amp;gt;17&amp;lt;/ns1:code&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:message&amp;gt;Error forced by the request (Sandbox)&amp;lt;/ns1:message&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ns1:trigger&amp;gt;user@domain.com++17&amp;lt;/ns1:trigger&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/ns1:fault&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/detail&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;/soapenv:Fault&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;nbsp; &amp;lt;/soapenv:Body&amp;gt;&lt;/span&gt;&lt;br style="font-family: Courier New;" /&gt;&lt;span style="font-family: Courier New;"&gt;&amp;lt;/soapenv:Envelope&amp;gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
Similarly, you can also test for some policy violations in ads and keywords. For instance, providing repeated punctuation in the ad or keyword text, such as "Hello World!!" as the ad title, should trigger a policy violation error. However, the sandbox doesn't have all of the policy checks in place, so you can't test your application against every possible policy violation, e.g. trademark-related violations.&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Generate reports&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
Since generating reports is one of the most common calls in the AdWords API, the sandbox provides features to test each stage of your report generation logic. In the sandbox, you can create&amp;nbsp;&lt;span style="font-family: inherit; font-size: small;"&gt;either&amp;nbsp;&lt;/span&gt;&lt;span style="font-family: inherit; font-size: small;"&gt;a report whose status does not change, or a report whose status changes from pending to deleted. If you include any one of the following strings in the report name field while creating it, it will create a report with the specified status.&lt;/span&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;ul class="code"&gt;&lt;li&gt;fixstatus=Pending&lt;/li&gt;
&lt;li&gt;fixstatus=InProgress&lt;/li&gt;
&lt;li&gt;fixstatus=Completed&lt;/li&gt;
&lt;li&gt;fixstatus=Failed&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
If the name doesn't contain any of the above codes, the sandbox will create a report whose status changes as follows:&lt;br /&gt;
&lt;br /&gt;
&lt;ul&gt;&lt;li&gt;During the first minute since the report job was scheduled, the status is &lt;span style="font-family: Courier New;"&gt;Pending.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;During the second minute, the status is &lt;span style="font-family: Courier New;"&gt;InProgress&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;During the third minute, the status is &lt;span style="font-family: Courier New;"&gt;Completed&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;After the third minute, the report is deleted.&lt;/li&gt;
&lt;/ul&gt;&lt;br /&gt;
Also, a call to &lt;span style="font-family: Courier New;"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/ReportService.html#getAllJobs" id="zekr" title="getAllJobs"&gt;getAllJobs&lt;/a&gt; &lt;/span&gt;will return four reports, one for each value of &lt;span class="v12-up"&gt;&lt;a href="http://code.google.com/apis/adwords/docs/developer/ReportService.html#getReportJobStatus" id="z8na" title="ReportJobStatus"&gt;ReportJobStatus&lt;/a&gt;&lt;/span&gt;. Sandbox reports do not return any data related to any live accounts. So if you want to test your report parsing logic against some live data, you can generate a report of the desired type in the Reports Center of your production account, download it in xml format, and use it to develop and test your code. &amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;Handling account limits&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
As with a live account, an AdWords sandbox account can hold a maximum of 25 active campaigns, with up to 100 active ad groups per campaign. If your program runs into these &lt;a href="http://adwords.google.com/support/bin/answer.py?hl=en&amp;amp;answer=40907" id="a_mk" title="limits"&gt;limits&lt;/a&gt;, then you can change the status of some campaigns or ad groups to "deleted."&lt;br /&gt;
&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;&lt;b&gt;TrafficEstimatorService and KeywordToolService behavior&lt;/b&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
Both TrafficEstimatorService and KeywordToolService are available for use in AdWords API sandbox. However, both these services return fake data. TrafficEstimatorService will give you fake data for &lt;a href="http://code.google.com/apis/adwords/docs/developer/KeywordEstimate.html"&gt;Position, CPC, and Clicks per day&lt;/a&gt;. KeywordToolService can give you fake Seed-based keyword suggestions when using &lt;a href="http://code.google.com/apis/adwords/docs/developer/KeywordToolService.html#getKeywordVariations" id="gx9q" title="getKeywordVariations"&gt;getKeywordVariations&lt;/a&gt;. It can also give you content-based keyword suggestions and SiteKeyword statistics when using &lt;a href="http://code.google.com/apis/adwords/docs/developer/KeywordToolService.html#getKeywordsFromSite" id="dm11" title="getKeywordsFromSite"&gt;getKeywordsFromSite&lt;/a&gt;.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;
The AdWords API sandbox can greatly help you with your development by preventing bugs from hitting production account during early stages of development. You can find more information on AdWords API sandbox at &lt;a href="http://code.google.com/apis/adwords/docs/developer/adwords_api_sandbox.html" id="zam-" title="http://code.google.com/apis/adwords/docs/developer/adwords_api_sandbox.html"&gt;http://code.google.com/apis/adwords/docs/developer/adwords_api_sandbox.html&lt;/a&gt;.&lt;br /&gt;
&lt;br /&gt;
-Anash P. Oommen, AdWords API Team&lt;br /&gt;
&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/10373715-903471369897749449?l=adwordsapi.blogspot.com'/&gt;&lt;/div&gt;&lt;div class="feedflare"&gt;
&lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=6hsJUUQuywA:xBAM9guh0Eg:yIl2AUoC8zA"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?d=yIl2AUoC8zA" border="0"&gt;&lt;/img&gt;&lt;/a&gt; &lt;a href="http://feeds.feedburner.com/~ff/blogspot/Xqnd?a=6hsJUUQuywA:xBAM9guh0Eg:V_sGLiPBpWU"&gt;&lt;img src="http://feeds.feedburner.com/~ff/blogspot/Xqnd?i=6hsJUUQuywA:xBAM9guh0Eg:V_sGLiPBpWU" border="0"&gt;&lt;/img&gt;&lt;/a&gt;
&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/blogspot/Xqnd/~4/6hsJUUQuywA" height="1" width="1"/&gt;</content><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/903471369897749449?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/10373715/posts/default/903471369897749449?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/blogspot/Xqnd/~3/6hsJUUQuywA/adwords-api-sandbox-best-practices.html" title="AdWords API sandbox - Best practices" /><author><name>AdWords API Team</name><uri>http://www.blogger.com/profile/04123046695062808103</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="14820665645454774099" /></author><feedburner:origLink>http://adwordsapi.blogspot.com/2009/03/adwords-api-sandbox-best-practices.html</feedburner:origLink></entry></feed>
