Your data, clearly explained
Privacy Policy
CourtFit is local-first. Your tennis profile, plans, workout logs, pain and readiness entries, favorites, and settings are stored on your iPhone. Optional Coach requests send the disclosed training context and your questions to Google Gemini as described below.
Effective September 6, 2026
Optional competition calendar
If you save a competition date, CourtFit keeps the event time in your local profile to apply its match-day adjustment before the event. You can remove it, and it is included in your own data export and erased with all app data. The event time is not added to Coach requests, analytics, Apple Health or advertising data.
Optional Apple Watch companion
When you enable the companion, CourtFit shares the active exercise, entered sets and rest or pause state with your paired Apple Watch. Session and command identifiers help keep the two devices consistent. Your profile, pain answers, notes and Coach conversations are not part of this exchange. The iPhone keeps a limited local command history to handle retries. You can turn sharing off at any time; the paired Watch receives the cleared state when it reconnects. Erasing app data also removes the local command history and turns sharing off. This feature does not back up your history to an account or synchronize it with another iPhone.
Optional spoken workout cues
Workout cues are off by default. If enabled, CourtFit uses iOS system voices to speak exercise transitions and rest cues. CourtFit does not record microphone audio or send a new network request for these cues. The preference stays on your device and is reset when you erase app data.
Information stored on device
CourtFit stores your training goals, tennis level, gym days, equipment, court workload, plan, workout progress, and safety-screen answers locally on your device.
CourtFit does not require an account and does not operate a cloud database containing your training profile or workout history.
Purchases
Purchases are processed by Apple. CourtFit may use RevenueCat to validate subscription status and unlock Pro features. When App Tracking Transparency is authorized, RevenueCat may also forward limited subscription lifecycle and revenue events to Meta for advertising measurement.
Product analytics
CourtFit may use PostHog for privacy-filtered Product Interaction analytics, such as onboarding completion, paywall views, trial starts, purchase events, workout attempts, and workout completion.
These events may carry the Apple Search Ads campaign an install came from — media source, campaign, ad group and keyword identifiers, and the country Apple reports — provided by Apple's AdServices attribution API. Installs Apple reports as organic are labelled organic. This describes the ad campaign, not you: no advertising identifier is read or sent, and it does not depend on App Tracking Transparency.
CourtFit does not send free text, pain descriptions, exercise notes, HealthKit data, names, email addresses, or contact identifiers to analytics.
Website analytics
This website uses Google Analytics 4 only after you choose “Allow analytics” in the consent notice. Before that choice, the Google tag is not loaded and no analytics request is sent to Google. If you allow it, CourtFit measures the page path and title, coarse browser and device information, approximate location derived by Google from the network request, and a privacy-safe event when an App Store link is selected. URL query strings and full cross-site referrers are stripped before measurement. No training data, health data, free text, name, or email address is collected by the website.
Google Analytics may set first-party _ga cookies for up to 90 days. CourtFit keeps event-level and user-level data for two months, has Google Signals and enhanced measurement disabled, and has no Google Ads link. Your choice is stored locally in your browser. Use “Analytics preferences” in the footer at any time to allow or decline analytics; declining stops future collection on this browser and removes accessible Google Analytics cookies.
The website also uses Vercel Web Analytics to count page views. It sets no cookies, needs no consent prompt, and identifies a visit only by a temporary hash of the request that Vercel discards after 24 hours; what remains is aggregate: page path, referrer, country, device type and browser. It never receives training data, health data, free text, a name or an email address.
Meta and TikTok Advertising Measurement
CourtFit uses Meta Core and TikTok App Events for a limited allow-listed funnel: app activation, onboarding completion, first value, paywall view, checkout, trial or subscription start, workout completion, and an initial paid purchase. A paid TikTok purchase may include product ID, verified transaction ID, actual value, and ISO currency for deduplication; a free trial is never reported as paid revenue.
After onboarding, CourtFit may request App Tracking Transparency permission. Meta and TikTok initialize only when you authorize tracking. Denial leaves both advertising SDKs and RevenueCat advertising-identifier forwarding inactive. CourtFit never sends fitness goals, pain or readiness answers, exercise names, workout details, health notes, names, email, phone, contacts, or free text to either advertising SDK.
Exercise Demonstration Media
Selected exercise thumbnails and demonstration videos are bundled in the app for offline playback. CourtFit keeps source and license metadata for audit, but the submitted app does not send your profile, pain entries, workout notes, HealthKit data, account identifiers, or contact information to media providers.
Apple Health
Apple Health workout export is optional and disabled by default. If you enable it in Privacy & Data and grant permission, CourtFit writes completed strength workouts with their date and duration to your Apple Health store.
CourtFit requests write access only. It does not read Health data, send HealthKit data to analytics or advertising services, or upload it to a backend. Turning the option off stops queued and future exports. A workout already submitted to Apple Health may finish saving; workouts already saved remain under your control in Apple Health. CourtFit does not collect location.
CourtFit Coach (AI chat)
From version 1.2.0, the CourtFit Coach chat answers your training questions with AI. When you send a question, the question, up to eight recent turns of that chat, and a bounded summary of the current training context are sent to our server, which uses Google Gemini to generate the answer. The summary can include your selected goals, level, strength background, play style, dominant hand and backhand type; weekly tennis/gym/session-duration counts; the current day and exercise; prescribed volume, rationale, target RPE and primer role; equipment; app-authored tennis qualities, transfer notes and coaching cues; and current exercise/set position. Those values are app-owned choices, numbers or catalog text — never your private notes. Before your first message, the app shows this disclosure and asks you to accept it.
Our Supabase function does not persist chat transcripts. The app saves your conversation history on your device, and our database keeps only salted, non-reversible counters for daily rate limits, which are deleted on a schedule. Google Gemini separately processes and may retain the request content as described below. A random per-install identifier supports the free daily allowance, and Pro status is re-verified through RevenueCat's anonymous identifier. Anything you choose to type is part of the question being sent. Your separately stored profile pain/safety answers, session pain/readiness scores, red flags, private workout notes, age, Apple Health data, and contact details are never added to the training snapshot, and CourtFit does not use chat content for analytics or advertising.
You can separately opt in to include a rolling 28-day training summary with your questions. The app previews logged workout counts, the current training recommendation and the latest recorded sets for the exercise in focus. The summary also contains active-day counts, days since the latest workout and a coarse plan-adjustment reason. It contains no workout dates, private notes, pain scores, readiness scores or court-performance impressions. It is recomputed on device and included with your question in the Gemini request, subject to the provider retention described below. Sharing is off by default. Turning it off removes this summary and excludes earlier conversation turns from future requests; those messages remain visible locally until you clear the conversation. Clearing the conversation preserves your subscription and daily allowance. Erasing all app data also resets this sharing preference.
Google's documented abuse-monitoring policy retains prompts, additional context and generated responses for 55 days to detect and prevent misuse and meet required legal disclosures. Flagged content may be reviewed by authorized Google personnel. This includes the training summary when you choose to share it. CourtFit does not send this content to advertising SDKs.
Google's Gemini API terms distinguish Paid and Unpaid Services. Paid Services do not use prompts or responses to improve Google's products, but may retain abuse-monitoring logs. Unpaid Services have different data-use terms. Zero data retention requires approval for the specific project; billing alone does not establish it. CourtFit does not claim a verified zero-retention exception. Clearing your local chat or turning sharing off does not immediately delete provider logs already retained under Google's policy.
The coach provides general training education only — never medical advice. Questions that suggest injury or medical risk are answered before quota or model work with a referral to qualified professionals, and messages that suggest danger to life receive crisis-support information instead of coaching.
Erasing the app's data from Settings deletes the conversation, the rate-limit identifier, and the disclosure acceptance from your device.
Manual training backup
Training backup lets you save and restore a file containing your profile, schedule, plan, training and court history, Arm Checks, private notes, favorites, dated check-ins and unfinished setup. CourtFit does not encrypt this file. You choose where to save it with iOS and who can access it. The file excludes Coach conversations, preferences and permissions, purchases and service delivery records.
Restoration shows a comparison and asks before replacing local training data. It turns Apple Health and Apple Watch sharing off. Imported workouts are excluded from automatic Health export, including after you enable Health sharing again. CourtFit keeps a local recovery copy for interrupted restoration and includes that copy in erase-all. Copies exported elsewhere remain under your control. This is manual file transfer, not automatic cloud sync.
Exporting and erasing local data
Download my data includes your profile, workout and court-session records, and Arm Check measurements. You choose whether and where to share this export.
Erasing app data removes local training history, including Arm Checks, and the Coach conversation. The app waits for previously submitted Health exports and reminder scheduling to finish before confirming cleanup. If a local file cannot be erased, CourtFit explains what was removed and lets you retry. Workouts already saved in Apple Health and copies you exported yourself are not deleted by CourtFit.
Your choices
- You can deny or later change tracking permission in iOS Settings.
- You can leave Apple Health export disabled or turn it off at any time.
- Because training data is stored locally, deleting the app removes CourtFit's local data from that device.
Contact
For privacy questions, email support@courtfit.app.