# Google Sheets limits for inventory

> The Google Sheets cell, sharing, version, IMPORTRANGE, API and Apps Script limits that matter for inventory, each with its official source and what to do near it.

Source: https://www.lightinventory.com/help/google-sheets/limits · Last updated: 2026-10-28

A Google Sheets spreadsheet can hold up to 20 million cells or 100MB. For most inventory files the practical limits arrive earlier: how many people can edit at once, how much data IMPORTRANGE can move, and API quotas for tools that write to the sheet. Every limit below is quoted from Google's own documentation as checked on 2026-10-28.

## Limits at a glance

| Area | Limit | Source |
|---|---|---|
| Spreadsheet size | Up to 20 million cells or 100MB for spreadsheets created in or converted to Google Sheets | [Files you can store in Google Drive](https://support.google.com/drive/answer/37603) |
| Cell limit change | Raised from up to 10 million to up to 20 million cells; applies to new, existing and imported files | [Google Workspace Updates, September 10, 2026](https://workspaceupdates.googleblog.com/2026/09/doubled-cell-limits-in-google-sheets-now-generally-available.html) |
| Characters in a cell (Excel conversion) | When you convert an Excel file, any cell with more than 50,000 characters is removed | [Files you can store in Google Drive](https://support.google.com/drive/answer/37603) |
| Simultaneous editing | Actively edited on up to 100 open tabs or devices at the same time; beyond that, only the owner and some editors can make changes | [Share files from Google Drive](https://support.google.com/drive/answer/2494822) |
| Sharing | Up to 600 individual email addresses per file | [Share files from Google Drive](https://support.google.com/drive/answer/2494822) |
| Named versions | Up to 15 per spreadsheet | [Find what's changed in a file](https://support.google.com/docs/answer/190843) |
| IMPORTRANGE data | Capped at 10MB of received data per request | [IMPORTRANGE](https://support.google.com/docs/answer/3093340) |
| IMPORTRANGE refresh | Checks for updates every hour while the document is open | [IMPORTRANGE](https://support.google.com/docs/answer/3093340) |
| IMPORTRANGE access | Access granted to a destination sheet counts against the source sheet's 600-user share limit | [IMPORTRANGE](https://support.google.com/docs/answer/3093340) |
| Sheets API reads | 300 per minute per project; 60 per minute per user per project | [Sheets API usage limits](https://developers.google.com/sheets/api/limits) |
| Sheets API writes | 300 per minute per project; 60 per minute per user per project | [Sheets API usage limits](https://developers.google.com/sheets/api/limits) |
| Sheets API request time | A request processed for more than 180 seconds returns a timeout error; Google recommends a 2 MB maximum payload | [Sheets API usage limits](https://developers.google.com/sheets/api/limits) |
| Apps Script runtime | 6 min per execution; custom functions 30 sec per execution | [Apps Script quotas](https://developers.google.com/apps-script/guides/services/quotas) |
| Apps Script triggers | Total trigger runtime 90 min per day (consumer accounts) or 6 hr per day (Google Workspace accounts) | [Apps Script quotas](https://developers.google.com/apps-script/guides/services/quotas) |
| Apps Script concurrency | 30 simultaneous executions per user | [Apps Script quotas](https://developers.google.com/apps-script/guides/services/quotas) |

Google says Apps Script quotas "are subject to elimination, reduction, or change at any time, without notice." Check the source pages before you plan around an exact number.

## What these limits mean for an inventory sheet

### Size

The cell limit counts the whole spreadsheet, not one tab. A movements ledger grows by one row per stock change. With 8 columns, 1,000 movements a month add 8,000 cells a month, or about 96,000 a year, so most small teams stay far below 20 million cells for many years.

A large file can become slow to open and recalculate before it reaches the limit. If that happens, use the steps in the last section of this page.

### People editing at once

Up to 100 open tabs or devices can actively edit one file at the same time. That includes the same person on two devices. Viewers who only look up stock don't need edit access, so share with them as Viewer.

### IMPORTRANGE

If you pull stock from one file into another with IMPORTRANGE, each request is capped at 10MB of received data, and limits are enforced on the creator of the document. Google recommends summarizing in the source file and importing the result instead of the raw rows. For example, calculate on-hand totals in the inventory file and import only the totals table.

### API and Apps Script quotas

Scripts, add-ons and apps that read or write your sheet share the Sheets API quotas of the project they run under. When a tool exceeds a per-minute quota, Google returns `429: Too many requests`, and the tool should retry with exponential backoff. If a script that updates stock runs on a trigger, the daily trigger runtime limit applies to all of its runs combined.

## What to do when you approach a limit

1. **Archive closed periods.** Copy last year's movements to a separate archive file. In the live ledger, replace them with one opening-balance row per item and location, so totals stay correct.
2. **Delete what you don't use.** Remove columns and tabs you no longer need.
3. **Keep formulas few.** Use one `ARRAYFORMULA` or `QUERY` for a column instead of copying a formula into thousands of rows.
4. **Summarize before importing.** Import totals with IMPORTRANGE, not the full ledger.
5. **Split by purpose, not by date.** Keep one live inventory file and move reports or archives into their own files.

## How LightInventory works within these limits

LightInventory keeps your data in your own spreadsheet, so Google's limits apply to it too: the Team plan includes unlimited items within Google Sheets limits. It is designed to archive closed periods of the movements and log tabs into an archive spreadsheet with opening balances, and it reads and writes in batches to stay within the Sheets API quotas. See [pricing](/pricing) and [security](/security).
