Every Apps Script quota, consumer vs Workspace
Last verified
Apps Script enforces two kinds of limits, and Google's quotas page lists them in two tables. Daily quotas cap how much of something a user can do in 24 hours: email recipients, UrlFetch calls, documents created, total trigger runtime. They differ sharply between consumer accounts (gmail.com) and Google Workspace accounts. A consumer account gets 100 email recipients and 20,000 UrlFetch calls a day, while Workspace gets 1,500 and 100,000. Limitations are per-execution ceilings that apply to everyone: 6 minutes per script execution, 30 seconds per custom function, 20 triggers per user per script, 50 MB per UrlFetch response.
Quotas are per user, not per script. Every script the user owns or runs draws from the same daily pool, and Google says quotas "reset 24 hours after the first request." Trial Workspace accounts get additional limits until they convert to a paid subscription.
Every value below is taken from Google's quotas page, verified November 12, 2026. Google notes that all quotas and limits can change without notice. Each limit produces a specific exception message, explained in Apps Script errors. For the Gmail limits that apply outside Apps Script, see Gmail sending limits.
Official reference: Google Apps Script - Quotas for Google Services
Jump to: Execution time and concurrency · Email (MailApp and GmailApp) · UrlFetch (calling external APIs and websites) · Documents, properties and other services · When you hit a limit · Staying under it
Execution time and concurrency
The 6-minute ceiling per execution is the same for consumer and Workspace accounts. The difference is the daily total for triggers: 90 minutes a day for consumer accounts versus 6 hours for Workspace. Custom functions called from a cell have a much shorter 30-second limit. Concurrency is capped per user and per script. The per-user cap counts all scripts running for that account, not only copies of the same script.
| What | Limit | Source |
|---|---|---|
| Script runtime | 6 min per execution (consumer and Workspace) | docs ↗ |
| Custom function runtime | 30 sec per execution (consumer and Workspace) | docs ↗ |
| Google Workspace add-on runtime | 30 sec per execution (consumer and Workspace) | docs ↗ |
| Triggers total runtime | 90 min / day (consumer); 6 hr / day (Workspace) | docs ↗ |
| Simultaneous executions per user | 30 | docs ↗ |
| Simultaneous executions per script | 1,000 | docs ↗ |
| Triggers | 20 per user per script | docs ↗ |
| Apps Script projects (daily quota) | 50 (consumer); 50 (Workspace) | docs ↗ |
Email (MailApp and GmailApp)
Email quotas are counted in recipients, not messages. A message to 10 people uses 10 of the daily recipient quota. The consumer quota of 100 recipients a day is far lower than Gmail's own web limit, and it is the quota most often hit by mail-merge scripts. Workspace accounts get 1,500 recipients a day, or 2,000 when sending within the domain. Body size and attachment limits apply per message. Reading and modifying mail (labels, searches) has its own, much larger, quota.
| What | Limit | Source |
|---|---|---|
| Email recipients per day | 100 (consumer); 1,500 (Workspace) | docs ↗ |
| Email recipients per day (within domain) | 100 (consumer); 2,000 (Workspace) | docs ↗ |
| Email read/write (excluding send) | 20,000 (consumer); 50,000 (Workspace) | docs ↗ |
| Email recipients per message | 50 (consumer and Workspace) | docs ↗ |
| Email attachments | 250 per message | docs ↗ |
| Email body size | 200 KB per message (consumer); 400 KB per message (Workspace) | docs ↗ |
| Email total attachment size | 25 MB per message | docs ↗ |
UrlFetch (calling external APIs and websites)
UrlFetchApp is how Apps Script calls external APIs and websites, so its quotas set the ceiling for scraping and integration scripts. The daily call count differs by account type: 20,000 for consumer and 100,000 for Workspace. The per-call size limits are the same for everyone. Exceeding the daily count throws Service invoked too many times for one day: urlfetch.. Calling too fast in a short window is a separate error that recommends Utilities.sleep.
Documents, properties and other services
Scripts that generate files hit the creation quotas. A consumer account can create 250 Docs, Slides or Sheets a day, compared with 1,500 Docs or Slides and 3,200 Sheets on Workspace. The Properties service caps both value size and total storage, which matters for scripts that keep state or checkpoint long jobs. Map, Translate and JDBC calls have their own daily counts. Code versions per project are capped at 200, so scripts that deploy often eventually need old versions cleaned up.
| What | Limit | Source |
|---|---|---|
| Spreadsheets created per day | 250 (consumer); 3,200 (Workspace) | docs ↗ |
| Documents created per day | 250 (consumer); 1,500 (Workspace) | docs ↗ |
| Presentations created per day | 250 (consumer); 1,500 (Workspace) | docs ↗ |
| Calendar events created per day | 5,000 (consumer); 10,000 (Workspace) | docs ↗ |
| Contacts created per day | 1,000 (consumer); 2,000 (Workspace) | docs ↗ |
| Properties read/write per day | 50,000 (consumer); 500,000 (Workspace) | docs ↗ |
| Properties value size | 9 KB per value | docs ↗ |
| Properties total storage | 500 KB per property store | docs ↗ |
| Translate calls per day | 5,000 (consumer); 20,000 (Workspace) | docs ↗ |
| JDBC connections per day | 10,000 (consumer); 50,000 (Workspace) | docs ↗ |
| Versions | 200 per script | docs ↗ |
What happens when you hit a limit
Apps Script throws an exception and the execution stops. The message names the limit:
Exceeded maximum execution time: the 6-minute (or 30-second custom function) ceiling.Service invoked too many times for one day: urlfetch.(oremail): a daily quota is used up.Service invoked too many times in a short time: Calendar. Try Utilities.sleep(1000) between calls.: too many calls in a burst.Service using too much computer time for one day.: daily trigger runtime is exhausted.There are too many scripts running simultaneously for this Google user account.: the 30-execution cap.Limit exceeded: Email Attachments Per Message.: a per-message limitation.
Daily quotas reset 24 hours after the first request, not at midnight.
Staying under the limits
Batch work into fewer calls. Read and write ranges with getValues/setValues instead of cell by cell, and use UrlFetchApp.fetchAll for parallel requests.
Checkpoint long jobs. Save progress to PropertiesService and let a time-driven trigger resume the next chunk, keeping each execution under 6 minutes. Watch the daily trigger runtime total while doing it.
Check quota before sending. MailApp.getRemainingDailyQuota() reports remaining email recipients.
Back off on burst errors. Follow Google's suggestion of Utilities.sleep between calls.
Upgrade the account. Moving from a consumer account to Google Workspace raises the email, URL Fetch and file-creation quotas by 5 to 15 times. Spreading one workload across many accounts to multiply quotas is evasion, not a fix.
Definitions
Apps Script errors and guides
Other platforms
Frequently asked questions
What is the Apps Script execution time limit?
6 minutes per execution for both consumer (gmail.com) and Google Workspace accounts. Custom functions called from a spreadsheet cell are limited to 30 seconds. Separately, the total runtime of trigger-started executions is capped per day: 90 minutes for consumer accounts and 6 hours for Workspace accounts.
How many emails can Apps Script send per day?
The quota is counted in recipients: 100 per day for consumer accounts and 1,500 per day for Google Workspace accounts (2,000 within the domain). Each message can have at most 50 recipients. MailApp.getRemainingDailyQuota() returns how many recipients you have left.
What is the UrlFetchApp daily limit?
20,000 URL Fetch calls per day for consumer accounts and 100,000 for Google Workspace accounts. Each call can send and receive up to 50 MB, carry up to 100 headers, and use a URL up to 2 KB long. Exceeding the daily count throws 'Service invoked too many times for one day: urlfetch.'
When do Apps Script quotas reset?
Google says quotas are per user and reset 24 hours after the first request, so there is no fixed midnight reset. If a script used its URL Fetch quota starting at 10:00, capacity returns around 10:00 the next day. Waiting is the only way to clear an exhausted daily quota.
How many triggers can an Apps Script project have?
20 triggers per user per script. A project shared with several users can therefore have 20 installable triggers for each of them. Exceeding the cap throws 'This script has too many triggers. Triggers must be deleted from the script before more can be added.'
Are Apps Script quotas per script or per user?
Per user. All scripts that run as the same Google account share one daily pool for email, URL Fetch, document creation and trigger runtime. Splitting a job into several script projects does not add quota; the 30 simultaneous executions per user also counts every script the account runs.
Do Google Workspace trial accounts get full Apps Script quotas?
No. Google's quotas page says additional limits apply for trial accounts, and that quotas can increase after conversion to a paid subscription, subject to a payment threshold and a waiting period. Expect lower email and other limits during a Workspace trial.
How do I get around the 6-minute limit?
Split the job into chunks that each finish well under 6 minutes, save the position with PropertiesService, and schedule a time-driven trigger to continue. Batch spreadsheet reads and writes to cut runtime. Keep the daily total trigger runtime in mind: 90 minutes on consumer accounts, 6 hours on Workspace.
Pace the work instead of tripping the limit
Autonoly workflows run on a schedule or a trigger with per-node retries and timeouts, so a job can be spread out and retried rather than run in one burst. Platform limits still apply in full; no tool can lift them.