Privacy policy
Last updated: 11 October 2026
This policy applies to the site budget-mensuel.ch and its API. It follows the Swiss Federal Act on Data Protection (FADP), the General Data Protection Regulation (GDPR, EU 2016/679) and the French Data Protection Act.
Controller
Josué Voeffray, [Postal address to be completed], Switzerland. Contact: aide@budget-mensuel.ch or the contact form.
Without an account, your budget is not collected
If you are not signed in, the amounts, accounts, banks and categories you enter stay in your browser's local storage. They are sent to no one. You delete them with "Delete everything" in the settings or by clearing the site's data in your browser.
Files you import (bank statements, backups) and files you export are read and created in your browser. They are sent to no server, with or without an account. Only the lines you choose to add go into your budget.
With an account
The account is optional. If you create one, your budget is saved in a Cloudflare D1 database located in the European Union, so you can find it on your devices. Your password is never sent: your browser computes a fingerprint of it (PBKDF2, 600,000 iterations), the server transforms it again with a random salt, and only that result is stored. The publisher has no access to your password.
Data processed
| Data | Purpose | Legal basis | Retention |
|---|---|---|---|
| IP address, page requested, date, browser (host logs) | Serve the site and protect it from abuse | Legitimate interest (Art. 6(1)(f) GDPR) | According to GitHub's policy |
| IP address, used to work out the country (not stored) | Suggest your country on first use | Legitimate interest; you can choose another country | Not kept |
| Currency codes of your accounts (for example EUR, USD) | Get exchange rates | Legitimate interest | Not kept |
| If you create an account: email address, password fingerprint, Google identifier if you use it, creation date, last sign-in date | Provide the account and syncing | Performance of a contract (Art. 6(1)(b) GDPR) | Until the account is deleted, or 24 months without sign-in (warning email 30 days before) |
| Email address confirmation link | Check that the address belongs to you | Performance of a contract | Link valid for 7 days |
| Attempt counters (fingerprint of the IP address or email, never in clear) | Limit password guessing and abusive sending | Legitimate interest (security) | 1 hour at most, erased every night |
| If you are signed in: the content of your budget (accounts, banks, amounts, categories, change log) | Make it available on your devices | Performance of a contract | Until you erase it or delete the account |
| Session cookie (sign-in) | Keep you signed in | Performance of a contract | 30 days at most |
| Email address when you forget your password | Send the reset link | Performance of a contract | Link valid for 60 minutes |
| Email address, subject and message of the contact form | Answer you | Legitimate interest | 12 months at most after the last exchange |
| Page viewed, referring site, browser and device type, country | Visitor statistics | Consent (Art. 6(1)(a) GDPR, Art. 82 French Data Protection Act) | According to Cloudflare; your choice is kept for 6 months |
No data is sold, used for advertising or used for an automated decision about you. The publisher never looks at your budget, unless you ask for help with a problem.
Service providers
- GitHub, Inc. (GitHub Pages): hosts the site, United States.
- Cloudflare, Inc.: API, account database (stored in the European Union), contact form emails, country detection and, if you accept, visitor statistics. United States.
- Google LLC: only if you choose "Continue with Google". Google sends us your email address and an account identifier. United States.
- Resend, Inc.: sends the account emails (address confirmation, forgotten password, warning before an inactive account is deleted). It receives your address and the message. United States.
- Frankfurter (api.frankfurter.dev): publishes the ECB reference rates. It only receives currency codes, normally through our API. If the API does not respond, your browser asks it directly and Frankfurter then sees your IP address.
Transfers outside Switzerland and the European Union
GitHub, Cloudflare and Google are certified under the EU-US Data Privacy Framework and its Swiss-US extension, recognised as adequate by the European Commission (decision of 10 July 2023) and by the Swiss Federal Council (since 15 September 2024). The public list of certified companies is available at dataprivacyframework.gov. Transfers to Resend are covered by the European Commission's standard contractual clauses in its data processing agreement.
Representative in the European Union
The publisher is established in Switzerland and has not appointed a representative in the European Union. People living in the Union can exercise all their rights directly with the publisher, at the address given above.
Inactive accounts
An account with no sign-in for 24 months is deleted with the budget it holds. A warning email is sent 30 days before: simply sign in to keep the account.
Minimum age
Accounts are for people aged 16 or over. Under 16, the agreement of a parent or legal guardian is needed. Using the site without an account has no age limit, since no data is collected.
Your rights
You can ask for access to your data, its correction or deletion, restriction of processing, object to processing based on legitimate interest, ask for data portability and withdraw your consent at any time ("Manage cookies" link at the bottom of every page).
- Export your budget: "Export" in the settings (JSON, Excel, CSV, PDF, Word or Markdown).
- Erase the budget stored in the account: "Delete everything" in the settings.
- Delete the account: "Delete my account" button on the Account page. Everything is erased immediately.
For any other request, write to aide@budget-mensuel.ch. You will get an answer within 30 days.
You can also contact a supervisory authority:
- in Switzerland, the Federal Data Protection and Information Commissioner (FDPIC): edoeb.admin.ch;
- in France, the CNIL: cnil.fr;
- or the authority of your country of residence.
Security
The site and the API are served over HTTPS only. The sign-in cookie cannot be read by JavaScript (HttpOnly) and is sent over secure connections only. Sign-in attempts are limited. Deleting the account requires the password. The contact form only collects what is needed to answer.
Changes
This policy may change. The date of the last update is shown at the top of the page.