Privacy policy
Where you ran is nobody's business.
For the Brad Hates Running Android app and this website. Last updated 10 October 2026.
The short version
- Your GPS tracks stay on your phone. The app doesn't upload them anywhere.
- Friends get run summaries, never locations. And only once you switch "Online friends" on: until then the friends feature sends nothing at all.
- Google's cloud backup leaves your GPS tracks out.
- Exports are your own files. Routes go in only if you ask, with a passphrase if you want one.
- Health Connect is used only when you switch it on.
- No ads, no analytics, no automatic crash reporting, no account.
- The app fetches map tiles from the internet to draw the map behind a finished run. More on that below.
- It talks to our friends server only if you switch "Online friends" on. What that server keeps.
What the app keeps, and where
Everything below is stored in the app's private storage on your phone. Uninstalling the app deletes it (apart from any backups or exports you made, which are covered further down).
| What | Why |
|---|---|
| Your runs: start and end times, distance, times, paces, target, run/walk plan, step count, and whether it was on a treadmill | History, summaries and the "Last time" line |
| The GPS track of each run (every location fix, with the step count at that moment), in its own database | Distance, the route map, the pace colours, the thumbnails, and learning your stride |
| Your walking and running stride, learned from your runs or typed in by you | Measuring a treadmill run from your steps |
| Settings, and your cue list | So the app works the way you left it |
| Your weight, only if you enter it (or read it from Health Connect) | Calorie estimates and snack targets. No weight, no calories. |
| Your profile (a display name and an "about" line you choose), an install id and a friend code made from it, your friends list, nicknames, and your sharing choices | The friends feature |
| A cache of map tiles you have looked at | So the map loads faster the second time |
Location
The app asks for precise location so it can measure a run. It uses it only while a run is being recorded, through a foreground service with a notification on screen the whole time. It doesn't ask for "all the time" background location permission and doesn't collect location when you aren't running. A treadmill run collects no location at all.
Location comes from your phone's location service (Google Play services' fused location provider, falling back to Android's own). Your phone's location settings, and Google's, apply to that service as they would for any app.
Steps
With your permission ("Physical activity"), the app reads the phone's step counter while a run is being recorded, and only then. On an outdoor run the steps are stored with the GPS track, so the app can work out how long your stride is. On a treadmill run, steps times stride is the distance. Steps are kept on the phone like the rest of the run and aren't uploaded. Say no and runs are recorded without steps, and a treadmill run counts time only.
Map tiles
A finished run's summary shows the route over a map. The route itself is drawn on your phone, but the map underneath is downloaded as tiles from OpenFreeMap, built from OpenStreetMap data. As with any website you visit, their servers see your IP address and which tiles were requested, which is roughly the area of the map you're looking at. The app sends no account, no identifier and no track.
If you'd rather it didn't, view summaries offline: the app draws the route on a plain background instead. The History thumbnails and the share picture never use the map.
Friends and sharing
Nothing is sent until you switch on "Online friends". The app asks the first time you open Friends, and you can switch it off again in Friends & sharing. Off, the app makes no requests to our server at all.
On, the app talks to our server at api.bradhatesrunning.com (hosted by DreamHost in the United States). It keeps:
- A random id for your install, your friend code, and hashes of the keys the app signs in with. Never the keys themselves.
- Your display name, "about" line and the profile numbers you haven't switched off.
- Your sharing choices, and for each friend the level you gave them and whether you muted them.
- The runs you share (the five things below), your latest 100,000 at most.
- While you're running, and only if someone gets "running now" from you: the fact that you're out, which expires after four hours or when you stop.
- Counters for rate limits, keyed by a one-way hash, so no address or id is stored in the clear.
Switching a run's sharing off, or deleting the run, removes it from the server. "Delete my account on the server" (in Friends & sharing, when you switch Online friends off) removes everything above. The server's nightly database backups are kept for 14 days, so a deletion is gone from those within two weeks. Our host's web logs record addresses and which kind of request was made, never which friend or run it was about: ids travel inside requests, not in addresses.
This is the most a friend can ever receive from you, and only at the level you choose for them (nothing, weekly totals, every run, or every run plus the fact that you're running now):
- Your display name and "about" line.
- For each shared run: the day (not the time), the distance, the moving time, the average pace and the target. Five things.
- Your profile numbers, each of which you can switch off: total distance, number of runs, longest run and best average pace over the last 30 days.
- Summaries from your Stats page, while their switches on My profile are on: this month's and this year's runs and distance (and this month's running pace), your fastest 1 km, mile, 5 km and 10 km, and how many of the last 12 weeks you went out in. Each is labelled with the month, year or day it was worked out. These count runs (and runs with walking breaks); sessions the app labels a walk are left out of them, and of the profile numbers above.
- Your walks, while that switch on My profile is on: how many walks and how far, this month and this year, labelled with the month and year.
Never where you ran, never your route, never the time of day, never your weight or calories. That rule is built into the app's data types and checked by its tests, not just promised here. Nicknames you give friends never leave your phone.
The share picture
"Share this run" makes a picture on your phone and hands it to whichever app you pick in Android's share menu. It shows the day, not the time, and has no map. The route shape is off every time you open it, and switching it on shows a warning first. What happens to the picture after that is up to you and the app you sent it to.
Health Connect
The Health Connect switches are off until you turn them on, and Android asks for your permission when you do.
- Send runs to Health Connect: each finished run is written once, as an exercise session (running, or walking for a session labelled a walk) with its distance, calories (only if you've entered a weight) and its route (only if you grant the route permission). If you change a session's label between run and walk, its copy is written again with the new type.
- Take weight from Health Connect: the app reads your weight to use for calorie estimates.
- Use steps from my watch on the treadmill: the app reads step counts from Health Connect (Apple Health on iPhone), from the one watch app it shows you, to correct a treadmill run's distance when you choose to.
Health Connect keeps its data on your phone. Other apps can read it only with the permissions you give them there. Turn the switches off, or remove the app's access in Health Connect, and it stops.
Backups and exports
- Google's cloud backup (Android's own, if you have it on): copies your runs, settings (including your weight, if set), and friends list. It excludes the GPS tracks and the map tile cache. It only runs on phones with a screen lock, so the backup is end-to-end encrypted.
- Phone-to-phone transfer (the cable or Wi-Fi copy you do with both phones in hand, Android 12 and later) copies everything, routes included, because both ends are yours.
- Export my data writes one file to wherever you choose. Routes are left out unless you switch on "Include GPS routes" for that export. With a passphrase, the contents are encrypted (AES-256-GCM, with a key derived from the passphrase). A forgotten passphrase can't be recovered, by you or anyone else. The file is yours: the app doesn't upload it.
All three also carry the key that lets a restored phone sign back in to online friends as you. The server keeps only a one-way fingerprint of that key, but anyone holding the backup or export itself could use it, which is one more reason to give an export a passphrase.
Voice
The app's voice is rendered in advance and ships inside the app as audio, so cues need no internet. If you choose the phone's own voice instead, your phone's text-to-speech engine reads the cues; some engines' voices are marked "Needs internet" and send the text to the engine's provider.
Permissions, and why
- Location (precise and approximate): to measure a run.
- Notifications: the run notification, and friend notifications if you switch "Online friends" on.
- Foreground service and wake lock: to keep measuring with the screen off.
- Ignore battery optimisation (asked only if you tap "Fix it" in Settings): some phones stop apps mid-run otherwise.
- Physical activity (optional): counting your steps during a run.
- Internet: map tiles, and our friends server if you switch "Online friends" on.
- Health Connect (optional): writing exercise, distance, calories and routes, and reading weight and step counts.
What the app doesn't do
No advertising, no analytics or tracking libraries, no automatic crash reporting, no account, no selling or sharing of data. The app contains no code whose job is to report on you.
"Send a problem report" in Settings opens your own email app with the app's recent log (and the last crash, if there was one) attached, addressed to issues@bradhatesrunning.com, for you to send or not. It holds the app's version, your phone's model and system version, and a few settings such as units; no location, runs, weight or name. Nothing is sent unless you send that email.
Deleting things
Delete a run in the app and its track goes with it. "Reset settings" puts the settings back. Uninstalling removes everything the app stored on the phone. Backups in your Google account follow Google's rules for app backups; exports are files you manage yourself.
This website
This site is plain pages. No cookies, no analytics, no fonts, scripts or embeds from anybody else. The web host keeps ordinary server logs (IP address, page, time and browser) for security and troubleshooting, as web hosts do.
The alpha download page is the one exception to "plain pages": the code you type there is sent to our server at api.bradhatesrunning.com, which counts how many times each code has been used and when it was last used. It keeps no record of who downloaded, and only a one-way hash of each code. Wrong codes are counted per connection, under a one-way hash of the address, to slow down guessing.
Changes
If the app starts doing something new with your data, this page changes first and the date at the top moves.
Questions
Anything about your data, including asking for something on the server to be deleted: privacy@bradhatesrunning.com. Problems with the app: issues@bradhatesrunning.com, or "Send a problem report" in Settings.