Open a CSV from a URL
Open a CSV from a URL in your browser, without downloading it
Put rows.page/ in front of a file URL to open it in your browser, free with no signup: up to 1.5 GB, or 100 MB when the host blocks cross-origin requests. It works for CSV, TSV, JSON, JSONL and Parquet, and rows.page keeps no copy of the file unless you save one.
No file handy? Open CO2 emissions by country and year (50k rows, 14 MB).
Put rows.page/ in front of the file URL
- Copy the direct link to the file, not to a web page that shows it.
- Type
https://rows.page/in front of it in your browser's address bar. Leave the link as it is, query string included; you don't need to encode it. - Press Enter. The table opens, and you can filter, sort or run SQL against
data.
https://rows.page/https://example.com/data.csvMany share links open a web page instead of the file. These patterns point to the file itself:
| Source | URL to put after rows.page/ | Notes |
|---|---|---|
| GitHub | https://raw.githubusercontent.com/<user>/<repo>/<branch>/<path>.csv | Not the github.com/.../blob/... page, which is HTML |
| Hugging Face | https://huggingface.co/datasets/<org>/<name>/resolve/main/<file>.parquet | Use the /resolve/ path; works for CSV, JSON, JSONL and Parquet |
| S3 presigned URL | The full https://... URL, signature included | Works until the signature expires |
| Google Sheets | https://docs.google.com/spreadsheets/d/<sheet-id>/export?format=csv&gid=<tab-id> | Share the sheet as Anyone with the link; gid picks the tab |
What happens when you open a remote URL
Your browser first downloads the file straight from the host. That works when the host allows cross-origin reads, as raw.githubusercontent.com does with access-control-allow-origin: *. The whole file downloads into your tab, DuckDB-WASM reads it there, and rows.page keeps no copy.
When the host blocks cross-origin requests, rows.page fetches the file through its proxy instead. The proxy has fixed limits:
- 100 MB per file.
- 30 seconds per request.
- 5 redirects.
- No private, local or rows.page addresses, such as
localhost,192.168.x.xor.internalhosts.
rows.page picks the format from the extension in the URL and otherwise from the bytes, ignoring the Content-Type header. That's why a Google Sheets export?format=csv link opens as CSV without a .csv ending.
Once downloaded, a remote file follows the same rules as one you drop on the page: up to 1.5 GB per tab, with bigger CSV, TSV and JSONL files loading their first rows and a bigger .json file refused with "Too big for this browser". Parquet skips the 1.5 GB check, but a remote Parquet file still downloads in full.
Fix a remote URL that won't open
- You see rows of HTML: the link points to a web page, such as a GitHub
/blob/page. Click Raw on GitHub, or use theraw.githubusercontent.compattern above. - Google Sheets shows HTML or an error instead of rows: the sheet isn't shared publicly. Set link sharing to Anyone with the link and use the
export?format=csvURL. - "The remote file is over 100 MB." or "The remote server took longer than 30 seconds.": the host blocks cross-origin requests, so the proxy limits apply. Download the file and drop it on rows.page, or add
access-control-allow-origin: *on your bucket so your browser can fetch it directly. - A 403 or 404 answer: the link has expired, needs a login or is wrong. Presigned S3 links answer 403 once they expire.
- "Couldn't open this data" on a CSV: the file is probably saved in a Windows code page, and characters like the euro sign or curly quotes break the read. Re-save it as CSV UTF-8.
- Excel
.xlsx, XML and zip files don't open at all. Export the sheet to CSV first, or use the Google Sheets export link.
Filter, sort and query the remote file
The grid has no row limit and loads 100 rows at a time as you scroll. Type filters like country:NL, price:>20 or name:* in the search box, or SQL that starts with SELECT, WITH or FROM against the table data:
SELECT country, count(*), avg(price)
FROM data
WHERE price > 20
GROUP BY country
ORDER BY 2 DESCSQL results stop at 1,000,000 rows, while a filtered view keeps every matching row. Export either one as CSV, Parquet (zstd), JSON, JSONL or Markdown (first 1,000 rows).
Share the view or save a copy
Your filter or SQL, sort and visible columns are kept in the part of the address after #. Copy the address bar to share that exact view. The other person's browser downloads the file from the original URL again, so a presigned link stops working once its signature expires.
For a link that doesn't depend on the original server, click Save to rows.page, which keeps a copy with its own link, versions and diffs. From a terminal, push the file instead:
curl -T data.csv https://rows.pageWithout an account, a push can be up to 100 MB, links expire after 7 days, and each IP address gets 50 pushes and 1 GB per UTC day. A free account keeps up to 10 datasets, and Pro ($12 per month) and Max ($39 per month) add private datasets and files up to 500 MB and 2 GB through multipart uploads. Every hosted dataset also gets a raw file URL like https://rows.page/<id>/raw.csv that other sites and scripts can read.
rows.page limits and prices
| What | Limit or price |
|---|---|
| Open a file in your browser | Files 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
Can I open JSON, JSONL or Parquet from a URL the same way?
Yes. Links ending in .csv, .txt, .tsv, .tab, .json, .jsonl, .ndjson, .ldjson, .parquet or .pq work, and links without an extension are detected from the bytes. Nested JSON becomes dot-path columns, and Parquet skips the 1.5 GB check, though the file still downloads in full.
Does rows.page store the file when I open a URL?
No. The file goes to your browser, directly or through the proxy, and rows.page keeps no copy unless you click Save to rows.page or push it with curl -T.
Why does my GitHub link show HTML instead of data?
A github.com/<user>/<repo>/blob/... link is a web page, not the file. Click Raw, or put https://raw.githubusercontent.com/<user>/<repo>/<branch>/<path>.csv after rows.page/.
How big can a remote file be?
When the host allows cross-origin requests, the limits are the same as for a dropped file: 1.5 GB per tab, with bigger CSV, TSV and JSONL files loading their first rows. When rows.page has to use its proxy, the limit is 100 MB and 30 seconds.
Can I open a localhost or intranet URL?
Not through the proxy, which blocks private, local and rows.page addresses. Such a link only opens if your browser can fetch it directly, which needs CORS headers on that server. For a file on your own machine, drop it on rows.page instead.