The short version
ChatGPT handles a wider range of files than people realize, but it handles them unevenly. Native text documents (Word, plain text, markdown, clean PDFs) read well. Image-heavy PDFs, scanned documents, multi-column layouts, and complex tables are where it quietly falls down — and the failure is usually silent, which is the dangerous part.
If you upload a messy file and ask a specific question, ChatGPT will almost always give you a confident-sounding answer. Whether that answer is based on the actual content of the file is a separate question. This guide walks through what ChatGPT is really doing with your upload, where it breaks, and when converting to markdown first is worth the thirty seconds it takes.
What ChatGPT does with an uploaded file
When you drag a file into a conversation, one of two pipelines kicks in depending on the file type and how you are using it:
- file_search (retrieval). For documents — PDFs, Word files, PowerPoint, EPUBs, text — ChatGPT extracts the text, splits it into chunks, embeds them, and builds a small vector index for that conversation. When you ask a question, it retrieves the most relevant chunks and stuffs them into the prompt. You are not getting the whole document in the model's context. You are getting a search result from your own file.
- Code Interpreter (Advanced Data Analysis). For data files — CSV, Excel, JSON — or when you explicitly ask for analysis, ChatGPT spins up a Python sandbox and runs code against the file. This is how it does things like "pivot this spreadsheet" or "plot revenue by quarter." It can also use Python to extract text from a PDF, but the extraction is only as good as pdfplumber or pypdf, which means tables and columns frequently come out scrambled.
Images go through the vision model directly — no retrieval, no Python, just the model looking at the pixels. That is why a screenshot of a table often works better than the same table as a PDF: the vision model sees the structure visually, whereas file_search sees whatever text the extractor could pull out.
The silent failures
These are the ones that burn people:
Scanned PDFs
A lawyer uploads a scanned 60-page contract. ChatGPT does some OCR, misses the signature pages where text is too faint, skips two pages where the scanner rotated the document 90 degrees, and returns a clean-sounding summary of the clauses it could read. Nobody mentions the skipped pages. The summary is dangerous, not because it is wrong about what it read, but because it is silent about what it didn't.
Fix: run scanned PDFs through a vision-aware converter (we have one) and upload the resulting markdown. You will see exactly what was extracted, page by page, before you hand it to ChatGPT. See the guide on converting scanned PDFs with AI vision.
Multi-column PDFs
Academic papers, legal briefs, financial reports — anything with two or three columns. ChatGPT's default extractor reads left to right across the whole page, so paragraph one of column one gets glued to paragraph one of column two, and the whole document becomes a collage. You'll often see this in the output as sentences that don't quite finish or summaries that mix up two different topics from the same page.
Tables inside PDFs
The hardest case. PDFs do not store tables as tables — they store them as lines and absolutely-positioned text. When ChatGPT's extractor sees a table, it makes a guess about the grid, and that guess is often wrong. You'll get rows concatenated into single strings, column headers glued to the wrong row, or totals attributed to random categories. Ask ChatGPT to "tell me the Q3 revenue" from a PDF table and you'll see how confident it can be while being wrong.
Long documents that hit the page cap
ChatGPT caps per-file length. The exact numbers have shifted over time, so think in terms of "a few hundred pages of text" rather than a hard figure. Over the cap, the upload either fails or silently truncates. Converting to markdown usually shrinks the file substantially (often 30–60%) because you are dropping the PDF's visual overhead and keeping only the content. A book that is too long as a PDF often fits as markdown.
Decision tree: upload as-is, or convert first?
Here is the rule we use when deciding whether to preprocess. It is not fancy, but it has kept a lot of people out of trouble.
A real before-and-after
To make this concrete: here is a table from a quarterly report as ChatGPT typically "sees" it after extracting a PDF, versus the same table as markdown. Same information, very different odds of a correct answer.
Segment Q1 2025 Q2 2025 Q3 2025 Cloud 4.2 4.6 5.1 Services Hardware 2.1 2.0 1.9 Licensing 1.3 1.4 1.5 Total 7.6 8.0 8.5
| Segment | Q1 2025 | Q2 2025 | Q3 2025 | |-----------|---------|---------|---------| | Cloud Svc | 4.2 | 4.6 | 5.1 | | Hardware | 2.1 | 2.0 | 1.9 | | Licensing | 1.3 | 1.4 | 1.5 | | Total | 7.6 | 8.0 | 8.5 |
Ask ChatGPT "what was Q3 cloud services revenue?" from the left version and it has to guess where columns begin and end. From the right version, it just reads the cell. Same data, two very different answer qualities.
Things people get wrong about ChatGPT uploads
"Bigger is better — upload the whole binder"
file_search does not read your whole document every time. It retrieves chunks. Uploading a 500-page binder when you only care about twelve pages means those twelve pages have to compete for relevance with everything else. Smaller, focused files produce better retrieval than one kitchen-sink upload.
"If the model answers, it must have read the file"
No. The model will answer from its general knowledge, the file name, and the partial extraction it got. Ask follow-up questions that require specific quotes or page numbers. If it can't produce them, it probably didn't read what you think it read.
"OCR in ChatGPT works fine"
Sometimes. ChatGPT's behind-the-scenes OCR is decent for clean, printed pages in English. It gets worse quickly on anything messy — older scans, faded print, tables, handwriting, rotated pages, non-English text. If you care about accuracy, use a dedicated vision converter and review the output before you upload.
"I should upload the DOCX, not the markdown"
It's backward. Markdown is closer to what the model was trained on than DOCX, which is XML wrapped around formatting instructions. ChatGPT can handle DOCX, but it handles markdown more fluently and with fewer extraction errors along the way.
Practical tips for better ChatGPT uploads
- Name files descriptively. "2024-Q3-earnings.md" is better than "document (3).pdf." ChatGPT uses the filename as context, and more importantly, you will remember what you uploaded.
- Split long documents. A 400-page book works better as ten chapter files than one giant blob. Retrieval gets more precise because each file is a tighter unit.
- Check token count before uploading. Our token counter tells you how big a file is in tokens, which is what actually matters. A "12 MB PDF" tells you nothing; "420,000 tokens" tells you it won't fit.
- Ask the model what it saw. After uploading, ask "what are the top-level section headings in this document?" If the answer doesn't match reality, the extraction is broken and you need to preprocess.
- Use Projects for recurring material. If you keep returning to the same reference document, put it in a Project so it persists across conversations instead of re-uploading every time.
When native upload is fine
Not every file needs preprocessing. We are not trying to sell you a conversion for every document. The list of things where native upload works well:
- Word documents with standard paragraphs and headings.
- Short PDFs under ~20 pages, born-digital (not scanned), single column.
- CSVs and Excel files you want to analyze with Code Interpreter.
- Screenshots and photos for quick "what does this say?" questions.
- Plain text, markdown, and common code files.
Anything outside that list — especially if the answer is going to affect a real decision — is worth the extra step.
Where to go next
If you also use Claude, the mental model is slightly different — Claude reads PDFs as text plus vision, and its 200K context window changes what workflows are practical. See our Claude file uploads guide. If you are deciding between tools for a specific project, our post on preparing documents for Claude and Gemini compares them head-to-head.
And if you want to see the conversion pipeline that underpins all of this, the PDF-to-markdown converter is the same tool we use internally to clean up the messy files we get from clients every day.