Privacy
Last updated: 9 September 2026 · applies to WattMate 1.0 for macOS and to wattmateapp.com
The short version
WattMate measures your Mac on your Mac. The names of your apps and processes, their paths, your energy history and everything read from the system power log stay on the machine and are never sent anywhere.
Three things do leave, and each one is listed in full below: anonymous usage statistics (on by default, one switch turns them off), crash reports (same switch), and, only if you buy, a licence check with the store that sells the key.
There is no account, no sign-in and no password. Nothing you measure is sold, shared or used for advertising.
The Mac App Store edition
The edition sold through the Mac App Store has no network access at all. It is not switched off: the capability is absent from the app, and the system refuses any attempt to use it.
Nothing leaves your Mac from that edition: no anonymous statistics, no crash reports, no licence check, no update check. The switch that turns statistics off in the direct edition is not there, because there is nothing for it to turn off. Everything in the section below applies to the edition downloaded from this site.
That edition also cannot read the energy of other applications: the sandbox does not allow it. What it shows comes from your battery, from the system power source, and from what nearby Bluetooth devices broadcast about their own charge. Bluetooth is asked for only when you open the list of devices, and the app listens only while that panel is open.
Who is responsible
The controller of the personal data described here is Vitali Staradubau, tax number 5252950301. Questions, requests and complaints: support@wattmateapp.com.
What stays on your Mac
Measurements are written to a local SQLite database at
~/Library/Application Support/WattMate/wattmate.sqlite. It is an ordinary
file on your disk. Nothing in it is uploaded.
| What | Contains | Kept for |
|---|---|---|
| Detailed measurement windows | Per-process energy, including app names, bundle identifiers and paths | 48 hours, then deleted automatically |
| Time-remaining readings | Paired estimates used to check our own accuracy | 30 days |
| Run summaries | Start and end of each run off the battery, charge spent, the shape of the power use, and the heaviest apps of that run with their shares and the paths to their icons | Indefinitely, until you erase them |
| Charge summaries | When the Mac was on the cable and what the adapter gave | Indefinitely |
| Battery health | Monthly capacity and cycle readings | Indefinitely |
| Quit receipts | The name and bundle identifier of an app that stopped while the Mac was on battery, what we promised for it beforehand and what was measured afterwards; apps that quit on their own are recorded too, not only the ones you quit here | Indefinitely, until you erase them |
| Sleep episodes | Sleep and wake events from the macOS power log, including the name of the service that requested each wake | Indefinitely |
To read the power log the app runs /usr/bin/pmset -g log, the only
outside program it ever starts. It does that when you open the statistics window or
ask for a night breakdown, and not more than once a day beyond that. What it reads
stays in the database above.
Settings, a random installation identifier, counters for the weekly summary and
the list of apps you hid are stored in the app's own preferences file. Your licence
key, its activation id, the expiry date and the date your trial started are written
twice (to that same preferences file and to a hidden .state file next
to the database) so that clearing one of them does not hand out a second free
trial. Both stay on this Mac; nothing there is sent anywhere except the key itself,
to the licence server, when it is checked.
What leaves your Mac
1. Anonymous usage statistics: on by default
Sent to TelemetryDeck, our analytics processor. They are switched off by Settings › General › Send anonymous statistics, and the switch takes effect immediately: the next event is not queued, not stored and not sent. If statistics were never enabled in a session, the analytics component is not started at all.
Fourteen events exist and no others. Thirteen mark the steps of getting started and buying. Most go once per installation; the ones that can repeat (the receipt after a quit, a tap on a locked feature, an opened price screen, an opened checkout, a failed activation) go every time. The quit itself is not among them: only your first quit on our advice is sent as an event, and the later ones are counted and leave once a week in the summary:
- first launch, and whether the app reached its first numbers (and how many minutes that took);
- which recommendation card met you, whether you quit an app on our advice, and what the receipt afterwards said: the minutes promised, the minutes measured, and whether the effect could be isolated;
- whether you opened the statistics window;
- whether the trial ended, and after how many days of use;
- whether the price was shown, from which place in the interface, and whether you tapped a locked feature;
- whether you went to pay and on which plan, and whether a licence activated or failed (and why: offline, activation limit, or invalid);
- whether this Mac has a battery at all.
The fourteenth is a weekly summary: roughly which week of this installation's life it is, how many of the seven days the Mac ran off the cable, how often the panel and the statistics window were opened, how often a night breakdown was opened, how many apps were quit, what share of the cards that met you named an app to quit, how much of the week's power use went to sleep, how many notifications were shown and tapped, which card came up most, whether the system permits notifications at all, and whether you are on the trial or licensed. Counts leave as ranges (0 · 1–2 · 3–9 · 10–29 · 30–99 · 100+), shares as quarters. The only exact numbers are the days spent off the cable and the minutes the app gave back.
Every event carries a random installation identifier, a UUID the
app generates for itself. For this channel there is no serial number, no hardware
hash, no advertising identifier and no user name. Crash reports are a different
channel, and it is described below. The analytics library also attaches fields of its
own, and we list them as they are in the version we ship (TelemetryDeck SwiftSDK
2.14.2): the app version and build, the Mac model identifier (for example
Mac15,10), the processor architecture and platform, the macOS version,
your time zone, the language, locale and region set in Language & Region, the
light or dark appearance and writing direction, two accessibility flags, the screen
resolution and scale, fields derived from the moment the event happened (date, hour,
weekday, week and quarter of the year), a per-run session identifier, and a block of
retention counters it maintains itself: the date of your first session, how many
distinct days you have used the app, the number of sessions and their average length.
We switched off its own session tracking, but these five fields ride along with every
signal regardless. When that library adds a field, this list is what we update.
2. Crash reports
Sent to Sentry, in their European region
(o4511852742705152.ingest.de.sentry.io), and governed by the same switch.
IP address collection is turned off, performance tracing and automatic session tracking
are off, and the macOS library takes no screenshots and no view hierarchy. Your IP
address is not stored with the report, but Sentry does read it in transit to work out
a rough location: a report we opened showed a city and country, and nothing more
precise. What does
arrive with a crash: the stack and the app build, the macOS version, the Mac model and
architecture, memory and disk figures, the locale and screen size, recent breadcrumbs,
and a device identifier the library computes itself from the machine's network
address and model. It is the same for every report from one Mac; we cannot connect it
to a person, and we do not try. One
limitation is worth stating plainly: if crash reporting has already started in the
current run, switching statistics off stops the analytics immediately but the crash
reporter keeps running until you quit the app. At the next launch it does not start.
3. Licence activation and checks
Only if you buy a key. The app talks to api.lemonsqueezy.com. Three
requests exist: activate, validate and deactivate.
On activation the name of your computer is sent as the name of the activated device, so that you can tell your two machines apart. Mac names often contain the owner's name ("Anna's MacBook Pro"). If you would rather not send it, rename the Mac in System Settings › General › About before activating.
After that the app validates the key when it starts and then not more often than once a day. A failed network call does not take your licence away; only an explicit "not valid" answer does.
4. Update checks
The app asks https://wattmateapp.com/appcast.xml whether a newer
version exists. That is an ordinary request for a small XML file on our own host: it
carries the app's name and version in the user-agent line, the language your Mac asks
web pages in, and your IP address, which the host sees for as long as it keeps its
request logs. The version of macOS does not travel with it, nor any identifier of
ours, and an update is verified by signature before anything is installed.
Checking automatically can be switched off in Settings › General; after that the app looks only when you ask it to from the menu.
Nothing else
Every other address in the app is a link that opens in your browser when you click it.
What never leaves your Mac
- the names of your apps and processes, their bundle identifiers and paths;
- your watt figures, your energy history and your run journal;
- the power log: sleep and wake times, and the names of the services that woke the Mac. None of it is sent, in any form.
This website
wattmateapp.com runs one script of its own (a battery-wear calculator, on two
pages, served from this domain and talking to nothing) and no others: no third-party
code, no embedded fonts, no third-party content, and it sets no cookies of its own.
Like every website, it is served by a
host, and the host records ordinary request data (IP address, time, page and browser
string) to serve the page and defend against abuse. The site is served by
Cloudflare, which may set a strictly necessary cookie of its own
(__cf_bm) as part of that defence. We set none.
It does keep one tally. The server adds 1 to a count for that day and for where the
visit came from: the site you followed a link from, a tag we put in our own links
(?ch=reddit), a tag whoever linked to us put in theirs when no referring
site came through, which is how ChatGPT labels its own links
(?utm_source=chatgpt.com), direct when there was none of
those, or unknown when the referring address was unreadable, because we
would rather store "unknown" than call it "direct". Then it forgets the request. Moving
between pages of this site is not counted at all. Requests that are not read as a
visit are not dropped in silence. Each kind gets a count of its own: crawlers and
scanners, browsers so old that no live one reports them, requests made by an HTTP tool
rather than a browser (ours after a release, and other people's), pages an assistant
fetched for someone, requests that were never a page visit at all (something loaded in
the background, or a page pulled into a frame), and requests whose browser string is
missing or does not match what the request actually sent. The browser string is read
to choose which count to
add to, and is not written down. One request adds 1 to one count, with a single
deliberate exception: a request whose browser string does not match what it actually
sent is filed under its real source and counted a second time under a rule we are
still testing, so that the rule can be judged by numbers instead of costing us real
visitors. Nothing that counts as an arrival is filed away in silence, so that "nobody
came" cannot be misread as "the counter broke". The count is a number. There is no
row for you in it: no IP address, no browser string, no country, no time
finer than the day. Searches from Google or Bing are counted as
google and bing with the country dropped from the domain,
so a search from Poland and one from Japan are the same entry. After a year on disk
it reads like ("2026-08-16", "google", 41), and nothing in it can be
traced back to a person.
Buying happens on the store's own domain, not here. See Refunds for who the seller is and what they hold.
Forms on this site
There are two, and both are the same battery-wear calculator: one on Battery health vs cycle count, one on Used MacBook battery check. You type a cycle count, a health percentage and, if you want, the name of your chip; the comparison is worked out in your own browser by the one script this site serves, and not one of the three numbers leaves it. The page makes no request at all while you use the calculator, so there is nothing at the other end to receive them.
There was a third form until 24 August 2026: a field on the pricing section where you could leave an email address to be told the day buying opened. Buying opened that morning, and the field came down the same day. What it kept was the address itself, the date you sent it, and which button on the page you used. Not your IP address, not the page you arrived from, not whether you opened the email. We do not measure that. It is stored on our own Cloudflare account, which already serves this site, so no further company receives it. The legal basis is your consent, given by sending the form. If you sent an address, it is held for that one email and for nothing else: there is no newsletter after it, and there never was one to join. You can withdraw your consent at any time by writing to support@wattmateapp.com, and the entry is deleted. Entries are deleted in any case once that one email has been sent.
What you can do
- Switch statistics off: Settings › General. It takes effect at once.
- Erase measurements: Settings › General. This clears the detailed history, the session log and the quit receipts. The running total of minutes you got back is derived from those and starts again from zero. Two lists of app names live outside the measurements and survive it: the apps you hid from the list, which goes with the settings below, and the licence data, which is kept apart from the measurements on purpose. Charge summaries, battery health, sleep episodes and the paired time-remaining readings remain, because the health history is meant to outlive a reset.
- Delete everything: quit the app and delete the folder
~/Library/Application Support/WattMate. Nothing measured survives it. The hidden.statefile with your licence and trial dates is inside that folder and goes with it. Settings and the installation identifier live separately, in the app's preferences;defaults delete com.wattmate.appin Terminal removes those too. One file is left after both: the analytics library keeps the date of your first session and the days you used the app in~/Library/Preferences, in a file whose name starts withcom.telemetrydeck. - Release a licence: "Deactivate on this Mac" on the licence screen.
Your rights
If you are in the European Economic Area, the GDPR gives you the right to ask what personal data we hold about you, to have it corrected or erased, to object to processing, to restrict it, to receive it in a portable form, and to complain to a supervisory authority. In Poland that is the President of the Personal Data Protection Office (UODO).
In practice we hold very little that can be traced to you: statistics arrive under a random installation identifier, which we cannot connect to a person, and crash reports arrive without a stored IP address, though the city they were sent from is visible on them. If you have bought a key, your email address and purchase are held by the store as the seller of record; a licence key and the name of the activated device are held there too. Write to support@wattmateapp.com and we will do what we can, including asking our processors to delete data tied to an installation identifier you send us.
Legal basis: our legitimate interest in knowing whether the product works and in fixing crashes (Art. 6(1)(f) GDPR), and the performance of our contract with you for licence checks (Art. 6(1)(b)). You can end the first at any time with the switch.
Who processes data for us
| Processor | What for | What they receive |
|---|---|---|
| TelemetryDeck | Usage statistics | The events above, under a random installation identifier |
| Sentry (EU region) | Crash reports | Crash traces, app and system version, Mac model, memory and screen figures, breadcrumbs, an approximate city from the sending address, and a device identifier the library derives from the machine; no stored IP address |
| Lemon Squeezy | Selling keys and checking them | Your purchase and email, the licence key, the name of the activated device. As the seller of record they decide for themselves what to do with the purchase data: for that part they are not our processor but a controller in their own right, and their policy governs it |
| Cloudflare | Serving this website and the update feed | Ordinary request logs |
How long the outside copies live, and where
Statistics and crash reports are kept by our processors under their own retention policies; we do not need them longer than a release cycle and ask for the shortest retention each service offers. Crash reports are received in the European Union. TelemetryDeck and Lemon Squeezy may process data outside the European Economic Area under the safeguards in their agreements (standard contractual clauses). Request logs on this website are kept by the host for as long as its abuse protection needs. Nothing measured on your Mac is part of any of it.
Children
WattMate is a tool for people who own a Mac and is not directed at children. We do not knowingly collect anything from them.
Changes
If this policy changes, the date at the top changes with it, and the change is described in the release notes of the version it applies to. We do not make quiet edits to what we said we send.