About Tuna

What is Tuna?

Tuna is an open-source receipt verification service for Ethiopian banks and mobile wallets. It takes a receipt reference number, screenshot, QR code, SMS text, or receipt URL and verifies it against the bank's live endpoint. You get back structured data: amount, payer, date, status.

The name "Tuna" comes from the idea of "checking" — like checking a receipt. It's short, memorable, and works as both a noun and a verb.

Why does it exist?

Ethiopian businesses and individuals need to verify payments constantly. Banks don't provide a unified verification API. Each bank has its own format — CBE uses PDF receipts with JSON APIs, Telebirr returns HTML pages, BOA uses JSON with authentication, Dashen returns PDFs.

Existing solutions are either paid (check.et charges 499 ETB/month, verify.et charges $20-40/month) or closed-source. Tuna is free, open-source, and designed to be self-hosted.

How it works

Tuna uses a manifest-driven architecture. Each bank is defined in a TOML file with its parser, endpoint, and required fields. Adding a new bank means writing one parser file and adding one entry to the manifest — no framework changes needed.

# banks.toml
[CBETETAA]
name = "Commercial Bank of Ethiopia"
parser = "tuna.parsers.cbe"
requires = ["account"]

Supported banks

Tuna currently supports 7 banks with working parsers and 3 more with stubs:

  • Commercial Bank of Ethiopia (CBE) — PDF + JSON API, requires account number for FT refs
  • Telebirr — HTML parsing, geo-blocked outside Ethiopia
  • Bank of Abyssinia (BOA) — JSON API with authentication
  • Zemen Bank — PDF parsing
  • Dashen Bank — PDF parsing (partial)
  • Awash Bank — HTML parsing (partial)
  • M-Pesa — JSON + PDF, geo-blocked

Input methods

Tuna accepts receipts in multiple formats:

  • Text reference — Paste FT numbers, receipt IDs, or transaction references
  • Screenshot — Upload an image and Tuna runs OCR to extract the reference
  • QR code — Camera scan or image upload — reads embedded receipt links
  • SMS text — Paste bank SMS notifications — auto-detects bank and extracts reference
  • Receipt URL — Paste any bank receipt link — auto-detects bank from domain

Security

Tuna does not store receipt data. All verification is done in real-time against bank endpoints. The frontend uses XSS-safe rendering (no innerHTML with user data). Rate limiting and abuse prevention protect the API.

Open source

Tuna is MIT licensed. The code is on GitHub. You can self-host it, contribute parsers, or use the API in your own projects.

Built by

Tuna is built by Ash, a software developer based in Ethiopia. The project started as a receipt verification tool for personal use and grew into a full API with multiple bank parsers.