Free agents + LAUNCH30: 30% off paid agents until 31 Dec 2026 (one-time purchases only) See free agents
Oarsman AI Sign in

Invoice & Receipt Extractor / Docs

Invoice & Receipt Extractor: setup guide

Turn a pile of supplier invoices, bills and receipts (PDFs, scans, phone photos) into a checked spreadsheet: one row per document, one row per line item, and a short list of the ones a human should look at.

Setting up the n8n version? Open setup-page/index.html (in this download). It fills the workflow settings in your browser, then Test it checks your n8n for free and can read one sample, with a plain fix for any failure. About 15 minutes (an estimate). Something stopped working? on the same page reruns the check later.

Two ways to run it, same checks in both:

Claude skill n8n workflow
Good for Monthly batches you hand to Claude ("here are October's bills") Hands-off: an upload form, a webhook, or Gmail attachments, straight into Google Sheets
Reads the documents Claude (in your Claude account) OpenAI, with your own API key
Output invoices.xlsx, invoices.csv, line_items.csv, review.md Invoices and Line items tabs in your Google Sheet, a review email, a JSON reply
Folder skills/invoice-receipt-extractor/ n8n/

What gets checked (both versions)

  • Quantity x unit price = line amount, and the lines add up to the subtotal.
  • Subtotal - discount + shipping + tax = the printed total. When the supplier's own total is wrong, you see the exact difference.
  • Tax lines add up to the tax total (CGST + SGST, multiple VAT rates). Prices that already include VAT are handled.
  • Dates: 10/09/2026 is read using the other date on the same document (a due date of 10/23/2026 proves month-first). If nothing proves the order, the document goes to review instead of being guessed.
  • Amount formats: 1,234.50, 1.234,56 €, ₹1,07,280.00, (12.00).
  • Currency is a real ISO code; the tax ID looks like a GSTIN, EU/UK VAT number, EIN or ABN (a warning only).
  • Duplicates: same supplier + invoice number (or supplier + date + total when there's no number) within the batch, and against your existing ledger or sheet. A re-sent PDF or a scan of a bill you already have is caught.
  • Anything the reader wasn't sure about goes to review.

Every document ends up ok or review with the reasons in plain words. Nothing is silently "corrected".

What you need

  • For the Claude skill: a Claude plan with code execution (claude.ai), or Claude Code, or the Claude API.
  • For the n8n workflow: n8n (Cloud or self-hosted), your own OpenAI API key, a Google account, and optional SMTP email.

5-minute setup

This is the Claude skill on claude.ai. The n8n version takes about 15 minutes; follow n8n/SETUP.md.

  1. In claude.ai, open Settings, then Capabilities, and turn on code execution.
  2. Open Customize, then Skills. Click the plus button and choose Upload a skill.
  3. Pick claude-ai-uploads/invoice-receipt-extractor.zip from this download.
  4. Start a new chat. Drop in the files from the samples folder.
  5. Ask: "Extract these invoices into a spreadsheet and tell me which ones need checking."
  6. You get a spreadsheet and a review list. The sample with the wrong total and the re-sent copy should be on the review list.

Using Claude Code instead? Copy the skills folder into ~/.claude/skills/, or install it as a plugin (see below).

Setup: Claude skill

Claude Code

unzip oarsman-invoice-receipt-extractor-v1.0.3.zip
cp -r oarsman-invoice-receipt-extractor/skills/* ~/.claude/skills/

or as a plugin: claude plugin marketplace add ./oarsman-invoice-receipt-extractor then claude plugin install oarsman-invoice-receipt-extractor@oarsman-invoice-receipt-extractor.

claude.ai (code execution on: Settings > Capabilities): Customize > Skills > + > Upload a skill, and upload claude-ai-uploads/invoice-receipt-extractor.zip.

Claude API: upload the skill folder with the Skills API and use it with the code-execution tool. The scripts use only the standard library plus openpyxl/pdfplumber, which the sandbox already has.

Then drop your files in a chat and ask: "Extract these invoices into a spreadsheet and tell me which ones need checking." To catch bills you already entered, also attach last month's invoices.csv and say so.

Quick start: n8n

See n8n/SETUP.md. About 15 minutes: make the sheet, import the JSON, fill in one settings node, connect OpenAI, Google Sheets and SMTP, publish.

Try it on the samples first

samples/ has 8 made-up documents: US, German and Indian GST invoices, one with a wrong printed total, one re-sent copy, one scanned copy, a UK café receipt (VAT included) and a crumpled fuel receipt photo. Ask Claude to run the skill on that folder, or run the tests:

cd oarsman-invoice-receipt-extractor
python3 tests/run_tests.py

You should see 34/34 checks passed. python3 tests/robustness_tests.py should show 2/2 (needs pypdf). Our own run, and the n8n run, are written up in TESTS.md.

AI disclosure and limits

  • Reading is done by an AI model (Claude, or OpenAI in n8n). Models misread things, especially blurry photos and handwriting. The checks catch most arithmetic misreads, but not, for example, a wrong supplier name or a misread line description. Look at the review list, and spot-check new suppliers.
  • Our tests use synthetic documents we generated, so they prove the scripts, the checks and the workflow wiring. They don't measure how well a model reads your real invoices.
  • It is data entry, not accounting or tax advice. It doesn't post anything to your accounting software.
  • Multi-page invoices work when the model is given the whole PDF (both versions do this), but our samples are one page each.
  • Real-world test (v1.0.1, see tests/REAL-WORLD-QA.md): on a public sample invoice, a rotated copy, a password-protected copy, a scanned copy and a 22-page non-invoice PDF, the no-AI scripts never marked a wrong document as ok. Every one went to review or was reported as unreadable. The quick draft (prefill.py) missed the tax line and the line items on the real invoice; the AI reader has to fill those in. Rotated pages give a poor draft.
  • Not tested: reading accuracy of a real AI model on real invoices, photos or handwriting. That needs a paid API, so it is not measured yet.
  • Password-protected PDFs cannot be read. You will be asked for an unlocked copy.

What's in the folder

skills/invoice-receipt-extractor/   SKILL.md, scripts/ (doctext, prefill, validate, numparse), assets/schema.json, references/fields.md
n8n/                                invoice-receipt-extractor.workflow.json, SETUP.md, sheet-template/, canvas.png (what it looks like after import)
claude-ai-uploads/                  the skill as a single zip for claude.ai
samples/                            8 synthetic documents, ground_truth/, reference_reads/
tests/                              run_tests.py (skill), n8n/ (workflow test harness and results)
expected/                           the files our test run produced
dev/                                validate_core.js (the n8n validator, shared with the tests), build_workflow.py

Built by Oarsman AI's AI agents and checked against the test report in TESTS.md. Support is self-serve: this README, n8n/SETUP.md and TROUBLESHOOTING.md. There is no call, chat or email support. Fixes ship as new versions at the same download link.