📸

AI receipt scanning that gets SA right

Snap a till slip. We read the store, the total, the date. You confirm.

Manual expense entry is a tax on your evening. HeyKit lets you take one photo and have the form filled before you walk to the car. Powered by Claude or GPT-4o (your choice), tuned with a prompt that knows what a Pick n Pay till slip looks like vs an Engen invoice vs an emailed Takealot PDF.

Photos and PDFs both work

Snap a till slip with the camera, pick a screenshot from your photos, or upload a PDF invoice. Multi-page PDFs render the first page for OCR and store all pages as the attached document.

  • Compressed to ~1400px JPEG client-side before upload — iPhone 5 MB photos shrink to ~400 KB without losing the text
  • PDF receipts (school invoices, online order receipts) work via pdf.js client-side rendering
  • HEIC photos auto-converted in the browser

What it extracts

Three fields with high accuracy: the retailer name, the final amount paid, and the date. Sometimes also product name, brand, model, and serial (useful for the Asset register).

  • Store name normalised — 'PICK N PAY (PTY) LTD STORE 0042' becomes 'Pick n Pay'
  • Total filtered to ignore subtotals, VAT lines, change-due — only the final amount the customer paid
  • Date in YYYY-MM-DD format ready for the expense form

Smart category matching

After you've logged a few expenses, the system learns. Next time you scan a PnP slip, it auto-picks 'Groceries' from your history. Even with retailer aliases — 'PnP' on a Telegram quick-add finds 'Pick n Pay' in your past entries.

  • Word-overlap scoring with frequency as tiebreaker
  • Built-in alias map: pnp / picknpay / woolies / ww / dischem / clicks / takealot / makro / spar
  • Falls back to 'Unforeseen' when confidence is low rather than guessing wrong

You're always in control

Auto-filled fields are highlighted so you can see what the AI touched. Override anything before saving. If the OCR misreads the total, fix it — the AI never wins over you.

In practice

What you can do with this

Post-grocery-run blitz

Walk in from the shops with the receipt in hand. Open the app, tap Scan, snap, save. Repeat for the Engen slip. 30 seconds total.

Emailed school invoice

School bills arrive as a PDF. Open the PDF, share to HeyKit (or upload), and the date + total + 'Western Province Preparatory' end up in the form.

Logging from Telegram during the school run

DM a receipt photo to the bot in the car park. It replies 'Saw R342 at Pick n Pay. Log it?' with Yes/Cancel buttons. Tap Yes — done.

Common questions

Which AI does it use?

Either Claude (Anthropic) or GPT-4o (OpenAI), depending on which API key you configure on the server. Both are equally good for SA receipts — Claude is slightly better on long invoices, OpenAI is faster.

What if the OCR gets the total wrong?

Override the field before saving. The AI fills the form; you confirm. Wrong amounts never get logged silently.

Does it work with handwritten receipts?

Often yes for printed-form receipts with handwritten amounts (like a panel beater). Pure handwriting is hit and miss — you'll usually need to override at least one field.

Where does the receipt photo end up?

Uploaded to your DigitalOcean Spaces (or whatever you've configured) and attached to the expense. You can preview it later from the expense list or service history.

Are the receipts sent to OpenAI/Anthropic?

The image is sent to whichever provider you've configured, processed, and the result returned. Anthropic and OpenAI both have strong data-privacy commitments — they don't train on API traffic. The original photo also stays in your DO Spaces bucket.

Ready to try it?

Free to use. Works offline. No credit card.

Sign in to HeyKit →

Also in HeyKit

See all features →