Connect to OpenAI

Two paths, pick one. Your credential is stored only in this browser and sent only to the API host listed on the option you choose. What is this?

Paste OpenAI API key

Cheapest · batch mode

Goes straight to api.openai.com — no third party in the loop. How do I get a key?

Log in to OpenRouter

One click · no paste

Images pass through openrouter.ai on their way to OpenAI. ~5% more per receipt; batch mode unavailable.

Drop receipts

Drop photos of receipts

JPG or PNG · any orientation · downscaled to 1568px before sending

A small thing I made for my own tax prep

Photos of paper receipts, in. Scans and a spreadsheet, out.

Drag in JPGs, get cropped images plus structured fields — vendor, amount, tax, date — ready to drop into a folder.

This web page is the whole app. No server, no signup, no login, nothing to pay me. You bring your own OpenAI API key; your images and key stay in your browser.

  • Auto-rotated & cropped
  • Structured JSON & CSV
  • No signup · MIT

How it works

  1. Drop photos. JPG or PNG, one or many. They stay in your browser.
  2. Downscale. Each image is resized to 1568px on the long edge, locally.
  3. Send to OpenAI. The downscaled JPEG + your key go to api.openai.com (or openrouter.ai if you're on that path). Nowhere else.
  4. Parse. The structured JSON response is used to crop and warp the image upright — in your browser.
  5. Download. One ZIP with processed JPGs, a CSV, and JSON side-by-side.

Privacy

Static HTML on a personal subdomain. Open DevTools → Network and you'll see exactly two hosts: wherever you loaded the page from, and either api.openai.com or openrouter.ai (depending which path you chose).

Leaves your browser
Your API key (Authorization header) and the downscaled JPEG, only to the API host.
Stays in your browser
Original photos, processed scans, parsed fields. None uploaded anywhere.
Never collected
No accounts, no cookies, no analytics beacons, no third-party scripts.

FAQ

How do I get an OpenAI API key?
  1. Go to platform.openai.com/api-keys and sign in.
  2. Click Create new secret key. Give it any name.
  3. Copy the sk-… string and paste it into the Connect panel.
  4. Add a small amount of credit at Billing. A few bucks tends to go a long way — usually hundreds of receipts, but OpenAI sets the rate, not me.
What will it cost me?

The tool itself is free. Your cost is whatever OpenAI charges for the vision call, billed directly to your OpenAI account. Check their pricing page for what applies to you.

Anecdotally, from my own use:

ModeRoughly
Fast~1¢ per receipt
Batchunder half a cent per receipt

Varies with image size and whatever OpenAI is doing with Batch discounts that week.

Something says “review” — what do I do?

A receipt is flagged review when a critical field (brand, date, amount) is missing, the date isn't valid YYYY-MM-DD, detected corners don't form a plausible rectangle, or the model itself reported poor quality. Many of these are flaky — hit Retry on the row first; it often succeeds on a second pass.

Who made this? Is it a product?

Just a person, not a product. Built it for my own tax prep and left it online. MIT-licensed, no signup, no payment to me, no affiliation with OpenAI. Source: github.com/orlenko/receipts.

Why not just use a SaaS OCR product?

Plenty exist and some are great. This one exists because I didn't want to hand my receipts to another company whose retention policy I'd never read. Bring your own key, run it on your own machine, ship the output into your own folder. Close the tab and it's gone.

Can I run this without using your hosted page?

Yes — that's the point of it being a static page. Clone github.com/orlenko/receipts, read every line (it's small), and serve it with any static server you like — for example python3 -m http.server 8000. Same JS, same behavior, your network tab, your audit. You never load a byte from my domain.

If you'd rather just confirm the hosted version is doing exactly that: open DevTools → Network while you use it. You'll see exactly two hosts — wherever you loaded the page from, and api.openai.com or openrouter.ai depending on which sign-in path you took.