๐ค AI Data Analysis ยท 6 min read
What Does ChatGPT Do With a CSV File You Upload?
It reads the file as text, turns the rows into a table, and โ when data analysis is switched on โ writes Python that runs against that table in a sandbox. You get answers in the chat window; you do not get a live connection to your spreadsheet. The part that catches people out is the ceiling: OpenAI caps spreadsheets at roughly 50 MB, far below the 512 MB it advertises for documents in general, and a file can pass that check and still be cut down before the model ever counts a row.
The four steps between your file and an answer
Uploading looks like one action. Behind it, four things happen in order, and each one is a place where a CSV can lose fidelity.
- The bytes are accepted. The upload endpoint checks the extension and the size against the limits below. A file that fails here never reaches the model at all.
- The text is extracted. For a CSV this is close to a copy, which is one reason CSV travels better than PDF. The parser still has to decide what the delimiter is and whether quotes wrap whole fields, and RFC 4180 leaves both of those to the file.
- A table is built and shown to the model. Depending on the file, the rows appear as a preview, as a reference the model can quote, or as a dataframe the code environment can load. A large file may be represented by its first N rows plus a schema.
- Python runs the question. "What was revenue in Q3" becomes something like
df[df.date.dt.quarter == 3].revenue.sum(), executed in the sandbox. The number you see was computed, not recalled โ as long as the dataframe it ran on was complete.
Step three is the one to keep in mind. When a model works from a preview rather than the whole table, answers about individual rows stay correct while totals drift, because nothing in the output announces that the tail of the file was never loaded. Asking "how many rows did you read" is a cheap check, and the honest answer sometimes differs from the row count in your CSV.
The limits, as OpenAI publishes them
| File type | Documented limit | What it means in practice |
|---|---|---|
| Documents and presentations | 512 MB per file | The outer ceiling, and the number most people quote |
| Text and document files | 2 million tokens per file | Triggers long before 512 MB on dense text |
| CSV and spreadsheets | About 50 MB, depending on row size | The limit that actually governs a data file |
| Images | 20 MB per image | Irrelevant to CSV, useful as a sanity check on the table |
Those figures come from OpenAI's help centre article on uploading files and audio, and they change without much notice. Treat 50 MB as an order of magnitude rather than a promise: a file of 40 MB with very wide rows can fail where a 45 MB file with narrow rows succeeds.
Why a 50 MB CSV is not a 50 MB dataset
File size measures bytes. Models consume tokens, and analysis consumes rows and columns. Three different budgets, and the tightest one wins.
A CSV of 1 million rows and 20 short columns is around 150 to 250 MB of plain text, so it will not upload. Compress the same table into 200,000 rows and it fits, but the model may still only see a sample. For comparison, Excel stops at 1,048,576 rows and 16,384 columns per sheet, and a single cell holds 32,767 characters, per Microsoft's published specifications. A file that opens in Excel without complaint can be far past what fits in a chat message.
The practical test is boring and reliable: open the file in a viewer that reports the row count, upload it, then ask how many rows were read. If the two numbers differ, every total after that point is suspect. Our guide to CSVs that are too large for an AI tool covers the splitting options when the count comes back short.
What it handles well, and what it does not
| Task | Reliability | Note |
|---|---|---|
| Sum, average, count, group by | High | Python does the arithmetic; check the row count it read |
| Column profiling and data quality checks | High | Good at spotting mixed date formats and empty columns |
| Charts | Medium | Rendered in the sandbox, often fine, occasionally unreadable labels |
| Joining two files | Medium | Works, but key mismatches are easy to miss |
| Cleaning 100k rows in place | Low | Slow, and the output file has to be re-downloaded and re-checked |
| Exact line-by-line audit of an invoice file | Low | The model cannot eyeball 5,000 rows; use a script |
Where the file goes after you close the tab
An uploaded file stays attached to its conversation, and the conversation stays in your history unless you delete it or run with history off. Content used for training depends on the data controls on your account, and that setting is the one to check before a file with customer names, prices or health information leaves your machine.
Nothing here is a reason to avoid the tool. It is a reason to upload a sample rather than the master file, keep an original copy, and drop the attachment when the question is answered.
Six things that make the answers better
- Name the columns. "Total the
amountcolumn wherestatusis paid" beats "analyze this". - Ask for a table, not prose. A table of numbers is easy to check against the source; a paragraph is not.
- Ask it to print the code. Seeing the filter and the aggregation is how you catch a wrong date range before it becomes a report.
- Split first, upload second. Monthly files analyse faster and answer more precisely than one annual dump.
- Fix types on arrival. Numbers stored as text, and dates as day-first strings, produce wrong sorted orders and silently dropped rows.
- Keep the question repeatable. If you will ask the same thing next month, the chat is the wrong home for it; a saved filter or a small script is.
When a chat window is the wrong tool
Three cases send you elsewhere. Files past the spreadsheet ceiling, because splitting by hand costs more than the analysis. Recurring reports, because re-uploading and re-prompting every week is a manual job wearing a clever hat. And anything where an exact row-level answer matters more than a plausible one.
For the middle case, a browser tool that keeps the file local and runs the query you built once is usually the shorter path; see free alternatives to ChatGPT's code interpreter and the free AI analysis walkthrough. If you are producing the file rather than reading it, saving a CSV out of ChatGPT covers the export side, which has its own traps around quoting and line endings.
Check the Row Count Before You Trust the Total
Open the file in the analyzer, read the columns and the row count as stored, then ask your question with the numbers already in front of you.
Frequently asked
Can I upload a CSV to the free version of ChatGPT?
File uploads exist on the free tier with a smaller daily allowance than the paid plans, and OpenAI notes that limits can be lowered at peak times. The parsing behaviour is the same; what differs is how often you can start over when a file comes back truncated.
Why does ChatGPT say my CSV has no data?
Usually a separator mismatch. A file saved with semicolons in a European Excel locale arrives as one column, and a query for a column that does not exist returns nothing. Converting the delimiter before upload fixes it in one step.
Does it modify my original file?
No. The file you upload is read-only input. Any cleaned output is a new file the sandbox writes, which you download separately and should check before using downstream.
Sources for this article: OpenAI Help Center "Uploading files and audio to ChatGPT" for the 512 MB document ceiling, the 2 million token cap on text files, the approximately 50 MB spreadsheet limit and the 20 MB image limit; RFC 4180 for the CSV delimiter and quoting rules; and Microsoft Support's Excel specifications and limits for the 1,048,576 row, 16,384 column and 32,767 character figures. Limits are as published on the day this page went live and are revised by OpenAI without notice.
Related reading
AI & Analysis โ other guides that pair well with this one.
- AI CSV Editor: Edit a CSV with Plain English
- How to Save a CSV File From ChatGPT
- How to Open a CSV File in Windows (Notepad, Excel, PowerShell)
- How to Open a CSV File on Android (Google Sheets, Text Editors, File Managers)
Browse all guides in the NoCodeCSV blog.