making adwords scripts scale - the norisk approach

Post on 23-Jan-2018

293 Views

Category:

Data & Analytics

3 Downloads

Preview:

Click to see full reader

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