Google Sheets limits

Google Sheets row limit: 20 million cells, explained

Google Sheets has no fixed row limit: a spreadsheet holds up to 20 million cells or 100 MB across all tabs, so 10 columns leave room for 2,000,000 rows. For bigger files, rows.page opens CSVs up to 1.5 GB in your browser with no row limit, free and with no signup.

.csv
Drop a file here
Stays in your browserUp to 1.5 GB

No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).

How the 20 million cell limit works in Google Sheets

According to Google Drive Help, a spreadsheet created in or converted to Google Sheets can hold up to 20 million cells or 100 MB. The cap applies to the whole spreadsheet, counted across all tabs. There is no fixed row limit.

Because the cap counts cells, the rows you can fit depend on how many columns you use. A narrow table can hold millions of rows, while a wide export runs out much earlier. Every cell in every tab draws from the same 20 million cell pool.

Maximum rows at the 20 million cell limit
Columns in the spreadsheetMaximum rows at 20 million cells
54,000,000
102,000,000
201,000,000
26769,230
50400,000
100200,000

Google does not publish a maximum column count. Each column you add lowers the rows that fit under 20 million cells, and if the cells hold long strings, you can hit the 100 MB cap first.

Other Google Sheets limits: cell characters and Connected Sheets

  • 50,000 characters per cell on conversion: when an Excel file is converted to Google Sheets, any cell with more than 50,000 characters is removed.
  • Connected Sheets pivot tables: up to 200,000 rows.
  • Connected Sheets extracts: up to 500,000 rows or 5 million cells.

If an import fails while your row and column math stays under 20 million cells, check the 100 MB size cap. Long text such as raw JSON logs fills it quickly.

Google Sheets vs Excel row and column limits

Excel uses a fixed grid per worksheet instead of a cell budget shared across the file. A single Excel worksheet holds up to 1,048,576 rows by 16,384 columns.

With a narrow table of 5 or 10 columns, Google Sheets fits more rows than an Excel worksheet: up to 4,000,000 or 2,000,000 at the cell limit, against Excel's hard stop at 1,048,576. At 20 columns Google Sheets drops to 1,000,000 rows for the entire file. At 100 columns it tops out at 200,000 rows across all tabs, while an Excel worksheet still allows 1,048,576.

How to open a file too big for Google Sheets

Open the CSV, TSV, JSON, JSONL or Parquet file in rows.page instead. DuckDB-WASM reads it inside your browser, so the file stays on your machine unless you click Share, and opening files is free with no account.

The grid has no row limit and loads rows in pages of 100 as you scroll. CSV, TSV, JSON and JSONL files open up to 1.5 GB per browser tab. A bigger CSV, TSV or JSONL file loads partially with the note "Loaded the first N rows: the file is X, more than the browser can hold." Parquet is not held to the 1.5 GB check because DuckDB reads it in place.

You can filter with country:NL or price:>20, check each column's histogram and sort the whole dataset. rows.page does not open .xlsx or .xls files, edit cells or run spreadsheet formulas, so save Excel files as CSV first.

A public link opens the same way: put it after https://rows.page/, as in https://rows.page/https://example.com/data.csv. If the host blocks cross-origin requests, the rows.page proxy fetches up to 100 MB within 30 seconds and stores nothing.

How to shrink a big CSV before importing it into Google Sheets

If you still need the data in Google Sheets for charts or formulas, aggregate it in rows.page first. Type a DuckDB SQL query that starts with SELECT, WITH or FROM into the filter box; the table is always named data.

sql
SELECT
  country,
  status,
  count(*) AS total_rows,
  sum(amount) AS total_amount
FROM data
GROUP BY country, status
ORDER BY total_rows DESC
  1. Open your CSV, TSV, JSON, JSONL or Parquet file in rows.page.
  2. Run a GROUP BY query, or filter the table down to the rows and columns you need.
  3. Click Export and choose CSV to save the current view or SQL result.
  4. Import that smaller CSV into Google Sheets with File > Import.

SQL results return up to 1,000,000 rows, and filtered views export every matching row. The CSV is comma-delimited UTF-8 without a BOM, and text cells starting with =, +, -, @, a tab or a carriage return get a leading apostrophe so spreadsheets don't run them as formulas.

If the data already lives in BigQuery, skip the CSV and use Connected Sheets to query it from your spreadsheet, within its limits of 200,000 rows for pivot tables and 500,000 rows or 5 million cells for extracts.

rows.page limits and prices

WhatLimit or price
Open a file in your browserFiles up to 1.5 GB, $0, no account, nothing uploaded
Share a link without an account$0, files up to 100 MB, link deleted 7 days after creation
Free account$0, 10 datasets kept, last 3 versions
Pro$12/month, 100 datasets, files up to 500 MB, private links
Max$39/month, 1,000 datasets, files up to 2 GB, private links

Questions

Does the 20 million cell limit in Google Sheets apply per tab or per file?

Per file. All tabs in a spreadsheet share the same 20 million cell and 100 MB pool.

How many rows can Google Sheets hold if I have 26 columns (A to Z)?

At most 769,230 rows before hitting the 20 million cell limit, if it is the only tab in the file.

What happens to long text cells when I convert an Excel file to Google Sheets?

Any cell with more than 50,000 characters is removed during the conversion.

Can rows.page open an Excel .xlsx file that is too big for Google Sheets?

No. rows.page does not read .xlsx or .xls files, so save the sheet as CSV first. An Excel sheet holds at most 1,048,576 rows, and the CSV opens in rows.page with no row limit.

How do I share a CSV that exceeds the 100 MB Google Sheets limit?

Open it locally in rows.page (up to 1.5 GB), or push it to get a shareable link. One push takes up to 100 MB on every plan; Pro ($12 per month) and Max ($39 per month) accept files up to 500 MB and 2 GB through multipart uploads (POST /api/v1/uploads).