Stay organized with collections
Save and categorize content based on your preferences.
This page outlines various limits and limitations in Google Ads scripts that you
should be aware of. These limits can change at any time without warning, so
ensure that your scripts are flexible and contain error handling.
Execution time limits
Google Ads scripts
Google Ads scripts for advertiser accounts can execute for a maximum of 30
minutes, after which they will be cancelled. All of the changes made
before the script was cancelled will be applied.
Ads Manager scripts
Ads Manager scripts can normally execute for a maximum of 30 minutes after
which they will be cancelled. However, if an Ads Manager script uses the
executeInParallel
method to process accounts in parallel, and specifies a callback method, then it
can execute up to a maximum of 60 minutes before being cancelled. This is
illustrated in the following figure, where processAccount is the parallel
function, and allFinished is the callback method when calling
executeInParallel.
All of the changes made before the script was cancelled will be applied.
Entity limits
Scripts of Google Ads accounts
A single iterator will default to at most 50,000 results returned. You
can modify this by calling withLimit() on the selector.
A single selector can handle at most 10,000 IDs in selector.withIds().
If 10,000 or more IDs are specified, selector.get() will throw a runtime
error. Similarly, specifying an Id IN [LIST] condition with a list of IDs
10,000 will result in a runtime error.
Logging output will be truncated at 100Kb. A warning will be logged if that
happens.
Scripts of manager accounts
Each account processed by an Ads Manager script gets its own quota as listed
above.
When using the executeInParallel method, a script can process up to 50
accounts.
The processAccount method from executeInParallel can return up to
10MB of data.
Bulk upload limits
The upload file is limited to 50MB and one million rows, and will be rejected
upon submission if it exceeds these limits.
An upload job times out after two hours and the job will stop processing any
remaining data from the uploaded file.
OAuth2 is used to authorize scripts. Each account has a limit of 250
authorized scripts. Beyond that limit, one of the previously authorized
scripts will be deauthorized. This is only temporary, and the script can be
reauthorized the next time it is opened.
If you are frequently running into this limit, you should consider using
multiple user accounts to authorize different sets of scripts.
Video and shopping campaigns
The standard campaign selector (AdsApp.campaigns().get()) will filter
out video and
shopping campaigns
from the results. Use the dedicated campaign selectors instead:
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-22 UTC."],[[["\u003cp\u003eGoogle Ads scripts have an execution time limit of 30 minutes, while Ads Manager scripts can run for up to 60 minutes when using \u003ccode\u003eexecuteInParallel\u003c/code\u003e with a callback method.\u003c/p\u003e\n"],["\u003cp\u003eScripts for advertiser accounts have entity limits, including a 50,000 result limit per iterator, a 10,000 ID limit per selector, and a 100Kb logging output limit.\u003c/p\u003e\n"],["\u003cp\u003eAds Manager scripts have additional limits for processing accounts in parallel, with a maximum of 50 accounts and a 10MB data return limit for the \u003ccode\u003eprocessAccount\u003c/code\u003e method.\u003c/p\u003e\n"],["\u003cp\u003eBulk uploads are restricted to files under 50MB and one million rows, with a two-hour timeout for processing.\u003c/p\u003e\n"],["\u003cp\u003eEach Google Ads account can authorize up to 250 scripts, and exceeding this limit will temporarily deauthorize older scripts.\u003c/p\u003e\n"]]],[],null,["This page outlines various limits and limitations in Google Ads scripts that you\nshould be aware of. These limits can change at any time without warning, so\nensure that your scripts are flexible and contain error handling.\n\nExecution time limits\n\nGoogle Ads scripts\n\nGoogle Ads scripts for advertiser accounts can execute for a **maximum of 30\nminutes**, after which they will be cancelled. All of the changes made\nbefore the script was cancelled will be applied.\n\nAds Manager scripts\n\nAds Manager scripts can normally execute for a **maximum of 30 minutes** after\nwhich they will be cancelled. However, if an Ads Manager script uses the\n[`executeInParallel`](/google-ads/scripts/docs/reference/adsmanagerapp/adsmanagerapp_managedaccountselector#executeInParallel_2)\nmethod to process accounts in parallel, and specifies a callback method, then it\ncan execute up to a **maximum of 60 minutes** before being cancelled. This is\nillustrated in the following figure, where `processAccount` is the parallel\nfunction, and `allFinished` is the callback method when calling\n[`executeInParallel`](/google-ads/scripts/docs/reference/adsmanagerapp/adsmanagerapp_managedaccountselector#executeInParallel_2).\n\nAll of the changes made before the script was cancelled will be applied.\n\nEntity limits **Note:** [Reports](/google-ads/scripts/docs/features/reports) are not subject to any entity limits.\n\nScripts of Google Ads accounts\n\n- A single **iterator** will default to at most 50,000 results returned. You\n can modify this by calling `withLimit()` on the selector.\n\n- A single **selector** can handle at most 10,000 IDs in `selector.withIds()`.\n If 10,000 or more IDs are specified, `selector.get()` will throw a runtime\n error. Similarly, specifying an `Id IN [LIST]` condition with a list of IDs\n\n \u003e 10,000 will result in a runtime error.\n- Logging output will be truncated at 100Kb. A warning will be logged if that\n happens.\n\nScripts of manager accounts\n\n- Each account processed by an Ads Manager script gets its own quota as [listed\n above](#scripts_of_google_ads_accounts).\n\n- When using the `executeInParallel` method, a script can process up to **50**\n accounts.\n\n- The `processAccount` method from `executeInParallel` can return up to\n **10MB** of data.\n\nBulk upload limits\n\n- The upload file is limited to 50MB and one million rows, and will be rejected\n upon submission if it exceeds these limits.\n\n- An upload job times out after two hours and the job will stop processing any\n remaining data from the uploaded file.\n\nQuotas for Google services\n\nThe underlying Google Apps Script services impose daily quotas and hard limits\non some features. See a list of these [quotas and accompanying exception\nmessages](/apps-script/guides/services/quotas).\n| **Key Point:** To get around the \"Exceeded maximum execution time\" error, you can reschedule your script under multiple user accounts to extend the script's quota.\n\nAuthorized scripts\n\nOAuth2 is used to authorize scripts. Each account has a limit of **250**\nauthorized scripts. Beyond that limit, one of the previously authorized\nscripts will be deauthorized. This is only temporary, and the script can be\nreauthorized the next time it is opened.\n\nIf you are frequently running into this limit, you should consider using\nmultiple user accounts to authorize different sets of scripts.\n\nVideo and shopping campaigns\n\nThe standard campaign selector (`AdsApp.campaigns().get()`) will filter\nout [video](//support.google.com/google-ads/answer/2375497) and\n[shopping](//support.google.com/google-ads/answer/3455481) campaigns\nfrom the results. Use the dedicated campaign selectors instead:\n\n- [`videoCampaignSelector.get()`](/google-ads/scripts/docs/reference/adsapp/adsapp_videocampaignselector)\n- [`shoppingCampaignSelector.get()`](/google-ads/scripts/docs/reference/adsapp/adsapp_shoppingcampaignselector)"]]