Introducing SnapReceipt!
Finally, I made an app that does real stuff

March 2024

Expensing receipts is super annoying

My workplace doesn’t use Expensify or any other modern expensing software. As a result, I have to manually enter all my receipt details (e.g., date, type, amounts) into what is basically a spreadsheet app - and it kinda sucks.

With the amount of paper receipts I pick up when traveling, this gets annoying fast. My top grievances include:

  • Triple-checking I didn’t forget any receipts in my camera roll (missed expenses add up fast!)
  • Transferring photos to my work laptop (named IMG_1234, IMG_1235…)
  • Pairing photos into a single submission as required (e.g., I’ll need both the handwritten tip and line-item invoice for the meal)
  • (Most annoyingly) Reading each receipt for dates, amounts, etc. and typing them out by hand

Why SnapReceipt is awesome

Receipt scans are fast

In just seconds, SnapReceipt scans the receipt for amounts, date and location, capturing these values for you automatically.

SnapReceipt can also handle multiple photos per expense, and lets you quickly override any values if you need to.

Exporting is a breeze

SnapReceipt makes bulk exports easy, helpfully including a summary table similar to my workplace’s input format (for example, tips must be submitted as separate line items).

Example email generated by SnapReceipt. Note that SnapReceipt will also number each document, making it an easy drag-and-drop experience.

Helpful tips throughout

SnapReceipt is an opinionated app - so I’ve added little tips throughout for new users.

It has dark mode!

But I like my current app / workflow - why switch?

Fair enough! SnapReceipt deals with the annoyances I have and might not be the best option for you. But if you want the following in a single app, it might be worth trying SnapReceipt:

  • Never miss an expense: SnapReceipt tells you when you have unexported receipts and auto-selects them for you every time you begin an export. Sure, your app / workflow takes photos of every receipt - but are you sure you’re submitting each expense exactly once?
  • Smart auto-fill: No, this isn’t GenAI, but it is 2024 and OCR is good enough to save you a ton of time finding the key data points you need
  • Super fast exports: Don’t bother with grouping expenses into a ‘trip’ or ‘report’ - export expenses in seconds and take back more of your free time
  • No mess to clean up: Gone are the days of deleting old receipt photos from your camera roll. SnapReceipt stores photos in-app, leaving your camera roll filled with the photos and videos of people and experiences you actually want to remember

What else is on the roadmap?

  • P2: Automatic currency detection - a ‘proper’ solution is a little tricky and will have to correctly blend three unreliable, possibly conflicting data sources:
    • Currency symbols: Receipts might include a $ symbol, but that could be CAD, USD, AUD, etc. Similarly, a ¥ could be either CNY/RMB or JPY
    • Phone location data: While viable, it only helps for in-the-moment receipt capture (not for historical receipts)
    • Receipt location: If we are able to read the the location of the receipt (which is often spotty), we can try to geodecode it to find the appropriate country and implied currency
  • P3: Importing digital invoices (e.g., email receipts)
    • I’ve played with the idea of using SnapReceipt to import emails, scanning the raw HTML directly (and falling back to generating an image and running OCR if needed)
    • For security reasons, I don’t want to hold onto anyone’s emails on a server anywhere, which limits the architecture options available
    • One viable serverless workflow involves the user creating an email (e.g., Outlook), storing the credentials on SnapReceipt locally, and SnapReceipt retrieving the emails via Outlook API
    • As a nerd, this workflow would suit me fine… but talking to some prospective users, the idea of creating a new email seemed to be a material barrier
    • A workaround could be to use the user’s existing email, but most people seem to use Gmail, and integrating with Gmail is pretty onerous:
      • To read emails in the background I realistically need “full access” to mail.google.com to read all emails and add labels to mark imported receipts
      • Google (rightly) considers this ‘restricted’ scope
      • But to transmit ‘restricted’ data to SnapReceipt, Google will require me to go through a security assessment which could cost between $15K and $75K
      • So… until I find another workflow or decide to set up a server, this feature will be on the backlog
  • P4: Any fun stats / charts - would be fun and I’d get to try out Swift Charts, but definitely low priority
  • Not on roadmap: Anything to do with entering the data into the workplace app (which is not possible anyways for an iOS app)

Credits

This app was built on SwiftUI with SwiftData. I used ShowTime to make my taps and swipes visible in screen recordings.