Privacy Policy
Last updated: 2026-08-25
ZeniCash is a personal finance, cashflow and invoice-tracking application used by individuals, freelancers and small businesses, published by Manor Systems, Unipessoal Lda (NIPC 519 377 753), Rua da Figueira 126, 4820-645 São Clemente, Fafe, Portugal ("we", "us"). This policy describes what data we process, why, where it is stored, and the rights you have over it.
1. Summary
- The app is designed to work offline — your data lives on your device by default.
- Cloud Sync, sign-in, invoice tracking, and exports are opt-in.
- Receipt OCR runs on your device by default; receipt photos never leave it. AI receipt scanning — which sends the photo to Google Gemini — is off by default and only runs if you turn it on.
- Crash reporting is always on so we can fix what breaks. It reports the crash, not you.
- Product analytics is off until you allow it, and you can withdraw that at any time in Settings.
- We do not use advertising SDKs, and we switch off the advertising identifier that Analytics would otherwise collect.
- We do not sell or rent your data.
- We do not profile, score or take automated decisions about you.
- Documents you attach to entries (receipt photos and invoice PDFs) stay on your device. From version 1.5.0, with Cloud Sync on, they are also kept in your private area so you can open them on any device.
2. What we collect, and when
2.1 Always — none
A user who installs the app and never signs in produces no data on our servers. The app's local SQLite database is protected by the operating system's per-app isolation and by your device PIN / biometric / app lock.
2.2 When you sign in (optional)
Sign-in is required only if you choose to enable Cloud Sync. We authenticate you through Google Sign-In or Apple Sign-In, and Firebase Authentication returns:
- Your display name (as provided by Google/Apple)
- Your email address
- A user identifier (the Firebase UID — a pseudo-random string)
These are used to partition your data in Cloud Firestore under
users/{uid}/… so that your devices recognise each
other on sync.
2.3 When you enable Cloud Sync (optional)
The financial records you create — accounts, transactions, budgets, categories, invoices, advances, recurring transactions and similar — are copied to your private Firestore namespace, encrypted in transit (TLS) and at rest (Firebase). Only your authenticated session can read or write to your namespace; we do not access it.
From version 1.5.0, alongside the records, the documents you attached to
entries — receipt photos and invoice PDFs — are copied too. They live in
a private area readable only by your authenticated session, at
users/{uid}/receipts/. Files larger than
10 MB are not copied and remain only on the device they
were attached from. Documents are uploaded when the entry is saved and
are downloaded only when you open them.
2.3b When you join a shared space (optional)
A shared space lets several people keep one book together. You are never placed in one: you either create a space yourself, or type an invitation code somebody gave you.
While you are in a space, what Cloud Sync would otherwise keep private to you is visible to every member of it — accounts, transactions, budgets, categories, projects, recurring transactions, cash-flow events, manual exchange rates and entities, including any tax number you recorded for a client or a supplier. Your name and email address, as they appear on the account you signed in with, are visible to the other members too, so the app can show whose each account is.
Records belonging to different members are never merged: two accounts with the same name stay two accounts. If you leave a space, your own book is restored on your device, but what you brought in stays with the members who remain — leaving does not withdraw it.
If your records describe other people — a client's name and tax number, for instance — sharing them with the other members is your decision, and you are responsible for having a lawful basis to do it.
2.4 When you subscribe to Premium (optional)
In-app subscriptions are processed by Google Play Billing (Android) or App Store In-App Purchase (iOS). The store handles your payment details; we receive only your subscription state (active / cancelled / expired) so the app can unlock Premium features. We never see card numbers.
2.5 Exchange rates
To convert balances across currencies the app calls public, free-of-charge exchange-rate APIs, in this order:
- exchangerate-api.com via its open-access endpoint open.er-api.com (primary).
- The fawazahmed0/exchange-api CC0 dataset, served from cdn.jsdelivr.net and currency-api.pages.dev as backups.
These requests carry only a base-currency code (e.g. EUR) — no
identifier, no account or transaction data. Results are cached locally
for 6 hours so subsequent conversions need no network call.
2.6 Receipt OCR — on device by default
By default, receipt scanning runs entirely on your device. When you photograph a receipt, the app uses Google ML Kit's on-device text recognition to extract the vendor, amount, date and document number. The image is processed locally; nothing is uploaded to us or to anyone else for OCR purposes.
AI receipt scanning — optional, off by default. Some receipts, faded thermal till rolls in particular, cannot be read reliably on the device. For those you can turn on AI receipt scanning in Settings. This is a Premium feature: beyond your consent, an active Premium subscription is required, and without Premium the receipt photo stays on the device even when the setting is switched on. While that setting is on and Premium is active, the photo of the receipt is sent to Google's Gemini API, which reads it and returns the extracted fields. We ask you to confirm before it is switched on, and you can switch it off at any time — with it off, no receipt photo ever leaves your device.
The photo is sent solely to perform that scan. Under Google's paid-tier API terms, content sent to the Gemini API is not used to train Google's models. ZeniCash does not store the photo on its servers: it is passed through, processed, and discarded. The extracted text is then stored on the device (and synced via Cloud Firestore if Sync is enabled, exactly like any other transaction note you typed yourself).
Legal basis: your consent (Art. 6(1)(a) GDPR), given by turning the setting on. You may withdraw it at any time by turning it off, with no effect on anything scanned before.
2.7 Bank statement imports
You can import a CSV, XLSX or OFX bank statement to populate transactions. The file is parsed locally and discarded; only the transactions you confirm end up in the app (and in Cloud Firestore if Sync is enabled).
2b. Crash reports and optional analytics
Two things measure the app itself rather than your finances. They are deliberately treated differently, because they are not the same kind of data.
Crash reporting — always on
When the app crashes, Firebase Crashlytics sends us the failure so we can fix it. Not knowing that the app broke on your phone helps nobody, least of all you. A crash report contains the stack trace and timestamp of the failure, the app version, your device model, CPU architecture, operating system version, and the amount of RAM and disk space free at the time, together with an installation identifier. It contains none of your financial data — no accounts, no transactions, no invoices, no receipts.
Product analytics — only if you allow it
Google Analytics for Firebase is installed but collects nothing until you agree. The app asks once; if you decline, it never asks again and nothing is sent. You can change your mind in either direction under Settings → Security.
With your consent it records how the app is used — how often it is opened, session length, app version, device model and operating system, and an approximate country derived from your IP address — under an app-instance identifier. It does not record what you type, what you earn or spend, who your clients are, or anything else from your books.
3. What we do NOT collect
- No advertising or attribution identifiers. Google Analytics for Firebase would collect the Android Advertising ID by default; we disable that collection in the app manifest.
- No GPS or precise location. If you allow analytics, Google derives an approximate country from your IP address — that is the only geography involved.
- No device contacts (the app stores customer/supplier records you type, not your phonebook)
- No microphone, no calendar, no biometric data on our side (the OS handles app-lock biometrics locally)
- No profiling, scoring, or behavioural targeting
4. Lawful basis for processing (GDPR / LGPD)
Under Article 6 of the GDPR — and the analogous provisions of the Brazilian LGPD — our lawful bases are:
- Performance of a contract (Art. 6(1)(b)) — for account creation, sign-in, Cloud Sync, subscription management and the in-app features you choose to use.
- Legitimate interests (Art. 6(1)(f)) — for keeping the infrastructure secure, preventing abuse and fraud, and dealing with support requests you send us. The legitimate-interest assessment is available on request.
- Legal obligation (Art. 6(1)(c)) — for retaining minimal billing records as required by Portuguese tax law (invoice retention obligation for up to 10 years).
- Consent (Art. 6(1)(a)) — for any future opt-in feature (e.g. an email newsletter). We do not currently run any such feature.
5. No profiling, no automated decision-making
We do not apply any automated decision-making or profiling within the meaning of GDPR Article 22 to your data. We do not credit-score, risk-rate, target, segment or otherwise analyse your financial data to make decisions that produce legal or similarly significant effects for you. The app's local features (budget alerts, cashflow projections, account-limit notifications) are deterministic calculations performed on data you yourself entered; they are not profiling.
6. Where your data lives
- On your device: in the app's SQLite database, isolated by the operating system.
- Firebase Authentication & Cloud Firestore (if Cloud Sync is on): operated by Google Ireland Ltd, primarily in EU regions, with disaster-recovery infrastructure in other Google regions. Google acts as our processor under a Data Processing Addendum, and international transfers (where they occur for backup purposes) rely on Standard Contractual Clauses (SCCs).
- Firebase Cloud Storage (from version 1.5.0, if Cloud Sync is on): attached documents are stored in the europe-west1 (Belgium) region, operated by Google Ireland Ltd. Only your authenticated session may read, write or delete them; we do not access them.
7. Subprocessors
We rely on the following processors and sub-processors. We have a Data Processing Addendum or equivalent contractual protection in place with each.
- Google Ireland Ltd — Firebase Authentication (sign-in), Cloud Firestore (Cloud Sync storage), Google Play Billing (subscription payments on Android), ML Kit Text Recognition (on-device only — no receipt content leaves your device), and — only if you enable AI receipt scanning — the Gemini API, which receives the photo of the receipt in order to extract its fields (not used for model training).
- Apple Distribution International Ltd — Sign in with Apple (sign-in on iOS) and App Store Billing (subscription payments on iOS).
- jsDelivr (Prospect One sp. z o.o.) — global CDN that serves the CC0 exchange-rate JSON file from the fawazahmed0/exchange-api project.
- Cloudflare, Inc. — serves the Cloudflare-Pages fallback copy of the same CC0 exchange-rate dataset.
- Hostinger International Ltd — hosts the zenicash.com website and the support@ / privacy@ mailboxes.
- Google Ireland Ltd — Cloud Storage for Firebase: storage of the documents you attach to entries, in the europe-west1 region (from version 1.5.0).
Calls to the exchange-rate providers (open.er-api.com, jsDelivr, Cloudflare) carry only a 3-letter base-currency code — no user identifier and no financial data.
We notify users when we materially change this list, before the new sub-processor begins processing data.
8. How long we keep it
- Local data: until you delete it in the app, uninstall, or use Settings > Advanced > Reset data.
- Cloud-synced data: until you delete it, wipe your cloud copy in Settings > Cloud Sync > Clear cloud data, or delete your account.
- After account deletion: data is removed immediately from live Firestore; encrypted Firebase backups age out within 30 days.
- Billing records: minimal subscription state (active / cancelled / expired and store-receipt id) is retained for up to 10 years per Portuguese tax-law obligation.
- Support correspondence: emails to support@ and privacy@ are retained for up to 3 years for traceability, then deleted.
- Attached documents in the cloud (from version 1.5.0): kept for as long as your account exists. If you cancel your subscription, documents already uploaded are kept for a further 12 months; after that they are deleted, and we email you at least 30 days beforehand so you can download them. Resubscribing restarts the period. Your local copies are never touched.
9. Sharing
We do not sell, rent, or share your personal or financial data with third parties for advertising. Sharing inside a shared space happens only where you have asked for it, and is described in Section 2.3b. We use the processors listed in Section 7 to provide the infrastructure described above. We may disclose data where we are legally compelled to do so (e.g. a binding court order) and will, where lawful, notify you of such a request.
10. Security and breach notification
Connections to Firebase and the exchange-rate APIs use TLS. Cloud Firestore encrypts data at rest. On the device, the SQLite database is protected by the operating system's per-app storage isolation, and you can additionally enable an in-app PIN / biometric lock in Settings > Security. The PIN itself is hashed (salted SHA-256) before being stored.
If we become aware of a personal-data breach likely to result in a risk to your rights and freedoms, we will notify the competent supervisory authority (in Portugal, the CNPD) within 72 hours of becoming aware, as required by GDPR Article 33. If the breach is likely to result in a high risk to affected users, we will also notify them without undue delay (Article 34).
11. Your rights
If you reside in the EU/EEA (GDPR) or the UK, you have the right to access, rectify, port, restrict or object to processing of your data, and to lodge a complaint with a supervisory authority. In Portugal the authority is the CNPD. If you reside in Brazil (LGPD), you have analogous rights under that framework.
You can exercise most of these directly inside the app:
- Access / portability: Settings > Export (CSV / XLSX / PDF) — Premium feature.
- Erasure of cloud data: Settings > Cloud Sync > Clear cloud data.
- Erasure of the account itself: Settings > Cloud Sync > Delete account, or follow the public deletion request page.
- Local wipe: Settings > Advanced > Reset data.
For any request we cannot fulfil in-app, email privacy@zenicash.com. We respond within 30 days.
12. Children
ZeniCash is a tool for adults and professional users. We do not direct the product at users under 16, and we do not knowingly collect data from them. If you believe a minor has signed in, email privacy@zenicash.com and we will erase the account.
13. Changes
We may update this policy when the app changes. Material changes will be surfaced in-app and on this page at least 30 days before they take effect. The "Last updated" date above always reflects the current version; older versions can be requested by email.
14. Contact
Controller: Manor Systems, Unipessoal Lda — NIPC 519 377 753.
Privacy and data-protection requests:
privacy@zenicash.com.
General support: support@zenicash.com.