Privacy Policy — Loki Budget

Effective date: 2026-07-28 Last updated: 2026-11-08


1. Who we are

Loki Budget is operated by UnstablePixel SRL (the "Controller").

For any question about your personal data or to exercise the rights described in Section 8, write to the privacy contact above. We answer within 30 days (one 60-day extension may apply for genuinely complex requests).

2. What this policy covers

The Loki Budget mobile app (iOS and Android), the web onboarding + payment surfaces at budget.loki.unstablepixel.com, and the supporting backend API that those clients talk to.

It does not cover:

3. Data we collect

Category Examples Lawful basis How we get it
Account identity Firebase user id, email, display name Contract (Art. 6(1)(b)) — needed to provide the service From Firebase, when you sign in with Google or Apple
Onboarding profile Preferred currency, monthly income estimate (optional), setup choices Contract You enter it during onboarding
Accounts Each account's name (alias), type, the bank's name (optional) and its IBAN (optional), shown masked in the app Contract You add them in the app, or your assistant adds them when you share a statement
Cards on an account The last four digits and/or the wallet's name for a card, so a payment can be matched to the account that paid. Only the last four digits are ever stored Contract You or your assistant add them
Transaction data Amount (integer minor units), date, description, category, notes, and the bank's own reference for imported lines Contract You log it in the app, import a CSV, or your assistant imports a bank statement you share with it
Receipts A receipt you attach to a transaction: the shop, the date, the card's last four digits, and its items (name, quantity as printed, price, category) Contract You or your assistant add them, one receipt at a time
Category + budget data Category names, monthly budget allocations, roll-over rules Contract You create them in the app
Savings goals Goal name, target amount, target date, contributions Contract You create them in the app
Derived insights Monthly summaries, category totals, goal progress Contract Computed from your transaction data
Subscription data Your subscription status, billing cadence and current period end; for web purchases the Stripe customer id, for App Store purchases the store product and transaction reference Contract — needed to grant paid features Sent to this app by our subscription service, after a payment through Stripe (web) or the App Store (confirmed through RevenueCat)
Setup analytics Anonymous counts of which onboarding questions were shown, answered or skipped, and whether you reached the result, the paywall and the connect step. No user id, no device id, no IP address, never your answers Legitimate interest (Art. 6(1)(f)): to see which setup question people give up on, so we can fix it. The data can't be tied to you, and you can turn it off in Settings Sent from the app to our server, which passes the counts to New Relic (EU) without your IP address
AI-connector consents Your user id, the connected AI's client id, the scopes granted, the timestamp Consent (Art. 6(1)(a)) Recorded by the OAuth consent screen when you connect an AI
Tool audit log Your user id, MCP tool called, a SHA-256 hash of the arguments (never the arguments themselves), latency, calling client, and — when the call failed — the error message the AI was shown, which can quote back a value it sent us Legitimate interest (Art. 6(1)(f)) — security, abuse prevention, debugging Server-side per request
AI activity log Your user id, which AI acted, and a short display line for each write it made on your behalf (e.g. "Logged Groceries · 12.50 EUR") Contract — it is the in-app record of what touched your data Server-side, when a connected AI writes
Crash diagnostics Stack traces, device model, OS version, app version Legitimate interest — keep the app working Firebase Crashlytics, when an error occurs
Backend telemetry Request traces, error rates, response times, server logs Legitimate interest Server-side, no user-content payload, sent to New Relic (EU)

We do not collect:

Note on sensitivity. Financial transaction data is sensitive and handled with care, but under GDPR it is not special-category data under Article 9. We treat it with the same rigour we treat any personal data (encryption, scope-tight access, minimal retention) but we do not claim Article 9 protections we cannot honour.

Note on receipts. Receipt items show what you bought. They are stored only when you itemise a receipt, used only to split that payment across categories, and never analysed or profiled by us. If you connect an assistant, it can read them like the rest of your Budget data.

4. Why we collect each category

In short: to run the service you signed up for, to keep it working, and to satisfy a few specific obligations.

5. Who we share data with (sub-processors)

We use these processors to run the service. Each acts on our documented instructions; each is bound by a Data Processing Agreement.

Processor What they do Where data is processed Transfer mechanism
Microsoft Azure Hosting, Postgres database, Key Vault, Blob storage EU region (West Europe / North Europe) Intra-EU — no transfer mechanism needed
Google Firebase Authentication, Crashlytics EU where supported; Crashlytics has fixed regions EU–US Data Privacy Framework + Standard Contractual Clauses
Stripe Card payment processing for web purchases US (Stripe holds card data; we never see card numbers) EU–US DPF + SCCs
RevenueCat Confirms App Store purchases and their renewals, keyed by your Loki user id US EU–US DPF + SCCs
New Relic Backend telemetry and logs; the anonymous setup counts (off in Settings) EU region Intra-EU — no transfer mechanism needed
The AI provider you connect Whatever you ask it to do with your data The provider's regions Disclosure happens at your explicit request via OAuth consent

Apple's App Store sells in-app subscriptions as the seller, under Apple's own terms and privacy policy; Apple is not a processor of ours. We receive only what we need to grant access (the product, the status, the renewal date), never your payment details.

We do not sell personal data. We do not share it with advertisers.

6. How long we keep it

When you delete your Loki Budget data (Section 8), every category above is removed from our systems within 30 days, with two exceptions:

Both stay until you delete your whole Loki account: Delete my Loki account, the last option under Settings → Account → Delete my Budget data, or the same option at loki.unstablepixel.com/account (Section 8). You can also ask us at the privacy address in Section 1, and we handle that within the same 30 days. Be aware of the knock-on: because the subscription record is keyed to that shared sign-in, signing back in to Loki Budget with the same account restores your paid access. Your transactions, accounts, budgets and goals do not come back; the subscription does. The audit-log entries are deleted along with your Loki Budget data; we do not retain a "tombstoned" trail of past activity. Every AI connector you authorised goes with it too: deleting your data withdraws each connection and deletes its consent record (Section 3, "AI-connector consents"), so no AI can reach the account afterwards, and signing back in does not reconnect one — you would have to connect it again.

7. AI connectors (Claude, ChatGPT, others)

This is unusual enough to deserve its own section.

Loki Budget doesn't send your data to any AI company. Neither the app nor our servers use an AI provider. Your data reaches an AI only if you connect your own assistant, and that is up to you: you can change or disconnect it any time.

The app lets you connect an AI assistant — Claude, ChatGPT, or any other client that supports the Model Context Protocol — to your account. Once connected, that AI can call a defined set of tools against your data (read your transactions, log a new one, adjust a budget, etc.) only within the scopes you explicitly granted at the OAuth consent screen.

What this means in plain terms:

If you do not connect any AI, no AI provider receives any of your data.

8. Your rights

Under the GDPR you have eight rights over your personal data. The app implements concrete mechanisms for the ones that need them:

Right How to exercise it
Be informed This document
Access (a copy of your data) Settings → Download my data — returns a JSON bundle of everything we hold
Rectification Edit the underlying data in the app (transactions, budgets, goals, profile)
Erasure — your Budget data Settings → Account → Delete my Budget data — removes your Loki Budget data within 30 days and signs you out; your shared Loki sign-in and your subscription record stay, and your subscription is not cancelled (Section 6)
Erasure — your whole Loki account Settings → Account → Delete my Budget data → Delete my Loki account, or the same option on your account page at loki.unstablepixel.com/account — deletes your data in every Loki app, any assistant you connected, your subscription record and your sign-in, and cancels a subscription you bought on the web. A subscription billed by the App Store or Google Play only you can cancel, in the store, so cancel it there first: the app names it before anything is deleted. It cannot be undone. You can also ask us at the privacy address in Section 1
Restrict processing Disconnect AI connectors, disable optional features
Portability The export endpoint returns a structured machine-readable JSON
Object Settings → Anonymous setup counts turns the setup counts off; disconnect AI connectors; email the privacy contact for anything else
Avoid automated decision-making Not applicable — we make no automated decisions with legal or significant effect

If you believe we have mishandled your data, you have the right to lodge a complaint with your local supervisory authority. In Romania this is the ANSPDCP (https://www.dataprotection.ro/).

9. International data transfers

Our infrastructure is in the EU. The cross-border transfers that happen are documented in Section 5. Each one has a valid Article 46 transfer mechanism (EU–US Data Privacy Framework certification + Standard Contractual Clauses) where the processor is outside the EU.

Connecting an AI provider is a transfer that happens at your explicit instruction under Article 49(1)(a) — we disclose it clearly via the OAuth consent screen and you can refuse.

10. Children

Loki Budget is not directed to anyone under 16. We do not knowingly collect personal data from children. If you become aware that a child has provided personal data through the service, contact the privacy address in Section 1 and we will delete it.

11. Security

We follow GDPR Article 32 — appropriate technical and organisational measures. In specific terms:

No system is breach-proof. If a personal-data breach occurs we will notify the supervisory authority within 72 hours and, where the risk to you is high, notify you directly.

12. Cookies (web surfaces)

The web onboarding and payment pages use only strictly necessary cookies before consent — the session cookie that keeps you signed in, the CSRF token, and the consent record itself. We do not run advertising trackers. If we ever introduce optional analytics on the web surface, you will see a separate opt-in banner before any analytics cookie loads.

13. Changes to this policy

We may update this policy when the service changes or the law requires. The "Last updated" date at the top is the canonical version marker: when it changes, this document has changed, and the copy published at this address is always the current one.

There is no in-app step that asks you to re-acknowledge a new version. When a change is material (a new category of data, a new recipient, a longer retention period, or anything that narrows your rights) we announce it in the app's What's new, on the next launch after you update. Where a change needs your consent, we ask for it before it applies to you, on the screen that switches that feature on, the way connecting an AI asks at its consent screen (Section 7).

14. Contact

For privacy questions, data subject requests, or anything in this document that doesn't read clearly to you, write to:

privacy@unstablepixel.com UnstablePixel SRL — Str. Victor Babeș nr. 2, Oradea, Bihor, Romania