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:

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):

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.

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

PermissionWhyIf you decline
MicrophoneIdentify songs during a rideRides still record; songs are not identified
BluetoothConnect heart rate, cadence, and power sensors; find a class nearby to join, or announce a class you teachNo sensor data; no class link
Apple HealthRead physiology for zones, heart rate a ride is missing, and your workouts; save workoutsEnter physiology manually; no Health sync
Location (when in use)Suggest nearby studios; tag where you rodeTag studios manually
Photos (add only)Save a share card to your libraryUse 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

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

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