universo-virtual.com

buytrendz.net

thisforall.net

benchpressgains.com

qthzb.com

mindhunter9.com

dwjqp1.com

secure-signup.net

ahaayy.com

soxtry.com

tressesindia.com

puresybian.com

krpano-chs.com

cre8workshop.com

hdkino.org

peixun021.com

qz786.com

utahperformingartscenter.org

maw-pr.com

zaaksen.com

ypxsptbfd7.com

worldqrmconference.com

shangyuwh.com

eejssdfsdfdfjsd.com

playminecraftfreeonline.com

trekvietnamtour.com

your-business-articles.com

essaywritingservice10.com

hindusamaaj.com

joggingvideo.com

wandercoups.com

onlinenewsofindia.com

worldgraphic-team.com

bnsrz.com

wormblaster.net

tongchengchuyange0004.com

internetknowing.com

breachurch.com

peachesnginburlesque.com

dataarchitectoo.com

clientfunnelformula.com

30pps.com

cherylroll.com

ks2252.com

webmanicura.com

osostore.com

softsmob.com

sofietsshotel.com

facetorch.com

nylawyerreview.com

apapromotions.com

shareparelli.com

goeaglepointe.com

thegreenmanpubphuket.com

karotorossian.com

publicsensor.com

taiwandefence.com

epcsur.com

odskc.com

inzziln.info

leaiiln.info

cq-oa.com

dqtianshun.com

southstills.com

tvtv98.com

thewellington-hotel.com

bccaipiao.com

colectoresindustrialesgs.com

shenanddcg.com

capriartfilmfestival.com

replicabreitlingsale.com

thaiamarinnewtoncorner.com

gkmcww.com

mbnkbj.com

andrewbrennandesign.com

cod54.com

luobinzhang.com

bartoysdirect.com

taquerialoscompadresdc.com

aaoodln.info

amcckln.info

drvrnln.info

dwabmln.info

fcsjoln.info

hlonxln.info

kcmeiln.info

kplrrln.info

fatcatoons.com

91guoys.com

signupforfreehosting.com

faithfirst.net

zjyc28.com

tongchengjinyeyouyue0004.com

nhuan6.com

oldgardensflowers.com

lightupthefloor.com

bahamamamas-stjohns.com

ly2818.com

905onthebay.com

fonemenu.com

notanothermovie.com

ukrainehighclassescort.com

meincmagazine.com

av-5858.com

yallerdawg.com

donkeythemovie.com

corporatehospitalitygroup.com

boboyy88.com

miteinander-lernen.com

dannayconsulting.com

officialtomsshoesoutletstore.com

forsale-amoxil-amoxicillin.net

generictadalafil-canada.net

guitarlessonseastlondon.com

lesliesrestaurants.com

mattyno9.com

nri-homeloans.com

rtgvisas-qatar.com

salbutamolventolinonline.net

sportsinjuries.info

topsedu.xyz

xmxm7.com

x332.xyz

sportstrainingblog.com

autopartspares.com

readguy.net

soniasegreto.com

bobbygdavis.com

wedsna.com

rgkntk.com

bkkmarketplace.com

zxqcwx.com

breakupprogram.com

boxcardc.com

unblockyoutubeindonesia.com

fabulousbookmark.com

beat-the.com

guatemala-sailfishing-vacations-charters.com

magie-marketing.com

kingstonliteracy.com

guitaraffinity.com

eurelookinggoodapparel.com

howtolosecheekfat.net

marioncma.org

oliviadavismusic.com

shantelcampbellrealestate.com

shopleborn13.com

topindiafree.com

v-visitors.net

qazwsxedcokmijn.com

parabis.net

terriesandelin.com

luxuryhomme.com

studyexpanse.com

ronoom.com

djjky.com

053hh.com

originbluei.com

baucishotel.com

33kkn.com

intrinsiqresearch.com

mariaescort-kiev.com

mymaguk.com

sponsored4u.com

crimsonclass.com

bataillenavale.com

searchtile.com

ze-stribrnych-struh.com

zenithalhype.com

modalpkv.com

bouisset-lafforgue.com

useupload.com

37r.net

autoankauf-muenster.com

bantinbongda.net

bilgius.com

brabustermagazine.com

indigrow.org

miicrosofts.net

mysmiletravel.com

selinasims.com

spellcubesapp.com

usa-faction.com

snn01.com

hope-kelley.com

bancodeprofissionais.com

zjccp99.com

liturgycreator.com

weedsmj.com

majorelenco.com

colcollect.com

androidnews-jp.com

hypoallergenicdogsnames.com

dailyupdatez.com

foodphotographyreviews.com

cricutcom-setup.com

chprowebdesign.com

katyrealty-kanepa.com

tasramar.com

bilgipinari.org

four-am.com

indiarepublicday.com

inquick-enbooks.com

iracmpi.com

kakaschoenen.com

lsm99flash.com

nana1255.com

ngen-niagara.com

technwzs.com

virtualonlinecasino1345.com

wallpapertop.net

nova-click.com

abeautifulcrazylife.com

diggmobile.com

denochemexicana.com

eventhalfkg.com

medcon-taiwan.com

life-himawari.com

myriamshomes.com

nightmarevue.com

allstarsru.com

bestofthebuckeyestate.com

bestofthefirststate.com

bestwireless7.com

declarationintermittent.com

findhereall.com

jingyou888.com

lsm99deal.com

lsm99galaxy.com

moozatech.com

nuagh.com

patliyo.com

philomenamagikz.net

rckouba.net

saturnunipessoallda.com

tallahasseefrolics.com

thematurehardcore.net

totalenvironment-inthatquietearth.com

velislavakaymakanova.com

vermontenergetic.com

sizam-design.com

kakakpintar.com

begorgeouslady.com

1800birks4u.com

2wheelstogo.com

6strip4you.com

bigdata-world.net

emailandco.net

gacapal.com

jharpost.com

krishnaastro.com

lsm99credit.com

mascalzonicampani.com

sitemapxml.org

thecityslums.net

topagh.com

flairnetwebdesign.com

bangkaeair.com

beneventocoupon.com

noternet.org

oqtive.com

smilebrightrx.com

decollage-etiquette.com

1millionbestdownloads.com

7658.info

bidbass.com

devlopworldtech.com

digitalmarketingrajkot.com

fluginfo.net

naqlafshk.com

passion-decouverte.com

playsirius.com

spacceleratorintl.com

stikyballs.com

top10way.com

yokidsyogurt.com

zszyhl.com

16firthcrescent.com

abogadolaboralistamd.com

apk2wap.com

aromacremeria.com

banparacard.com

bosmanraws.com

businessproviderblog.com

caltonosa.com

calvaryrevivalchurch.org

chastenedsoulwithabrokenheart.com

cheminotsgardcevennes.com

cooksspot.com

cqxzpt.com

deesywig.com

deltacartoonmaps.com

despixelsetdeshommes.com

duocoracaobrasileiro.com

fareshopbd.com

goodpainspills.com

kobisitecdn.com

makaigoods.com

mgs1454.com

piccadillyresidences.com

radiolaondafresca.com

rubendorf.com

searchengineimprov.com

sellmyhrvahome.com

shugahouseessentials.com

sonihullquad.com

subtractkilos.com

valeriekelmansky.com

vipasdigitalmarketing.com

voolivrerj.com

zeelonggroup.com

1015southrockhill.com

10x10b.com

111-online-casinos.com

191cb.com

3665arpentunitd.com

aitesonics.com

bag-shokunin.com

brightotech.com

communication-digitale-services.com

covoakland.org

dariaprimapack.com

freefortniteaccountss.com

gatebizglobal.com

global1entertainmentnews.com

greatytene.com

hiroshiwakita.com

iktodaypk.com

jahatsakong.com

meadowbrookgolfgroup.com

newsbharati.net

platinumstudiosdesign.com

slotxogamesplay.com

strikestaruk.com

trucosdefortnite.com

ufabetrune.com

weddedtowhitmore.com

12940brycecanyonunitb.com

1311dietrichoaks.com

2monarchtraceunit303.com

601legendhill.com

850elaine.com

adieusolasomade.com

andora-ke.com

bestslotxogames.com

cannagomcallen.com

endlesslyhot.com

iestpjva.com

ouqprint.com

pwmaplefest.com

qtylmr.com

rb88betting.com

buscadogues.com

1007macfm.com

born-wild.com

growthinvests.com

promocode-casino.com

proyectogalgoargentina.com

wbthompson-art.com

whitemountainwheels.com

7thavehvl.com

developmethis.com

funkydogbowties.com

travelodgegrandjunction.com

gao-town.com

globalmarketsuite.com

blogshippo.com

hdbka.com

proboards67.com

outletonline-michaelkors.com

kalkis-research.com

thuthuatit.net

buckcash.com

hollistercanada.com

docterror.com

asadart.com

vmayke.org

erwincomputers.com

dirimart.org

okkii.com

loteriasdecehegin.com

mountanalog.com

healingtaobritain.com

ttxmonitor.com

bamthemes.com

nwordpress.com

11bolabonanza.com

avgo.top

How To Use AdWords Scripts Efficiently In Agencies And Enterprise SEM - SEO
Monday, April 21, 2025
spot_img

Top 5 This Week

Related Posts

How To Use AdWords Scripts Efficiently In Agencies And Enterprise SEM

I’m a big fan of all the things you can automate using AdWords Scripts — from calculating account-level Quality Score, to creating ads from a spreadsheet, to optimizing keywords using data from the Search Terms report. When using scripts to manage a single account, it’s well worth the effort to install and tweak them because of the amount of time you’ll save down the road.

But when it comes to managing enterprise-level AdWords, or managing multiple accounts as an agency, the truth is that a lot of the time saved ends up wasted in the minutiae of keeping everything organized and running. AdWords Scripts were not built with multi-account management in mind. Luckily, there are a few ways to address these shortcomings.

What follows are my five tips for making Scripts more efficient when you’re managing multiple (or very large) AdWords accounts. The first three are tricks to more easily manage scripts across multiple accounts.

1. How To Update A Script Once & Have The Changes Apply To All Accounts

Until Google introduces a way to run scripts from MCC accounts, we’re forced to add the same code in each account where we want to use it. While it’s not ideal, I can live with the inconvenience of adding the same script to multiple accounts — but the real waste of time starts when you fix a bug or make some improvement to the code.

These code changes don’t automatically propagate to the other accounts, so unless you go back and update the code in each account manually, your hard work to improve a script won’t benefit all of the other accounts you’re working on. That’s a problem….

So, what’s the solution for keeping a script synched across many accounts? Move the main functionality out of the code you put into AdWords and host it somewhere else. Then, serve up this remotely hosted code every time an account needs it.

There are a few options for where to keep the code: Russ Savage explains how to host your script for free on Google Drive. I prefer to host my remote scripts on Amazon S3, where I can take advantage of automatic versioning so that I can easily request an older version of the script if I happen to break something while making changes.

Run An AdWords Script RemotelyRun An AdWords Script Remotely

Here’s a code sample that shows how to request a piece of code from Amazon S3 or another web server.

Put this in AdWords:

function main() {
var fileToFetch = "https://www.example.com/myscript.js";
   var scriptFile = UrlFetchApp.fetch(fileToFetch);
   var scriptText = scriptFile.getContentText();
   SETTINGS.className = "remoteScript";
   eval(scriptText);
   var script = eval('new '+SETTINGS.className+'();');
   script.main();
}

 

Put this in your remotely hosted file, https://www.example.com/myscript.js:

function remoteScript() {
this.main = function() {
     Logger.log("Hello World");
   }
}

2. How To Change Settings Of A Script Without Changing The Code

Once you have your script hosted remotely so it can be called on the fly by any account that needs it, you may find yourself still logging into each account to change the settings. For example, many reporting scripts might be useful to run daily, weekly and monthly, and changing this involves changing some code.

Including settings that you might want to change in the main code is not ideal since it forces you to maintain many versions of the same script or tweak them every time you want to change even the smallest thing. When managing multiple accounts, managing many versions of the same script can quickly get out of hand, leading to errors like unintended changes in an account, running outdated scripts which don’t include your latest improvements, and wasting your time by making you manually go into accounts to make changes.

So, what are some ways to let one script run with different settings for each account you manage? I do this by keeping the script completely generic and putting all settings in a Google Sheet. The script looks at the Google Sheet every time it runs to get my settings, and then it uses those to finish what it’s supposed to do.

Not only does this allow me to use exactly the same script code in every account, it also lets me keep settings for all accounts in a central place. Now, when I want to change the date range or another setting for a script, I no longer need to go to that account to make the change but instead I just change the settings in the spreadsheet.

Get AdWords Script Settings From SpreadsheetGet AdWords Script Settings From Spreadsheet

Here’s some code you can use to read in the settings from a Google Sheet. Just set the first row in the sheet to the names of the variables used in the script and then put the values for those variables on a new line:

var SETTINGS = new Object();
SETTINGS.taskSheet = SpreadsheetApp.openByUrl
(“htt://url_of_my_google_sheet”).getSheetByName("My Tab With Tasks");
var rows = SETTINGS.taskSheet.getDataRange();
var numRows = rows.getNumRows();
var numCols = rows.getNumColumns();
var values = rows.getValues();

// Read Header Rows
var headerNames = new Array();
var row = values[0];
for(var i = 0; i < numCols; i++) {
 headerNames[i] = "" + row[i];
}

// Read Data Rows With Settings And Run Script If Needed
for(var i = 1; i<numRows; i++) {
 var row = values[i];
 for(var j = 0; j < headerNames.length; j++) {
   var headerName = headerNames[j];
   var value = row[j];
   SETTINGS[headerName] = value;
 }
}

 

Now, your script can reference SETTINGS.variableNameFromColumnHeader and get the setting from the Google Sheet.

3. How To Run More Than 150 Instances Of Scripts

AdWords limits every user to authorize up to 150 scripts. That’s usually more than enough if you’re managing one account, but if your username is for an MCC where you have 15 accounts, now your 150 scripts are shared, and you really only have 10 scripts per account you manage.

The workaround for this one is simple, but a bit annoying. I simply create a new login for each account I manage. I use that unique login to add scripts to the account so that I can maintain my full allotment of 150 scripts per account.

The next two tips are useful even if you’re only managing a single AdWords account, but it’s a large one or you’re looking to make tons of changes…

4. Prevent Scripts From Timing Out When Making Many Changes

This is a tip I got from the Google Developers site, and I experienced the difference it can make firsthand so I thought it was worth sharing here. Scripts will run much more quickly if you avoid switching between reading and writing from AdWords.

Even though scripts don’t have an explicit capability to submit changes in batch, they are optimized on Google’s end to do batch changes when possible. They will hold off on making changes to an account as long as possible and then make all the changes in bulk, which is much faster. When you switch from a command that make a change to a command that reads from AdWords, they process all pending changes in bulk.

So, if you alternate between reading and writing, your script will be much slower than if you do 100 write operations in sequence before doing another read.

Here’s an example: when you are updating bids, you might be iterating through every keyword to first ask for the keyword metrics, then calculating a new bid and then submitting the new bid. That will be very slow and, in my experience, I’ve done fewer than 300 bid changes during the 30 minute maximum time a script can run.

A better way is to read in all the keyword data first and calculate the new bids, storing the new bids in a variable. Only once all the calculations are done should the script submit the new bids, one right after the other. Doing it that way, I’ve processed thousands of bid changes and not even hit the 30 minute execution limit.

5. Get Around The 250,000 Entity Limit In Scripts

Building on the previous example, your script would still fail to complete if you were trying to make bid changes for an account that has more than 250,000 keywords because each script can at most process 250,000 entities using iterators like keywords.next(). A simple workaround is to do as much of the work as possible using reports instead of iterators.

A report has no problem fetching all the metrics for millions of keywords in a matter of seconds. The 250,000 limit does not apply when iterating through all the rows of a report, so now it’s possible to calculate bid changes for every keyword. Only when that’s done do you start to send the new bids into AdWords, again doing them sequentially, avoiding switching between reading and writing. So long as you have fewer than 250,000 bids to change, you should be alright.

Those are five ways to make Scripts more useful for agencies, advertisers with very large accounts, and others who need to work on multiple accounts. Happy scripting!


Contributing authors are invited to create content for Search Engine Land and are chosen for their expertise and contribution to the search community. Our contributors work under the oversight of the editorial staff and contributions are checked for quality and relevance to our readers. The opinions they express are their own.


Popular Articles