Google Sheets to CSV

How to export Google Sheets to CSV, plus a live CSV link

Google Sheets exports 1 tab per CSV, which rows.page opens free with no signup up to 1.5 GB: click File > Download > Comma Separated Values (.csv), or use the export URL with the tab's gid for a live link. The Drive API's export stops at 10 MB.

.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 to download one Google Sheets tab as CSV

Open the spreadsheet, select the tab at the bottom and click File > Download > Comma Separated Values (.csv). Google exports only that tab, so a workbook with 5 tabs takes 5 downloads.

To skip the file, copy the cells, click Paste data on rows.page, paste them into the box and click Open. Copied cells arrive tab-separated and open as a table you can filter and export as CSV, Parquet, JSON, JSONL or a Markdown table of the first 1,000 rows.

How to get a live CSV link for a Google Sheet

Scripts, dashboards and coworkers often need a URL that always returns the current sheet. There are 3 ways to get one.

Export URL with gid

Keep the document ID from your spreadsheet URL and replace /edit and everything after it with /export?format=csv&gid=<gid>:

text
https://docs.google.com/spreadsheets/d/<id>/export?format=csv&gid=<gid>

The <gid> is the number after #gid= in the address bar while the tab is open. The sheet must be shared as Anyone with the link for the URL to work outside your own browser session.

Publish to web as CSV

Click File > Share > Publish to web, choose the whole document or one tab, set the format to CSV and copy the link. Google notes that changes can take a few minutes to show on the published version.

Google Drive API

Drive's files.export with text/csv returns the first sheet only, and Google limits exported content to 10 MB.

Ways to get a CSV from Google Sheets
MethodUpdates by itselfNeeds sharingNotes
File > Download > Comma Separated Values (.csv)NoNoCurrent tab only; repeat for each tab.
Export URL (export?format=csv&gid=<gid>)YesAnyone with the linkTargets any tab by its gid.
Publish to web as CSVYesNo, the publish setting appliesChanges can take a few minutes to show.
Drive API files.exportYesNo, needs API credentialsFirst sheet only; exports limited to 10 MB.

Open a live Google Sheets CSV in rows.page

Put the export link after rows.page/ to explore the current sheet without saving a file:

text
https://rows.page/https://docs.google.com/spreadsheets/d/<id>/export?format=csv&gid=<gid>

Your browser fetches the link directly when the host allows it, as Google's export link does; otherwise rows.page uses its proxy, which takes files up to 100 MB within 30 seconds. Nothing is stored, and the format comes from the bytes, so the link opens as CSV without a .csv extension.

The grid has no row limit and loads rows in pages of 100. The Columns panel shows each column's type, distinct count, share of empty values, min and max for numbers and dates, and a histogram or the top 10 values. Filter with country:NL, price:>20 or -name:* (is empty), or run SQL against the table data:

sql
SELECT country, count(*), avg(price)
FROM data
WHERE price > 20
GROUP BY country
ORDER BY 2 DESC

The filter, sort and visible columns are saved in the page address after #, so copying the URL from the address bar shares that exact slice of the live sheet. To keep a copy with its own link, versions and diffs, click Save to rows.page.

Snapshot a Google Sheet with curl for versions and diffs

A live export changes whenever the sheet does, so a renamed column or deleted rows can break downstream jobs. For a stable URL with version history and row-level diffs, download the CSV with curl and push it to rows.page:

bash
curl -L -o sheet.csv "https://docs.google.com/spreadsheets/d/<id>/export?format=csv&gid=<gid>" && curl -T sheet.csv https://rows.page

The push prints a https://rows.page/<id> link, an owner link with a #t= token, a summary line and the command for the next version. Each push takes up to 100 MB. Without an account you get 50 pushes and 1 GB per IP address per UTC day, and links expire after 7 days with up to 20 versions.

Push the next snapshot with the rpt_ owner token from the first push, or with one of the up to 20 rpk_ API keys any signed-in account can create:

bash
curl -T sheet.csv -H "Authorization: Bearer rpt_..." "https://rows.page/<id>?id_column=id"

Pushes become v1, v2, v3. From the second version on, a banner shows "+N new, N gone, N changed vs vN", matching rows on the id_column, and rows.page compares automatically when the previous version is 64 MB or less. Raw URLs send access-control-allow-origin: *:

  • https://rows.page/<id>/raw.csv serves the latest version with no-cache.
  • https://rows.page/<id>/v1/raw.csv serves a pinned version that is cacheable for a year.

Sign in with Google and click Keep on my account to stop the link from expiring. The Free plan keeps 10 datasets with the last 3 versions visible.

What does Google Sheets lose when you export to CSV?

  • Formulas become values: a cell with =SUM(A1:A10) is written as its result.
  • Formatting is gone: fonts, colors, conditional formatting, merged cells and column widths do not exist in CSV.
  • Each file or URL holds one tab, because a CSV holds a single table.
  • A CSV exported from rows.page 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.
  • Skip .xlsx: rows.page does not read Excel files, and pushing one returns "This looks like an Excel or zip file. Export it as CSV and push again."

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

How do I export a specific tab from Google Sheets to CSV?

Open that tab and click File > Download > Comma Separated Values (.csv). For a link, use https://docs.google.com/spreadsheets/d/<id>/export?format=csv&gid=<gid> with the number after #gid= in the address bar.

Why does my Drive API CSV export miss tabs or fail?

Drive's files.export returns only the first sheet as CSV and limits exported content to 10 MB. For another tab, use the export?format=csv&gid=<gid> URL instead.

How big a CSV can rows.page open?

Up to 1.5 GB per browser tab for CSV, TSV, JSON and JSONL, free and without an account. A bigger CSV or TSV loads partially with a note saying how many rows fit, and links fetched through the proxy are capped at 100 MB.

Can I get a semicolon-delimited CSV or a BOM?

Not from either tool. Google Sheets downloads only comma (.csv) or tab (.tsv) files, and rows.page always exports comma-delimited UTF-8 without a BOM, with no delimiter, encoding or BOM option. On import, rows.page detects comma, semicolon, tab and pipe delimiters automatically.

How fast does a Publish to web CSV link update?

Google notes that changes can take a few minutes to show on a published file. If you need fixed copies instead, push snapshots to rows.page with curl; each push becomes a version (v1, v2).