making adwords scripts scale - the norisk approach
Post on 23-Jan-2018
298 Views
Preview:
TRANSCRIPT
Making SCALE
Chris Gutknecht & Alex Groß |
BACKGROUND: PPC MEETUP MUNICH
Meetup Group – Founder: Philipp Mainka
meetup.com/de-DE/PPC-Meetup-Munich/
• First event in August 2017 @ SEM Boutique
• Spinoff of SEM Stammtisch
• Idea: Talks – Drinks – Food – Network (EN & DE)
• Frequency : Every two months
>> Call for Speakers, Hosts, Sponsors, Panel Attendants!
ABOUT NORISK – ABOUT US
norisk
Chris Alex
1. Reasons for AdWords Scripts
2. Limitations of Adwords Scripts
3. Performance Tweaks
1. Run time: Job-Splitting, Log-DB and Sync Best Practices
2. Updates: External Hosting
4. Takeaways
PPC: HUMAN VS MACHINE?
PPC: HUMAN VS MACHINE?
Understand intent
Express emotion
Adapt to change, context
Design structure
Find errors & Learn
Handle big datasets
Routine tasks (Syncs)
Calculate probability
Monitor & Alert
GOOGLE: WE USE AI FOR {INSERT_NEW_TOPIC}
TREND TOWARDS AUTOMATION & AI
TREND ZU AUTOMATION (& AI)
LEARN TO THINK LIKE A MACHINE
MACHINE VS HUMAN: WHAT DO PPCS SAY?
Source: The PPC Battle: Human vs Machine? (n ~ 100)
CORE QUESTION: MAKE OR RENT?
CORE QUESTION: MAKE OR RENT?
MAKE SaaS RENT AdWords
Scripts
API-Tool
SAAS VENDOR IS TIME-CONSUMING
BUY
Time
Cost
SaaS
Vendor selection
Requirements definition
ADWORDS SCRIPTS vs SAAS-TOOL
AdWords
Scripts
API-Tool
BUY
MAKE
Time
Cost
SaaS
Requirements specification needed for both!
WHY IS „MAKE“ FOR ADWORDS MORE ATTRACTIVE?
vs
Feed platfoms
Free adwords script
Ad Customizer & Business data
Code-Tutorial platforms
Machine Learning APIs
Camato
Delta Method
Smarter Ecommerce
DIY Tools (MAKE) RENT
CORE QUESTION: MAKE OR RENT?
MAKE SaaS RENT AdWords
Scripts
Standardized Individual
Specific
Isolated
Stable
Scalable
Complex
Lack of know-how
Volatile
Perspective
2016 vs 2017
ADWORDS SCRIPTS VS API-TOOL
Additional cost of API-tool
• Maintenance cost
• API cost
• Utility-cost (Auth, Log, Email)
• Script transfer to Java, PHP, Python
1. Reasons for AdWords Scripts
2. Limitations of Adwords Scripts
3. Performance Tweaks
1. Run time: Job-Splitting, Log-DB and Sync Best Practices
2. Updates: External Hosting
4. Takeaways
LIMITATIONS OF ADWORDS SCRIPTS
RUNTIME(30min) STORAGE(5-10GB)
ENTITYLIMITS
SPREADSHEET(2Mio)
MISSINGMETHODS
CODESTRUCTURE(ES5) UPDATES
ERROR-ALERTING&UTILITIES
SERVICELIMITS
Limits-Docs: https://developers.google.com/adwords/scripts/docs/limits Thomas Grübel SMX: bit.ly/inbiz_smx
(only „hard“ limitation)
TREND ZU AUTOMATION (& AI)
BENCHMARK
LinkCheckerDeluxe nrFeedCampaigns nrShoppingSync
Maxelements/hour(/day)
3000(72k)
4000(92k)
1000(24k)
OperaSon CheckfinalUrl&label CreateadGroups,Ads,Keywords,Sitelinks,Labels
Syncproductgroupsalongtreestructure
( )
RULE OF THUMB: LINEAR SCALABILITY
More logic => flatter curve
0
500
1000
1500
2000
2500
3000
3500
0 5 10 15 20 25 30 35 40
CreatedElementsandExecuBonTimeinmin(n=12)
[SCRIPTS BASICS: THE ITERATOR OBJECT]
var adGroupIterator = AdWordsApp.adGroups() .withCondition("Name CONTAINS '" + var + "') .withCondition("Impressions > 10") .forDateRange("LAST_MONTH") .get();
while (adGroupIterator.hasNext()) { var adGroup = adGroupIterator.next(); // Do stuff adGroup.setStatus("ENABLED"); var adOperation = adGroup.newAd().expandedTextAdBuilder()... var keywordBuilder = adGroup.newKeywordBuilder().withText(); adGroup.createNegativeKeyword(); adgroup.addSitelink();
}
Selector
Sel.+ get()= Iterator
1. Reasons for AdWords Scripts
2. Limitations of AdWords Scripts
3. Performance Tweaks
1. Run time: Job-Splitting, Log-DB and Sync Best Practices
2. Updates: External Hosting
4. Takeaways
SCALING = HOURLY RUNS + JOB-SPLITTING
vs
Iterative processing
Saving the current state
LinkCheckerDeluxe
Issues:
› Logic for saving & loading
› State-Sync-Errors (1%)
Simple logic
Endlessly repeatable
DailyAccountSpendPrinter
Issues: 30 Min Run time
STATELESSNESS JOB-SPLITTING
START W
PROGRESS LOG FOR JOB SPLITTING
Alternatives
LABELS GET-STATUS & COMPARE LOG-DB
Use Case� Daily Checks
Status update
Feedbased entity creation & update Entity selector without string search
Google Sheets vs Big Query
Example� LinkCheckerDeluxe
AdGroups, Ads, Keywords
Product groups
Sitelinks
Limitation� Status accuracy < 100%
Labels not always available
GetAll method not always available
2 Mio Google sheet cells
Exact data set definition in advance
Example: Manage Multi-account MCC script via labels (Russ Savage)
TEST: LINKCHECKER DELUXE (BY HOLGER SCHULZ)
Hourly Scheduling
Job Splitting via label
Good stuff
URL fetch limit 10k/user/day
https://www.internet-marketing-inside.de/AdWords-Scripts/LinkChecker.html
✔ ✔ ✔ !
Finished.
ADDON: NORISK-TIMER LIBRARY
Custom Scheduling: Start later!
https://gist.github.com/norisk-marketing/9876221a815092fecfec99414b0e28e5
SYNCHRONISATION CHALLENGES
Target State 1. Get &
Find Gap
Actual State (AdWords)
DB
2. Update
SCRIPT
3. Log
GOOGLE SHEETS vs BIG QUERY
SYNC BEST PRACTICES I
Well documented API
Non-tech access
Free
Can break with lots of data
Read/write slower
Sheet limitations (2 mio cells)
Fast/easy setup
Integrates into Google Cloud
Fast read/write access
AdWords Scripts API not well documented
User permissions complex
Costs with big amounts of data
Manage DB containing multiple Spreadsheets
SYNC BEST PRACTICES II
Service creates new sheets as needed
References every sheet in JSON file in Drive
Easy data access through one method
✔ ✔ ✔ !
https://gist.github.com/norisk-marketing/7cb04d87080dc80c056dc8b1785ded63
Manage BigQuery data tables via Storage Handler
SYNC BEST PRACTICES III
SQL-Wrapper for Google BigQuery => easy to use, no SQL needed
Data safely stored in cloud database
Super cheap for small/medium amounts of data
✔ ✔ ✔ ! !
Storage InserBng Querying
Freedatapermonth 10GB - 1TB
Permonthcost 0,02$/GB 0,05$/GB 5$/TB
https://gist.github.com/norisk-marketing/8f459d666ac016a4d7eecf8f180771e1
STOP WATCH
RUN TIME BEST PRACTICES I
Log start time and current_time => Calculate difference
Stop if not enough time left!
No data sync inaccuracies!
✔ ✔ ✔
DB data access via object key
RUN TIME BEST PRACTICES II
Comparison of two sets of data (arrays)
Converting the base array into an object with id as key
Syntax object assignment and read
~2500 times faster than array comparison
Ex.: 10k sets of data à 0,1 sec = 16 min > 32 sek
✔ ✔ ✔ ✔
Managing Scripts and Updates centrally
EXTERNAL HOSTING
Get and execute external javascript files, hosting anywhere, e.g. Google Drive, github, own file server
Manage updates from one central file for +10 Accounts
✔ ✔ !
ADDON EXCEPTION HANDLING
Always wrap logic in try/catch
Print errors into console for error tracing
Get to root cause quickly! Be happy!
✔ ✔ ✔ !
Debugging with try/catch
TAKEAWAYS
Hourly Scheduling and Job Splitting
Job Splitting per Label, Log-DB or GetStatus
DB: Spreadsheet Wrapper or BigQuery Storage Handler
External Hosting for easy Updates and bug fixing
Test and be confident!
✔ ✔ ✔ ✔ ✔
MAKING ADWORDS SCRIPTS SCALE
HAPPY AUTOMATING & SCALING !
GUTKNECHT
Head of Online Marketing�
CHRISTOPHER
TWITTER @chrisgutknecht
MAIL cgutknecht@noriskshop.de
Scripts: github.com/norisk/AdWords-Scripts // gist.github.com/norisk-marketing Meetup: meetup.com/de-DE/PPC-Meetup-Munich/
GROSS
Marketing Technologist�
ALEXANDER
MAIL agross@noriskshop.de
top related