Stave Privacy Policy

Version 2.7 · Last updated: October 2026

What changed in 2.7: the statement outline is now built in sections with name and address lines removed, carries a layout fingerprint, and can be deleted from the app; the bank is shared only when it is on Stave’s bank list.

What changed in 2.6: sharing a statement Stave couldn’t read now sends a masked text outline instead of a word layout, is offered wherever a statement import fails because its layout wasn’t recognised, is kept 180 days instead of 12 months, and the Mac App Store edition is described accurately: it shares the outline by email.

What changed in 2.5: install and session records are now always sent by the direct download, with no setting to turn them off; diagnostics are no longer deleted automatically when turned off, but on request, using the install ID shown in Settings.

What changed in 2.4: iCloud encryption is now described accurately (end-to-end only with Advanced Data Protection); update downloads from GitHub are listed; install and session records are disclosed; reports you choose to email us are named as the one way amounts or message text can reach us outside Smart Assist; password-hint masking is described precisely; and the companies that receive data are listed.


In one paragraph

Stave is a Mac app that reads your bank SMS and email statements locally on your machine and helps you understand where your money goes. Stave never asks for your bank passwords and doesn’t sell your data or share it for advertising. It reaches other companies only as this policy describes: Apple for iCloud sync, OpenAI if you turn on Smart Assist (Section 3.7), and Razorpay and Resend when you buy Stave Pro on the direct download (Section 3.10). Categorisation is on-device by default. A few things do talk to servers we run: direct-download Pro subscribers’ Macs check in with our license server roughly weekly (license key and an anonymous device identifier only — Mac App Store subscriptions verify entirely on-device via Apple’s StoreKit and never contact getstave.app — see Section 6), and subscribing to Stave Pro on the direct download goes through a getstave.app checkout that collects your email address to deliver your license key (see Section 3.10). If you explicitly opt in to Smart Assist (direct download only, off by default), Stave sends merchant names and short category-search phrases to our own server, and — only for a message the on-device pipeline can’t classify on its own — the wording of that message with numbers and UPI IDs removed, and payee names where Stave can find them, plus, when you unlock a password-protected statement, the few sentences of the bank’s email that describe the password rule, with dates, long numbers and names after a title such as Mr or Mrs removed; our server may forward any of these to OpenAI (see Section 3.7). On the direct download, a minimal, non-optional install count (a random ID, your platform, and first-launch date — no content) is sent once per install, and install and session records (device details and how long Stave stays open, no content) are always sent; beyond that, Stave also sends anonymous parse diagnostics and feature usage events through Apple’s CloudKit so we can fix parsing problems and decide what to build next — both on by default, and you can turn either off in Settings (see Section 3.4). The Mac App Store edition sends none of this — no install count, no diagnostics, no Smart Assist, and Pro is verified entirely on-device via StoreKit with no checkout or email collection at all. You can also, entirely at your own discretion, email us messages the on-device parser couldn’t read (Section 3.9), or send us a masked outline of a statement Stave couldn’t read (Section 3.11), to help us improve the parser — nothing is sent unless you choose to. Read on for specifics, or jump to Section 7 to verify these claims yourself.


Editions

Stave ships in two editions from the same source code. Both are local-first: parsing happens on your Mac, and Smart Assist is optional and off unless you turn it on. Both use only your own private iCloud for optional sync. They differ in distribution:


1. Our position on privacy

Stave is local-first: parsing happens on your Mac, and Smart Assist is optional and off unless you turn it on. Your money is your business, and ours is only to help you see it clearly.

The architecture follows one principle: your data never leaves your sight without your explicit decision. Stave never asks for your bank credentials, never holds your account information, and never receives your balances, statements or account details.

Categorisation is on-device by default for every user, always — no cloud AI service sees a transaction unless you take a separate, explicit action. The one opt-in exception, Smart Assist, is described in full in Section 3.7: direct-download users can choose to send merchant names or short category-search phrases to our own server, and, only for a message the on-device pipeline can’t classify on its own, the wording of that message with numbers and UPI IDs removed, and payee names where Stave can find them — and, separately from categorisation, a statement email’s password instructions with dates, long numbers and names after a title such as Mr or Mrs removed. Our server may in turn ask OpenAI. There is no Anthropic integration, no Google Cloud integration, and no other third-party model API anywhere in Stave.


2. Core principles


3. How Stave works

3.1 Data sources

Stave reads two types of data, both stored locally on your Mac by Apple’s own apps:

You explicitly grant access to each source during setup. Stave reads transaction information directly from these local files on your machine.

3.2 On-device categorisation

Stave categorises transactions on your Mac using your own rules and a built-in merchant dictionary. Unclear merchants stay Uncategorised. In the direct download, Smart Assist (Section 3.7) can suggest categories if you turn it on.

For SMS transaction extraction (parsing the merchant, amount, and account from a raw SMS string), Stave uses its own rules on your Mac. When the rules can’t classify a message, Apple Intelligence on your Mac helps where available.

Two additional post-processing detectors run locally to improve accuracy: a self-transfer pairing detector and a credit-card payment validator. Both are deterministic logic, not models.

3.3 How Stave handles edge cases

When the on-device pipeline cannot fully resolve a transaction or statement, Stave surfaces it for manual review rather than guessing:

These manual paths add slight friction but mean Stave never sends your data to a cloud service to make these decisions for you.

3.4 Anonymous diagnostics (direct download only)

This section applies only to the direct download from getstave.app. The Mac App Store edition has no diagnostics and no install count — it never writes to CloudKit public, regardless of any setting.

Install count — not optional. Once per installation, at first launch, the direct download writes one row to a public CloudKit database that Avysion controls: a random install ID, your platform (macOS/iOS), and the first-launch date. Nothing else — no message, transaction, statement, or account content, and this row is not affected by the diagnostics toggles below. It exists only so we can count distinct installs; there’s no per-device UI to turn it off individually, though it’s covered by the same deletion path as the rest of Section 8 if you delete your Stave data.

Install and session records — not optional. Always sent by the direct download; there is no setting to turn them off. They are how we count active users. An install record holds your install ID, platform, Stave version and build, macOS version, Mac model, region and language settings, first and last active dates, whether you have Pro, and your trial start date. A session record holds your install ID, platform, Stave version, and when the session started and ended. A daily activity record, sent at most once a day, holds your install ID, how many distinct days you have used Stave, and how many days since you installed it. No financial data. Feature usage events and statement diagnostics also record whether you were on the free plan, a trial or Pro at the time.

Beyond that install count, Stave sends the install and session records above and two further kinds of data to the same public CloudKit database. Both are on by default, and each can be turned off at any time. A user who turns both toggles off sends zero parse diagnostics and zero feature usage events — only the install count and the install and session records above.

Settings has two separate toggles you can control independently. If both are off, Stave may show a “Help improve Stave” note in the sidebar, at most once a week after you dismiss it; it never turns diagnostics back on by itself:

Toggle 1 — Parse diagnostics

Toggle 2 — Feature usage events

Both kinds of data include a stable per-install identifier so we can group events from the same Stave installation (helping us measure retention and feature adoption). The identifier is generated locally on your Mac. It is not linked to your Apple ID, your name, or any contact information you’ve shared with Apple.

You can disable either toggle at any time in Settings → Privacy. When disabled, Stave stops sending events. The install ID is kept in your Mac’s Keychain, so it stays the same if you reinstall Stave on the same Mac. Events already sent are kept; to have them deleted, copy your install ID from Settings → Privacy and email it to us.

3.5 iCloud synchronisation (optional)

If you choose to use Stave on multiple devices (your Mac and your iPhone), data syncs through Apple CloudKit:

Note: the diagnostics in Section 3.4 use CloudKit’s public database, which is separate from your private database. Disabling iCloud sync (private database) doesn’t disable diagnostics, and disabling diagnostics doesn’t disable iCloud sync. They’re independent toggles.

3.6 Diagnostic logs (support, user-initiated)

Stave keeps a small rotating technical log on your Mac (under ~/Library/Logs/Stave, inside the app’s sandbox container on the Mac App Store edition). It records structural events only — pipeline stages, counts, durations, error codes, and public bank identifiers. By design it does not contain transaction amounts, merchant names, SMS or email content, account numbers, or anything you authored, and a redaction pass strips currency amounts and long digit runs as a second line of defence.

When you contact support from within Stave, you can choose to attach this log. Stave hands the file to your own mail client — you review it and send it to stave@avysion.studio, and a “Don’t attach” option lets you send without it. Stave never transmits this log automatically and never sends it anywhere on its own. This applies to both editions; because it is sent only by you, through your mail client, it is not part of any automatic data collection.

3.7 Smart Assist: optional cloud assistance (opt-in, direct download only)

By default, categorisation is entirely on-device (Section 3.2) — nothing about a transaction ever leaves your Mac. In the setup wizard or Settings, direct-download users can additionally turn on Smart Assist (the in-app toggle name for this feature) for help with merchants and messages the on-device tiers can’t confidently place, and with reading a statement’s password instructions. This is off by default and reversible at any time. The Mac App Store edition does not include this feature at all — the code path doesn’t exist in that build, so there is nothing to enable.

Smart Assist covers four touchpoints, all gated by the same toggle and all going to Stave’s own server first, never straight from your Mac to OpenAI:

Turning Smart Assist off in Settings stops future merchant names, search phrases, redacted messages, and password instructions from being sent. It does not retroactively delete anything already cached — which, again, is never transaction data, and never message text.

3.8 Contributing a sample SMS (getstave.app website, optional)

Separately from the Stave app, the getstave.app website has an optional, public “Contribute” page where anyone can paste a bank SMS to help us extend Stave’s on-device parser to more banks. This is a website feature, not something the Stave app does on your Mac. If you use it, we collect the message text you paste, the bank you attribute it to, an optional email address, and (like any web form) your IP address, browser user-agent, and the referring page. Submissions are used to build and test the on-device parser dictionary and are retained indefinitely — this feature has no automatic deletion schedule today.

3.9 Sharing unread messages (support, user-initiated)

Stave keeps a local, on-device log of transaction-shaped SMS the parser couldn’t read — sender, a sample of the message, and why it was skipped — so it can show you, in Settings → Privacy, how many such messages exist. This log stays on your Mac and is never sent anywhere on its own.

From that same Settings section, you can choose to share it with us to help improve the parser. This is entirely your decision:

Unlike Section 3.6’s log, this report can contain real SMS content — sender names, merchant strings, and, if you opt in on the checkbox, amounts and account numbers. We use it only to fix parsing for the message pattern it contains and delete it once that’s done. This applies to both editions — it’s a local file and your own mail client, not an Avysion server call.

3.10 Purchasing Stave Pro (direct download, getstave.app checkout)

This section applies only to buying Stave Pro on the direct download. Mac App Store subscriptions go entirely through Apple’s own purchase sheet — Avysion never sees your payment details or your email for those, and this section doesn’t apply to them at all.

When you subscribe on getstave.app, checkout is hosted by Razorpay, our payment provider. Your card or payment details go to Razorpay directly — Avysion’s server never receives or stores them. What we do receive and store, to run the subscription:

This is separate from the weekly license-verification check described in Section 6, which sends only your license key and an anonymous device identifier — not your email — once your subscription is already active.


3.11 Sending a masked statement outline (user-initiated)

When Stave reads text from a statement PDF but doesn’t recognise its layout, it offers to send us a masked outline of the statement so we can add support for it. It is never offered for password-protected, scanned, or damaged files, and nothing is ever sent automatically:

In the Mac App Store edition the same masked outline is shared by email instead: Stave opens a draft to us in your mail app with the outline attached and nothing else from Stave, sent from your own address only when you press Send there. Nothing goes to our server.

Earlier versions of Stave sent a masked outline with every digit as 9, or before that a masked word layout, for the same purpose. Those submissions are kept no longer than 180 days and 12 months respectively.

4. What data is handled

Data typePurposeStorage location
Transaction SMSReading transactionsOn this Mac (direct download: Smart Assist can send unreadable messages, see 3.7)
Bank statement PDFsReading transactionsOn this Mac, read from Apple Mail (direct download: Smart Assist can send password rules, see 3.7)
Bank names and account last-4 digitsCategorising accountsOn device, optionally syncs via your private CloudKit
Categories, tags, and notes you createPersonalisation and recallOn device, optionally syncs via your private CloudKit
Install ID, platform, and first-launch date (not optional — direct download only)Counting distinct installsCloudKit public database controlled by Avysion; sent once
Install, session and daily activity records with a per-install identifier (always on — direct download only)Counting active installs and session lengthCloudKit public database controlled by Avysion
Parse diagnostics with a per-install identifier (on by default, can be turned off — direct download only)Finding and fixing parsing problems, per bankCloudKit public database controlled by Avysion
Anonymous feature usage events with a per-install identifier (on by default, can be turned off — direct download only)Understanding feature adoptionCloudKit public database controlled by Avysion
Masked outline of a statement (only when you review it and tap Send — by email in the Mac App Store edition; see Section 3.11)Teaching the parser a statement format it couldn’t readOur server at getstave.app; deleted after 180 days, or sooner when you remove the request in Stave
License key + anonymous device identifier (Pro subscribers, direct download only)Verifying subscription statusSent to Stave’s license server roughly weekly; no financial data included. Mac App Store subscriptions verify on-device via StoreKit — nothing sent.
Merchant name string (opt-in Smart Assist, direct download only)Suggesting a category via Stave’s categorisation server, forwarded to OpenAI only on a cache missSent to Stave’s server; anonymous cache, retained up to 180 days
Category-search phrase you typed (opt-in Smart Assist, direct download only)Suggesting a category when the picker’s local search finds nothing, forwarded to OpenAI only on a cache missSent to Stave’s server; anonymous cache, retained up to 180 days
Redacted message text (numbers, UPI IDs, and payee names where found removed; opt-in Smart Assist, direct download only)Classifying a message the on-device pipeline couldn’t, via Stave’s server, forwarded to OpenAI only on a cache missSent to Stave’s server; only a one-way hash is cached, not tied to you, retained up to 180 days
Password instructions from a statement email (only the sentences describing the password rule; dates, email addresses, and digits removed; opt-in Smart Assist, direct download only)Turning the bank’s instructions into a one-line password hint, via Stave’s server, forwarded to OpenAIPassed through Stave’s server, not stored or cached
Email address (Stave Pro checkout, direct download only)Delivering/redelivering your license key, managing your subscriptionStored in Stave’s license database; payment details stay with Razorpay, key delivery via Resend — see Section 3.10
SMS text you submit via the Contribute page (optional, public web form on getstave.app)Improving the on-device parser’s bank-format dictionaryStored on Stave’s server indefinitely, with your optional email and standard web request metadata (IP, user-agent, referring page)
Unread-message report (sender, sample text, optionally amounts/account numbers)Improving parser accuracyOn device; sent only if you tap Share, via your own mail client — both editions
Banking passwordsStave never requests theseN/A
On-device diagnostic logTroubleshooting support requestsOn device; sent only if you attach it to a support email you send
PDF attachment passwordsHeld only in your Mac’s Keychain when you provide onemacOS Keychain (not synced by Stave)
Contacts, photos, locationStave never accesses theseN/A

5. The pseudonymity question

This section applies only to the direct download — the Mac App Store edition sends no diagnostics. On the direct download, the diagnostics events in Section 3.4 use a stable per-install identifier rather than fully anonymous events. This is a deliberate trade-off:

If pseudonymous events still feel too revealing for you, turn diagnostics off. The app works exactly the same with diagnostics off as with it on.


6. Network usage

Stave processes your data on your Mac. Network traffic falls into these categories:

Always allowed (when the relevant feature is in use):

Optional:

One-time, direct download only:

Avysion operates two servers your Stave installation may talk to, both at getstave.app: a license server (Pro subscribers only, described above) and, if you’ve opted in, a Smart Assist server (Section 3.7). Neither ever receives your transaction amounts, dates, accounts, or, outside the message-classification and password-hint touchpoints described in Section 3.7, message or email content. Outside of these, the only other Avysion-controlled destinations are Apple’s CloudKit public database (diagnostics unless you’ve turned them off, plus the always-on install count and community-rules refresh above) and, only if you subscribe to Stave Pro on the direct download, the Razorpay checkout page and the license database that stores your email for that subscription (Section 3.10). Stave’s own code never talks to OpenAI, Anthropic, or any other cloud AI service directly — only our Smart Assist server does, and only when you’ve opted in.


7. Verification: don’t trust us, verify

You can confirm Stave’s network behaviour using built-in macOS tools:

  1. App Privacy Report. Go to System Settings → Privacy & Security → App Privacy Report. Stave’s network connections appear there. On the Mac App Store edition you’ll see only Apple domains, including for Pro subscribers — subscription verification never leaves Apple’s StoreKit, so getstave.app never appears. On the direct download with diagnostics and Smart Assist both off, you’ll see Apple domains, getstave.app (update checks, and license verification if you’re Pro) and, while an update downloads, github.com and release-assets.githubusercontent.com, where Stave’s release files are hosted. Turning on Smart Assist adds no new domain: the OpenAI call happens on our server, not your Mac. Checking out for Stave Pro is the one exception: your browser briefly visits Razorpay’s hosted checkout page to complete payment.
  2. Activity Monitor. Open Activity Monitor, select the Network tab, and search for Stave. Sent bytes stay near zero except during iCloud sync, update checks, the one-time install count, the periodic community-rules refresh, license verification, or opt-in diagnostics or Smart Assist requests — and even with Smart Assist on, every connection your Mac makes resolves to Apple, getstave.app or, while an update downloads, github.com and release-assets.githubusercontent.com; it never dials api.openai.com itself.
  3. Sandboxing & signing. The Mac App Store edition runs in the macOS App Sandbox — macOS prevents it from accessing files, folders, or system resources unless you’ve explicitly granted permission. The direct download is notarized and hardened-runtime, and reads your Messages and Mail only through folders you grant via the system file picker.
  4. Source code inspection. We’re happy to walk through the code with anyone who asks.

8. Your data, your control

You’re never locked into Stave:

Data export to CSV/JSON is on the roadmap but not yet shipped. When it lands, it will be a one-click action.


9. Changes to this policy

If we update this policy, the change is recorded in the version history at the top of this document. Material changes (new data types handled, new third-party services that fire by default, changes to sync or diagnostics behaviour) will be communicated in-app at the next launch following the change.


Contact

Questions about how Stave handles your data, or about the architecture described above:

Email: stave@avysion.studio
Website: https://www.getstave.app/


Stave is built by Avysion in India. The Stave team has zero access to your transactions, balances, or messages. That’s not a policy choice — it’s an architectural constraint. The Mac App Store edition is sandboxed by macOS and the direct download is notarized and hardened-runtime; the network is observable in Activity Monitor, and every external service is opt-in. We invite scrutiny.

← Back to getstave.app