AutomationFlowsGeneral › Prevent Google Sheets Quota Errors in Batches

Prevent Google Sheets Quota Errors in Batches

Original n8n title: Preventing Google Sheets Quota Errors During Batch Processing

Preventing Google Sheets Quota Errors during Batch Processing. Uses manualTrigger, stickyNote, splitInBatches, googleSheets. Event-driven trigger; 8 nodes.

Event trigger★★★★☆ complexity8 nodesGoogle Sheets
General Trigger: Event Nodes: 8 Complexity: ★★★★☆ Added:

The workflow JSON

Copy or download the full n8n JSON below. Paste it into a new n8n workflow, add your credentials, activate. Full import guide →

Download .json
{
  "id": "ieTfr3OU6NUM9CL4",
  "meta": {
    "templateCredsSetupCompleted": true
  },
  "name": "Preventing Google Sheets Quota Errors during Batch Processing",
  "tags": [],
  "nodes": [
    {
      "id": "8f508825-ec55-4d49-b7de-c7cddd2e8529",
      "name": "When clicking \u2018Execute workflow\u2019",
      "type": "n8n-nodes-base.manualTrigger",
      "position": [
        0,
        288
      ],
      "parameters": {},
      "typeVersion": 1
    },
    {
      "id": "e4e6bcaa-df68-4057-8515-4fe30ccadd08",
      "name": "Sticky Note",
      "type": "n8n-nodes-base.stickyNote",
      "position": [
        0,
        -144
      ],
      "parameters": {
        "width": 972,
        "height": 280,
        "content": "## Preventing Google Sheets Quota Errors during Batch Processing\n\nThis template provides a robust solution for dealing with Google Sheets API rate limits. It is designed for workflows that update a large number of rows in a Google Sheet and frequently fail with \"too many requests\" errors.\n\nThe template uses a `Wait` node connected to the error output of the Google Sheets node, creating a retry loop that delays execution for a set period before attempting the update again.\n\nTo use this template, simply replace the placeholder Google Sheets nodes with your own credentials and sheet. You can find an example Google Sheet for this template [here](https://docs.google.com/spreadsheets/d/1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ/edit?usp=sharing).\n\nFor a full explanation of this approach, check out the blog post [here](https://n8nplaybook.com/post/2025/07/handling-google-sheets-api-rate-limits-in-n8n/)."
      },
      "typeVersion": 1
    },
    {
      "id": "916c78c0-38a6-4fc6-a3b2-aa74fd189f92",
      "name": "Loop Over Items",
      "type": "n8n-nodes-base.splitInBatches",
      "position": [
        448,
        192
      ],
      "parameters": {
        "options": {}
      },
      "typeVersion": 3
    },
    {
      "id": "63facfe2-c4b3-4a20-89b8-46c8515f8db1",
      "name": "Edit Fields",
      "type": "n8n-nodes-base.set",
      "position": [
        672,
        288
      ],
      "parameters": {
        "options": {},
        "assignments": {
          "assignments": [
            {
              "id": "4a875792-664d-4c97-af72-1252c86cc64a",
              "name": "row_number",
              "type": "number",
              "value": "={{ $json.row_number }}"
            },
            {
              "id": "cd47a508-aad7-4c7c-94cc-15752e8ede05",
              "name": "Number",
              "type": "number",
              "value": "={{ $json.Color.length }}"
            },
            {
              "id": "b67e8c39-f3f9-4614-9b5d-96876cb6a669",
              "name": "Status",
              "type": "string",
              "value": "DONE"
            }
          ]
        }
      },
      "typeVersion": 3.4
    },
    {
      "id": "d0d135bc-84b9-4543-9fa0-981f9be5c40d",
      "name": "Read Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueErrorOutput",
      "position": [
        224,
        288
      ],
      "parameters": {
        "options": {},
        "filtersUI": {
          "values": [
            {
              "lookupValue": "READY",
              "lookupColumn": "Status"
            }
          ]
        },
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ/edit?usp=drivesdk",
          "cachedResultName": "Tip #5: Fixing Google Sheets quota exceeding issue"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "3080f987-e5b4-4690-8750-4e469f55305f",
      "name": "Update Google Sheets",
      "type": "n8n-nodes-base.googleSheets",
      "onError": "continueErrorOutput",
      "position": [
        880,
        288
      ],
      "parameters": {
        "columns": {
          "value": {},
          "schema": [
            {
              "id": "Color",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Color",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Status",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Status",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "Number",
              "type": "string",
              "display": true,
              "required": false,
              "displayName": "Number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            },
            {
              "id": "row_number",
              "type": "number",
              "display": true,
              "removed": false,
              "readOnly": true,
              "required": false,
              "displayName": "row_number",
              "defaultMatch": false,
              "canBeUsedToMatch": true
            }
          ],
          "mappingMode": "autoMapInputData",
          "matchingColumns": [
            "row_number"
          ],
          "attemptToConvertTypes": false,
          "convertFieldsToString": false
        },
        "options": {},
        "operation": "update",
        "sheetName": {
          "__rl": true,
          "mode": "list",
          "value": "gid=0",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ/edit#gid=0",
          "cachedResultName": "Sheet1"
        },
        "documentId": {
          "__rl": true,
          "mode": "list",
          "value": "1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ",
          "cachedResultUrl": "https://docs.google.com/spreadsheets/d/1hKwP2_G6EaVSJlqWH1zYMVjarb9cuBx78D_U3HBrdhQ/edit?usp=drivesdk",
          "cachedResultName": "Tip #5: Fixing Google Sheets quota exceeding issue"
        },
        "authentication": "serviceAccount"
      },
      "credentials": {
        "googleApi": {
          "name": "<your credential>"
        }
      },
      "typeVersion": 4.6
    },
    {
      "id": "044ad4ad-1f57-49c2-ac50-2271a640ac23",
      "name": "Wait",
      "type": "n8n-nodes-base.wait",
      "position": [
        880,
        528
      ],
      "parameters": {
        "unit": "minutes",
        "amount": "=1"
      },
      "typeVersion": 1.1
    },
    {
      "id": "099a89d0-7d05-4e8a-9fdb-a4ab2deda5a0",
      "name": "Wait1",
      "type": "n8n-nodes-base.wait",
      "position": [
        224,
        528
      ],
      "parameters": {
        "unit": "minutes",
        "amount": "=1"
      },
      "typeVersion": 1.1
    }
  ],
  "active": false,
  "settings": {
    "executionOrder": "v1"
  },
  "versionId": "7d3ce1f7-42c2-4763-9100-7cc633b59022",
  "connections": {
    "Wait": {
      "main": [
        [
          {
            "node": "Update Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Wait1": {
      "main": [
        [
          {
            "node": "Read Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Edit Fields": {
      "main": [
        [
          {
            "node": "Update Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Loop Over Items": {
      "main": [
        [],
        [
          {
            "node": "Edit Fields",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Read Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait1",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "Update Google Sheets": {
      "main": [
        [
          {
            "node": "Loop Over Items",
            "type": "main",
            "index": 0
          }
        ],
        [
          {
            "node": "Wait",
            "type": "main",
            "index": 0
          }
        ]
      ]
    },
    "When clicking \u2018Execute workflow\u2019": {
      "main": [
        [
          {
            "node": "Read Google Sheets",
            "type": "main",
            "index": 0
          }
        ]
      ]
    }
  }
}

Credentials you'll need

Each integration node will prompt for credentials when you import. We strip credential IDs before publishing — you'll add your own.

Pro

For the full experience including quality scoring and batch install features for each workflow upgrade to Pro

About this workflow

Preventing Google Sheets Quota Errors during Batch Processing. Uses manualTrigger, stickyNote, splitInBatches, googleSheets. Event-driven trigger; 8 nodes.

Source: https://github.com/vklepikovskiy/n8nplaybook-public/blob/main/workflows/google_sheets_quota_errors.json — original creator credit. Request a take-down →

More General workflows → · Browse all categories →

Related workflows

Workflows that share integrations, category, or trigger type with this one. All free to copy and import.

General

SEO key word analysis and filter. Uses manualTrigger, lmChatOpenAi, googleDrive, extractFromFile. Event-driven trigger; 26 nodes.

OpenAI Chat, Google Drive, Text Classifier +1
General

Passive Income with Stock Images. Uses googleDrive, openAi, googleSheets. Event-driven trigger; 15 nodes.

Google Drive, OpenAI, Google Sheets
General

Fetch the Most Recent Document from Google Drive. Uses googleDocs, toolWikipedia, toolCalculator, googleSheets. Event-driven trigger; 12 nodes.

Google Docs, Tool Wikipedia, Tool Calculator +3
General

Google Sheets UI for n8n Workflow. Uses manualTrigger, stickyNote, splitInBatches, googleSheets. Event-driven trigger; 6 nodes.

Google Sheets
General

Product - Google Search Console API Examples. Uses httpRequest. Event-driven trigger; 36 nodes.

HTTP Request