Fixes / Google Sheets · Checked

Google Sheets "Result too large": what it means and how to fix it

Short answer

In Google Sheets, "Result too large" (shown as #ERROR!) almost always comes from an IMPORTRANGE formula that tries to pull more than about 10 MB of data in one request. Google caps each import at 10 MB. The quickest fix is to shrink the range so you import only the columns and rows you need. If you really need all of it, split it into chunks joined with VSTACK.

What this message means

The cell shows #ERROR!, and when you hover over it the tooltip says "Result too large". It means the formula asked Google Sheets to return more data than one request can hold. For IMPORTRANGE, Google's documented limit is 10 MB of data received per request. Google doesn't publish a cell count because the size depends on what's in the cells: long text uses up the limit much faster than short numbers. In practice, one IMPORTRANGE usually handles something like 50,000 to 100,000 cells, and fewer if the cells hold a lot of text. Your source data is fine. The error only means this one formula tried to carry too much at once.

Common causes

CauseHow to tell
The IMPORTRANGE range covers too many cells (a whole tab or a very wide or tall range).The range string is just a tab name (for example "Sheet1"), or something like "Sheet1!A:AZ" or "A1:Z100000". Count rows times columns in the source. If you get well over 100,000 cells, this is the cause.
The source cells hold a lot of text (notes, descriptions, JSON, long URLs), so the data passes 10 MB even though the cell count looks moderate.The range has a sensible number of rows, but one or more columns contain paragraphs or long strings. If you remove those columns from the range, the error goes away.
The source data has grown past the limit. The formula used to work and nobody changed it.The same formula ran fine for weeks, then started showing #ERROR! Result too large after rows were added to the source file (common with form responses, logs and exports).
The range includes empty columns or thousands of empty rows that still get imported.A bounded range like A1:Z50000 is set up for future growth, but the source only has data in a few columns or a few thousand rows.
A wrapper formula such as QUERY, FILTER or SORT is expected to shrink the data, but the IMPORTRANGE inside it still fetches the full range first.The formula looks like =QUERY(IMPORTRANGE(...), "select ... where ..."). The final result would be small, but the error persists. The limit applies to what IMPORTRANGE fetches, not to what QUERY returns.

How to fix it

1. Import only the columns and rows you actually need

  1. Click the cell showing #ERROR! and look at the second argument of IMPORTRANGE (the range string).
  2. If it's just a tab name or covers whole columns, change it to only the columns you use. For example, change "Sheet1!A:Z" to "Sheet1!A1:F" if you only need columns A to F.
  3. If the columns you need aren't next to each other, use one IMPORTRANGE per block and join them side by side: =HSTACK(IMPORTRANGE(url,"Sheet1!A1:C"), IMPORTRANGE(url,"Sheet1!H1:H")). Use the same start row in each block so the rows line up.
  4. Leave out columns with long text (notes, descriptions) unless you need them. They use up the 10 MB limit fastest.
  5. Press Enter and wait for the import to reload.

2. Split the import into chunks and stack them with VSTACK

  1. Decide on a chunk size, for example 10,000 rows (use fewer rows if the data is text-heavy).
  2. Replace the single formula with stacked imports, for example: =LET(url, "https://docs.google.com/spreadsheets/d/…", VSTACK(IMPORTRANGE(url, "Sheet1!A1:Z10000"), IMPORTRANGE(url, "Sheet1!A10001:Z20000"), IMPORTRANGE(url, "Sheet1!A20001:Z30000")))
  3. If any single chunk still shows Result too large, make that chunk smaller or split it by columns with HSTACK instead.
  4. To remove empty rows from chunks past the end of the data, wrap the result: =FILTER(VSTACK(...), INDEX(VSTACK(...),,1)<>""), or use QUERY(VSTACK(...), "where Col1 is not null").
  5. When the source grows, add another chunk before it passes the last row you cover.

3. Filter or summarize in the source file, then import the smaller result

  1. Open the source spreadsheet and add a new tab (for example "Export").
  2. In that tab, build only what the destination needs. For example =QUERY(Data!A1:Z, "select A, C, F where E = 'Open'", 1), or a SUMIFS or pivot-table summary instead of raw rows.
  3. In the destination file, point IMPORTRANGE at the new tab: =IMPORTRANGE(url, "Export!A1:C").
  4. Google itself recommends this: calculate totals in the source and import the results rather than the raw data. It also makes the file load faster.

4. Copy the data instead of linking it live

  1. If the data rarely changes, open the source file, right-click the tab name and choose Copy to > Existing spreadsheet, then pick the destination file.
  2. Or select the data, press Ctrl+C (Cmd+C on Mac), and in the destination use Edit > Paste special > Values only (Ctrl+Shift+V / Cmd+Shift+V).
  3. For a hybrid, paste older rows as static values and use IMPORTRANGE only for the newest rows, for example "Sheet1!A50001:Z".

5. Move large transfers to Apps Script or Connected Sheets

Connected Sheets requires a Google Workspace edition that includes BigQuery connectivity

  1. In the destination file, open Extensions > Apps Script.
  2. Write a function that opens the source with SpreadsheetApp.openById(), reads the range with getValues(), and writes it with setValues() in batches of a few thousand rows.
  3. Run it once to authorize, then add a time-driven trigger (Triggers, the clock icon > Add trigger) so it refreshes on a schedule.
  4. For very large tables (hundreds of thousands of rows or more), keep the data in BigQuery and use Data > Data connectors > Connect to BigQuery instead of IMPORTRANGE.

Next time, skip the search

Crade is an AI assistant for Mac and Windows that sees your screen. When a message like this pops up, ask “what does this mean?” and it explains the exact error in front of you, step by step.

Download Crade

Still not fixed?

If even small chunks fail, test with a tiny range (for example "Sheet1!A1:B10"). If that works, the problem is size. Keep shrinking the chunks, or check whether one column holds huge text values. If the tiny range also fails, you're dealing with a different problem, such as missing access (click the cell and choose Allow access) or too many import formulas across your files, which shows a "Loading" message instead. For Workspace accounts, your Google Workspace admin can open a case with Google Workspace support. Personal account users can post the formula and approximate data size in the Google Docs Editors Help Community.

Questions people ask

What is the IMPORTRANGE size limit in Google Sheets?

Google documents a cap of 10 MB of received data per IMPORTRANGE request. There's no official cell count because the size depends on what's in the cells. In practice, about 50,000 to 100,000 cells per formula works, and fewer if the cells hold long text.

Why did my IMPORTRANGE suddenly start saying Result too large?

Usually the source data grew past 10 MB, for example from new form responses or appended rows, while the formula stayed the same. Narrow the range or split it into chunks with VSTACK.

Does wrapping IMPORTRANGE in QUERY fix Result too large?

Usually not. IMPORTRANGE still fetches the full range before QUERY filters it, so the 10 MB limit is hit first. Do the filtering in the source file, or split the import into chunks.

Is Result too large the same as the 50,000 character limit?

No. A single cell in Sheets can hold up to 50,000 characters. Formulas like TEXTJOIN or CONCATENATE that go past that show a separate error saying the text result is longer than the limit of 50000 characters. Result too large is about the total size of an imported range.

Is Result too large the same as "Array result was not expanded"?

No. "Array result was not expanded because it would overwrite data" is a #REF! error. It means cells below or to the right of the formula aren't empty. Clearing those cells fixes it, but that won't fix Result too large.

Sources