Is It Safe to Upload Documents to Online OCR? What to Use Instead
By Tu Luu · · · 9 min read
The short answer
For a public screenshot, uploading is fine and this article is not for you. For anything identifying — a payslip, an ID, a contract, a medical letter, a utility bill — do not upload it. Uploading transmits a complete copy of the file to a machine you do not control, and no deletion policy is a technical guarantee.
Use OCR that runs on your own device instead. In a browser, this site's image to text tool does it with Tesseract compiled to WebAssembly. On a Mac, Live Text is already built in. On Windows, PowerToys Text Extractor uses the OS's own OCR. For a batch, install Tesseract and run it offline. All four are compared below — and there is a one-minute test at the end for checking any of these claims, including mine.
Which one to use, by what you have
Txt2Img.click
In your browser
A screenshot, photo or scan you want read once, on any device, with nothing installed.
Against it: No PDF input, and plain text out — no DOCX, no layout, no tables.
macOS Live Text
On your Mac, iPhone or iPad
Anything already open in Preview, Photos or Quick Look. Select the text as if it were a document.
Against it: Apple devices only, and awkward for a folder of files.
PowerToys Text Extractor
On your Windows PC
Grabbing text off anything on screen, including a window that will not let you copy.
Against it: A separate install, and it works from the screen rather than from files.
Tesseract, on the command line
On your machine, no network
A batch of files, a scripted pipeline, or an air-gapped environment.
Against it: You have to install it, and there is no interface.
Two cases genuinely point the other way. If you have a multi-page PDF, or you need a formatted DOCX or XLSX out rather than raw text, the upload-based services do that and this site does not — the trade-offs are laid out row by row in the honest comparison of free OCR tools. If the document is sensitive and it is a PDF, the answer is offline software on your own machine, not a compromise between the two.
What "upload" actually commits you to
When you upload a file, you transmit a complete copy of it to a computer you do not control, operated by people you cannot identify, in a country you probably have not considered. From that moment several things are true and none of them are under your control.
The file exists on their disk. It is likely written to temporary storage, and quite possibly to backups and logs as a side effect of ordinary server operation. "Automatically deleted after one hour" is a policy statement, not a technical guarantee, and it says nothing about the backup that ran at minute thirty. If the service uses a CDN or object storage, copies may exist in more than one region.
Every employee and contractor with production access can in principle read it. Any future breach of that company exposes it. If the company is acquired or goes bankrupt, its stored data is an asset that changes hands. And you have no way to verify any claim about any of this — you are extending pure trust to an anonymous party, usually without noticing that you have.
The category that catches people out is documents that are boring but identifying: utility bills, bank statements, insurance letters, receipts. They feel mundane, and they contain exactly the account numbers and addresses that make identity fraud straightforward.
Why a browser can do this at all
Running OCR without a server is not a trick or a marketing claim; it is ordinary web platform capability. The pieces are:
- The File API reads a file you select directly from disk into the page's memory, without transmitting it.
- WebAssembly runs compiled code at near-native speed, which is how a full OCR engine executes inside a tab.
- Canvas renders and manipulates images pixel by pixel, and can export the result.
- Blob URLs and downloads hand the finished file back to your file system.
The structural point: in this model your file never becomes network traffic. It is read from your disk into your browser's memory, transformed there, and written back to your disk. There is no copy on anyone's server, because there was no transfer to make a copy from. That is a description of the data path, not a promise about good behaviour.
What you do download is the program — the JavaScript and WebAssembly that does the work, plus the language data the engine needs. That flows one way, from a server to you. It is also why nothing here is exclusive: Tesseract.js is open source, and anyone can put a page in front of it.
Verify any of it in about a minute
You do not have to take anyone's word for this, including mine. Your browser reports its own traffic, and the method works on any site.
The network tab test
- Open developer tools (F12, or right-click → Inspect) and select the Network tab.
- Tick Preserve log, then clear the request list so you start clean.
- Do the actual work — select your image and run the extraction.
- Sort by size. Look for any outgoing request carrying a payload comparable to your file.
If the tool uploads your file, you will see it: a POST request whose request size roughly matches your image. There is no way to hide that.
If processing is local, you will see the page and script downloads, then essentially nothing while the work happens — perhaps some analytics or ad requests, which are small and carry no file content. That silence during processing is the proof.
The stronger version: complete the initial page load, then disconnect from the network entirely and try to use the tool. Genuinely local processing keeps working. An upload-based service cannot.
Being honest about the limits
Local processing is not a magic privacy shield, and it would be dishonest to imply otherwise.
The page itself is still fetched over the network, so the site operator's server logs record that you visited, along with your IP address and approximate time. Local processing protects your file contents, not the fact of your visit.
Third-party scripts run in the same page. Analytics and advertising code — including the Google Analytics and AdSense scripts on this site — execute alongside the tool. They are not reading your images, but they do collect the usual browsing telemetry. If that concerns you, a content blocker addresses it, and these tools continue to function with one active.
Your device is still your device. Files you download land on your disk, subject to whatever backup or sync you have configured. Malware on your own machine sees everything regardless of where processing happened.
A site could change tomorrow. Today's local-only tool could ship an upload feature next month. This is why knowing how to run the network-tab test matters more than trusting any particular claim, including this article's.
What one extraction actually puts on the wire
Rather than ask you to take the previous section on trust, here is the test run against this site's own OCR tool on . The page was driven by Playwright in Chrome 150.0.7871.189, no extensions, a 900x420 PNG, 39 KB, chosen through the file picker went in through the normal file picker, and every request from page load to finished text was recorded.
| Talking to | Requests | What for | Sends the image? |
|---|---|---|---|
| txt2img.click | 9 | The page itself, five JS bundles, one stylesheet, the logo and the manifest. | No |
| cdn.jsdelivr.net | 12 | The OCR engine: tesseract.js, its worker, the WebAssembly core, and nine language packs. Downloads only — nothing is posted back. | No |
| Google ads and analytics | 14 | AdSense, Google Analytics, ad-traffic-quality and reCAPTCHA frames. This is the page paying for itself, and it is the part a blocker removes. | No |
| fonts.googleapis.com / fonts.gstatic.com | 2 | One stylesheet and one woff2. | No |
| blob: (this document) | 1 | The Tesseract worker, instantiated from a blob URL inside the page. Never leaves the tab. | No |
| Total | 38 | 1 POST in the whole run — google-analytics.com/g/collect — a page_view beacon, sent at load, before any file was chosen | 0 of 38 |
src/content/network-audit.mjs.The number that matters is the last one: of 38 requests, 1 was a POST — the Analytics page-view beacon, fired at load, before a file had been chosen — and 0 carried the image. The second number that matters is less flattering and belongs here too: fourteen of the thirty-eight are the ad and analytics stack. Nothing in it sees your file, but it is traffic you did not ask for, and a blocker removes it without breaking the OCR.
Repeat it yourself in about a minute:
- Open the OCR tool, then open DevTools and switch to the Network tab.
- Tick "Preserve log", then filter the method column to POST.
- Choose an image and wait for the text to appear.
- Every POST you see should be analytics. None will have your image as its payload — check the Payload tab on each one.
- For the stronger version: run it once, then switch DevTools to Offline and run a second extraction. It still completes.
Where upload-based services still make sense
To be fair to the model: some work genuinely cannot happen in a browser. Very large video transcoding, processing that requires substantial GPU capacity, tasks needing enormous machine-learning models, and anything that must coordinate between multiple users all reasonably belong on a server.
The question is not whether servers are bad, but whether this particular taskneeds one. Converting text to a PNG, merging two images, or running OCR on a page plainly does not — those workloads fit comfortably in a browser tab. When a simple task is implemented as an upload anyway, it is worth asking what else the upload is for.
A rule that fits in one line
Before uploading any file to a free online tool, ask: would I be comfortable emailing this file to a stranger? For a screenshot of a public web page, yes. For a scan of your ID, a client contract, a payslip, or a list of your students' names, obviously not — and in those cases use something local, then verify it with the network tab.
Common questions
Is it safe to upload documents to an online OCR site?
For a public screenshot, yes. For anything identifying — a payslip, an ID, a contract, a medical letter, a utility bill — no, because uploading transmits a complete copy of the file to a machine you do not control. "Deleted after one hour" is a policy statement, not a technical guarantee, and it says nothing about the backup that ran at minute thirty. Use a tool that processes on your own device instead, and verify that it does.
How can I do OCR without uploading files?
Three options, all of which keep the file on your machine. In a browser, Txt2Img.click runs Tesseract compiled to WebAssembly, so the image never becomes network traffic. On macOS, Live Text is built into Preview, Photos and Quick Look. On Windows, the PowerToys Text Extractor uses the operating system’s own OCR. For batch or scripted work, install Tesseract and run it from the command line with no network at all.
How do I check whether a tool is really processing locally?
Open developer tools, switch to the Network tab, tick Preserve log and clear the list, then run one extraction. A tool that uploads shows a request whose payload roughly matches your file size; a local tool shows nothing of that size. The stronger test is to load the page, disconnect from the network, and try again — genuinely local processing keeps working, and an upload service cannot.
Can I extract text from a receipt or invoice privately?
Yes. A receipt is exactly the kind of boring-but-identifying document worth keeping off other people’s servers, since it carries card digits, addresses and account numbers. Photograph or scan it, then run it through browser-based or offline OCR. Crop to the text before running it — it improves accuracy as well as limiting what is in the file.
Does local processing mean the site collects nothing at all?
No, and claiming otherwise would be dishonest. The page itself is fetched over the network, so a server log records the visit and the IP address. Third-party analytics and advertising scripts run in the same page — on this site, Google Analytics and AdSense. They never see your file, but they do collect ordinary browsing telemetry. A content blocker stops them, and the tools keep working with one active.