Legal
Privacy Policy
The short version. Your food diary is stored on your iPhone and is never sold. Apple Health data is read or written only with your permission, is never used for advertising and never leaves the purpose you granted it for. AI features send a meal photo, a meal description or your plan answers to OpenAI through our server only after you agree, and you can change that in Profile; we do not keep your photos or what you type. There are no ads and no tracking SDKs in the app. We use Google Analytics for Firebase to count how the app is used, without the advertising identifier and without linking it to your account, and you can switch it off in Profile. You can delete your account and everything in it from Profile › Delete account.
1. Who we are
Track Macro ("the app") is published by Torch99 ("we", "us"), the data controller for the personal data described in this policy. Contact: liwaa@99visibility.com. This policy covers the iOS app and the website at trackmacro.app.
The website runs no analytics, sets no tracking cookies and loads no fonts, scripts or other files from third parties. If you choose a language with the language switcher, the site remembers that choice in a first-party cookie named lang (kept for one year) and in your browser's local storage, so it can open in that language next time. A colour theme you pick is kept in local storage too. Neither is sent to anyone else.
2. What we collect and why
We collect the minimum needed to run your nutrition diary, your plan and the AI estimates. Nothing in this table is used for advertising.
| Data | Examples | Why | Where it lives |
|---|---|---|---|
| Account identifier | An anonymous user id created by Firebase Authentication when you first open the app. No email, name or password is required. | To keep your plan and subscription attached to you and to enforce the daily AI allowance. | Firebase (Google Cloud) |
| Onboarding answers and plan | Goal, sex, age, height, weight, activity level, units, the calorie and macro targets we compute from them. | To build and update your targets. Height, weight and age are health-related data; we process them only to compute your plan. Neither these inputs nor the targets computed from them are sent to analytics. | On your device (encrypted storage) and in your account in Cloud Firestore |
| Food log | Foods, servings, times, custom foods, supplements, streak days. | This is the product: your diary, dashboard and history. | On your device only. Text you type for an AI estimate is sent to our server only for that estimate (section 4). |
| Meal photos | A resized photo you choose to submit for an estimate. | To return a calorie and nutrient estimate for that meal, only after you agree to AI processing. See section 4. | Transient: processed in memory by our Cloud Function and the AI provider, not stored by us |
| Apple Health data | Body weight (read); dietary energy, macros and nutrients you log (write). | To show your weight trend next to your targets and to keep your nutrition in one place. See section 3. | Apple Health on your device. We do not copy Health data to our servers. |
| Purchase history | Subscription product, status, renewal and expiry dates, an app user id equal to your anonymous account id. | To unlock Pro and to honour restores and refunds. | Apple, RevenueCat, and a status mirror in your account in Cloud Firestore |
| App usage analytics | Screens viewed and in-app actions such as finishing onboarding, generating a plan, logging a first meal or opening the paywall, with coarse details (for example the goal you picked, an age range or the subscription plan you chose and its price), plus a random app-instance id, device model, OS and app version, language and an approximate country or region derived from the IP address. See section 6. | To understand which parts of the app work and where people get stuck. Never advertising. | Google Analytics for Firebase (Google LLC) |
| Usage counters | Number of AI estimates and plan updates per day. | To enforce the free tier allowance and protect against abuse. | Cloud Firestore |
| Support email | Whatever you choose to send us. | To answer you. | Our mailbox |
Legal bases (GDPR). Performance of the contract with you (account, diary, targets, subscriptions); your explicit consent for health-related data (onboarding body stats, Apple Health, meal photos) and for AI processing, which you can withdraw at any time by changing the relevant permission or deleting your account; our legitimate interest in keeping the service secure and preventing abuse (usage counters) and in improving the app with aggregate usage analytics, which you can object to at any time with the in-app switch described in section 6.
3. Apple Health
- The app asks for Apple Health access only when you turn on the Apple Health option. You choose, per data type, what to allow in the iOS permission sheet and can change it any time in Settings › Health › Data Access & Devices.
- We read body mass to show your weight trend. We write the dietary energy, protein, carbohydrates, fat and nutrients you log, so your nutrition is in one place.
- Health data stays on your device inside Apple Health. We do not upload Apple Health data to our servers, do not use it for advertising or marketing, do not use it to train models, and never sell it or share it with data brokers. This matches Apple's HealthKit rules, which we are bound by.
- Weight you enter inside the app, or that we read from Apple Health to compute your plan, is stored in your account only as the current weight your targets are based on.
4. AI processing
Some features use AI from OpenAI: estimating a meal from a photo or a description, and writing the text of your plan. This section explains what is sent, when, and what happens to it.
- You choose first. Before anything is sent for AI processing, the app explains what is shared and asks for your consent. You can change your choice at any time in Profile › Your data › AI processing. If you say no, typed meals may still be understood on your iPhone, your targets are built on your device with our standard formula, and the features that need our server stay off. Everything else in the app works as usual.
- Meal estimates. Only what you choose to estimate is sent. When you tap Estimate, the app sends the resized photo, or the description you typed, to a Cloud Function we run on Google Cloud, which forwards it to OpenAI with an instruction to return calories and nutrients. Camera access is requested only for scanning a barcode or taking a meal photo, and is never used in the background.
- Your plan. To write the text of your plan, our server sends OpenAI your goal and the non-identifying preferences you gave during onboarding, such as why you started, what tends to get in the way and how you like to eat. Your answers about energy, sleep, stress and activity are never sent to OpenAI. Your age, sex, height, weight and target weight are never sent to OpenAI, and neither are your calorie and macro numbers: your targets are calculated by our own standard formula, on our server or, if you said no to AI processing, on your device.
- Nothing that identifies you. Requests to OpenAI contain the photo, the text or the plan answers and our instructions. They do not contain your account id, name, email address or device identifiers.
- On your device first. On iPhones with Apple Intelligence (iOS 26), a typed meal may be understood on your device first. When that works, the text never leaves your iPhone. Photos, and descriptions your iPhone cannot read, go to our server as described above.
- What we keep. We do not store your photos or the text you type. They are held in memory for the duration of the request and then discarded. The estimate (numbers, not the image) is returned to your phone, where you can edit it before saving it to your diary. For typed descriptions, the resulting estimate (a food name and its nutrient values, not your text) is cached for up to 30 days under a one-way hash of the description, without any link to your account, so the same description gets an instant answer. The plan text OpenAI writes is saved in your account as part of your plan.
- What OpenAI keeps. OpenAI processes this content as our service provider under its API terms. According to OpenAI's API data policy, data sent to the API is not used to train or improve OpenAI's models, and may be retained by OpenAI for up to 30 days for abuse monitoring, unless longer retention is required by law. See OpenAI: Data controls in the OpenAI platform.
- Your food diary stays on your iPhone. It is not sent to OpenAI and not stored on our servers.
- Estimates are approximations for a wellness diary. They are not a measurement and not medical, dietary or nutritional advice.
5. Service providers
We use a small number of processors, each bound by a data processing agreement and limited to the purpose listed:
| Provider | Purpose | Data |
|---|---|---|
| Google Firebase / Google Cloud (Authentication, Cloud Firestore, Cloud Functions) | Anonymous sign-in, storage of your account and plan, running the estimate and plan functions | Account id, onboarding answers, plan, usage counters, subscription status mirror, transient photo/text during a request, cached text estimates (section 4) |
| OpenAI | Producing a food estimate from a photo or text when you tap Estimate, and writing the text of your plan, only after you agree to AI processing | The resized photo or the text, transiently; your goal and non-identifying onboarding preferences for the plan. Never your age, sex, height, weight or account id |
| RevenueCat | Subscription status, trials, restores, receipt validation | Anonymous account id, purchase history, device locale and app version |
| Google LLC (Google Analytics for Firebase) | Aggregate app usage analytics | App-instance id, usage events and screen views with coarse details, device model, OS and app version, language, approximate location derived from IP. No advertising id, no account id, no food log, body measurements, nutrition targets, activity level, wellness answers or Health data |
| Apple (App Store, StoreKit, HealthKit, Apple Intelligence) | Payments and subscriptions, Health data on your device, on-device text understanding | Governed by Apple's privacy policy; we receive no payment card details |
We do not use advertising networks, attribution SDKs or session-replay tools. Google Analytics for Firebase is our only analytics provider; see section 6.
6. Usage analytics
- The app uses Google Analytics for Firebase, provided by Google LLC, to measure how the app is used in aggregate: which screens are opened and which steps of onboarding, planning, logging and the subscription screen are completed.
- What is sent: event names and screen names with coarse details (for example the goal you chose, an age range rather than your age, the subscription plan you selected and its price), a random app-instance id generated on install, device model, iOS and app version, language and an approximate country or region that Google derives from the IP address. Food log entries and the calories or macros you log, body measurements (weight, height, target weight), the calorie and macro targets computed from them, your exact age, your sex, your activity level and training frequency, answers that describe your health or wellbeing (such as sleep, stress, energy, cravings, caffeine or digestion; we send only that the question was answered), Apple Health data, meal photos and the text you type are never sent to analytics.
- No advertising identifier, no tracking. The app is built without Apple's advertising identifier (IDFA) and without the ad-support components, does not ask for App Tracking Transparency permission, does not link analytics to your account id and does not set a user id in analytics. Ad personalization and ad user data signals are switched off, and the data is not used for cross-app tracking or advertising.
- Retention: event-level data is kept for Google Analytics' default retention period of 2 months and then deleted; only aggregated reports remain after that.
- How to opt out: turn off Profile › Your data › Share anonymous usage analytics. The app stops sending analytics events immediately and the choice is remembered on your device, including after you delete your account. Deleting your account or the app also resets the app-instance id.
7. What we do not do
- We do not sell personal data and have not done so in the preceding 12 months.
- We do not "share" personal data for cross-context behavioural advertising as defined by the CCPA/CPRA.
- We do not track you across other companies' apps or websites, and the app does not request App Tracking Transparency permission because it has no reason to.
- We do not use Health data, body stats, photos or your diary for advertising, marketing, profiling for third parties, or model training.
- We do not collect your precise location, contacts, or anything from your photo library other than the single image you choose for an estimate.
8. Retention and deletion
- Your account and plan are kept on our servers while your account exists. Your diary stays on your device until you delete your account or the app.
- Delete your account in the app: Profile › Delete account. This removes your account, onboarding answers, plan and usage counters from our servers immediately, and wipes your diary, supplements, streaks and other local data from the device. Apple Health data you authorised us to write remains in Apple Health under your control; delete it from the Health app if you wish.
- Purchase records are retained by Apple and RevenueCat for as long as required for refunds, accounting and tax law. Subscription deletion is handled through Apple: cancelling a subscription does not require deleting your account, and deleting your account does not cancel an active subscription. See how to cancel.
- Photos and text submitted for estimates are not retained beyond processing the request; only the estimate for a typed description is cached, as described in section 4. Server logs for the estimate function record timing and errors, not the content, and are kept for at most 30 days.
- Usage analytics are not linked to your account, so deleting your account does not find or remove them; Google Analytics deletes event-level data after the 2-month retention period described in section 6. Turn off the analytics switch in Profile to stop new events.
- Support emails are kept for as long as needed to resolve your request and for up to 24 months afterwards.
- Backups of our database are rotated within 30 days, after which deleted data no longer exists in any copy.
9. Your rights
Depending on where you live, you have some or all of the following rights. You can exercise most of them yourself from inside the app; for anything else, email liwaa@99visibility.com. We answer within 30 days and never charge for a reasonable request.
European Economic Area, United Kingdom and Switzerland (GDPR / UK GDPR / FADP)
- Access a copy of the personal data we hold about you.
- Rectification: every diary entry is editable in the app, and your targets are rebuilt when you change your plan inputs in Profile.
- Erasure: Profile › Delete account, or email us.
- Portability: use Profile › Export my data for a machine-readable (JSON) copy of your profile, plan, diary and supplements.
- Restriction and objection to processing based on legitimate interests.
- Withdraw consent at any time for Health data (iOS Settings) and for AI processing (Profile › Your data › AI processing).
- Complain to your local supervisory authority. We would appreciate the chance to resolve the issue first.
California (CCPA / CPRA) and other US states
- Right to know the categories and specific pieces of personal information we collect, the sources, the purposes, and the categories of third parties we disclose it to. All of this is in sections 2 to 5.
- Right to delete and right to correct: in the app, or by email.
- Right to opt out of sale or sharing: we do not sell or share personal information, so there is nothing to opt out of. We also do not use or disclose sensitive personal information (health data) for any purpose other than providing the service you asked for.
- Right to non-discrimination for exercising any of these rights.
- You may use an authorised agent; we will ask the agent for proof of authorisation and may ask you to confirm the request.
Verification. Because accounts are anonymous, we verify requests by asking you to perform an action from the device where the app is installed, rather than by asking for identity documents.
10. Security
- All traffic between the app and our servers uses TLS. Data at rest in Cloud Firestore is encrypted by Google Cloud.
- Local data lives in the app's private storage on your device, protected by iOS Data Protection, which is tied to your device passcode.
- Database rules restrict every record to the account that created it. Paid AI functions check your account on the server before any request is processed.
- No method of transmission or storage is perfectly secure. If we learn of a breach affecting your data we will notify you and the relevant authorities as the law requires.
11. International transfers
Our servers run in Google Cloud's us-central1 region (United States). Where data of EEA, UK or Swiss users is transferred to the United States, the transfer relies on the EU-US Data Privacy Framework where the provider is certified, and otherwise on Standard Contractual Clauses included in our processors' data processing terms.
12. Children
Track Macro is not directed at children and may not be used by anyone under 13 (or under 16 where local law sets a higher age for consent to data processing). We do not knowingly collect personal data from children. If you believe a child has created an account, email us and we will delete it.
13. Changes to this policy
We will post any changes on this page and update the "Last updated" date at the top. For material changes, such as adding an analytics provider or a new category of data, we will also show a notice in the app before the change takes effect. Continued use after the effective date means you accept the updated policy.
14. Contact
Torch99, data controller for Track Macro.
Email: liwaa@99visibility.com