SlideShare uma empresa Scribd logo
1 de 28
Baixar para ler offline
AdWords API Workshops 2013


Account Performance &
Optimization
Finding the needle in your haystack




                             Google Confidential and Proprietary
Overview
1. How to Optimize
    ○   The Optimization Cycle

2. Developing a solid reporting backend
    ○   Reporting Workflow
    ○   Strategies for scaling, processing and storage
    ○   Introduction to sample applications

3. Keyword Optimizations
    ○   What are TIS and TES
    ○   Discovering good ideas with TIS and TES
    ○   Automated keyword optimizations strategy

4. Discovering optimization opportunities with Kratu
    ○   Introduction to Kratu
    ○   AdWords Optimization Report in Kratu
    ○   Kratu backend example



                                                         Google Confidential and Proprietary
How to Optimize?




      Google Confidential and Proprietary
Measure                Profile
      Optimization Cycle




       Optimize

                            Google Confidential and Proprietary
Measure                       Profile
     Performance data
     Structural data
             AdHoc
      AWQL             Services
             Reports




       Optimize

                                   Google Confidential and Proprietary
Measure                     Profile
     Kratu
     Custom (eg. Epsilon)

     Predictive Analysis




       Optimize

                                 Google Confidential and Proprietary
Measure               Profile
     Automatic
     Manual
     Semi Automatic



       Optimize

                           Google Confidential and Proprietary
Developing a solid reporting backend

                            Google Confidential and Proprietary
Reporting Workflow                      MCC Info




                                        Managed
     List<ManagedCustomer>              Customer
                                         Service




Report Definition

  ReportType

                                                    Report                  Data Storage
  DateRange         Report Downloader              Processor                    MySql
                                                                               MongoDB
                                                                                  ...
     Fields
                         n-Threads



                                                               Google Confidential and Proprietary
Report                 Data Storage
 Report Downloader              Processor                  MySql
                                                          MongoDB
                                                             ...


      n-Threads

                        Process local temp files
                                                   Keys must guarantee
Based on                Parses rows using a        Uniqueness per
MultipleClient          CSVReader                  ReportRow
ReportDownloader                                   (Date/Day, Segments)
example                 Write calls to Storage
                        must be in batches         Rows Updates are
Each Thread runs a                                 frequent
ReportDownloder with:   Batch size depends on
                        technology/memory          Create indexes for:
 ●   AdWordsSession
 ●   ClientCustomerId   Shard data based on         ●    AccountId
 ●   ReportDefinition   account, subMCCs, dates     ●    Date/Day
 ●   CSV & GZip         or common attributes        ●    CampaignId
                                                    ●    Segments...



                                                        Google Confidential and Proprietary
Implementing a MySql ReportProcessor
connection.setAutoCommit( false);
statement.execute(" SET UNIQUE_CHECKS=0; ALTER TABLE ... DISABLE KEYS;");
for (File file : localFiles) {
  preparedStatement = "INSERT INTO .. (.) VALUES (.) ON DUPLICATE KEY UPDATE
(.)";

    CSVReader csvReader = new CSVReader(new InputStreamReader (new FileInputStream
(
          file.getAbsolutePath() + ".gunzip"), " UTF-8"), ',', '"', 1);

    reportRows = new ModifiedCsvToBean <Report>(). parseReport(mapping, csvReader);

  for (Report reportItem : reportRows) {
     addInsertToBatch(reportItem, preparedStatement);
    // Executing the Batch every 500 inserts to reduce memory usage
    if (batchSize++ >= 500) {
       preparedStatement.executeBatch();
       connection.commit();
       batchSize = 0;
    }
  }...
}...
statement.execute(" SET UNIQUE_CHECKS=1; ALTER TABLE ... ENABLE KEYS;");
                                                               Google Confidential and Proprietary
Implementing a MongoDB ReportProcessor

for (File file : localFiles) {

    CSVReader csvReader = new CSVReader(new InputStreamReader(
          new FileInputStream(file),"UTF-8"), ',', '"', 1);

    List<Report> reportObjectList =
      ModifiedCsvToBean<Report>().parseReport(mapping, csvReader);

    csvReader.close();


    // Save in MongoDB (there is also an AppEngine implementation)
    // Iterates using Google Gson: gsonBuilder.create().toJson(Object)
    // and DBObject: com.mongodb.util.JSON.parse(jsonObject)
    noSqlStorage.save(reportObjectList);
}



                                                       Google Confidential and Proprietary
Keyword
Optimizations




     Google Confidential and Proprietary
TIS                                 SearchParameter[ ]

                                   Keyword / Placement
      TargetingIdeaSelector
                                         Ideas / Stats

                                   AttributeType[ ] (fields)


       Targeting Idea
          Service


         TargetingIdea[ ]
       Type_AttributeMapEntry[ ]
              (field,value)


                                   Google Confidential and Proprietary
TIS - Search Parameters & Fields

  SearchParameter[ ]                AttributeType[ ] (fields)


  ●   AdSpecList                    ●   Average Cpc
  ●   CategoryProductsAndServices   ●   Average Targeted Monthly Searches
  ●   Competition                   ●   Category Products and Services
  ●   ExcludedKeyword               ●   Competition
  ●   IdeaTextFilter                ●   Criterion
  ●   IncludeAdultContent           ●   Extracted from Webpage
  ●   Language                      ●   Global Monthly Searches
  ●   Location                      ●   Idea Type
  ●   Network NEW                   ●   Keyword Category
  ●   PlacementType                 ●   Keyword Text
  ●   RelatedToQuery                ●   Negative Keywords
  ●   RelatedToUrl                  ●   Search Share
  ●   SearchVolume                  ●   Search Volume
  ●   SeedAdGroupId                 ●   Targeted Monthly Searches
                                         ...


                                                                Google Confidential and Proprietary
TIS EXAMPLE
LanguageSearchParameter        = english
RelatedToUrlSearchParameter    = http://www.someplumbers.com/
LocationSearchParameter        = uk
RequestType. IDEAS, IdeaType. KEYWORD
{AttributeType. KEYWORD_TEXT, AttributeType. SEARCH_VOLUME,
AttributeType. AVERAGE_CPC ,AttributeType. COMPETITION}




                   Targeting Idea
                      Service

 KEYWORD_TEXT                 searchVol   avgCPC   Competition
 'london plumbing service'    16          5.13         0.858
 'london plumbing services'   46          9.41         0.765
 'emergency plumbing service' 28          6.71         0.912
    ...                                   new




                                                        Google Confidential and Proprietary
TES
                       TrafficEstimatorSelector
                           CampaignEstimateRequest[ ]      Criterion[ ], campaignId

                           AdGroupEstimateRequest[ ]     adGroupId, maxCPC

                           KeywordEstimateRequest[ ]     keyword, maxCpc, isNegative




                   Traffic Estimator Service

                          CampaignEstimate[ ]               campaignId

                               AdGroupEstimate[ ]        adGroupId

                               KeywordEstimate[ ]      criterionId, Min & Max StatsEstimates

averageCpc, averagePosition, clicksPerDay, impressionsPerDay, clickThroughRate, totalCost

                                                                      Google Confidential and Proprietary
campaignEstimateRequest.setCriteria(new Criterion[] { uk, english });

 adGroupEstimateRequest.setMaxCpc(new Money(null, 1000000)); // 1€

 adGroupEstimateRequest.setKeywordEstimateRequests( ...
        'london plumbing service'
        'emergency plumbing service london'
        'emergency plumbing services london'... )...




                 Traffic Estimator Service

    Keyword               avgCPC avgPosition dayClicks totalCost CTR
dayImpressions

'london plumbing service', 0.87, 2.00, 0.02, 0.02,          0.04, 0.58
'plumbing services london', 0.71, 8.56, 0.54, 0.39,         0.01, 49.33
                                                              new   new
  ...


                                                            Google Confidential and Proprietary
Example Optimization - Epsilon Greedy Inspired
http://en.wikipedia.org/wiki/Multi-armed_bandit


Automatic                                         auto glass repair
● Regular                                         car glass replacement
● Set and forget
● Needs close monitoring                          windshield repair

                                                  vehicle glass repair
Semi-automatic                                                                            KW Research
● Manual lookup                                   car window repair                        Using TIS+TES

● Suggest KWs for exchange                        fix car glass
● KW Research can be
      manual                                      car glass

                                                  glass window

                                                  glasses repair

                        KW                        window repair


                                                                          Google Confidential and Proprietary
Discovering optimization opportunities with Kratu




                                        Google Confidential and Proprietary
Kratu - Open Source Issue and Opportunity Discovery




                                         Google Confidential and Proprietary
Kratu - Open Source Issue and Opportunity Discovery
●   Open Source, Google driven
     ○   http://google.github.com/kratu/
●   Client-side, runs in the browser. Implemented in JavaScript
●   Includes prebuilt working example for AdWords
     ○   Starting point created by experienced Google Account Managers
     ○   Used internally at Google to display data for millions of accounts
     ○   Provided as-is. Use with caution. Google accepts no liabilities.
●   BYOD - Bring Your Own Data
     ○   Anything that can be converted to a JS Array with key/value objects
     ○   Includes simple JSON and CSV loaders

●   We offer a Google built sample backend
●   Easily integratable with other, non-AdWords data


                                                               Google Confidential and Proprietary
Demo Time
http://google.github.com/kratu/examples/adwordshealthcheck/




                                                  Google Confidential and Proprietary
Kratu - Implementation - Overview


                       Reporting
    Data Storage       backend
      MySql              Fetch
     MongoDB            Process
        ...              Store




     Web server

     /kratu/

     /rest/accounts/




                                    Google Confidential and Proprietary
Kratu - Implementation
●   Easy to add other signals
     ○   Add any key/value pair to your data, define a weight and a threshold
●   Flexible model
     ○   Custom and built-in calculation of opportunity/issue
     ○   Compose new signals from multiple data points
     ○   Custom and built-in event handlers (integrate with other systems)
     ○   Custom and built-in formatting
●   Paginations for larger number of accounts
●   Re-use data and signals to produce new reports
     ○   Targeted reports, eg. upselling opportunities, mobile adoption
     ○   Personalized reports, eg. individual for Account managers
●   End-to-end tutorial available here:
     ○   http://google.github.com/kratu/tutorial/


                                                              Google Confidential and Proprietary
Kratu - backend example
Quick example using Restlet and Gson:
router.attach("/accountreports/{accountId}", ReportRest.class);
String accountId = (String) getRequestAttributes().get("
                                                       accountId");
@Get
public JsonRepresentation getAccountPerformanceReportHandler() {
    // Gets Reports from MongoDB or MySql as Java Objects
    List<Report> listAccountReports = Report.getReportByAccountIdMonth(
        accountId, date, "AccountReport");
    String resultJsonList = gson.toJson(listAccountReports);
    JsonRepresentation jsonRepresentation = new
        JsonRepresentation(resultJsonList);
    jsonRepresentation.setMediaType(MediaType.APPLICATION_JSON);
    return jsonRepresentation;
}



                                                       Google Confidential and Proprietary
Kratu - backend example
Json response example:
[{
     "lostISBudget": 0,
     "lostISRank": 90,
     "key": "7767761884-Search Network" ,
     "mccId": 2742928629,
     "timestamp": "Mar 6, 2013 8:51:08 AM" ,
     "accountId": 7767761884,
     "accountDescriptiveName": "Julian 1$-day" ,
     "cost": 0,
     "clicks": 0,
     "impressions": 0,
     "conversions": 0,
     "ctr": 0,
     "avgCpm": 0,
     "avgCpc": 0,
     "avgPosition": 0,
     "currencyCode": "USD",
     "adNetwork": "Search Network"
}]


                                                   Google Confidential and Proprietary
Q&A

Mais conteúdo relacionado

Semelhante a Account Performance and Optimization

Opportunity Analysis with Kratu
Opportunity Analysis with KratuOpportunity Analysis with Kratu
Opportunity Analysis with Kratu
marcwan
 
Deep Visibility: Logging From Distributed Microservices
Deep Visibility: Logging From Distributed MicroservicesDeep Visibility: Logging From Distributed Microservices
Deep Visibility: Logging From Distributed Microservices
AaronLieberman5
 
AwReporting Update
AwReporting UpdateAwReporting Update
AwReporting Update
marcwan
 

Semelhante a Account Performance and Optimization (20)

Opportunity Analysis with Kratu
Opportunity Analysis with KratuOpportunity Analysis with Kratu
Opportunity Analysis with Kratu
 
MongodB Internals
MongodB InternalsMongodB Internals
MongodB Internals
 
Siddhi - cloud-native stream processor
Siddhi - cloud-native stream processorSiddhi - cloud-native stream processor
Siddhi - cloud-native stream processor
 
Large scale data capture and experimentation platform at Grab
Large scale data capture and experimentation platform at GrabLarge scale data capture and experimentation platform at Grab
Large scale data capture and experimentation platform at Grab
 
About The Event-Driven Data Layer & Adobe Analytics
About The Event-Driven Data Layer & Adobe AnalyticsAbout The Event-Driven Data Layer & Adobe Analytics
About The Event-Driven Data Layer & Adobe Analytics
 
[WSO2Con Asia 2018] Patterns for Building Streaming Apps
[WSO2Con Asia 2018] Patterns for Building Streaming Apps[WSO2Con Asia 2018] Patterns for Building Streaming Apps
[WSO2Con Asia 2018] Patterns for Building Streaming Apps
 
Building Data Products with BigQuery for PPC and SEO (SMX 2022)
Building Data Products with BigQuery for PPC and SEO (SMX 2022)Building Data Products with BigQuery for PPC and SEO (SMX 2022)
Building Data Products with BigQuery for PPC and SEO (SMX 2022)
 
A federated information infrastructure that works
A federated information infrastructure that works A federated information infrastructure that works
A federated information infrastructure that works
 
Modern Thinking área digital MSKM 21/09/2017
Modern Thinking área digital MSKM 21/09/2017Modern Thinking área digital MSKM 21/09/2017
Modern Thinking área digital MSKM 21/09/2017
 
Alexandria ACM Student Chapter | Specification & Verification of Data-Centric...
Alexandria ACM Student Chapter | Specification & Verification of Data-Centric...Alexandria ACM Student Chapter | Specification & Verification of Data-Centric...
Alexandria ACM Student Chapter | Specification & Verification of Data-Centric...
 
Optimizing a React application for Core Web Vitals
Optimizing a React application for Core Web VitalsOptimizing a React application for Core Web Vitals
Optimizing a React application for Core Web Vitals
 
Applying BigQuery ML on e-commerce data analytics
Applying BigQuery ML on e-commerce data analyticsApplying BigQuery ML on e-commerce data analytics
Applying BigQuery ML on e-commerce data analytics
 
Deep Visibility: Logging From Distributed Microservices
Deep Visibility: Logging From Distributed MicroservicesDeep Visibility: Logging From Distributed Microservices
Deep Visibility: Logging From Distributed Microservices
 
Optimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature DeliveryOptimizely Agent: Scaling Resilient Feature Delivery
Optimizely Agent: Scaling Resilient Feature Delivery
 
AwReporting Update
AwReporting UpdateAwReporting Update
AwReporting Update
 
Big Query - Women Techmarkers (Ukraine - March 2014)
Big Query - Women Techmarkers (Ukraine - March 2014)Big Query - Women Techmarkers (Ukraine - March 2014)
Big Query - Women Techmarkers (Ukraine - March 2014)
 
James Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 PatternsJames Turner (Caplin) - Enterprise HTML5 Patterns
James Turner (Caplin) - Enterprise HTML5 Patterns
 
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
Real-Time Personalized Customer Experiences at Bonobos (RET203) - AWS re:Inve...
 
Design for Scale - Building Real Time, High Performing Marketing Technology p...
Design for Scale - Building Real Time, High Performing Marketing Technology p...Design for Scale - Building Real Time, High Performing Marketing Technology p...
Design for Scale - Building Real Time, High Performing Marketing Technology p...
 
Sprint 45 review
Sprint 45 reviewSprint 45 review
Sprint 45 review
 

Mais de marcwan

Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)
marcwan
 
07. feeds update
07. feeds update07. feeds update
07. feeds update
marcwan
 
AdWords API & OAuth 2.0, Advanced
AdWords API & OAuth 2.0, Advanced AdWords API & OAuth 2.0, Advanced
AdWords API & OAuth 2.0, Advanced
marcwan
 
AdWords Scripts and MCC Scripting
AdWords Scripts and MCC ScriptingAdWords Scripts and MCC Scripting
AdWords Scripts and MCC Scripting
marcwan
 
Getting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google AnalyticsGetting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google Analytics
marcwan
 
Shopping Campaigns and AdWords API
Shopping Campaigns and AdWords APIShopping Campaigns and AdWords API
Shopping Campaigns and AdWords API
marcwan
 
API Updates for v201402
API Updates for v201402API Updates for v201402
API Updates for v201402
marcwan
 
AdWords API Targeting Options
AdWords API Targeting OptionsAdWords API Targeting Options
AdWords API Targeting Options
marcwan
 

Mais de marcwan (20)

Mcc scripts deck (日本語)
Mcc scripts deck (日本語)Mcc scripts deck (日本語)
Mcc scripts deck (日本語)
 
Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)Opportunity Analysis with Kratu (v2)
Opportunity Analysis with Kratu (v2)
 
07. feeds update
07. feeds update07. feeds update
07. feeds update
 
AdWords API & OAuth 2.0, Advanced
AdWords API & OAuth 2.0, Advanced AdWords API & OAuth 2.0, Advanced
AdWords API & OAuth 2.0, Advanced
 
AdWords Scripts and MCC Scripting
AdWords Scripts and MCC ScriptingAdWords Scripts and MCC Scripting
AdWords Scripts and MCC Scripting
 
Getting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google AnalyticsGetting Started with AdWords API and Google Analytics
Getting Started with AdWords API and Google Analytics
 
Shopping Campaigns and AdWords API
Shopping Campaigns and AdWords APIShopping Campaigns and AdWords API
Shopping Campaigns and AdWords API
 
API Updates for v201402
API Updates for v201402API Updates for v201402
API Updates for v201402
 
AdWords API Targeting Options
AdWords API Targeting OptionsAdWords API Targeting Options
AdWords API Targeting Options
 
Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)Reporting Tips and Tricks (Spanish)
Reporting Tips and Tricks (Spanish)
 
Rate limits and performance (Spanish)
Rate limits and performance (Spanish)Rate limits and performance (Spanish)
Rate limits and performance (Spanish)
 
OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)OAuth 2.0 (Spanish)
OAuth 2.0 (Spanish)
 
End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)End to-end how to build a platform (Spanish)
End to-end how to build a platform (Spanish)
 
AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)AwReporting tool introduction (Spanish)
AwReporting tool introduction (Spanish)
 
Api update rundown (Spanish)
Api update rundown (Spanish)Api update rundown (Spanish)
Api update rundown (Spanish)
 
AdWords Scripts (Spanish)
AdWords Scripts (Spanish)AdWords Scripts (Spanish)
AdWords Scripts (Spanish)
 
Mobile landing pages (Spanish)
Mobile landing pages (Spanish)Mobile landing pages (Spanish)
Mobile landing pages (Spanish)
 
Rate limits and performance
Rate limits and performanceRate limits and performance
Rate limits and performance
 
OAuth 2.0 refresher
OAuth 2.0 refresherOAuth 2.0 refresher
OAuth 2.0 refresher
 
Mobile landing pages
Mobile landing pagesMobile landing pages
Mobile landing pages
 

Último

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 

Último (20)

ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
Apidays Singapore 2024 - Scalable LLM APIs for AI and Generative AI Applicati...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWEREMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
EMPOWERMENT TECHNOLOGY GRADE 11 QUARTER 2 REVIEWER
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 
Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024Manulife - Insurer Transformation Award 2024
Manulife - Insurer Transformation Award 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot ModelNavi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Navi Mumbai Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
GenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdfGenAI Risks & Security Meetup 01052024.pdf
GenAI Risks & Security Meetup 01052024.pdf
 

Account Performance and Optimization

  • 1. AdWords API Workshops 2013 Account Performance & Optimization Finding the needle in your haystack Google Confidential and Proprietary
  • 2. Overview 1. How to Optimize ○ The Optimization Cycle 2. Developing a solid reporting backend ○ Reporting Workflow ○ Strategies for scaling, processing and storage ○ Introduction to sample applications 3. Keyword Optimizations ○ What are TIS and TES ○ Discovering good ideas with TIS and TES ○ Automated keyword optimizations strategy 4. Discovering optimization opportunities with Kratu ○ Introduction to Kratu ○ AdWords Optimization Report in Kratu ○ Kratu backend example Google Confidential and Proprietary
  • 3. How to Optimize? Google Confidential and Proprietary
  • 4. Measure Profile Optimization Cycle Optimize Google Confidential and Proprietary
  • 5. Measure Profile Performance data Structural data AdHoc AWQL Services Reports Optimize Google Confidential and Proprietary
  • 6. Measure Profile Kratu Custom (eg. Epsilon) Predictive Analysis Optimize Google Confidential and Proprietary
  • 7. Measure Profile Automatic Manual Semi Automatic Optimize Google Confidential and Proprietary
  • 8. Developing a solid reporting backend Google Confidential and Proprietary
  • 9. Reporting Workflow MCC Info Managed List<ManagedCustomer> Customer Service Report Definition ReportType Report Data Storage DateRange Report Downloader Processor MySql MongoDB ... Fields n-Threads Google Confidential and Proprietary
  • 10. Report Data Storage Report Downloader Processor MySql MongoDB ... n-Threads Process local temp files Keys must guarantee Based on Parses rows using a Uniqueness per MultipleClient CSVReader ReportRow ReportDownloader (Date/Day, Segments) example Write calls to Storage must be in batches Rows Updates are Each Thread runs a frequent ReportDownloder with: Batch size depends on technology/memory Create indexes for: ● AdWordsSession ● ClientCustomerId Shard data based on ● AccountId ● ReportDefinition account, subMCCs, dates ● Date/Day ● CSV & GZip or common attributes ● CampaignId ● Segments... Google Confidential and Proprietary
  • 11. Implementing a MySql ReportProcessor connection.setAutoCommit( false); statement.execute(" SET UNIQUE_CHECKS=0; ALTER TABLE ... DISABLE KEYS;"); for (File file : localFiles) { preparedStatement = "INSERT INTO .. (.) VALUES (.) ON DUPLICATE KEY UPDATE (.)"; CSVReader csvReader = new CSVReader(new InputStreamReader (new FileInputStream ( file.getAbsolutePath() + ".gunzip"), " UTF-8"), ',', '"', 1); reportRows = new ModifiedCsvToBean <Report>(). parseReport(mapping, csvReader); for (Report reportItem : reportRows) { addInsertToBatch(reportItem, preparedStatement); // Executing the Batch every 500 inserts to reduce memory usage if (batchSize++ >= 500) { preparedStatement.executeBatch(); connection.commit(); batchSize = 0; } }... }... statement.execute(" SET UNIQUE_CHECKS=1; ALTER TABLE ... ENABLE KEYS;"); Google Confidential and Proprietary
  • 12. Implementing a MongoDB ReportProcessor for (File file : localFiles) { CSVReader csvReader = new CSVReader(new InputStreamReader( new FileInputStream(file),"UTF-8"), ',', '"', 1); List<Report> reportObjectList = ModifiedCsvToBean<Report>().parseReport(mapping, csvReader); csvReader.close(); // Save in MongoDB (there is also an AppEngine implementation) // Iterates using Google Gson: gsonBuilder.create().toJson(Object) // and DBObject: com.mongodb.util.JSON.parse(jsonObject) noSqlStorage.save(reportObjectList); } Google Confidential and Proprietary
  • 13. Keyword Optimizations Google Confidential and Proprietary
  • 14. TIS SearchParameter[ ] Keyword / Placement TargetingIdeaSelector Ideas / Stats AttributeType[ ] (fields) Targeting Idea Service TargetingIdea[ ] Type_AttributeMapEntry[ ] (field,value) Google Confidential and Proprietary
  • 15. TIS - Search Parameters & Fields SearchParameter[ ] AttributeType[ ] (fields) ● AdSpecList ● Average Cpc ● CategoryProductsAndServices ● Average Targeted Monthly Searches ● Competition ● Category Products and Services ● ExcludedKeyword ● Competition ● IdeaTextFilter ● Criterion ● IncludeAdultContent ● Extracted from Webpage ● Language ● Global Monthly Searches ● Location ● Idea Type ● Network NEW ● Keyword Category ● PlacementType ● Keyword Text ● RelatedToQuery ● Negative Keywords ● RelatedToUrl ● Search Share ● SearchVolume ● Search Volume ● SeedAdGroupId ● Targeted Monthly Searches ... Google Confidential and Proprietary
  • 16. TIS EXAMPLE LanguageSearchParameter = english RelatedToUrlSearchParameter = http://www.someplumbers.com/ LocationSearchParameter = uk RequestType. IDEAS, IdeaType. KEYWORD {AttributeType. KEYWORD_TEXT, AttributeType. SEARCH_VOLUME, AttributeType. AVERAGE_CPC ,AttributeType. COMPETITION} Targeting Idea Service KEYWORD_TEXT searchVol avgCPC Competition 'london plumbing service' 16 5.13 0.858 'london plumbing services' 46 9.41 0.765 'emergency plumbing service' 28 6.71 0.912 ... new Google Confidential and Proprietary
  • 17. TES TrafficEstimatorSelector CampaignEstimateRequest[ ] Criterion[ ], campaignId AdGroupEstimateRequest[ ] adGroupId, maxCPC KeywordEstimateRequest[ ] keyword, maxCpc, isNegative Traffic Estimator Service CampaignEstimate[ ] campaignId AdGroupEstimate[ ] adGroupId KeywordEstimate[ ] criterionId, Min & Max StatsEstimates averageCpc, averagePosition, clicksPerDay, impressionsPerDay, clickThroughRate, totalCost Google Confidential and Proprietary
  • 18. campaignEstimateRequest.setCriteria(new Criterion[] { uk, english }); adGroupEstimateRequest.setMaxCpc(new Money(null, 1000000)); // 1€ adGroupEstimateRequest.setKeywordEstimateRequests( ... 'london plumbing service' 'emergency plumbing service london' 'emergency plumbing services london'... )... Traffic Estimator Service Keyword avgCPC avgPosition dayClicks totalCost CTR dayImpressions 'london plumbing service', 0.87, 2.00, 0.02, 0.02, 0.04, 0.58 'plumbing services london', 0.71, 8.56, 0.54, 0.39, 0.01, 49.33 new new ... Google Confidential and Proprietary
  • 19. Example Optimization - Epsilon Greedy Inspired http://en.wikipedia.org/wiki/Multi-armed_bandit Automatic auto glass repair ● Regular car glass replacement ● Set and forget ● Needs close monitoring windshield repair vehicle glass repair Semi-automatic KW Research ● Manual lookup car window repair Using TIS+TES ● Suggest KWs for exchange fix car glass ● KW Research can be manual car glass glass window glasses repair KW window repair Google Confidential and Proprietary
  • 20. Discovering optimization opportunities with Kratu Google Confidential and Proprietary
  • 21. Kratu - Open Source Issue and Opportunity Discovery Google Confidential and Proprietary
  • 22. Kratu - Open Source Issue and Opportunity Discovery ● Open Source, Google driven ○ http://google.github.com/kratu/ ● Client-side, runs in the browser. Implemented in JavaScript ● Includes prebuilt working example for AdWords ○ Starting point created by experienced Google Account Managers ○ Used internally at Google to display data for millions of accounts ○ Provided as-is. Use with caution. Google accepts no liabilities. ● BYOD - Bring Your Own Data ○ Anything that can be converted to a JS Array with key/value objects ○ Includes simple JSON and CSV loaders ● We offer a Google built sample backend ● Easily integratable with other, non-AdWords data Google Confidential and Proprietary
  • 24. Kratu - Implementation - Overview Reporting Data Storage backend MySql Fetch MongoDB Process ... Store Web server /kratu/ /rest/accounts/ Google Confidential and Proprietary
  • 25. Kratu - Implementation ● Easy to add other signals ○ Add any key/value pair to your data, define a weight and a threshold ● Flexible model ○ Custom and built-in calculation of opportunity/issue ○ Compose new signals from multiple data points ○ Custom and built-in event handlers (integrate with other systems) ○ Custom and built-in formatting ● Paginations for larger number of accounts ● Re-use data and signals to produce new reports ○ Targeted reports, eg. upselling opportunities, mobile adoption ○ Personalized reports, eg. individual for Account managers ● End-to-end tutorial available here: ○ http://google.github.com/kratu/tutorial/ Google Confidential and Proprietary
  • 26. Kratu - backend example Quick example using Restlet and Gson: router.attach("/accountreports/{accountId}", ReportRest.class); String accountId = (String) getRequestAttributes().get(" accountId"); @Get public JsonRepresentation getAccountPerformanceReportHandler() { // Gets Reports from MongoDB or MySql as Java Objects List<Report> listAccountReports = Report.getReportByAccountIdMonth( accountId, date, "AccountReport"); String resultJsonList = gson.toJson(listAccountReports); JsonRepresentation jsonRepresentation = new JsonRepresentation(resultJsonList); jsonRepresentation.setMediaType(MediaType.APPLICATION_JSON); return jsonRepresentation; } Google Confidential and Proprietary
  • 27. Kratu - backend example Json response example: [{ "lostISBudget": 0, "lostISRank": 90, "key": "7767761884-Search Network" , "mccId": 2742928629, "timestamp": "Mar 6, 2013 8:51:08 AM" , "accountId": 7767761884, "accountDescriptiveName": "Julian 1$-day" , "cost": 0, "clicks": 0, "impressions": 0, "conversions": 0, "ctr": 0, "avgCpm": 0, "avgCpc": 0, "avgPosition": 0, "currencyCode": "USD", "adNetwork": "Search Network" }] Google Confidential and Proprietary
  • 28. Q&A