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 needWHERE Col1 <> ''โ skip blank rowsLIMIT 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 ร columnsshould 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:Zlooks 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 5000or 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.

