Last Set

Privacy Policy

Last updated 9 August 2026

Your training stays on your device. Last Set has no account, no backend and no sync: the exercise library, every session, every set, your bodyweight log and every preference live in a single database on your phone.

The only way any of that leaves your device is the CSV file you create yourself by tapping Export Data, and where it goes from there is your choice.

Two things do talk to a server, and both are described below: a small number of usage events, and the subscription check for Last Set Pro. The second one runs every time you open the app, whether or not you have ever bought anything — it is how the app knows whether Pro is active, and it has to ask before it can know. Neither carries anything from your training.

Usage events

Last Set sends a fixed list of twenty-four events, and no others. Examples: the app was opened, a workout was started or finished, the Progress tab was viewed, the Last Set Pro screen was opened. Each event exists because a specific line of code raises it at a specific moment.

Nothing is captured automatically. There is no screen tracking, no tap tracking, no navigation tracking, no session replay, no crash reporting and no network logging.

Every property an event can carry is a fixed word from a fixed list. There is no property anywhere that accepts free text or a number, which is what makes the exclusions below structural rather than a matter of care.

What the events never contain

Exercise names · exercise IDs · workout names · template names · template IDs · weights · repetitions · sets · training volume · bodyweight · notes · personal records · location · contacts · email address · Apple ID · advertising identifiers · health data · raw database rows · anything you have typed

Last Set never asks for App Tracking Transparency permission, never reads the IDFA or any other advertising identifier, and does no cross-app or cross-site tracking. There is no advertising in the app.

Who receives them

TelemetryDeck, a privacy-focused analytics service. Events are sent as a single HTTPS request to nom.telemetrydeck.com. That is the only network request Last Set makes for analytics; the app has no server of its own and loads no remote images, fonts or scripts.

What each request contains

Last Set does not use TelemetryDeck's own software library. The request is built by hand, and these are all of the fields in it:

The app sends no app version, no operating system version, no device model and no timestamp. There are no such fields in the request.

What the app cannot control is the connection itself. Like any request over the internet, it carries your IP address and the standard headers your device's networking layer attaches, and TelemetryDeck records when it arrived. Last Set does not send an IP address as data and never receives or stores one, but the request is necessarily seen by the servers that answer it. What TelemetryDeck retains, and for how long, is governed by their own policies.

The installation ID

Events are tagged with a random installation ID so that repeat use can be counted in aggregate — how many installations are active, and whether people come back. Without one, every installation looks identical and a question like "do people return the following week" has no answer at all.

On the word "anonymous". These events are unlinkable to you — nothing in them or beside them identifies a person. They are linkable to an installation, which is the point of the ID. The precise word for that is pseudonymous, and this page uses it rather than claiming more.

Turning it off

Settings → Your Data → Share anonymous usage data.

The full list of events

Event Sent when Carries
app_openedthe app becomes the foreground appnothing
workout_starteda workout is actually createdwhether it came from a saved workout or was started empty, and that it is a strength session
workout_completeda workout is successfully finishedthe same two
progress_viewedthe Progress tab is openednothing
exercise_detail_viewedan exercise's detail screen is openednothing — not which exercise
template_starteda workout is started from a saved workoutnothing
free_limit_reachedthe free plan refuses to save something, or a Pro chart is tappedwhich of the three limits
analytics_setting_changedyou switch analytics onthe new value
workout_complete_viewedthe Workout Complete screen opensnothing
share_card_selectedyou move to a different share-card designwhich of the two designs
share_workout_tappedyou press Share Workoutthe same one
native_share_sheet_openedthe system share sheet is handed the imagenothing
native_share_completedthat sheet closes without an errornothing
native_share_cancelledthe share ends in an error insteadnothing
paywall_viewedthe Last Set Pro screen openswhich screen sent you there
plan_selectedyou choose a different plan on itannual, monthly, lifetime or other
paywall_view_all_plansyou expand the other plansnothing
purchase_startedyou press the purchase buttonthe same plan word
purchase_cancelledyou back out of the store's own sheetthe same plan word
purchase_succeededthe store confirms a purchasethe same plan word
purchase_failedthe store refuses onethe same plan word
restore_startedyou press Restore Purchasesnothing
restore_succeededa restore brings Last Set Pro backnothing
restore_faileda restore errors or finds nothingnothing

Two of these promise more in their names than any platform delivers. The system tells Last Set when the share sheet closes, not what you did with it — so native_share_completed means the sheet closed without an error, and it is not a record of whether you posted, messaged or saved anything. The app has no way to know that, and the image itself never passes through it.

Purchases

Last Set Pro is optional, but the check for it is not conditional. Last Set uses RevenueCat to tell it whether a subscription is active, and it asks on every launch, for every user, before you have bought anything and whether or not you ever do. There is no way for the app to know your subscription status without asking, and it needs the answer before it draws the first screen.

So on the first launch of a new install, RevenueCat creates an anonymous record for that installation, and the app contacts it each time you open Last Set — to read that record, to fetch the current plans and prices for your region, and to ask whether the store still considers you eligible for a free trial. None of those requests carries anything from your training.

The purchase events carry no purchase data. Not the price, not the currency, not the amount, not the product, not the trial length, not the receipt and not the transaction — only which kind of plan and which screen you came from.

Because there is no account, restoring a purchase on a new device works through your store account. That is what Restore Purchases does, on the Last Set Pro screen and in Settings.

The app also keeps one row on your device recording whether Last Set Pro was active the last time it checked, so you are not locked out while offline. It holds a status word and a timestamp, nothing else, and it never leaves the device.

Everything else the app touches

Your data, and removing it

Because everything is on your device, there is no account to close and no server copy to request or erase. Deleting Last Set deletes its database — your training, your preferences and the installation ID — and there is no copy anywhere else and no way to recover it.

What has already been sent is a different matter, and deleting the app does not reach it. Usage events already delivered stay with TelemetryDeck, and the anonymous subscription record stays with RevenueCat, each under their own retention. Neither holds a name, an email address or an account, because Last Set never had one to give them — so there is no identity to look either up by. If you want to stop sending usage events, switch off Share anonymous usage data in Settings; that takes effect immediately. The subscription check cannot be switched off, because the app would have no way to know whether you are entitled to what you paid for.

Children

Last Set is not directed at children and does not knowingly collect information from them. It asks for no name, no email address, no date of birth and no account.

Changes to this policy

If what the app does changes, this page changes with it, and the date at the top changes too. Material changes will be reflected here before the behaviour ships.

Contact

Questions about this policy: lastset2026@gmail.com.