Privacy Policy
Last updated September 11, 2026
ZenBuy (the website at zenbuy.info and the ZenBuy iOS app) is a research tool. We help you read equity research before you decide anything. We are not a broker, bank, or registered investment advisor. We do not open accounts, hold money, or place trades.
There are no passwords, no email sign-ups, and no personal profiles. We do not keep a personal research history. We do not run an ads or product-analytics suite. We do not sell personal information.
The one optional exception is unlocking. If you bought ZenBuy on the App Store, you can sign in with Apple — in the app and again here — so the website recognizes the purchase. That is described under Unlocking with your Apple ID. Everything else on this page applies whether or not you ever unlock.
What we store (operational only)
A research request is processed in the moment to produce a report. We do not attach that request to an identity or keep a per-person dossier. What remains on our side is short-lived operational data, stored in Cloudflare KV and deleted automatically when its TTL expires:
- Shared result cache (~1 hour) — a finished report (and a plain-English rewrite, if you asked for one) may be reused for the same tickers and settings so we do not regenerate it immediately. That cache is global to the lookup, not tied to you. Anyone who can guess or reuse the cache id can read it until it expires. Search hits last up to 1 hour; empty search results up to 15 minutes. Discover picks last up to 1 hour.
- Free-allowance counters (about one week) — free reports are capped per visitor per rolling week. A limit counted only against an IP address means nothing (a hotspot resets it), so to recognise the same visitor we keep three abuse-prevention identifiers, described in How the free limit recognises you. They expire about a week after your last report.
- Prefetch budget (purged within 24 hours) — your IP is counted against a daily market-data prefetch budget. That counter expires within 24 hours.
- Optional share snapshot (up to 24 hours) — if you create a share link, we store that HTML snapshot for at most 24 hours, then it disappears.
- Launch pass (about 3 minutes) — “show more like this” uses a one-time pass that expires in about 180 seconds.
- On your device only — the website may remember your last investment style and profit-window preference in the browser. We do not store tickers in local storage. Those preferences do not leave your device.
Market-data caches (company fundamentals, 13F context, and macro series) are operational copies of public market feeds, not user records. They expire within 24 hours (macro snapshot within 12 hours).
How the free limit recognises you
Free reports are limited to a small number per visitor per rolling week. Reports are expensive to produce, so the limit has to survive the obvious resets — a private window, a cleared cache, a different network. That means we need to tell one visitor from another without asking you to make an account. We do it with three abuse-prevention identifiers, and nothing else:
- A first-party cookie —
zb_vid, a random identifier with no meaning outside ZenBuy. It isHttpOnly, so only our server can read it, and it is never sent anywhere else. - A device-signal hash — when you generate a report, your browser hashes ordinary properties it already exposes to every website (user-agent string, language, time zone and locale, screen size, processor and memory class) into a one-way fingerprint. We store the hash, not the properties, and it cannot be reversed into them. We deliberately do not read your canvas or WebGL output, the two signals normally used to make a fingerprint sharper. In the iOS app this is a random identifier held in the device keychain instead, which is simpler and reveals less.
- The network your request came from — a coarsened form of your IP address (the surrounding /24 or /48 block, not the exact address). On its own it is never treated as an identity, because thousands of people share one mobile carrier address. A coarse network block is one of the signals used to stop a fresh private window from minting a new allowance.
Those identifiers are grouped so that the same visitor is recognised when one of them changes, and the group holds nothing but timestamps of how many free reports it has used. We do not use any of it for advertising, cross-site tracking, profiling, personalisation, or resale, we do not sell or share it, and we never combine it with your name, email, or phone number — we do not have those. Every key expires about a week after your last report, and unlocking with an App Store purchase replaces this mechanism entirely: an unlocked visitor is counted against their Apple identifier instead.
To be straight with you about the limits of this: it is abuse prevention, not surveillance, and it is imperfect in both directions. Someone determined to get extra free reports can still do it by changing machines, and, rarely, two different people on very similar devices and the same network may be treated as one visitor. We tune it to keep the free tier alive, not to catch everybody.
Unlocking with your Apple ID
One ZenBuy App Store purchase includes the website, and we sometimes grant the same access to an Apple ID directly, without a purchase. Either way it is optional — the free site works without it — and it is the only part of ZenBuy that stores anything tied to you across visits.
When you sign in with Apple, Apple sends us a subject identifier: an opaque string that identifies you to ZenBuy only, and cannot be used to identify you anywhere else. We do not ask Apple for your name, and if you use Apple’s Hide My Email we never see a real address. Against that identifier we keep:
- Your unlock record — which product you bought and, for the monthly plan, when it next needs renewing. It expires on its own when a subscription lapses; a lifetime purchase is kept until you ask us to remove it. If we granted you complimentary access instead of a purchase, the record says only that, and holds nothing more than a purchased one does.
- A sign-in session (90 days) — a random identifier in a cookie on the website, and stored on your device in the app. It points at the record above and holds nothing else.
- A daily research counter (purged within 24 hours) — once unlocked, your daily limit is counted against your Apple identifier instead of the free-tier identifiers above, so a changing network or a new browser does not cost you access you paid for.
Your purchase itself stays with Apple. We verify the signed receipt Apple issues and never see your payment details. Signing out with Unlink deletes the session immediately; your purchase is untouched and you can sign in again at any time.
In transit and at rest
Traffic uses TLS. At rest, the keys above live only in Cloudflare KV and auto-expire via TTL. We do not keep a year-long verdict archive or any other personal research history.
Who helps us run ZenBuy
- Cloudflare — hosts the site and API, stores the ephemeral KV keys above, and provides security. The website uses Cloudflare Turnstile (a bot check). The iOS app sends a client marker so it can skip that web check; rate limits still apply.
- Finnhub — market data for ticker search and company fundamentals.
- xAI (Grok) — writes research reports from the tickers and settings in that request.
- Anthropic (Claude) — used only if the primary model is unavailable, for the same one-off report job.
- Apple — only if you choose to unlock. Apple handles the sign-in and the purchase, and tells us the subject identifier described above.
We send these providers what they need to do that job — not a customer profile. Cookies are first-party and functional only: our own zb_vid free-allowance identifier and zb_session if you unlock, plus a short-lived bot-management cookie Cloudflare may set. There are no advertising or analytics cookies.
Your choices (California, GDPR, and similar)
Because there are no passwords and no personal research history, there is usually nothing durable to export or delete. Operational keys expire on the windows above. If you unlocked, the only lasting record is the unlock described above: Unlink ends the session at once, and you can ask us to delete the unlock record itself through the Support page. We do not publish a personal email or phone number.
Clearing cookies removes zb_vid from your browser, but by design that does not hand out a new free allowance — the other identifiers still recognise the week you are in. Those expire on their own about a week after your last report.
California: we do not sell personal information, and we do not “share” it for cross-context advertising.
EEA/UK: we process the operational data above to provide the report you asked for and to keep the service secure and fairly rate-limited.
Children
ZenBuy is not directed at children under 13 (or under 16 in the EEA).
Changes
If our practices change, we will update this page. The date at the top is the latest version.
Contact
Use the Support page. We do not list a personal email or phone number.