Google Ads script limits: execution time, accounts and quotas
The limits that most often stop Google Ads scripts, and how to design around them.
Google Ads scripts run inside limits set by Google. Most scripts never notice them; large accounts and manager-level scripts do.
The limits that matter most
- Execution time: 30 minutes. A run that takes longer is stopped. Whatever it had not reached is not processed.
- Schedule: hourly at most.
- Parallel accounts: 50 per run. A manager script using
executeInParallelcan process up to 50 client accounts in one execution. - Entities per selector: 50,000. An iterator returns at most that many campaigns, keywords or other entities; larger sets need a report query instead.
- Daily quotas apply to sending email, calling external URLs and working with spreadsheets.
Signs you are hitting a limit
- Runs end with a time-out message.
- The script succeeds but later accounts or campaigns are never touched.
- Run times creep towards 30 minutes as an account grows.
Designing around them
- Query, do not iterate. One
AdsApp.search()query that returns the rows you need is far faster than looping through entities and asking each for statistics. - Filter early. Put conditions in the query — enabled only, with impressions, in the date range — instead of filtering in JavaScript.
- Batch changes. Use bulk operations rather than changing entities one at a time.
- Split the work. Process a slice of campaigns or accounts per run and continue next time, using labels to remember what is done.
- Run at manager level in parallel rather than one account after another.
Watching for it
chiliad records the duration of every run and warns when a script's runs approach the 30-minute limit, so you can act before it starts cutting off. See How to fix a Google Ads script that times out.