Skip to content
Google Apps Script reference

Every Apps Script quota, consumer vs Workspace

32documented limits
4groups

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.

WhatLimitNotesSource
Script runtime6 min per execution (consumer and Workspace)Exceeding it throws "Exceeded maximum execution time".docs ↗
Custom function runtime30 sec per execution (consumer and Workspace)Applies to functions called from a spreadsheet cell.docs ↗
Google Workspace add-on runtime30 sec per execution (consumer and Workspace)Add-ons that extend Workspace Studio have a 2-minute timeout (Gemini Alpha program).docs ↗
Triggers total runtime90 min / day (consumer); 6 hr / day (Workspace)Sum of all trigger-started executions for the user. Exceeding it throws "Service using too much computer time for one day."docs ↗
Simultaneous executions per user30Any scripts, not necessarily the same one. Exceeding it throws "There are too many scripts running simultaneously for this Google user account."docs ↗
Simultaneous executions per script1,000Relevant for web apps and widely shared scripts.docs ↗
Triggers20 per user per scriptInstallable triggers per user per script project.docs ↗
Apps Script projects (daily quota)50 (consumer); 50 (Workspace)Listed in the daily quotas table; the same for both account types.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.

WhatLimitNotesSource
Email recipients per day100 (consumer); 1,500 (Workspace)Footnoted on Google's page. Check MailApp.getRemainingDailyQuota() before a large send.docs ↗
Email recipients per day (within domain)100 (consumer); 2,000 (Workspace)Recipients inside the same Workspace domain.docs ↗
Email read/write (excluding send)20,000 (consumer); 50,000 (Workspace)GmailApp reads, label changes and similar operations.docs ↗
Email recipients per message50 (consumer and Workspace)Lower than Gmail's own per-message cap.docs ↗
Email attachments250 per messageExceeding it throws "Limit exceeded: Email Attachments Per Message."docs ↗
Email body size200 KB per message (consumer); 400 KB per message (Workspace)HTML body counts.docs ↗
Email total attachment size25 MB per messageSame for both account types.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.

WhatLimitNotesSource
URL Fetch calls per day20,000 (consumer); 100,000 (Workspace)Per user, 24 hours after the first request.docs ↗
URL Fetch response size50 MB per callSame for consumer and Workspace.docs ↗
URL Fetch POST size50 MB per callRequest payload.docs ↗
URL Fetch headers100 per callNumber of headers.docs ↗
URL Fetch header size8 KB per callPer header block.docs ↗
URL Fetch URL length2 KB per callLong query strings can exceed it; send parameters in a POST body.docs ↗

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.

WhatLimitNotesSource
Spreadsheets created per day250 (consumer); 3,200 (Workspace)Counts SpreadsheetApp.create and similar calls.docs ↗
Documents created per day250 (consumer); 1,500 (Workspace)Google Docs files created by script.docs ↗
Presentations created per day250 (consumer); 1,500 (Workspace)Slides created has the same values.docs ↗
Calendar events created per day5,000 (consumer); 10,000 (Workspace)Bursts can also throw the short-time Calendar error.docs ↗
Contacts created per day1,000 (consumer); 2,000 (Workspace)Contacts created by script.docs ↗
Properties read/write per day50,000 (consumer); 500,000 (Workspace)Each get/set counts.docs ↗
Properties value size9 KB per valueStore larger state in a Drive file or a sheet.docs ↗
Properties total storage500 KB per property storeScript, user and document stores are separate.docs ↗
Translate calls per day5,000 (consumer); 20,000 (Workspace)LanguageApp.translate.docs ↗
JDBC connections per day10,000 (consumer); 50,000 (Workspace)Failed connections: 100 (consumer); 500 (Workspace).docs ↗
Versions200 per scriptDelete old versions before creating more.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. (or email): 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.