Privacy Policy

Last updated: 2 November 2026

1. Who processes your data

The data controller is Matteo Gottard, an independent developer based in Italy. You can write to us at info@musina.app. Musina is free, with no advertising and no purchases: nobody makes money from your data. We do not have a data protection officer because the law does not require one for a service of this size.

2. What data we process

Account. Email, name, profile picture if it comes from Google or Apple, language, reference currency, creation date. If you sign up with email and password, we only store an encrypted version (hash) of the password. If you sign in with Google or Apple, we store the identifier they give us to recognise you, never your Google or Apple password.

Expenses and households. The transactions you enter: amount, currency, description, category, date, wallet used, any trip, budget, savings goal, recurring expense. The households you create or belong to, with your role, and the invitations sent and received. If you enter an expense in a currency other than the euro, we calculate an equivalent value in euros using a public exchange rate: the conversion is only indicative.

Technical data on the device. Preferences and app state saved on your phone, listed in section 10. We do not collect advertising identifiers, GPS location, contacts or photos, and we do not track you across other apps or websites.

Diagnostic data (crashes and errors). If the app closes unexpectedly or runs into an error, it sends a report to Sentry. The report contains the type of error and the place in the code where it happened, the phone model, the iOS version, the app version and build, the system language and the names of the screens opened before the error. It also contains the calls to our server, with the path without parameters, the outcome and the request identifier. It identifies you only with a pseudonymous code: the SHA-256 fingerprint of your user identifier, or "anonymous" if you have not signed in. If you are looking at a household, the report also carries a pseudonymous code for that household, computed the same way. With the session data, which is used to measure how many launches end without a crash, the app also sends a random identifier generated at installation time, which resets if you reinstall the app. The report never contains amounts, descriptions, names, emails, screenshots of the app or the content of requests. Sentry does not store your IP address, but before discarding it, it derives your approximate city, which remains in the report. Our server sends Sentry only its own internal errors, with the request identifier, the app version and the same pseudonymous code. It never sends the content of the request, the parameters, credentials or amounts.

Problem reports (only if you send them). From the profile you can report a problem to us. The report goes to Sentry, the same service as the crash reports, and contains what you write, the contact email if you choose to give one, and a screenshot of the screen you opened the report from, which you see before sending and can remove. In the screenshot your name, your email and your profile picture are covered. The screenshot is never taken from screens that show amounts, transactions, household members or invitations: in that case the report is sent without it. Write only what is needed to understand the problem: if you mention amounts or other people, they end up in the report too. The report carries the same technical information as crash reports: app version and build, phone model and iOS version, the names of the last screens opened, the last calls to our server (only path, outcome and request identifier, never the content), your pseudonymous code, that of the household you are looking at, and the approximate city derived from the IP address. If you have no network at that moment, the report stays in the app until it is sent. It does not depend on the «Help us improve Musina» switch.

Usage data (only if you allow it). If you turn on the «Help us improve Musina» switch, in the introduction or in the profile, the app sends PostHog some events about how you use it: app opened, screens visited (only the name of the screen, never the identifier of a household or the code of an invitation), sign-in or sign-up started with the chosen method, introduction steps seen, skipped or completed. Our server adds, again only with your consent: sign-up completed, household created, invitation sent or accepted, transaction recorded (only the type, income or expense, and whether personal or household). Some technical information travels with the events: app version and build, operating system name and version, device type (phone or tablet), language and time zone, screen size. And four pieces of information about your account: the day you signed up, how many households you have, how many members your main household has, the app version. It identifies you with the same pseudonymous code used for crashes, together with a random code generated by the app on the phone: before sign-in it is the only identifier, at sign-in it is linked to your pseudonymous code. It never sends amounts, currencies, descriptions, notes, categories, names or emails. It does not record the screen, does not collect taps and does not store or use your IP address to derive your location. The events the app records from the moment you open it, in the session in which you turn on the switch, stay in memory and are sent only after your yes, with their original time; if you do not turn it on, they are lost. Before your yes nothing is sent or saved on the phone. If you turn off the switch, sending stops immediately on the phone you are using, events not yet sent are discarded and the random code is deleted; our server stops immediately for all your devices, and another phone with the app still open stops the next time it is reopened. The same happens when you sign out of the app.

Push notification identifier. If you turn on notifications, the phone gives us an identifier used to deliver them to you. It is personal data: it identifies that copy of the app on that phone, and we store it linked to your account. We receive it only after you have given permission to iOS and we use it only to send you the notifications you have chosen to receive. It does not contain your name, does not say where you are and cannot be used to recognise you outside Musina. If you have Musina on two phones, there is one per phone. We delete it when you sign out of the app or delete your account (sections 6 and 7), and you can make it disappear at any time by turning off Musina notifications in iOS Settings.

Security data. Session tokens (in encrypted form on the server), temporary tokens to verify your email or reset your password, counters of sign-in attempts linked to your email. The server logs the requests it receives with IP address, method, path, outcome and duration, without the content of the request.

3. Why, and on what legal basis

Purpose
Creating and managing your account, letting you sign in
Legal basis
Contract, Art. 6(1)(b) GDPR
Data
Account, security data
Purpose
Recording your expenses and showing them to you
Legal basis
Contract, Art. 6(1)(b)
Data
Expenses
Purpose
Sharing expenses with the other members of a household
Legal basis
Contract, Art. 6(1)(b)
Data
Name and profile picture; email only to administrators; expenses in the household
Purpose
Sending you the address verification and password reset emails (the only ones the server sends)
Legal basis
Contract, Art. 6(1)(b)
Data
Email
Purpose
Delivering household invitations and app notifications to you
Legal basis
Contract, Art. 6(1)(b)
Data
Email (the one an administrator invites you with), name
Purpose
Converting amounts in foreign currencies
Legal basis
Contract, Art. 6(1)(b)
Data
Only currency codes and date, never who you are
Purpose
Protecting the service from abuse and unauthorised access attempts
Legal basis
Legitimate interest, Art. 6(1)(f)
Data
Security data, server logs
Purpose
Detecting and fixing crashes and errors in the app and the server
Legal basis
Legitimate interest, Art. 6(1)(f): an expense-tracking app that breaks without us knowing is a defective service. You can object by writing to us
Data
Diagnostic data
Purpose
Reviewing a report you send us and, if you leave us an email, replying to you
Legal basis
Contract, Art. 6(1)(b): it is support for the service you use, and the report is sent only if you send it
Data
The text, the contact email if you give one, the screenshot if you do not remove it, the technical data of the report
Purpose
Understanding which features are used and where the introduction is abandoned, to improve the app
Legal basis
Consent, Art. 6(1)(a) GDPR and Art. 122 of the Italian Privacy Code, revocable from the switch in the profile
Data
Usage data
Purpose
Expense entry reminders
Legal basis
Consent, Art. 6(1)(a), revocable at any time
Data
No data leaves the phone: the notification is local
Purpose
Push notifications about what happens in your households and trips
Legal basis
Consent, Art. 6(1)(a), revocable at any time
Data
Push notification identifier; the text of the notification (who did what and where, never an amount)
Purpose
Unlocking with Face ID
Legal basis
Consent, Art. 6(1)(a)
Data
No biometric data: recognition happens on the phone and we only receive "unlocked yes or no"

Email and name are required to create the account: without them, we cannot provide the service. Everything else (expenses, households, reminders, push notifications, Face ID, usage data) is optional. Consents are revoked from the profile, by turning off the switch, without affecting what happened before; for push notifications you can turn everything off with a single switch, or choose event by event. Turning them off stops the notification on the phone: the same information remains visible inside the app.

Notifications never contain an amount. They say who did what and in which household or trip — for example «Anna recorded an expense in Casa Milano» — so what appears on the lock screen does not tell the person next to you how much you spent.

No processing involves automated decisions with effects on you, or profiling.

Data we do not receive from you. If you sign in with Google or Apple, we receive your name, email and profile picture from them. If an administrator invites you to a household, we receive your email address from them. The transactions that other members record in a shared household may mention you in the description: they write them, not us.

4. Who sees your data

The other members of your household. All members see your name and your profile picture, as well as the transactions recorded in the household, with descriptions and categories. Household administrators also see your email, because they invite by address; the other members do not. Nobody sees your personal expenses outside the household. If you leave a household, the transactions you recorded remain visible to the others, but without your name: they appear as paid by a member who left.

Providers that process data on our behalf (processors).

Provider
Google Cloud EMEA Ltd (Cloud Run, Cloud SQL)
Role
Processor, with the Google Cloud Data Processing Addendum
What it receives
All server data: database and logs
Where
Region europe-west8, Milan
Provider
Resend (Plus Five Five Inc.), the email provider
Role
Processor, with the data processing addendum that applies on accepting its terms
What it receives
Email address, subject and body of the verification and password reset emails
Where
United States
Provider
Expo (650 Industries, Inc.), the service that delivers push notifications and app updates
Role
Processor, with the data processing addendum that applies on accepting its terms
What it receives
For notifications: your phone's notification identifier and the text of the notification, which pass through it to reach Apple and then you. Never your expenses, never an amount. For updates: at every launch the app asks it whether a newer version of its own code exists; the request contains the operating system, the version of the code in use and the one built into the app, the channel (preview or public), the project identifier, the network address of the connection and a random code that the app generates once per installation to count the installations that ask for updates: it is not the phone's identifier and it is not linked to your account. If the previous launch ended with a serious error, the next request also contains the technical text of that error (at most 1,024 characters), which serves only to avoid serving defective code again: it may contain fragments of the data the app was processing at that moment, never a screenshot
Where
United States
Provider
Sentry (Functional Software, Inc.), the service that collects crashes and errors
Role
Processor, with the Sentry Data Processing Addendum
What it receives
The diagnostic data and the reports you send (section 2): crash and error reports from the app and the server, with the pseudonymous code and the approximate city. Never your expenses or an amount, except what you write yourself in a report
Where
European Union (Frankfurt, de.sentry.io)
Provider
PostHog, Inc., the usage analytics service
Role
Processor, with the PostHog Data Processing Addendum
What it receives
Only if you have turned on the switch: the usage data in section 2, with the pseudonymous code and the phone's random code. Never your expenses, never an amount
Where
European Union (Frankfurt, eu.posthog.com)

Independent controllers. If you sign in with Google or Apple, the respective service processes your sign-in data according to its own privacy policy. Our server contacts Google and Apple only to verify that the sign-in token is authentic and, with Apple, to revoke it when you delete your account.

Exchange rates. Our server requests rates from the public Frankfurter service, sending only currency codes and dates. Your app never contacts it, so Frankfurter does not see your IP address or any data about you.

We do not sell data, we do not pass it to advertisers, we do not advertise.

5. Where the data is stored and transfers outside the European Union

The database and the server are in Italy (Google Cloud, Milan). Google LLC, the US parent company, may access the systems for technical support: this access is covered by the EU standard contractual clauses and by Google's EU-US Data Privacy Framework certification. The verification and password reset emails go through Resend, which processes them in the United States: this transfer is covered by the European Union standard contractual clauses included in Resend's data processing addendum. Resend receives only your email address and the text of those two emails, never your expenses.

Push notifications and app updates also go through the United States. For notifications: our server hands them to Expo, which forwards them to Apple, and Apple to your phone; Expo receives the notification identifier and the text of the notification, covered by the same European Union standard contractual clauses included in its data processing addendum. It does not receive your expenses and, since notifications never contain an amount, it does not see how much you spend. For updates: the app asks Expo whether a newer version of its own code exists, with only the data listed in section 4, covered by the same standard contractual clauses.

Diagnostic data and usage data remain in the European Union: Sentry and PostHog receive and store them in Frankfurt, in their European environments. Both companies are based in the United States and could access them from there for technical support: for Sentry the access is covered by the EU-US Data Privacy Framework certification and by the standard contractual clauses in its addendum; for PostHog by the standard contractual clauses in its addendum. In both cases what they could see is a pseudonymous code, not your name or your email, except what you write yourself in a report.

6. How long we keep it

Data
Account and expenses
Retention
As long as the account exists
Data
Session tokens
Retention
They expire on their own; access lasts 15 minutes and is renewed automatically as long as you use the app. The refresh token lasts at most 30 days from the last sign-in; signing out of the app revokes it immediately.
Data
Email verification and password reset tokens
Retention
Until used or expired, then deleted
Data
Sign-ups awaiting email verification
Retention
Until verification or expiry of the link; a new sign-up with the same email replaces the previous one
Data
Push notification identifier
Retention
As long as notifications remain on for that phone. We delete it when you sign out of the app or delete your account, when the phone gives us a new one to replace the old one, and when Apple tells us that phone no longer receives them. If you sign out of the app without a network connection the deletion does not start: the identifier stays on our server until a new one is registered on that phone or until Apple tells us it no longer receives them. In the meantime that phone may keep receiving notifications for the account you signed out of: this is why it is best to sign out of the app with the network on
Data
Diagnostic data (crash and error reports)
Retention
90 days from the event in Sentry, then deleted automatically
Data
Problem reports (text, contact email, screenshot)
Retention
90 days from sending in Sentry, like crash reports, then deleted automatically. If you ask us to delete one sooner, we do
Data
Usage data
Retention
1 year from the event in PostHog, then deleted automatically; earlier, if you delete your account (section 7)
Data
Anti-abuse counters
Retention
15 minutes, in memory, never written to disk
Data
Server logs
Retention
30 days in Google Cloud Logging, then deleted automatically.
Data
Database backups
Retention
7 days: daily backups and database logs are overwritten within 7 days of deletion
Data
Shared household wallet transactions after your deletion
Retention
As long as the household exists: the amount remains, not your name (section 7)

7. What happens when you delete your account

You can delete your account from the app, in Profile. We ask you to confirm your identity. Before confirmation the app shows you, household by household, how many transactions will disappear. Then:

For the households you share with others, the following applies:

When you delete your account, the transactions you recorded in a shared household and paid with your own money — expenses and income — are deleted, for the other members too: they cannot be attributed to anyone else without misstating who spent the money. Household wallet transactions (deposits and withdrawals) remain, because they are the household's money and not yours: the amount remains, not your name. The other members receive a notification saying how many transactions are no longer in the history, without your name. Deletion on production systems is immediate; backup copies containing your data are overwritten within 7 days.

This also applies to households you have already left: leaving does not delete your transactions, which remain visible to the others as long as your account exists; deleting the account removes them there too, and the app tells you so with the count.

If you are the only administrator of a household with other members, the deletion flow asks you to hand the role over to another member, with one tap, before proceeding. Dissolving a household is only possible for the last remaining member: nobody can erase other people's history with a single action.

8. Your rights

You have the right to access your data, to rectify it, to erase it, to restrict its processing, to object to processing based on legitimate interest (including crash and error reports), to withdraw your consents and to receive the data in a machine-readable format. Exercising them is free. You change your name, language and currency from the app; you withdraw consent to usage data from the switch in the profile; for everything else write to the address in section 1 and we will reply within one month. From the profile you can export your personal expenses for the current year to CSV ("Export my data"); for previous years and for household data write to us and we will send them to you in the same format.

If you believe that the processing breaches the law, you can lodge a complaint with the Italian Data Protection Authority (Garante per la protezione dei dati personali), Piazza Venezia 11, 00187 Rome, www.garanteprivacy.it.

9. Minors

Musina is reserved for people aged at least 18 and we do not knowingly collect data from minors. If we learn of an account belonging to a minor, including through a report from a parent, we delete it.

10. Cookies and data stored on the device

The app does not use cookies and does not show a banner: everything it saves on the phone is strictly necessary for it to work, except usage data, which exists only after your yes. You can delete everything by uninstalling the app.

In the system Keychain, encrypted and tied to this device:

In the app's regular storage:

Musina's web pages on musina.app (site, this policy, the terms) do not use cookies and do not show a banner. The only measurement is Vercel Analytics, which counts visits in aggregate form without cookies, without saving anything on your device and without storing your IP address or a personal identifier. The pages served by brain.musina.app (invitations, email verification) do not use cookies or analytics tools.

11. Changes to this policy

If we change anything substantial, we will tell you in the app or by email before the change takes effect. The version in force always shows the date at the top. Version: 2 November 2026.

This is a translation of the Italian text, which prevails in case of discrepancy.