Cadence Privacy Policy & Data Usage
What is Cadence?
Cadence is a privacy-first personal health logging application designed to help individuals better understand patterns in their body over time. Cadence does not maintain its own database or long-term server-side storage of user health data. Cadence is available in a free limited tier (Anonymous Mode) and a full-access tier (Signed In & Synced Mode) that requires a one-time license, obtained via Stripe purchase or promo code.
Google OAuth & API Usage
Cadence uses Google OAuth only when you explicitly choose to sync your data with Google Sheets.
OAuth is required to:
- Write your entries and settings to your Google Sheet
- Read your Google Sheet to display dashboards and insights
- Select your existing Cadence sheet from Google Drive using the file picker (restore flow)
OAuth is not triggered:
- Automatically
- On every entry
- Without user action
You may disconnect your Google Sheet at any time through Settings.
Google OAuth Scopes Used
Cadence requests the following Google API scope:
https://www.googleapis.com/auth/drive.file
Why this scope is required
The drive.file scope grants Cadence access only to files that Cadence itself creates, or that you explicitly select through the Google Picker. It does not grant access to any other file in your Google Drive. This scope is necessary to:
- Create a new Google Sheet for you during New User setup
- Read and write your selected Cadence sheet during sync and restore
- Ensure the Google Picker surfaces only files accessible to Cadence — it cannot display files from your Drive that you haven't explicitly authorized
Cadence does not:
- Access spreadsheets or Drive files you have not explicitly created via Cadence or selected through the Picker
- Read unrelated files or contents in your Google Drive
- Share spreadsheet data with third parties
How Cadence Uses Google User Data
What Google data Cadence receives
When you authenticate via Google OAuth, Google returns a short-lived access token to your browser. Cadence does not receive or store your Google account profile, name, email address, or any other Google account information. The only data Cadence receives from Google is:
- An OAuth access token — used solely to authorize read and write requests to the specific Google Sheet you select
- The contents of your selected Google Sheet — read back into the app only to display your own health data in dashboards and insights
What Cadence writes to your Google Sheet
When you sync, Cadence writes only the health data you have entered into the app. This includes:
- Date, start time, and end time of each entry
- Pain scale rating
- Bowel/stool data (type and feeling), if enabled in your settings
- Menstrual cycle phase and period flow data, if enabled
- Menstrual product usage, if enabled
- One-off symptoms logged during the entry
- General and period-specific symptom scores for symptoms you have configured
- Medication entries for medicines you have configured
- Free-text notes
- App settings and configuration (e.g., which symptoms and medicines you track) — stored in a separate hidden metadata tab in your sheet
- License/entitlement record — stored in a separate
_cadence_licensetab in your sheet when you purchase a license or redeem a promo code
No data beyond what you explicitly enter and choose to sync is written to your sheet.
How Cadence processes Google user data
Google user data is processed as follows:
- OAuth access token: Used only to authenticate API calls to your sheet. During a sync, the token is held in memory and discarded when the operation completes. After a restore, the token may be stored in
localStoragefor up to 1 hour so the app remains authenticated after restore completes; it is immediately cleared on logout. Never sent to any Cadence-controlled server. See Session & Token Handling for full details. - Spreadsheet data (read): Fetched from your sheet and loaded into your browser's memory to render dashboards and insights. Not stored on any server. Not retained after the browser session ends beyond what is saved to
localStorageon your device. - Spreadsheet data (write): Formatted and sent directly from your browser to the Google Sheets API. Cadence does not proxy, intercept, log, or retain copies of this data.
Purpose limitation
Google user data accessed by Cadence is used exclusively to provide the Google Sheets sync feature that you explicitly initiate. It is not used for:
- Advertising or marketing
- User profiling or behavioral analytics
- Training AI or machine learning models
- Any purpose beyond directly serving your sync request
Compliance With Google API Services User Data Policy
Cadence's use and transfer of information received from Google APIs adheres to the Google API Services User Data Policy, including the Limited Use requirements.
Limited Use commitment
In accordance with the Limited Use requirements, Cadence commits to the following:
- Google user data is used only to provide or improve the specific features the user requests (Google Sheets sync)
- Google user data is not used for serving advertisements
- Google user data is not used for any purpose unrelated to providing the sync feature
- Google user data is not transferred to third parties except as necessary to complete the user's requested sync
- Humans do not read Google user data unless you have given explicit permission, it is necessary for security purposes, or it is required by law
OAuth Scope Justification
Cadence uses the drive.file scope because it is the most restrictive scope that supports Cadence's requirements. The drive.file scope cannot be used to access any file in a user's Drive that Cadence did not create or that the user did not explicitly select through the Picker. This provides a meaningful privacy guarantee: Cadence is structurally incapable of reading or modifying any Google Sheet it wasn't given explicit access to.
Cadence uses this scope to:
- Create your Google Sheet during New User setup
- Read and write that sheet during sync (entries, settings, filters, license record)
- Access your selected sheet during the restore flow, after you explicitly choose it through the Google Picker
This access is limited to:
- The specific file created by Cadence or explicitly chosen by you through the Picker
- The duration of the user's authenticated session (see Session Duration & Token Handling)
Session Duration & Token Handling
When a user authenticates via Google OAuth, Cadence receives a short-lived access token. This token is used exclusively to authorize read and write requests to your Google Sheet and is never sent to any Cadence-controlled server.
How the token is stored
- During a sync: The token is held in memory for the duration of the sync operation, then discarded when the operation completes.
- After a restore: The token is stored in the browser's
localStoragefor up to 1 hour, so the app remains authenticated after the restore completes. This allows Cadence to perform an initial sync without requiring you to sign in again immediately. - On logout: The token is immediately cleared from storage when you disconnect your sheet (via Delete Metadata or Switch Sheet). It is never stored on any server.
A session ends when any of the following occurs:
- The OAuth token expires (up to 1 hour after authentication, as defined by Google)
- The user's stored token expires after a restore (up to 1 hour)
- The user disconnects their Google Sheet in Settings
- The user clears their browser's localStorage
Cadence does not store OAuth tokens on any server and does not maintain server-side sessions.
How Cadence Protects Your Data
Encryption in Transit
All communication between your browser and Google's APIs occurs over HTTPS (TLS encryption). Cadence is hosted on Cloudflare Pages, which enforces HTTPS for all connections. No data is transmitted in plaintext.
Browser Storage
Cadence stores user data (entries, settings, saved filters) in the browser's localStorage. This data:
- Remains on your device only
- Is not transmitted to any external server
- Can be cleared at any time through the app's Settings page or by clearing your browser data
OAuth tokens may also be stored in localStorage for up to 1 hour after a restore, so the app remains authenticated without requiring an immediate re-sign-in. See Session & Token Handling for full details.
Token Handling
- OAuth tokens are never stored on a server
- During a sync, tokens are held in memory only and discarded on completion
- After a restore, tokens may be stored in
localStoragefor up to 1 hour - Tokens are used solely to authorize read/write requests to the user's specific Google Sheet
- Tokens are valid for up to 1 hour as defined by Google, and are not refreshed or renewed by Cadence
- Tokens are immediately cleared on logout (disconnect, Delete Metadata, or Switch Sheet)
Input Security
- All user text inputs are sanitized to prevent formula injection and cross-site scripting (XSS)
- Character limits are enforced on all free-text fields
- Rate limiting is applied to sync actions and form submissions
No Background Data Collection
- Cadence does not sync data in the background
- Cadence does not collect behavioral or health analytics
- OAuth is only triggered by explicit user action (clicking "Sync with Google Sheets")
Data Sharing & Third Parties
Cadence does not share user health data with any third party. The following services are used in the operation of Cadence:
Cloudflare Pages (Hosting Provider)
- Purpose: Hosts the Cadence web application and serves static assets
- Data processed: Standard web request data (IP address, browser type) for site delivery and security, as handled by Cloudflare's infrastructure
- No analytics are collected by Cadence
- Cloudflare's privacy policy applies to data processed by their infrastructure
Cloudflare Workers (Payment & Promo Verification)
- Purpose: Verifies promo code redemptions and Stripe payment sessions. Receives the promo code or Stripe session ID from your browser, validates them, and returns a signed confirmation used to write your license record to your Google Sheet.
- Data processed: Promo codes and Stripe session IDs only. No health data is transmitted to this service.
- Health data is never sent to Cloudflare Workers. The Worker processes only the minimal data needed for license verification.
- Cloudflare's privacy policy applies to data processed by their infrastructure
Stripe (Payment Processing)
- Purpose: Processes one-time license purchases. Users are redirected to a Stripe-hosted payment page; Cadence never handles raw payment card details.
- Data processed: Standard payment data (card number, billing information) handled entirely by Stripe's secure hosted pages. No health data is shared with Stripe.
- After a successful payment, Stripe issues a session ID that Cadence's Cloudflare Worker verifies. This is the only data Cadence receives from the payment flow.
- Stripe's privacy policy applies to data processed during the payment flow
Google APIs (OAuth & Google Sheets API v4)
- Purpose: Authenticates the user and reads/writes data to the user's own Google Sheet
- Data processed: Only the health entries, settings, and filters that the user explicitly syncs
- All API calls are made directly from the user's browser to Google's servers. Cadence does not proxy or intercept this data
Google Apps Script (Contact Form)
- Purpose: The in-app contact form sends messages to a Google Apps Script, which delivers the submission as an email to the developer and logs it in a private Google Sheet for record-keeping
- Data collected: Name, email address, and message content which are submitted voluntarily through the contact form only
- Data storage: Submissions are recorded in a Google Sheet accessible only to the developers. This is used solely to track and respond to support inquiries. No health data is collected through this form
- This is the only data that leaves the user's browser. Submissions are sent directly from the browser to a Google Apps Script endpoint, which delivers them to the developer by email. No Cadence server is involved
Services Cadence Does NOT Use
- No advertising networks
- No data monetization services
- No social media tracking or pixels
- No customer data platforms
- No AI or machine learning services applied to user data
No Sale of Data
No user data - including health entries, settings, Google account information, or contact form submissions - is sold to or shared with third parties for commercial purposes. Cadence has no advertising relationships, data broker partnerships, or revenue derived from user data.
Data Retention & Deletion
Local Browser Data
Local data (entries, settings, saved filters) is stored in your browser's localStorage and can be deleted at any time by:
- Using the "Advanced Options" section in Cadence Settings to reset or delete app data
- Clearing your browser's storage/cache directly
Google Sheets Data
Google Sheets data can be deleted by:
- Disconnecting from within Cadence Settings (removes Cadence metadata from the sheet)
- Permanently deleting the spreadsheet from your Google Drive
Your _cadence_license tab (license record) is part of your sheet. You may delete it by removing that tab from your Google Sheet. Note: doing so will prevent the app from verifying your license on future restores.
Cadence does not retain copies of your Google Sheets data.
Contact Form Submissions
Messages submitted through the contact form are sent directly from the user's browser to a Google Apps Script endpoint, which delivers them to the developer by email and logs them in a private Google Sheet accessible only to the developer. This log is maintained solely for the purpose of tracking and responding to support inquiries. There is no Cadence server involved in this process. Users may request deletion of their contact form submissions at any time by emailing the developer.
Server-Side Logs
- Cloudflare Pages logs: Cloudflare may retain standard web server logs (such as IP addresses and timestamps) as part of its infrastructure. Cadence does not intentionally log or store health data in server logs. See Cloudflare's privacy policy for details
- Cadence does not collect any analytics and does not implement custom server-side logging of user activity, health data, or API errors
What Cadence Does Not Retain
- No health data on any server
- No OAuth tokens beyond the browser session
- No user account records (Cadence does not have user accounts)
- No copies of synced Google Sheets data
Your Rights as a User
Revoke Google Access
You may revoke Cadence's access to your Google Sheet at any time by visiting Google Account Permissions and removing Cadence.
Delete Your Data
- Browser data: Use "Advanced Options" in Cadence Settings or clear your browser storage
- Google Sheets data: Delete the spreadsheet from Google Drive or remove Cadence's data from within the sheet
- Contact form submissions: You may request deletion of any contact form messages by emailing theselfstudy8@gmail.com
Export Your Data
- You can export your data directly from Cadence as a CSV or PDF at any time
- You can access your data directly in your Google Sheet, which you own and control
Request Information
You may contact us at any time to ask what data, if any, Cadence holds related to you. Given Cadence's architecture, the answer in most cases is: none. Your data lives in your browser and your Google Sheet.
HIPAA Notice
Cadence is not a HIPAA-covered entity and does not claim HIPAA compliance. Cadence is a personal health tracking tool and does not aim to replace or provide medical advice, diagnosis, or treatment.
Children's Privacy
Cadence is not intended for use by individuals under the age of 18.
Changes to This Policy
This policy may be updated as Cadence evolves. Significant changes will be reflected by an updated "Last updated" date.
Contact & Support
You can also reach out through the app here.