The Assistant Reads the PDF, Not the Photo of It
The owner uploads a signed contract, asks the assistant for the notice period, and gets a short refusal: the text could not be found in this file. The file opens perfectly in a browser. The refusal looks like a bug and is not one — it is the difference between a document and a picture of a document.
A PDF can contain text or pixels. When a word processor exports a contract, every letter is stored as a character with a position; a reader can extract the words. When a scanner or a phone camera produces a PDF, the page is an image and the letters are shapes. The assistant's document reader extracts text; it does not look at the page.
The code path is narrow and explicit. The file must be a PDF — anything else is refused with the type named in the message. The file must still exist in storage, otherwise the answer is that it is missing. A damaged or password-protected PDF is a separate error. A file over fifteen megabytes is refused before parsing.
What comes back is text, a page count and a truncation flag. The text is cut at twelve thousand characters, which is enough for a long contract but not for a whole book; the flag tells the assistant the text is incomplete, so it can say so instead of pretending it read everything.
A scanned PDF reaches the end of that path with an empty string. The reader then gives the answer that sounds like an excuse and is actually precise: no text could be found, the file may be a scanned image without a text layer. Nothing was invented to fill the gap.
The assistant finds documents by name, not by content: uploaded files only, not archived, with their type and size. Google Docs, Sheets and Slides are not in that search at all — they are links in a cloud drive, not files in the CRM storage. Asking the assistant to search inside a Google Doc is asking the wrong door.
There is a second door, and it leads to the same building. Receipts can arrive as photos, and a photo is read by a vision model rather than a text extractor. If a receipt arrives as a PDF, the text layer is tried first; if the PDF is a scan without text, the error says exactly what to do — send a photo, not a scanned PDF.
That is why the same sheet of paper can work as a photo and fail as a scan. The receipt path accepts JPEG, PNG and WebP images, or a PDF with text. A phone photo of a receipt is usually good enough; a scanner app that produces image-only PDFs is the one case that fails.
The receipt reader is also told to be narrow. It reads what is printed: vendor, amount, tax rate, currency, date, category. If both net and gross are printed, the amount is the net one; if only one total is printed, that total is used and the tax rate is taken from the document or left at zero. A field that cannot be read stays empty rather than guessed.
The result of that reading is a suggestion, not an entry. The extraction never creates an expense: it fills the form, the person checks the fields and saves. The same model call counts against the daily AI quota of the plan, and the extraction is written to the AI log, so a record of what was read exists.
For contracts, the practical rule follows from the mechanism. A text-based PDF exported from the word processor can be read and summarised. A scan of a signed copy cannot — unless someone runs it through text recognition first, and that step is not part of this path. A Word file is not readable by the assistant either: text extraction for DOCX exists in the product, but for importing contract templates, not for the assistant's reading.
This does not make the assistant useless with paper. It makes it honest about paper. The useful question is not whether it can read any document, but which documents carry text — and that is visible before the request: a PDF exported from a program carries text; a PDF photographed or scanned usually does not.
What this article does not claim: how often scans fail in practice, what share of documents are scans, or how accurate the receipt reader is on bad photos. Those numbers need real documents and a measurement, and neither is available here. What is available is the behaviour of the code, and it can be checked.
The takeaway is a filing habit. Keep the exported PDF for anything the assistant should read, keep the scan for the archive where a person reads it, and send receipts as photos. The assistant will then answer with the notice period instead of an apology.