Fix 'Error: Result too large' When Using IMPORTRANGE in Google Sheets

beginner๐Ÿ“— Google Sheets2026-06-01| Google Sheets (web browser, any OS) โ€” Google Workspace / personal Google account

Error Message

Error: Result too large
#google-sheets#importrange#limit

What's happening

You added an IMPORTRANGE formula to pull data from another spreadsheet, and instead of data, you see:

Error: Result too large

Google Sheets caps a single spreadsheet at 10 million cells. IMPORTRANGE hits its own limit well before that โ€” typically around 1โ€“2 million cells, or whenever the returned array is too wide or too tall for the destination sheet.

A few things commonly trigger this:

  • Importing an entire sheet with hundreds of columns and thousands of rows (e.g., Sheet1!A:ZZ)
  • The source spreadsheet has grown significantly since you first set up the formula
  • Nesting IMPORTRANGE inside QUERY or FILTER with no row/column limit
  • Multiple IMPORTRANGE calls in one sheet that together push past the limit

Debug process

Step 1: Check how many cells your range covers

Open the source spreadsheet and count what you're actually importing. If you're using an open-ended range like A:Z, multiply columns by rows.

=IMPORTRANGE("spreadsheet_url", "Sheet1!A:Z")

A source with 50,000 rows and 26 columns gives you 1.3 million cells. That's already pushing the limit.

Step 2: Check the destination sheet's existing data

The destination might already be near the 10 million cell cap before IMPORTRANGE adds anything. A sheet with 10,000 rows ร— 1,000 columns is already at 10M โ€” there's no room left. Check your row and column counts manually, or through Extensions โ†’ Apps Script.

Step 3: Test with a smaller range

Narrow your import to a small slice to confirm IMPORTRANGE itself works:

=IMPORTRANGE("spreadsheet_url", "Sheet1!A1:D100")

Data comes back? The problem is range size โ€” not permissions or a bad URL.

Solutions

Solution 1: Limit the range explicitly (fastest fix)

Replace open-ended column references with a bounded range. Stop pulling everything:

// Before โ€” pulls every row in columns A through Z
=IMPORTRANGE("spreadsheet_url", "Sheet1!A:Z")

// After โ€” pulls only rows 1โ€“5000, columns Aโ€“F
=IMPORTRANGE("spreadsheet_url", "Sheet1!A1:F5000")

Set row and column bounds to match what your source data actually contains โ€” not what it might contain someday.

Solution 2: Use QUERY to filter inside IMPORTRANGE

Wrap IMPORTRANGE with QUERY to pull only the columns and rows you need. One formula handles both filtering and row limits.

// Import only columns 1, 2, and 5 where column 3 is not empty
=QUERY(
  IMPORTRANGE("spreadsheet_url", "Sheet1!A:E"),
  "SELECT Col1, Col2, Col5 WHERE Col3 <> '' LIMIT 2000"
)

Three QUERY clauses do the heavy lifting:

  • SELECT Col1, Col2 โ€” drop columns you don't need
  • WHERE Col1 <> '' โ€” skip blank rows
  • LIMIT 1000 โ€” hard cap on returned rows

Solution 3: Use FILTER to reduce rows before importing

Need only rows matching a condition? FILTER can cut the result down dramatically:

// Only import rows where column C equals "Active"
=FILTER(
  IMPORTRANGE("spreadsheet_url", "Sheet1!A1:F5000"),
  IMPORTRANGE("spreadsheet_url", "Sheet1!C1:C5000") = "Active"
)

Watch out: each IMPORTRANGE call counts separately toward your quota. If performance tanks, switch to the QUERY approach โ€” one call handles everything.

Solution 4: Split the import across multiple sheets

When you genuinely need all the data, split it by column group. Create two sheets in your destination file:

// Sheet: Import_Part1
=IMPORTRANGE("spreadsheet_url", "Sheet1!A:M")

// Sheet: Import_Part2
=IMPORTRANGE("spreadsheet_url", "Sheet1!N:Z")

Then reference those sheets directly โ€” Import_Part1!A:M โ€” in your analysis sheet, instead of calling IMPORTRANGE again.

Solution 5: Pre-filter at the source spreadsheet

If you own the source file, do the filtering there. Add a dedicated "Export" sheet and put a QUERY formula in it:

// In the SOURCE spreadsheet โ€” sheet named "Export"
=QUERY(RawData!A:Z, "SELECT A, B, C, D WHERE A <> '' LIMIT 3000")

// In your DESTINATION spreadsheet:
=IMPORTRANGE("source_spreadsheet_url", "Export!A:D")

The source file does the work. Your destination imports a small, already-filtered result instead of the raw data dump.

Verification steps

  • Apply your fix โ€” bounded range, QUERY, or FILTER.
  • Wait 10โ€“20 seconds. IMPORTRANGE has network latency; give it time to recalculate.
  • The cell should show a loading spinner, then display data (not the error).
  • Confirm row count: =ROWS(IMPORTRANGE(...)) โ€” verify it matches expectations.
  • Check total cells in the destination: rows ร— columns should stay well under 10 million.

Still seeing the error after bounding your range? Create a fresh spreadsheet and test IMPORTRANGE there. If it works in the new file, your destination sheet likely has a quota problem.

Lessons learned

  • Open-ended column ranges are a trap. Sheet1!A:Z looks harmless but pulls every row the sheet will ever have โ€” including future rows you haven't added yet.
  • QUERY is the cleanest long-term fix. It filters both rows and columns before the result lands in your sheet. No wasted cells, no surprise breakage as the source grows.
  • Source sheet growth breaks working formulas. A formula that handled 500 rows fine will fail at 50,000. Add a hard row limit โ€” LIMIT 5000 or a fixed row number โ€” so you catch the growth early.
  • Avoid duplicating IMPORTRANGE calls for the same range. Inside a FILTER, each call counts separately toward your quota. Consolidate with QUERY to keep it to a single call.

Related Error Notes