Frequently asked questions
Answers about plans, sharing, self-hosting, and account security.
Are the mobile apps available?
The Android app is in closed testing on Google Play, with a public release to follow once testing is complete. It includes encrypted offline data, local reminders, biometric lock, passkeys, and home-screen widgets. The iOS app is coming soon; until then, the web app works well in a mobile browser.
What do the plans cost and what do I get?
Free is $0: up to 10 bills, 1 user, 1 Bill Group, and payment history. Pro is $2.99/month or $24/year (about $2 a month, a 33% saving): unlimited bills, up to 6 users, 3 Bill Groups, full analytics, CSV and PDF export, and priority support. Plan limits apply to the hosted service; self-hosted deployments don’t use them.
Is there a free trial, and do I need a credit card?
Yes — new accounts get a 30-day trial of Pro, and no credit card is required to start. If you don’t subscribe, the account moves to the Free plan at the end of the trial; your bills and payment history are kept.
What happens to my data if I cancel or get downgraded to Free?
Cancelling keeps your subscription active until the end of the current billing period; you aren't charged again, and after that you move to the Free plan. All bills and payment history are preserved. If you're over the Free limits, you can still view everything but can't add new items until you're back under the limit or you upgrade again. There's no pause option — the documented alternatives are cancelling and re-subscribing later, or downgrading to Free.
Can I get a refund?
Subscription fees are generally non-refundable, but we may issue refunds at our discretion — in cases of billing errors, extended service outages, or other exceptional circumstances. Contact [email protected] within 14 days of the charge. See section 5.2 of the Terms of Service.
How do I export my data?
Open Payment History in the sidebar, apply any date or bill filters you want, choose CSV or PDF, and download the file. On the hosted service, export requires a paid plan; self-hosted deployments don't have that restriction.
What's the difference between sharing a Bill Group and sharing a single bill?
They're two different features. Sharing a Bill Group invites someone into a whole group — personal, business, family — by email, with a role that controls what they can do; it's for collaborating on a shared set of finances. Sharing a single bill shares one bill with other BillManager users and splits its cost by percentage, by fixed amount, or equally — that's the roommate-rent and split-utilities case. Settlements then track who owes whom across shared bills.
I'm self-hosting and the "Invite User" button isn't showing.
That button appears once email is configured. For SMTP you need EMAIL_PROVIDER=smtp plus SMTP_HOST, SMTP_PORT, SMTP_USERNAME, SMTP_PASSWORD, SMTP_USE_TLS, FROM_EMAIL, and APP_URL, then a container restart. If invitations still don't arrive: check docker compose logs billmanager for SMTP or Resend errors, make sure FROM_EMAIL is allowed by your provider (or is on a verified Resend domain), check spam, and confirm APP_URL is correct — the links in the emails are built from it. Port 587 is usually STARTTLS; 465 is usually implicit SSL. With Gmail, use an app password.
Never share SMTP_PASSWORD or any other secret value. Confirm only whether each variable is set.
A user on my self-hosted instance lost access to their 2FA email and their recovery codes. Can you unlock them?
We have no access to your deployment, so we can't unlock anything — but you can, as the administrator. The documented recovery path is to disable 2FA for that user directly in your database and have them re-enable it from Settings afterwards:
UPDATE twofa_config SET is_enabled = false WHERE user_id = (
SELECT id FROM users WHERE username = 'the-username'
);Take a backup before running it. Recovery codes are single-use, so encourage storing the new set in a password manager.
Why is BillManager asking me to confirm my password again when I try to link a Google account or add a passkey?
As of v4.12.2, sensitive account actions require a fresh proof of identity: linking an OAuth account, adding a passkey, regenerating recovery codes, and deleting an account that has no password all need either your current password, a code sent to your verified email, or a fresh sign-in to the OIDC identity already on the account. It's an intentional protection against someone acting on an account they merely have an open session for. For the OIDC path, your provider has to honour prompt=login and max_age=0 and return a signed auth_time; that path needs no email service.