2. Bid Estimation with the API
Maintaining highly performing AdWords ads
Joel Toby, Google, Inc.
3. Agenda
● Bid Estimation Objectives
● Achieving These Objectives
● Services Available Via the API
● Utilizing Estimates for a New Campaign
● Optimizing Existing Campaigns
4. Google Inc. - All Rights Reserved
Bid Estimation Objectives
5. Google Inc. - All Rights Reserved
1. Create relevant ad campaigns that drive high volumes of
quality traffic
2. Maximise ROI by minimizing CPC
3. Maintain and constantly improve these campaigns
4. Achieve all of the above efficiently and scalably
Bid Estimation Objectives
6. Google Inc. - All Rights Reserved
Achieving these objectives
7. Google Inc. - All Rights Reserved
1. Relevant campaigns, high traffic volumes
2. Maximise ROI by minimizing CPC
3. Maintain and improve campaigns
4. Efficiently and scalably
The Importance of Quality Score
Directly affected by
Quality Score
8. Google Inc. - All Rights Reserved
What does Quality Score influence?
Eligibility
Determines whether an ad is
eligible to enter the auction for
that query
Position
Determines relative position of
an ad in relation to other ads
on that result page
Price
A better Quality Score reduces
the price you need to bid to
maintain a given position
Top Slot
Only high quality ads are
eligible to appear above the
natural search results
9. Google Inc. - All Rights Reserved
What contributes to Quality Score?
Quality Score range: 1 - 10
Quality Score
Clickthrough rate * Relevance Landing Page
* Clickthrough rate (CTR) is the most important factor
10. Google Inc. - All Rights Reserved
● Some of the useful data exposed by the API
○ Keyword Ideas
○ Keyword historic stats data
○ Traffic estimate data
○ Cost and clickthrough rate estimates
○ Keyword search volume estimates
The Available Data
11. Google Inc. - All Rights Reserved
API Estimation Data Services
12. Google Inc. - All Rights Reserved
● TargetingIdeaService (TIS)
○ Generate new keyword ideas based on parameters
○ Retrieve historic statistics for existing keywords based on
parameters
● TrafficEstimatorService (TES)
○ Retrieve traffic estimates for proposed or existing campaigns, ad
groups, and keywords
● Report data
○ Often combined with estimates data when optimizing campaigns
Targeting Idea and Traffic Estimator Service
13. Google Inc. - All Rights Reserved
TargetingIdeaService Requests
TargetingIdeaSelector - Key components
SearchParameters[]
RelatedToQuerySearchParameter
LocationSearchParameter
RelatedToUrlSearchParameter
ExcludedKeywordSearchParamete
r
RequestedAttributeTypes
SEARCH_VOLUME
AVERAGE_CPC
COMPETITION
KEYWORD_TEXT
RequestType
IDEAS
STATS
IdeaType
CurrencyCode
14. Google Inc. - All Rights Reserved
TrafficEstimatorService Requests
TrafficEstimatorSelector
campaignEstimateRequests
adGroupEstimateRequests
keywordEstimateRequests
15. Google Inc. - All Rights Reserved
CampaignEstimateRequest
TrafficEstimatorSelector
campaignEstimateRequests
adGroupEstimateRequests
keywordEstimateRequests
campaignId
dailyBudget
criteria
networkSetting
16. Google Inc. - All Rights Reserved
AdGroupEstimateRequest
TrafficEstimatorSelector
campaignEstimateRequests
adGroupEstimateRequests
keywordEstimateRequests
adGroupId
maxCpc
17. Google Inc. - All Rights Reserved
KeywordEstimateRequest
TrafficEstimatorSelector
campaignEstimateRequests
adGroupEstimateRequests
keywordEstimateRequests
isNegative
maxCpc
18. Google Inc. - All Rights Reserved
Building a new campaign
An real-world example
19. Google Inc. - All Rights Reserved
Example: A New Campaign
● The business
○ A bakery
○ Based in New York
○ Has a website
● Use the TargetingIdeaService to
○ Get some good keyword ideas
○ Evaluate some existing keyword ideas
● Use the TrafficEstimateService to
○ Plug keywords into a complete campaign and estimate traffic
volumes and cost
20. HTML
Google Inc. - All Rights Reserved
// Building the request, first the Selector
TargetingIdeaSelector selector = new
TargetingIdeaSelector();
selector.setRequestType(RequestType.IDEAS);
selector.setIdeaType(IdeaType.KEYWORD);
selector.setRequestedAttributeTypes(new AttributeType[] {
AttributeType.KEYWORD_TEXT,
AttributeType.SEARCH_VOLUME,
AttributeType.AVERAGE_CPC,
AttributeType.COMPETITION
});
JAVA
TargetingIdeaService: Get Keyword Ideas
21. HTML
Google Inc. - All Rights Reserved
// Paging is required for the targeting idea service.
Paging paging = new Paging();
paging.setStartIndex(0);
paging.setNumberResults(15);
selector.setPaging(paging);
JAVA
TargetingIdeaService: Get Keyword Ideas
22. HTML
Google Inc. - All Rights Reserved
// Get ideas related to query search parameter.
RelatedToQuerySearchParameter relatedToQuerySearchParameter =
new RelatedToQuerySearchParameter();
relatedToQuerySearchParameter.setQueries(new String[]
{"bakery", "pastries", "birthday cake"});
JAVA
TargetingIdeaService: Get Keyword Ideas
23. HTML
Google Inc. - All Rights Reserved
LocationSearchParameter locationParameter =
new LocationSearchParameter();
Location newYork = new Location();
newYork.setId(1023191l); // code for New York *
locationParameter.setLocations(new Location[] {newYork});
CategoryProductsAndServicesSearchParameter categoryParameter =
new CategoryProductsAndServicesSearchParameter();
categoryParameter.setCategoryId(13693); // Cat ID for
‘Bakeries’*
JAVA
* See ‘Appendix A: Criteria Codes’ in API docs:
https://developers.google.com/adwords/api/docs/appendix/productsservices
TargetingIdeaService: Get Keyword Ideas
24. HTML
Google Inc. - All Rights Reserved
// Sending the Request
RelatedToUrlSearchParameter urlParameter =
new RelatedToUrlSearchParameter();
urlParameter.setUrls(new String[] {"http://newyorkbakery.
com/"});
selector.setSearchParameters(
new SearchParameter[] {relatedToQuerySearchParameter,
locationParameter, categoryParameter});
// Get keywords ideas.
TargetingIdeaPage page = targetingIdeaService.get(selector);
JAVA
TargetingIdeaService: Get Keyword Ideas
25. HTML
Google Inc. - All Rights Reserved
// Parsing the results
// Parse keyword ideas data.
if (page.getEntries() != null && page.getEntries().length > 0)
{
for (TargetingIdea targetingIdea : page.getEntries()) {
Map<AttributeType, Attribute> data =
Maps.toMap(targetingIdea.getData());
StringAttribute keyword =
(StringAttribute) data.get(AttributeType.
KEYWORD_TEXT);
JAVA
TargetingIdeaService: Get Keyword Ideas
26. HTML
Google Inc. - All Rights Reserved
JAVA
long averageMonthlySearches =
((LongAttribute) data.get(AttributeType.SEARCH_VOLUME))
.getValue();
Money averageCpc =
((MoneyAttribute) data.get(AttributeType.AVERAGE_CPC))
.getValue();
double competition =
((DoubleAttribute) data.get(AttributeType.COMPETITION))
.getValue();
TargetingIdeaService: Get Keyword Ideas
27. Google Inc. - All Rights Reserved
Keyword text
Avg monthly
search volume
Average
CPC Competition
cake bakery 170 0.485384 0.41
bakery story 390 0.069918 0.12
specialty cakes 90 0.510527 0.8
local bakeries 40 0.187052 0.41
online bakery 70 0.652462 0.8
bakery names 70 0.074779 0.19
creative cakes 210 1.009925 0.15
french pastries 260 0.231775 0.16
bakery cakes 70 0.405006 0.51
TargetingIdeaService: Get Keyword Ideas
28. Google Inc. - All Rights Reserved
TargetingIdeaService: Get stats for existing
keywords
Stats request differences
● RequestType = STATS
● Some SearchParameters are not compatible with
STATS requests and cannot be used
● CategoryProductsAndServicesSearchParameter
Stats results differences
● No new keyword ideas will be returned
● Result contains stats for the request keywords
29. Google Inc. - All Rights Reserved
Keyword text
Avg monthly
search volume
Average
CPC Competition
birthday cakes nyc 390 0.507404 0.65
TIS: Keyword Stats Results
30. Google Inc. - All Rights Reserved
Traffic Estimates for a New Campaign
● The business
○ A bakery
○ Based in New York
○ Has a website
● Use the TargetingIdeaService to
○ Get some good keyword ideas
○ Evaluate some existing keyword ideas
● Use the TrafficEstimatorService to
○ Plug keywords into a complete campaign and estimate traffic
volumes and cost
31. HTML
Google Inc. - All Rights Reserved
JAVA// Create an Keyword estimate request.
List<KeywordEstimateRequest> keywordEstimateRequests =
new ArrayList<KeywordEstimateRequest>();
for(String keywordText : candidateKeywords) {
Keyword keyword = new Keyword(null, null, null,
keywordText, KeywordMatchType.BROAD);
KeywordEstimateRequest keywordEstimateRequest =
new KeywordEstimateRequest();
keywordEstimateRequest.setKeyword(keyword);
keywordEstimateRequests.add(keywordEstimateRequest);
}
TrafficEstimatorService
32. HTML
Google Inc. - All Rights Reserved
JAVA
// Create an AdGroup estimate request.
List<AdGroupEstimateRequest> adGroupEstimateRequests =
new ArrayList<AdGroupEstimateRequest>();
AdGroupEstimateRequest adGroupEstimateRequest =
new AdGroupEstimateRequest();
adGroupEstimateRequest.setKeywordEstimateRequests(
keywordEstimateRequests.toArray(
new KeywordEstimateRequest[] {}));
adGroupEstimateRequest.setMaxCpc(new Money(null, 600000L));
adGroupEstimateRequests.add(adGroupEstimateRequest);
TrafficEstimatorService
33. HTML
Google Inc. - All Rights Reserved
JAVA
// Create a campaign estimate request.
List<CampaignEstimateRequest> campaignEstimateRequests =
new ArrayList<CampaignEstimateRequest>();
CampaignEstimateRequest campaignEstimateRequest =
new CampaignEstimateRequest();
campaignEstimateRequest.setAdGroupEstimateRequests(
adGroupEstimateRequests
.toArray(new AdGroupEstimateRequest[] {}));
TrafficEstimatorService
34. HTML
Google Inc. - All Rights Reserved
JAVA
// Build the CampaignEstimateRequests
Location newYork = new Location();
newYork.setId(1023191l);
Language english = new Language();
english.setId(1000L);
campaignEstimateRequest.setCriteria(new Criterion[]
{newYork, english});
campaignEstimateRequests.add(campaignEstimateRequest);
TrafficEstimatorService
35. HTML
Google Inc. - All Rights Reserved
JAVA
// Create Selector.
TrafficEstimatorSelector selector = new
TrafficEstimatorSelector();
selector.setCampaignEstimateRequests(
campaignEstimateRequests.toArray(
new CampaignEstimateRequest[] {}));
// Get traffic estimates.
TrafficEstimatorResult result =
trafficEstimatorService.get(selector);
TrafficEstimatorService
36. Google Inc. - All Rights Reserved
TrafficEstimatorResult
● TrafficEstimatorResult is a nest of objects that
reflects the request
● StatsEstimates are contained only within the
KeywordEstimates returned.
● Each KeywordEstimate contains two
StatsEstimates: upper and lower bound estimates
37. Google Inc. - All Rights Reserved
The StatsEstimate object
StatsEstimate
averageCpc
averagePosition
clicksPerDay
impressionsPerDay
clickThroughRate
totalCost
38. Google Inc. - All Rights Reserved
Campaign Optimization
39. Google Inc. - All Rights Reserved
Optimizing the new campaign
● Once campaigns have been serving for
a while, they should be optimized.
● Reports provide ‘actual’ performance
data including data not available in
estimates
○ QualityScore
○ Conversions
KeywordPerfReport
SearchQueryReport
CriteriaPerfReport
40. Google Inc. - All Rights Reserved
A simple, effective way to optimize
● Use report data to remove low QualityScore keywords
● This will improve the performance of your campaigns
Click volume increase of 26%
with a 62% improvement in CTR
290 real accounts were recently optimized in this
way with great results:
41. Google Inc. - All Rights Reserved
You might then use the TES and TIS to replace keywords
with new ones
Back To Estimates...
Estimate
Data
Report
Data
Remove
Keywords
New
Keywords
42. Google Inc - All Rights Reserved
Resources
Guides
Using Keyword Planner to get keyword ideas and traffic estimates -
https://support.google.com/adwords/answer/2999770?rd=1
Understanding your Keyword Planner statistics and traffic estimates -
https://support.google.com/adwords/answer/3022575