SpinTracker Privacy Policy
Effective date: 12 October 2026
The short version
SpinTracker records your ride on your device and keeps it there. Your workouts, music history, and profile are not uploaded to any server we operate. The one exception is a ride's setlist when you share it: our server keeps it so the link can be short, and deletes it when the link expires after 30 days. Your heart rate and other ride stats never go with it.
Four things do leave your device, and you should know about each:
- While a ride is recording, the app listens for music. It turns what it hears into an acoustic fingerprint and sends that to Apple's music recognition service to identify the song. No audio recording is ever saved or transmitted.
- When the app shows a song, it loads the cover art from Apple. Like any image loaded from the internet, the request reveals to Apple which cover is being shown, and your device's IP address; it carries nothing else about your ride.
- If you start a class or join one, your phone talks directly to other phones in the room over Bluetooth, never through us. "Class link" below says exactly what goes.
- Anything you explicitly ask for — a playlist you create or check a class against, a card you post, a setlist you share, a file you export, a feedback email you send us — leaves only to do what you asked, and only when you ask it to.
We do not track you, we do not use analytics or advertising SDKs, and we do not sell or rent your data to anyone.
What stays on your device
All of this is stored locally and never leaves unless you export or share it, or start or join a class (see Class link):
- Workout records — duration, heart rate, cadence, power, and the second-by-second data points behind them
- Your profile — name, weight, height, and optionally your Instagram handle, date of birth, resting heart rate, maximum heart rate, and FTP, except what you send when you join a class (your first name and handle). The physiology fields are optional and used only to calculate effort zones that are accurate for you rather than relative to your hardest recent ride
- Music history — the songs identified during your rides and the effort metrics associated with them
- Studio and instructor tags you add to a ride, and the details of a class you joined (its name, studio and instructor)
- The location where a ride started, if you granted location access — stored as coordinates on that session so your share cards can be tagged with the right studio
- Selfies you attach to a ride, stored in the app's private storage
- Paired Bluetooth sensors and your app preferences
- Share counts — how many times you've shared a ride or a recap, from where in the app and roughly where to, used only to fill in the usage summary of a feedback email you choose to send
Deleting the app removes all of it.
What leaves your device, and when
Song identification — during every ride
This is the one transmission that is not per-event opt-in, so it deserves to be stated plainly. While a session is recording, SpinTracker uses the microphone to listen for music. Audio is converted on device into an acoustic signature — a mathematical fingerprint — which is sent to Apple's ShazamKit service to identify the track.
- The raw audio is never written to disk and never transmitted
- For identification, only the fingerprint is sent, and only while a ride is actively recording
- Apple's handling of that request is governed by Apple's privacy policy
- You can prevent it entirely by denying microphone access; the rest of the app continues to work, and your ride still records heart rate and cadence
Apple Health — only with your permission
If you grant access, SpinTracker reads your date of birth, resting heart rate, weight, and height to personalise effort zones; the heart rate another device, such as an Apple Watch, saved to Health during a ride, to fill in heart rate your ride is missing; and your workouts, to see whether another app has already recorded a class. It writes completed workouts back to Health. When another app has already recorded a class — your Apple Watch, say — SpinTracker adds your cadence and power to Health, where your bike provided them, and your heart rate for any part of the class that app did not record, without a second workout. It then clears up after itself: a workout of its own that would have duplicated the class, and its own readings for any part the other app turns out to have recorded after all. SpinTracker only ever removes data it wrote itself, and it never deletes anything another app wrote. Health data is governed by Apple's protections and never leaves your device through us, with one exception you control: the usage summary in a feedback email you choose to send us includes counts drawn from it (how many rides had heart rate, how many of those came from Apple Health, and whether Apple Health workout sync is on), never the readings themselves. You can revoke access at any time in the Health app, and you can turn off automatic workout syncing in Session Settings.
Album art — whenever the app shows a song
Wherever SpinTracker shows a song — the ride screen while a song plays, your tracklists and song library, and the share cards — it loads that song's cover art from Apple's servers when it appears. As with any image loaded from the internet, the request reveals which cover is being shown and your device's IP address. It carries nothing else about your ride, and Apple's privacy policy governs it.
Apple Music — only when you create a playlist or check a class against one
Creating a playlist sends your ride's track list to your own Apple Music library.
Checking a class you taught against the Apple Music playlist you pasted on it reads that playlist's tracks from Apple Music, and asks Apple's ShazamKit service which catalogue entry each song on that ride was identified as, sending the song identifiers already stored on the ride and no audio. Nothing is written to your tracklist unless you confirm it.
Apple's privacy policy governs both requests.
Exported files — only when you export one
A CSV or TCX export writes a file of your ride's readings, and a TCX also carries its music track list. SpinTracker hands that file to the iOS share sheet and sends it nowhere itself; where it goes next is entirely your choice, and whatever you send it to is governed by that service's own policy.
Shared setlist links
When you share a ride, SpinTracker sends that ride's setlist to our server, which gives back a short link. The setlist is the song titles and artists (with each song's Apple Music id, where known), the ride's date, and the studio, instructor and class name if you left them on — the studio and instructor with their Instagram handles. If the instructor or the studio has a booking link, or you saved a playlist link for the class, those go too. Your heart rate, power and other ride metrics are never sent. The upload happens when you tap to share or post (or save a Replay, whose copied caption carries the link), even if you then cancel — unless the same setlist from that ride was uploaded before and its link still has at least a week to run, in which case that link is reused.
The setlist expires 30 days after it is sent and is then deleted. Deleting the ride asks our server to delete it sooner; if that request fails, for example because you are offline, it stays until it expires. Our server writes no log of who shared or opened a setlist, and stores no IP address with any setlist. To limit abuse it keeps each uploading IP address in memory, never on disk and never with a setlist, and forgets it about an hour after that address's last upload. It is reached through Cloudflare, which carries the connection and so handles your IP address and the setlist in transit; Cloudflare's own privacy policy governs that.
Anyone who has the link can open the setlist and read what it contains, in a browser or in the app, so share it only with people you intend to see it.
If our server does not answer within a few seconds, the link carries the setlist itself, as before. The part of such a link carrying the setlist is never transmitted to the site that displays it, and the link cannot be recalled once shared. If the server stored a copy after SpinTracker stopped waiting, no link points to it and it is deleted when it expires. An exported TCX file always carries its link this way.
Class link — only when a class is started or joined
An instructor who taps Start Class makes their phone announce the class over Bluetooth, so riders' phones in the room can find it. Anyone nearby with a Bluetooth scanner can read what it announces: the class name, the studio and its Instagram handle, the instructor's name and Instagram handle, and when the class started. It stops when the instructor posts the class to Instagram Stories or closes it without riding, about half an hour after their ride ends, and in any case within two and a half hours.
If you tap Join, your phone sends the instructor's phone your first name and, if you saved or typed one, your Instagram handle, so the instructor can count you and tag you in their Story. After your ride ends, it also sends how long you rode and when your songs changed, so the instructor's phone can tell you were in the same class. Nothing is sent unless you tap Join, and none of it reaches SpinTracker or our server: the phones talk to each other directly. Your handle reaches Instagram only if the instructor tags you in a Story they post. Your ride keeps what the class announced, and when you confirm its tags it may add the instructor and studio to your saved ones.
On the instructor's phone, riders' names, handles and ride reports (how long they rode, when their songs changed), with when each rider joined and an identifier for their phone's Bluetooth connection, are kept only with that class, are excluded from backups, and are deleted when the instructor posts the class's Story; opening Instagram Stories copies the handles of the included riders who sent one. If they never post, it all stops being shown 24 hours after the class started, and is removed from the phone the next time SpinTracker opens. Deleting your ride or the app does not reach what you already sent; it stays on the instructor's phone until then. The instructor's ride keeps only how many riders were included.
These exchanges travel between the phones unencrypted, so someone nearby with the right equipment could read them as they pass.
Social platforms — only when you post
Posting a workout card sends that image and caption to the platform you selected. Nothing is posted without you initiating it.
Photos — only when you save
Saving a share card writes that image to your photo library. SpinTracker requests add-only access, which means it can add images but cannot read your existing photos.
Feedback you send us — only when you send it
Send Feedback, in Settings (and asked once on the Home screen, until you open or dismiss it), opens an email to us that you write and send from your own mail account. Below your message it adds a short usage summary, in plain view, which you can edit or delete before sending.
The summary is counts, not content: your app version, iOS version and iPhone model; whether you subscribe, or how many of your free rides you have used; how many rides you have recorded and how long ago your first one was, in days; how many had heart rate (and how many of those came from Apple Health), power, identified songs, or an instructor or studio tag, and how many songs a ride usually has; how many playlists you made; whether Apple Health workout sync is on; how many of SpinTracker's crash and hang reports are stored on your phone; and how many times you shared a ride or a recap, from where in the app and roughly where to (such as Instagram or Messages).
It never includes song titles, artists, names, dates, locations, heart rate or power figures, or any identifier. Nothing is sent unless you send the email yourself. We receive it like any other email, including your email address, and only what you choose to send.
Permissions, and what each is for
| Permission | Why | If you decline |
|---|---|---|
| Microphone | Identify songs during a ride | Rides still record; songs are not identified |
| Bluetooth | Connect heart rate, cadence, and power sensors; find a class nearby to join, or announce a class you teach | No sensor data; no class link |
| Apple Health | Read physiology for zones, heart rate a ride is missing, and your workouts; save workouts | Enter physiology manually; no Health sync |
| Location (when in use) | Suggest nearby studios; tag where you rode | Tag studios manually |
| Photos (add only) | Save a share card to your library | Use the share sheet instead |
Every one is optional. The app is designed to degrade gracefully rather than block you.
A selfie for a share card is chosen with the system photo picker, which needs no permission: SpinTracker receives only the photo you pick, and never opens the camera.
What we do not do
- No third-party analytics, advertising, or attribution SDKs. There are none in the app
- No cross-app or cross-site tracking. The app's privacy manifest declares no tracking and no tracking domains
- No selling, renting, or sharing your personal information. When you join a class, you send your first name and handle to the instructor yourself; none of it comes to us
- No account required. There is no SpinTracker login. Our server stores setlists you share, not people: it has no user accounts
Storage and security
Workout data is stored using Apple's SwiftData, preferences in UserDefaults, and access tokens for connected services in the iOS Keychain. iOS encrypts all of it and keeps it locked away until you first unlock your device after it restarts. From then on it stays readable while the device is locked, so a ride keeps recording in your pocket, and an instructor's phone can answer riders' phones while it sits locked on the podium. A setlist you share is stored on our server until it expires, within 30 days; the key that lets SpinTracker delete it early stays on your iPhone.
Subscriptions
SpinTracker offers an optional auto-renewing subscription, handled entirely by Apple through StoreKit. We never see or store your payment details. Purchases and renewals are managed in your Apple account settings.
Your choices
- See your data — it is all visible in the app
- Delete a ride — delete it from History, which also asks our server to delete that ride's shared setlists
- Joined a class? What you sent the instructor's phone stays there until they post the class or, at most, until their app next opens 24 hours after it started
- Delete everything — delete the app. A setlist you shared stays on our server until it expires, within 30 days of when it was uploaded
- Remove a shared setlist sooner — including one that names you — use Report this setlist on its page, or email us its link
- Disconnect a service — revoke it in Settings, which removes the stored token
- Revoke a permission — iOS Settings, at any time
Because your data lives on your device rather than on our servers, you do not need to ask us to retrieve or delete it, with two exceptions. A shared setlist deletes itself within 30 days, and to have one removed sooner you report it as above. A feedback email you send us reaches our inbox like any other email, and if you want it deleted, contact us at the address below.
Children
SpinTracker is not directed at children under 13, and we do not knowingly collect information from them.
Changes to this policy
If this policy changes materially, the effective date above changes and the updated policy appears in the app. Continuing to use SpinTracker after an update means you accept the revised policy.
Contact
Questions about this policy: zbproductions22@gmail.com