<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luke Sandelands</title>
    <description>The latest articles on DEV Community by Luke Sandelands (@stack_c285afb2fa0bef).</description>
    <link>https://dev.to/stack_c285afb2fa0bef</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4047278%2Ff036e3b8-37c8-482e-80e3-beac221349f9.png</url>
      <title>DEV Community: Luke Sandelands</title>
      <link>https://dev.to/stack_c285afb2fa0bef</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/stack_c285afb2fa0bef"/>
    <language>en</language>
    <item>
      <title>Google Apps Script Quota Limits 2026 — Every Error, Every Fix</title>
      <dc:creator>Luke Sandelands</dc:creator>
      <pubDate>Sat, 25 Jul 2026 21:06:33 +0000</pubDate>
      <link>https://dev.to/stack_c285afb2fa0bef/google-apps-script-quota-limits-2026-every-error-every-fix-2p87</link>
      <guid>https://dev.to/stack_c285afb2fa0bef/google-apps-script-quota-limits-2026-every-error-every-fix-2p87</guid>
      <description>&lt;p&gt;If your automation just stopped mid-run, you have hit a quota limit. Here is exactly which one and how to fix it — free, no upgrade required, works at any order volume.&lt;/p&gt;

&lt;p&gt;Quick answer — the numbers that matter in 2026: Both consumer (free) and Google Workspace accounts get a 6-minute maximum execution time per script run — the old 30-minute Workspace limit no longer applies. Consumer accounts are capped at 90 minutes of trigger runtime per day; Workspace accounts get 6 hours of trigger runtime per day. UrlFetch calls are capped at 20,000 per day on consumer accounts (100,000 on Workspace). These are the hard limits that cannot be increased — they are why Autocrat, Sheets automations, and document workflows fail at scale.&lt;/p&gt;

&lt;p&gt;If you have ever seen “Service invoked too many times”, “Exceeded maximum execution time”, or “Could not obtain lock”, you already know the symptom. This guide explains the exact numbers behind those errors, when they appear by account type, and what actually works when order or document volume gets serious.&lt;/p&gt;

&lt;p&gt;What Are Google Apps Script Quotas?&lt;br&gt;
Google Apps Script quotas are hard limits on how much work a script can do. They exist to protect shared infrastructure — stopping one workflow from consuming resources that affect thousands of other users. Quotas appear across four layers, and they all apply simultaneously:&lt;/p&gt;

&lt;p&gt;User-level quotas — tied to the Google account running the script. Consumer and Workspace accounts have different ceilings.&lt;br&gt;
Project-level quotas — tied to the Apps Script project itself. Concurrent executions are capped here.&lt;br&gt;
Service quotas — Gmail, Sheets, Drive, UrlFetch, and other services each have their own daily limit.&lt;br&gt;
Execution quotas — limits on how long a single run can take and how much total runtime is consumed in a day.&lt;br&gt;
The critical point is that these limits stack independently. A workflow can be fine on execution time but fail on service call rate — which is why the same script can work perfectly for a small operation and break as soon as volume rises.&lt;/p&gt;

&lt;p&gt;Google Apps Script Execution Time Limit (6 Minutes) &amp;amp; Official Documentation&lt;br&gt;
These are the official limits as of April 2026. Google does not announce changes widely — they update the quotas page without notice, which is why searches for “quotas 2026” are so common.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Max execution time
Consumer: 6 minutes
Workspace: 6 minutes A single script run on a free Google account is hard-stopped after 6 minutes. The 30-minute limit some older guides cite was retired — there is no longer any per-execution headroom from upgrading to Workspace.&lt;/li&gt;
&lt;li&gt;Trigger runtime per day
Consumer: 90 minutes
Workspace: 6 hours Total combined runtime of trigger-driven executions per day. Once exhausted, triggered scripts stop until the quota resets 24 hours after the first request. Manual runs are not counted against this cap.&lt;/li&gt;
&lt;li&gt;UrlFetch calls per day
Consumer: 20,000
Workspace: 100,000 Hits this ceiling faster than expected when automations check external APIs (Shopify webhooks, tracking endpoints) on every order.&lt;/li&gt;
&lt;li&gt;Document service calls
Consumer Limit: 30 per minute Calls to Google Docs or Drive in any rolling 60-second window. Autocrat-style workflows hit this quickly.&lt;/li&gt;
&lt;li&gt;Quota reset window
Resets: 24 hours rolling Per Google's documentation, quotas are per user and reset 24 hours after the first request — a rolling window, not a fixed midnight cutoff.
Consumer vs Workspace — when to upgrade: Upgrading to Workspace does not raise the 6-minute per-execution ceiling. What Workspace does raise is the daily headroom: trigger runtime (90 min → 6 hr), UrlFetch calls (20,000 → 100,000), and email recipients (100 → 1,500).&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Quota Comparison Table&lt;br&gt;
Quota Type  Consumer (free) Google Workspace    Resets&lt;br&gt;
Single execution time   6 minutes   6 minutes   Per run&lt;br&gt;
Trigger runtime/day 90 minutes  6 hours 24h rolling&lt;br&gt;
UrlFetch calls/day  20,000  100,000 24h rolling&lt;br&gt;
Document creates/day    250 1,500   24h rolling&lt;br&gt;
Email recipients/day    100 1,500   24h rolling&lt;br&gt;
Concurrent executions   30  30  Per moment&lt;br&gt;
Script properties size  500KB   500KB   Persistent&lt;br&gt;
Why Quota Limits Break Your Automations&lt;br&gt;
Quota failures are rarely random. They follow predictable patterns based on four root causes:&lt;/p&gt;

&lt;p&gt;Burst processing — too many reads, writes, or document operations concentrated in one short window.&lt;br&gt;
Trigger overlap — multiple time-based or event-based triggers fire before the previous execution finishes.&lt;br&gt;
Large batch size — one job attempts to process more rows than a single 6-minute execution can handle.&lt;br&gt;
Hidden retry loops — failed executions trigger automatic retries, accelerating the failure spiral.&lt;br&gt;
The honest truth about Apps Script quotas: they are a capacity problem, not a coding problem. You can reduce the pain with better architecture — but you cannot build unlimited scale on top of limits that Google has fixed at the infrastructure level.&lt;/p&gt;

&lt;p&gt;Common Quota Errors and What They Mean&lt;br&gt;
Error Message   Quota Breached  Immediate Cause&lt;br&gt;
Service invoked too many times  Service call rate   Too many calls to Sheets, Docs, Drive, or Gmail in a short window&lt;br&gt;
Exceeded maximum execution time 6-min execution ceiling Single run took longer than 6 minutes — script hard-stopped mid-execution&lt;br&gt;
Could not obtain lock   Concurrent execution    Two runs tried to access the same resource simultaneously&lt;br&gt;
Quota exceeded  Daily service limit UrlFetch, document creates, or email sends hit the daily cap&lt;br&gt;
How to Stay Under Quotas Without Breaking Your Workflow&lt;br&gt;
These six techniques reduce quota pressure and can sustain most medium-volume automations on consumer accounts.&lt;/p&gt;

&lt;p&gt;Batch smaller chunks — process 50–100 rows per run instead of everything at once.&lt;br&gt;
Reduce API calls aggressively — cache sheet values at the start using getValues() once, operate on the array in memory, then write back with a single setValues() call.&lt;br&gt;
Stagger triggers — separate time-based triggers by at least 5–10 minutes to prevent overlapping executions.&lt;br&gt;
Persist state with PropertiesService — save progress checkpoints so a timed-out script can resume from where it stopped.&lt;br&gt;
Add exponential backoff — when a service call fails, wait and retry with increasing delays.&lt;br&gt;
Use LockService deliberately — acquire a lock at the start of any execution that touches shared data.&lt;br&gt;
Why Autocrat Specifically Hits Quota Limits&lt;br&gt;
Autocrat is one of the most popular document generation tools for Google Sheets — and one of the most quota-sensitive. If you are generating contracts, invoices, or certificates from Sheets rows, you will hit quota limits earlier than almost any other workflow.&lt;/p&gt;

&lt;p&gt;Each Autocrat document generation triggers multiple service calls in sequence: it opens Drive, reads the template, creates a new document, writes merged data, converts to PDF, saves to Drive, and optionally sends via Gmail. That is 5–8 service calls per row. At 30 document service calls per minute, Autocrat can reliably process around 4–5 documents per minute — or roughly 25–30 in a single run before the service rate limit triggers.&lt;/p&gt;

&lt;p&gt;The Structural Fix&lt;br&gt;
The reliable solution is moving document generation off Google's shared execution environment entirely. Instead of Autocrat running inside Apps Script on Google's public quota pool, the workflow should run through a dedicated Make.com scenario that calls the Google Docs API directly via a private HTTP connection. Make.com runs are not subject to Apps Script execution time limits or the 250-documents-per-day consumer limit.&lt;/p&gt;

&lt;p&gt;When You Have Outgrown Apps Script Entirely&lt;br&gt;
The signal is usually obvious: document generation starts missing rows, order sync gets delayed, or the workflow behaves differently depending on the time of day. That last symptom — time-dependent behaviour — is the clearest sign of a daily quota problem.&lt;/p&gt;

&lt;p&gt;Keep lightweight logic close to the spreadsheet (change detection, simple calculations) and move heavy lifting to a system built for throughput (Make.com, a Cloud Function, or a dedicated API lane).&lt;/p&gt;

&lt;p&gt;Apps Script detects the event. Make.com does the processing. The result lands back in Sheets. This pattern removes the quota ceiling from every expensive operation.&lt;/p&gt;

</description>
      <category>google</category>
      <category>quotas</category>
    </item>
  </channel>
</rss>
