This policy describes how the Oops I'm Late! mobile application (the "App") collects, uses, and shares information.
The App is published by Alex Reich ("we", "us"). Contact: privacy@oopsimlate.com.
| Category | Source | Stored where | Sent off-device? |
|---|---|---|---|
| Calendar events (title, start, location text, attendee emails) | iOS calendar | Device only (RAM + local storage) | No |
| GPS coordinates (lat, lon, accuracy, heading, speed) | Device GPS | Device only — used for live ETA computation | Only with traffic-aware ETA enabled (Pro tier): coarse rounded coordinates + appointment endpoint, sent to our routing proxy |
| Contacts (name, phone, email) | Device contacts (you pick which to import) | Device only | No |
| Microphone (during hands-free confirmation) | Device microphone | Not retained — streamed to platform STT only while the confirmation prompt is active | Depends on platform speech recognition (Apple on iOS, Google on Android); see their policies |
| SMS / email message text | You compose / we template | Device only — handed to system SMS or email composer | No (we don't send messages directly) |
| Diagnostic telemetry (anonymized) | App generates | Device by default; included in crash report only if you enable Crash Reporting | Only if Crash Reporting toggle is ON |
| ML trip telemetry (predicted vs actual ETA pairs) | App generates during trips | Device only by default | Only if you opt in under Settings → ML Telemetry |
| Subscription / entitlement state | App Store / Google Play purchase receipts | Device + RevenueCat | Yes — to validate purchase status |
Android: revoke any permission in Settings → Apps → Oops I'm Late! → Permissions. Background location is requested separately and only to detect that you are running late while the App is closed; you can choose "Allow only while using the app" instead.
We do not request permissions speculatively. If a permission is denied the App degrades gracefully rather than re-prompting.
Traffic ETA proxy (api.oopsimlate.com): when you enable Traffic
Boost (Pro tier) the App sends each ETA refresh as: rounded current coordinate, destination
coordinate, travel mode. We do not transmit appointment titles, attendee identities, or
message content. Requests are authenticated with an anonymous installation identifier — no
account or email is required.
Crash reports (Sentry, optional): tagged with anonymized install ID, app version, OS version, and stack traces. Personally identifying fields are scrubbed before send. Disable any time in Settings → Privacy → Crash reporting.
ML trip telemetry (optional, Basic+): aggregated GPS-derived features (speed, accuracy, distance remaining, time-of-day) and predicted vs actual ETA. No raw trace, no destination, no contact. Disable any time.
App store receipts: relayed via RevenueCat purely to validate Basic / Pro subscription status. No usage data.
| Data | Retention |
|---|---|
| Calendar events | Held in RAM only; never persisted |
| GPS history (Free) | Up to 5-minute rolling buffer in RAM; never persisted |
| GPS history (Basic / Pro, on-device) | Encrypted at-rest on device; cleared after appointment ends or on user delete |
| Contacts you've imported | Until you remove them in Settings |
| Crash reports | 90 days at Sentry, then deleted |
| ML trip telemetry | 365 days at our backend, then aggregated and the raw rows deleted |
| Subscription receipts | For the life of the subscription per RevenueCat policy |
The App is not directed at children under 13 (or under 16 in the EEA). We do not knowingly collect data from children. If you believe a child has provided data, email privacy@oopsimlate.com and we will delete it.
We will update the "Effective date" at the top when this policy changes in any material way. We will surface material changes in-app on next launch.
| Apple category | Linked to user? | Used for tracking? |
|---|---|---|
| Contact Info — Email Address (attendees only, on-device) | No | No |
| User Content — Other (calendar / contacts / messages, on-device) | No | No |
| Identifiers — Device ID (anonymous install ID for proxy) | No | No |
| Diagnostics — Crash Data (optional) | No | No |
| Diagnostics — Performance Data (ML telemetry, optional) | No | No |
| Location — Coarse Location (proxy ETA, optional) | No | No |