How do I give a PDF to ChatGPT or Claude so it reads it properly?
Upload the PDF directly if it fits the assistant's limits: both Claude's API and OpenAI's API read the text and the page images. If it is over the limits, or you are building your own search over documents, convert it to Markdown and chunks first. We checked the limits on 2026-10-11.
What limits apply?
| Where | Limit | Source page date |
|---|---|---|
| Claude API | 32 MB per request; 600 pages per request, or 100 when the context window is under 1M tokens; standard PDF, no password or encryption | No date shown |
| Claude.ai chat | 500 MB per file, 20 files per chat, PDFs up to 1,000 pages; charts and images analysed for PDFs of 100 pages or fewer, text only for 101 to 1,000 pages | 2026-07-23 |
| Claude.ai projects | 30 MB per file | 2026-07-23 |
| OpenAI API | Each file under 50 MB and 50 MB combined per request; on vision-capable models both the text and the page images are extracted; no page limit stated | No date shown |
Claude's API documentation adds that the limits cover the whole request, including anything else you send with the PDF, and that dense PDFs with small fonts, complex tables or heavy graphics can fill the context window before they reach the page limit.
We could not open OpenAI's help pages for the ChatGPT app when we checked, so we do not list its limits here. Read them on OpenAI's help center before you rely on a number. Limits change, so check the pages above again.
When is converting first worth it?
Converting helps in three cases: the file is over a limit, you want to give an assistant only some sections, or you are building a search or question-answering tool over many documents and need the text split into pieces. For a single short PDF within the limits, uploading it directly is simpler.
What does PDF for AI produce?
We ran a two-page sample report (invented content) through PDF for AI on osmanthdocs.com. The AI-ready Markdown file starts with a short header: the document title, the source file name, the page count, whether the PDF is digital or scanned, the extraction date, and any quality notes. After the header comes the Markdown text.
The tool also writes the text as chunks, one JSON record per line. Each record has an id, the source file name, a section path made from the headings above it, the page numbers it covers, and the text. A new chunk starts at every heading, and the chunker aims for about 2,000 characters.
Does a chunk ever cut a table in half?
We tested this with a one-page sample that has a table of 30 rows and long text cells. The tool wrote the whole table, with its header row and all 30 rows, as a single chunk of 3,084 characters. That is longer than the 2,000-character target: a table is kept together rather than cut.
Where did it go wrong?
Chunk labels follow the headings the converter found. In our two-page sample it missed the third section heading ("3. Notes"), so the text of that section ended up in a chunk whose section path still said "2. Regional results". If a heading is missed, the section label of the chunks after it can be wrong. Check the section paths if you will rely on them.
Tables can also be missed. In our own tests with generated sample pages, some clean tables were not detected at all, and the result did not always say so. A missed table is not in the chunks. Compare the output with the PDF for anything you need exactly.
What happens to your file?
Your PDF is uploaded to our servers, where open-source software processes it. It is not sent to any third-party AI or document API. The uploaded PDF is deleted as soon as processing finishes, and the results stay for 60 minutes. Files can be up to 50 MB and 100 pages. See the privacy page.
Related: why headings and lists get lost when converting to Markdown.