If this project helps you, a coffee helps me keep working on it.
BillMinder keeps recurring bills, due dates, and payment history on your phone. No account. No bank connection. No internet permission.
Download the latest APK • See the app • Build from source
Most bill apps begin by asking for financial access. BillMinder takes the opposite approach. You enter the bills you care about, choose when to be reminded, and keep the full record locally.
- Track weekly, biweekly, monthly, quarterly, yearly, or one-time bills.
- See each real occurrence on the calendar. Missed payments stay overdue instead of vanishing into the next cycle.
- Set two reminders per bill, then act from the notification with Paid, Snooze, or Tomorrow.
- Plan with monthly totals, category budgets, cash-flow forecasts, and a 12-month view.
- Keep bills in their native currencies and use bundled offline exchange rates or your own overrides.
- Add encrypted receipt images or PDFs. OCR runs on the device.
| Home | Calendar | Insights |
|---|---|---|
![]() |
![]() |
![]() |
| Add a bill | Bill details | Settings |
|---|---|---|
![]() |
![]() |
![]() |
BillMinder declares no internet or location permission. It contains no analytics SDK, crash reporter, billing library, advertising code, or bank integration.
Receipt files stay encrypted in app-private storage. The OCR model ships inside the APK. The optional SMS scanner reads recent payment messages locally and is requested only when you turn it on. If you would rather not grant inbox access, share a single message to BillMinder instead.
Privacy controls can mask amounts inside the app and replace bill details on notifications, widgets, and the alarm screen. Biometric unlock always keeps a PIN fallback. Repeated incorrect PIN attempts trigger a delay that survives restarts.
BillMinder schedules reminders for 9:00 in your local time zone. Android 12 and newer normally grant its exact-alarm permission automatically. If exact timing is unavailable, the app uses a Doze-aware fallback and tells you the current state in Settings.
Android 14 and newer restrict full-screen alerts for most app categories. BillMinder falls back to a normal heads-up notification until you grant that optional access. It does not fail silently.
Reminders are rebuilt after a reboot, app update, clock change, or time-zone change. Unpaid bills get a separate overdue alert.
An encrypted .bmbak file carries bills, payment history, split payees, supported settings, and receipt bytes. Restore verifies the whole file before showing a preview, then lets you merge or replace. A bad passphrase or damaged file leaves current data untouched.
CSV import includes a preview, learned column mappings, and presets for Mint, Tiller, and Empower. Exports cover payment history, year-end reports, Bluecoins, YNAB, and Actual Budget. The portable backup format documents the container and its recovery behavior.
Android automatic app-data backup is disabled because a device transfer can copy encrypted receipt files without the device-bound key needed to open them. Use an encrypted .bmbak file when moving to another phone.
BillMinder is distributed as a signed APK for Android 8.0 and newer.
- Open the latest GitHub release.
- Download the release APK.
- Allow installs from your browser or file manager when Android asks, then open the APK.
There is one build. Optional SMS scanning, full-screen reminders, and exact alarms stay off until you enable the matching feature.
| Permission | Why it exists |
|---|---|
POST_NOTIFICATIONS |
Bill reminders and overdue alerts. |
SCHEDULE_EXACT_ALARM, USE_EXACT_ALARM |
Delivering a reminder at its scheduled minute. |
USE_FULL_SCREEN_INTENT |
The optional alarm-style due screen. It stays off until enabled. |
READ_SMS |
The optional local scan of recent payment texts. Nothing from the scan leaves the device. |
RECEIVE_BOOT_COMPLETED |
Rebuilding reminders after a restart. |
VIBRATE, WAKE_LOCK |
Delivering a reminder while the device is sleeping. |
USE_BIOMETRIC, USE_FINGERPRINT |
Fingerprint or face unlock, including the pre-Android-9 compatibility path. |
FOREGROUND_SERVICE |
Added by ML Kit. BillMinder starts no foreground service. |
DYNAMIC_RECEIVER_NOT_EXPORTED_PERMISSION |
Added by AndroidX and restricted to the app's own process. |
ManifestPermissionsTest fails if a dependency adds an undeclared permission or introduces network or location access.
Use JDK 21 and an Android SDK with API 36 installed.
./gradlew :app:assembleDebugRun the JVM tests and Android lint before installing a build:
./gradlew test
./gradlew lintFor a signed release, copy keystore.properties.example to keystore.properties and enter credentials for a keystore you control. The real file is ignored by Git.
./gradlew :app:assembleReleaseThe signed APK is written to app/build/outputs/apk/release/.
BillMinder is available under the MIT License.






