MiFinanz

Privacy Policy

How MiFinanz handles your data

Effective date: 28 September 2026. Last updated: 28 September 2026.

English is the official text. Deutsch

This policy explains what MiFinanz actually does with personal data. It is written for the Swiss revised Federal Act on Data Protection (nFADP / revDSG) and the EU General Data Protection Regulation (GDPR), and for people who use the website, the web app, or the iOS app.

MiFinanz is a personal budget tracker. You type records yourself, or you import a JSON or CSV file you choose. It does not connect to your bank, it does not move money, and it does not pull transactions from a financial institution.

1. Who is responsible

The controller is Omar Tamasna, an individual developer in Frauenfeld, Switzerland (not a company).

If you are in the EU or EEA, you can still contact the controller at the address above. No EU representative has been appointed under GDPR Article 27.

2. Data we collect

We collect only what the product needs to run an account and store the records you enter.

Account and profile

Creating an account can send a confirmation email. “Forgot password” sends a reset email. Both are sent by Supabase Auth. This project does not name a separate email company. If a custom email provider is connected in the Supabase dashboard, that provider processes the recipient address and the message.

Records you enter

These stay in your account until you delete them, reset the app data, or delete the account:

JSON import and CSV export are files on your device. After a successful import, the contents are stored in your account like anything you typed. We do not send those files to an analytics service.

Sharing an account

If you invite someone to a money account, we store the email address you type, the role (view only or editor), and whether the invite is still pending. We do not send an invitation email. If a MiFinanz account already uses that email, or one is created later with the same email, that person can see the pending invite inside the app.

After they accept, a viewer can read that money account’s transactions. An editor can add and change them. The records stay on the owner’s account. You should invite only someone who expects to receive that access.

Feedback

If you use Send Feedback, we store the kind of message (bug, feature, or other), the text you write, the time, and a status our staff set (open, read, or done). The message is tied to your account, so the stored row includes your user id. We also email that message to support@mifinanz.com through Resend, with your email address as the reply-to address. That email includes your user id, the app version, the platform (web or iOS), the language, and the device or browser string (the user agent).

Technical and security data

iOS app

Exchange rates

The app asks https://api.frankfurter.dev/v1/latest for public rates with a base of EUR and a fixed list of currency codes (GBP, USD, CHF, DKK, SEK, NOK, PLN, CZK, HUF, RON). The request does not include your email, account id, or any amount you entered. Your device’s IP address can still be seen by the API operator and by Cloudflare, which sits in front of that API, for delivery and abuse protection. Frankfurter’s own documentation says the public API does not keep request logs. We cache the rates on your device and refresh them about every 12 hours.

3. What we do not do

4. Why we use it, and the legal basis

Purpose Legal basis
Create your account, keep you signed in, send confirmation and password-reset emails, and store the records you enter so you can use them on your devices. Contract (GDPR Art. 6(1)(b); the equivalent ground under the nFADP).
Show exchange rates, remember language, currency, theme, and reminder settings, and import or export a file you ask for. Contract, as part of providing the app.
Store an invite email and give the invited person the access you chose. Contract with you. For the invited person’s email, our legitimate interest in carrying out the invite you requested, and theirs in seeing an invite addressed to them.
Read feedback, keep the service secure, suspend abuse, and let authorised staff support an account (including opening the app as that user). Legitimate interests (GDPR Art. 6(1)(f)): running, securing, and supporting the service. The audit log and the staff-only limit are the safeguards. You can object; see below.
If you later pay for Pro: create a subscription, record that the plan is active, and keep payment records. Contract, and legal obligation where tax or accounting law requires us to keep a record.

We do not ask you to consent to advertising. The checkbox at sign-up is acceptance of the Terms of Use, not a consent for extra uses of your data.

5. Who else processes it

These providers process data so we can run MiFinanz. We do not give them data to use for their own advertising.

Provider Role
Supabase Database, login, and the server functions that delete an account, run admin actions, and (when enabled) talk to Stripe. Your account and financial records are stored in the Supabase project. The project is hosted in the EU, on AWS eu-north-1 (Stockholm, Sweden).
Vercel Hosts the website and the web app files. It can process connection data (such as IP address and browser type) to deliver pages and protect the site. Your budget records are not stored in the Vercel project; they are stored in Supabase.
Stripe Used only if web billing is turned on and you start checkout or open the billing portal. Billing is off unless an administrator enables it. Checkout sends Stripe your email address and account id, and Stripe processes the payment. We store the Stripe customer id. A webhook then marks the plan Free or Pro. We do not receive your full card number. The iOS app uses Apple In-App Purchase instead of Stripe. Apple processes that payment under Apple’s terms. Apple does not receive your budget entries as part of the payment. Subscription status for the iOS purchase is handled by RevenueCat, in the next row.
RevenueCat, Inc. (United States) Processes subscription purchase and entitlement status for Apple In-App Purchase on the iOS app. We send RevenueCat the app account user id. RevenueCat receives the purchase history for that customer and tells our server whether Pro is active. We store that status in the revenuecat_entitlements table. Incoming purchase events are written to the revenuecat_webhook_events log, which includes the user id. This is a transfer to the United States. Where that transfer is not covered by an adequacy decision, we rely on the same safeguards as the other providers in the international-transfers section, in particular Standard Contractual Clauses. RevenueCat does not receive your budget entries.
Frankfurter (api.frankfurter.dev) and Cloudflare Public exchange rates. The request contains currency codes only. Cloudflare provides caching and abuse protection in front of that API. No account data is attached.
Resend Delivers feedback email in the EU (Ireland, AWS eu-west-1). When you send feedback, the message is emailed to support@mifinanz.com through Resend, with your email address as the reply-to address.
Zoho Mail Hosts the support mailbox support@mifinanz.com in an EU data center. Feedback messages delivered through Resend, and other mail sent to that address, are stored there so we can read and reply to them.
Someone you invite A viewer or editor of a money account can see, and an editor can change, the transactions on that account. That is sharing you start, not a sale of data.

6. International transfers

The controller is in Switzerland. The European Commission has an adequacy decision for Switzerland, so EU data-protection law treats Switzerland as providing an adequate level of protection.

Supabase, Vercel, Stripe, Apple, Cloudflare, and RevenueCat, Inc. are companies that can process data in the United States and in other countries. RevenueCat, Inc. is in the United States: the app account user id and purchase history are transferred there so it can report entitlement status. Where a transfer is not covered by an adequacy decision, we rely on appropriate safeguards, in particular Standard Contractual Clauses, and on any extra measure the provider applies (including certification under the Swiss-US or EU-US Data Privacy Framework, where that provider is certified).

The database itself is hosted in the EU, on AWS eu-north-1 (Stockholm, Sweden). Feedback email is sent through Resend in the EU (Ireland, AWS eu-west-1), and the support mailbox is hosted by Zoho Mail in an EU data center. Even when a provider’s region is in the EEA, that provider’s support or sub-processor staff can still be elsewhere under the safeguards above.

7. How long we keep it

8. Security

We protect the service in these ways:

This is not end-to-end encryption. We can access account data as described in the next section, because the product stores your records on the server so they can sync. No method of transmission or storage is perfectly secure.

9. Staff access and “open as user”

Authorised staff (an owner role or a support role on a MiFinanz account) can use an admin panel. In that panel they can see your email, display name, plan, currency, Stripe customer id if there is one, whether the account is suspended and why, and counts of your records (accounts, goals, transactions, budgets, invoices, assets, and shares). They can read the text of feedback you send. They can change a plan, grant Pro, suspend or unsuspend a login, and the owner role can delete a user.

The admin panel does not list the contents of your transactions or invoices. A separate action, “open as user”, creates a one-time Supabase sign-in link and opens MiFinanz as you. The staff member then sees the same records you see, so they can help with a support problem. That action is written to the audit log together with the email address on the account at the time.

We use this access to operate the service, answer a request for help, investigate abuse, and meet a legal duty. We do not use it to advertise, and we do not sell what we see. You can object to access that is based on legitimate interests. If you object to support access, we may not be able to look into a problem on that account. We may still need to access data where the law requires it, or where a remaining legitimate ground overrides the objection (for example, to keep the service secure).

10. Deleting your account, and resetting data

In the app, open Settings and choose Delete Account. That calls the delete-user function, which deletes the login. The database then removes the rows tied to that login: profile, settings, money accounts, transactions, transfers, categories, budgets, invoices and installments, goals, assets and liabilities, sharing records, feedback, any staff role, moderation status, per-user plan overrides, and the subscription status row in revenuecat_entitlements.

The same action does not automatically remove:

On the device you use to delete the account, that saved login is removed. Sessions on other devices stop working because the login no longer exists.

Settings also has Reset Application. That deletes the financial records on the account and keeps the login. It does not delete feedback, and it does not delete the audit log.

You can download a JSON backup or a CSV of transactions from Settings before you delete anything. Export of a backup can be limited when paid plans are enforced; the current configuration still allows export unless an administrator turns that limit on.

11. Your rights

Under the nFADP and, where it applies, the GDPR, you can ask us to:

We will respond within 30 days. We may ask you to prove that you control the account before we disclose or change it. If a request is manifestly unfounded or excessive, we may refuse it or ask for a reasonable fee, where the law allows that.

Switzerland: Federal Data Protection and Information Commissioner (FDPIC), www.edoeb.admin.ch. EU and EEA: the authority in your country. A list is published by the European Data Protection Board at edpb.europa.eu.

12. Children

MiFinanz is not directed at children under 16. We do not knowingly create an account for anyone under 16. If you believe a child under 16 has given us personal data, email support@mifinanz.com and we will delete the account.

13. Changes

We will post any new version at this same address and change the effective date. The app does not email policy updates, because it has no mailing list. If a change is one the law says we must tell you about directly, we will use the email on your account.

14. Contact

Omar Tamasna
Hasenbühlstrasse 9, 8500 Frauenfeld, Switzerland
support@mifinanz.com

The rules for using the product are in the Terms of Use.