Privacy policy
Two separate things are described here: the notchmeter.com website, and the Notchmeter app for macOS. They behave differently, so they get separate sections. Where a section says "none", that is the real answer, not a hedge.
Changed on 24 September 2026. Notchmeter 0.9.0 makes two new requests, and both are listed in section 4.1 with their off switches: the price catalog fetched from GitHub once a day (on by default), and the European Central Bank's daily exchange rate (off by default, and only for a currency other than US dollars). Section 5 gains a row for the catalog fetch, and Moonshot joins sections 4 and 6 as the vendor Kimi Code's usage is read from. Section 4.6 is new: Send Feedback, the one way anything you write in the app can reach us, and only through your own browser or mail app, after you have read every word of it. Section 5 gains the row for it, section 6 names GitHub as where an issue goes, and section 8 says how long we keep what you send.
The short version
- No server of ours. There is no Notchmeter account, no Notchmeter backend, no telemetry, no analytics and no crash reporting. Nothing about your usage, your prompts, your transcripts or your projects ever reaches us. We could not look it up if we wanted to, because we hold no record of you at all. The one exception is feedback you choose to send from the app, which you read in full first and which travels through your own browser or mail app (4.6).
- The app is not silent on the network, and you should know who it talks to. Its whole job is to read your AI usage, and the only way to do that is to ask your providers. It reads the login each tool already saved on your Mac and makes that tool's own usage request to that tool's own vendor, with your own token. Section 4 lists every single request.
- It also checks GitHub for updates, about once a day. That means GitHub sees the IP address of a running copy of Notchmeter roughly daily. You can switch it off in Settings › General › Updates › Check for updates automatically.
- This website has no analytics, no cookies and no browser storage. The one script on this site is the home page's inline check of your operating system, which shows a note to Windows visitors; it makes no request, sets no cookie and stores nothing. No other page runs any script. The only thing recorded is the ordinary server log kept by our host, Vercel.
- Downloading the app tells GitHub your IP address, because GitHub hosts the download. Choosing to donate takes you to Stripe, which handles it under its own privacy policy.
On this page
1. Who is responsible
Notchmeter is made and published by Hackett Labs LLC, a Florida limited liability company in the United States. Hackett Labs LLC is the controller for the small amount of personal data described on this page, and is the merchant of record for the optional donation.
Contact for anything to do with privacy or your data: privacy@notchmeter.com. You can also open a public issue at github.com/Amir-Hackett/notchmeter/issues, though email is better for anything you would rather not post in public.
There is no data protection officer and none is required. There is no EU or UK representative. Article 3(2) of the GDPR turns on whether a service is targeted at people in the EU, not on whether they can reach it, and neither this site nor this app is aimed at or marketed to the EU or the UK. Nothing here is offered in an EU language or currency, and no EU country is named or addressed anywhere on the site or in the app. Article 27, which requires a representative, applies only where Article 3(2) does.
2. What this policy covers
- The website at notchmeter.com, including this page.
- The Notchmeter app for macOS, distributed as a signed disk image and through Homebrew.
It does not cover the AI coding tools Notchmeter reads from. Anthropic, OpenAI, Cursor, Google, GitHub and Moonshot each have their own privacy policies, and those govern what happens once a request arrives with them. It does not cover GitHub, where the source, the issue tracker and the download live, or Stripe, which handles donations. Each of those companies is its own controller for what it does.
3. The website
3.1 What the site collects
One thing, and it is a consequence of the site being on the internet at all.
Server request logs. The site is hosted on Vercel. Like every web host, Vercel records the requests it serves: your IP address, your browser's user agent string, the page or file you asked for, the time, and the referring URL if your browser sent one. This happens for every page and every image. We cannot switch it off, we do not read it as a matter of routine, and we do not build anything from it.
That is the entire list. There is no analytics product on this site, first party or third party.
3.2 Cookies and browser storage
This website sets no cookies. It writes nothing to localStorage, sessionStorage or IndexedDB, registers no service worker, and does no fingerprinting. The only JavaScript on the site is the home page's inline check of your operating system, described in the summary above: it makes no request, sets no cookie and stores nothing, and no other page runs any script at all.
That is why there is no consent banner. A banner asking permission for cookies that do not exist would be theatre, and on the site of an app sold on not phoning home it would be worse than nothing. If this ever changes, this section gets rewritten first and the change is announced at the top of this page.
3.3 What the site does not do
- No analytics, no page view beacon, no tag manager, no A/B testing, no session replay, no heatmaps.
- No accounts, no sign-in, no password.
- No forms, no inputs, no newsletter, no contact box, no search field. There is nowhere on this site to type anything.
- No advertising, no ad pixels, no social trackers.
- No web fonts. Typography is your own system fonts, so nothing is fetched from Google Fonts or any other font host.
- No third-party scripts, stylesheets, images or iframes. Loading a page here makes requests to notchmeter.com and nowhere else.
- No crash reporting or error tracking.
3.4 When you click a link that leaves the site
A link is inert until you click it. Nothing below happens on page load.
- The download button, and the source, docs, issues and licence links take you to GitHub. GitHub sees your IP address and browser details. The disk image itself is served from GitHub's release asset network, which runs on Microsoft Azure storage.
- The support link takes you to a Stripe payment page for a voluntary donation. If you choose to give something, Stripe collects your email address, the amount you pick and your payment details. That goes to Stripe, not through us. Afterwards we can see, in Stripe's own dashboard, the record Stripe shows a merchant: the email address you entered, the amount, the payment method type with the last four digits of a card, and whatever billing details your chosen payment method required. We never see your full card number. Stripe sets cookies on its own pages, not on ours. The merchant name shown at checkout and on your statement is Hackett Labs LLC.
The donation gates nothing. Notchmeter is free and MIT licensed, every feature works whether you give anything or not, and there is nothing to buy, subscribe to or cancel.
4. The Mac app
Nothing the app does reaches us. There is no Notchmeter account, no Notchmeter server, no telemetry, no analytics, no crash reporter and no usage reporting. The app never sends a prompt, a response, a transcript or a file path anywhere. It never sends any token to us, because there is no "us" on the network for it to send one to. The only way anything from the app reaches us is feedback you write and send yourself, described in 4.6.
What follows is the honest other half. The app does make network requests. It talks only to providers you already have an account with, using the login their own tool already put on your Mac, and it is worth setting that out request by request rather than waving at it.
4.1 Every request the app makes
Notchmeter shows how much of your plan you have used. To do that it reads the login each AI coding tool has already saved on your Mac, and makes that tool's own usage request to that tool's own vendor, with your own token. It never creates a login, never refreshes one, never writes one to disk, and never sends one anywhere except back to the vendor that issued it.
Every provider can be switched off individually in Settings. Turn a provider off and no request is made for it.
| Who receives it | What is sent | When |
|---|---|---|
Anthropicapi.anthropic.com |
Your IP address and Claude Code's own access token, in the request header. No request body, no machine identifier. | About every five minutes while you are working, slower on battery or when idle, and not at all while the Mac is locked or asleep. Also when you hover the rings, press refresh, wake the Mac, or a Claude Code hook fires. |
OpenAIchatgpt.com |
Your IP address, Codex's own access token, and your ChatGPT account identifier, which this request requires. No request body. | Same schedule. A second request, for credit reset details, is made only if you turn that option on. It is off by default. |
Cursorcursor.com |
Your IP address and Cursor's own session token, sent as a cookie. Be aware this is the same token that signs you in to the Cursor website. When the usage events option is on, the app also exports your usage events for the last 30 days, which is what makes the Cursor cost figures work, and asks Cursor which teams your account belongs to so it can request the right ones. Those request bodies carry only paging and filter parameters, never any content. | Same schedule. The 30-day usage export is on by default and can be switched off in Settings. |
GitHubapi.github.com |
Your IP address and the Copilot or GitHub CLI token already on your Mac, with the editor version headers GitHub's Copilot endpoint expects. If more than one such token is saved, each is tried in turn until one is accepted, so a single check can be more than one request. | Same schedule. If you turn on organisation billing, the app also asks GitHub which organisations you belong to and requests a usage summary for up to ten of them. That option is off by default. |
Googlecloudcode-pa.googleapis.comdaily-cloudcode-pa.googleapis.com |
Your IP address, the Gemini CLI access token already on your Mac, a fixed description of the client that identifies nobody, and your Google Cloud project id, which the quota request requires. | Same schedule. Two requests each time: one to learn the project and tier, one to read the quota. With both Gemini CLI and Antigravity on your Mac, each has its own row and its own read, so twice that. |
Moonshot (Kimi)api.kimi.com |
Your IP address and the Kimi Code access token already on your Mac. The token is sent only while it is current; an expired one is not sent, and never refreshed. | Same schedule. One request each time, the one Kimi Code's own /usage command makes. |
GitHubgithub.com(software updates) |
Your IP address and the updater's user agent, when the app checks whether a newer version exists. No account, no token and no identifier is sent, and the updater's optional anonymous system profile is not switched on. | Daily by default, and whenever you choose Check for Updates. Automatic checking can be switched off in Settings. |
GitHubraw.githubusercontent.com(the price catalog) |
Your IP address and the app's user agent, when the app fetches this project's own list of per-model prices, so a model that launches between releases is priced at its published rate within a day. No account, no token, no usage figure and no identifier is sent; the request carries only the validators of the copy already held, so an unchanged file answers with no body. | Daily by default, at most, and an hour after a failed attempt. It can be switched off in Settings › Appearance › Usage display, and the app then prices everything from the table built into it. |
European Central Bankwww.ecb.europa.eu(exchange rates, from 0.9.0) |
Your IP address and the app's user agent, asking for the ECB's public daily euro reference rates: the same file anyone can open in a browser. No account, no token, no identifier, and not even which currency you chose, since the one file holds every currency the ECB publishes. The ECB learns that a machine at your IP address asked, and nothing else; the file is served through a content delivery network, which sees the same request. | Only if you turn on Fetch today's rate, which is off by default and does nothing while costs are shown in US dollars. Then once a weekday, just after the ECB publishes its afternoon file (and once more on the day you turn it on; nothing on a weekend, when no newer file can exist), or an hour after a failed one, doubling up to a day. Turn it off and the rate you typed converts, with no request. |
What that means in plain terms. Each vendor learns your IP address and, from your token, which of their accounts you are. That is exactly what happens when their own tool asks the same question, and no more. It is still a real disclosure to a real third party, and once a request arrives at Anthropic, OpenAI, Cursor, Google, GitHub or Moonshot, that company's privacy policy governs what it does with it, not this one. The update check and the price catalog in particular mean GitHub can see, roughly once a day, that a machine at your IP address is running Notchmeter, whether or not you ever download anything from them again.
The updater is the Sparkle framework, and it only runs in properly signed release builds. What it sends is what Sparkle sends with its system profile feature off, which is how the app configures it. We wrote the configuration, not the updater.
The app also opens ordinary links in your browser when you click them, such as a vendor's usage page, a status page, or the donation page. Those are handed to your browser with whatever cookies your browser already has. The app makes no request of its own for them.
The four options that change what is sent
- Cursor usage events export: on by default. Switch it off in Settings and Cursor stops receiving the 30-day usage events request. The plain usage summary still works; the detailed cost breakdown does not.
- Codex credit reset details: off by default. Turn it on and one extra request goes to OpenAI alongside the usage read.
- GitHub organisation billing: off by default. Turn it on and the app asks GitHub for your organisation list and a usage summary for up to ten of them.
- Fetch today's rate: off by default (from 0.9.0). Turn it on, with costs shown in a currency other than US dollars, and the app asks the European Central Bank for its public daily reference rates, once a weekday after it publishes them (twice on the day you turn it on, and not on a weekend), so a converted cost is at the day's rate rather than one you typed. The cost card and the dashboard then name the rate and its date under the figures. Turn it off and the rate you typed converts, with no request.
4.2 What the app reads on your Mac
All of this stays on your Mac. It is listed because reading it is worth telling you about even when nothing is transmitted.
- Saved logins for the tools you enable. For Claude Code, from your Keychain first, and if it is not there, from the credentials file Claude Code keeps in your home folder, or from the
CLAUDE_CODE_OAUTH_TOKENenvironment variable if you have set one. For Codex, Cursor, Gemini CLI, GitHub Copilot and Kimi Code, from the config files those tools already keep in your home folder. Cursor's database is copied to a temporary file and opened read only, so the live database is never touched. These tokens are read, used for the one request above, and never written, refreshed, copied into a Keychain or stored anywhere by us. - Your local Claude Code and Codex transcripts, for the cost figures. For Claude Code it reads only files changed in the last 30 days. From each line it takes the timestamp, token counts, the model name, a message id used to avoid counting the same response twice, a cost figure, a session id, the speed and inference region labels the transcript records, any web search request count, and the last folder name of the working directory. It does not read prompt text, does not read response text, and does not keep full paths. None of it is transmitted anywhere.
- OpenCode's own database, if OpenCode is on your Mac, opened read-only and never written, for OpenCode's cost, its sessions and the Go plan meter the app works out from your own turns. From each assistant turn it takes the time, the model and provider, the token counts, the cost OpenCode recorded and the folder name; from each recent session its folder, and OpenCode's own title only while session titles are on and your screen is not shared. It never reads your prompts, OpenCode's replies, tool output or any stored login, and nothing about OpenCode leaves your Mac.
- Pricing settings from Claude Code's own settings file, plus any overrides you write yourself. Model prices otherwise come from a table shipped inside the app and, while Update model prices from notchmeter's catalog is on (it is by default), from the price list fetched once a day in section 4.1; that fetch sends nothing about you or your usage.
- Claude Cowork's tasks, for the Sessions card, only while the Claude app is running and Show Claude Cowork tasks is on: the modification times of each task's files, and for a task written to in the last thirty minutes a few keys of its record (its title only while session titles are on, the name of its folder, its last activity and whether it is archived) and, from its log, each line's type and time. Never the conversation.
- Your own terminal processes, for the sessions found without the hook, while Find sessions without the hook is on (it is by default): each process's name, parent, start time, terminal and working directory, the first two arguments of one named like an assistant, Claude Code's own session files for the session id, folder and status, and the tail of a running Claude Code session's transcript for its model, branch and, while session titles are on and your screen is not shared, its title. Never another user's processes, and never a process's environment.
- Modification times only, with no file contents, for a handful of folders, so the app knows when to slow its polling down.
- Whether the screen is being shared, as a yes or no from macOS, and only while the "hide usage while the screen is shared" option is on.
- Menu bar geometry of the frontmost app, through the macOS Accessibility API, and only if you set Readouts to Auto. It is measured when you switch apps and cached, never polled.
- Cursor's approval and plan cards, through the same Accessibility API, and only if you turn on Mirror Cursor's cards. Only each card's heading and button labels are kept, in memory, and only the button you click is pressed.
- Hook and status line events, if you install the optional hooks. These carry an event name, a session id, a folder name, a git branch, a permission mode, a model name, context fill and a session cost. They explicitly exclude your prompt, the response, the transcript path, the full working directory and any email address.
4.3 What the app keeps on your Mac, and where
These are plain files in your own home folder. You can read them and you can delete them.
| Where | What is in it |
|---|---|
~/Library/Preferences/ | Your settings: layout, notifications, currency, hotkeys, opt-ins. Also the last successful reading for each tool, which notifications have already fired, a note of when the Cursor export last ran and, while Fetch today's rate has been on, the last exchange rates the ECB published with the time they were asked for. |
~/Library/Caches/Notchmeter/ | The transcript scan cache: quarter-hour totals per transcript so relaunches are instant, with entry-level detail kept only for the current 5-hour block. Never a token, a prompt or a full path. |
~/Library/Application Support/Notchmeter/daily-history-v1.jsonl | Daily cost totals that outlive your transcripts, one line per day per tool, broken down by model and by folder name, with a small .lock file beside it. Builds before 0.5.0 kept this file in ~/Library/Caches/Notchmeter/; whichever 0.5.0 process reads the history first — the app, the command line tool, the status line or the MCP server — moves it here. Never a token, a prompt or a full path. |
~/Library/Application Support/Notchmeter/drain-log-v1.jsonl | One line per successful usage read: time, tool, window, fraction used, reset time. Trimmed to the last 7 days. Never a token. |
~/Library/Application Support/Notchmeter/report-v1.json | The current full readout, rewritten about every 30 seconds so the command line tool and the status line can read it. This is the richest file on disk: it holds session ids, folder names and cost figures. It is protected by ordinary macOS home folder permissions and nothing more. |
~/Library/Application Support/Notchmeter/hook.sock | The socket the hook and status line commands connect to (4.4). It is not a data file and holds nothing: it is created when the app launches and removed when it quits. |
| macOS unified log | Request outcomes as a status code and a byte count. Never a token, a header or a body. |
No Keychain item is ever created by the app, and no token is ever written to disk. Deleting Notchmeter and removing the folders above removes everything it wrote. Lines already written to the macOS unified log age out on the schedule macOS sets for that log, which the app does not control.
4.4 Two local things worth knowing about
The local API. If you switch on Settings, Local API, the app listens on 127.0.0.1 so tools on the same Mac, such as the command line tool, a status line script or a widget, can read your usage. It refuses any request that is not from the loopback address, so it is not reachable from your network or from the internet. It has no authentication, which means any program already running on your Mac can read your usage figures through it while it is on. It is off by default.
The hook socket. If you install the optional hooks, Notchmeter --hook and Notchmeter --statusline hand each event to the running app over a Unix-domain socket at ~/Library/Application Support/Notchmeter/hook.sock. Nothing is broadcast: the folder is created with permissions 0700 and the socket with 0600, so no other user on the Mac can reach it, and a line goes to the one process holding the socket rather than to anyone listening. The app accepts a line only from a process whose code signature is Notchmeter's own; a refused connection is closed unread and one line naming the refusing process is written to the macOS unified log (category hook-socket). That check names the program, not who ran it: any program running as you can run Notchmeter --hook itself, so software you have installed could still hand the app a made-up event, which can light a ring, raise a banner or, since 0.7.0, put a permission card on the panel for a tool call nobody made — and nothing more: a pull request link is checked before it is ever opened, and a card can never be answered on anyone's behalf, because a decision travels back on the assistant's own connection, which only the app holds, so a made-up request answered from the notch answers the impostor and no one else. What the two-way events carry since 0.7.0 — a prompt's first line as the session's title, a tool's name and a bounded summary of its input, a question's text and options, and the terminal's own identifiers — is listed in docs/hooks.md, and each part has its own switch in Settings. The payload is the one listed in 4.2 plus an open pull request URL when Claude Code sends one. None of it leaves your Mac. Builds before 0.6.0 sent these events as a macOS notification that any program in your login session could read; 0.6.0 replaced that hop outright.
4.5 Copy diagnostics
Settings has a Copy diagnostics button. It reads the app's own last ten minutes of log lines, replaces your home folder path with ~, and puts the text on your clipboard. Nothing is transmitted. If you paste it into a bug report, you are the one sending it, and you can read it first.
4.6 Send feedback
Settings › General › Send Feedback… (also in the Options menu) opens a form with a message, an optional copy of the Copy diagnostics report, and a choice of GitHub or email. Under it the app shows the exact text that would leave. Before showing it, the app replaces your home folder path with ~ and replaces every project name, git branch, session title, folder, pull request link, remote machine name and your account name that it is holding with a placeholder such as [project 1], in your message as well as in the report. The app itself sends nothing. Pressing Send opens either the Feedback issue form on our GitHub repository in your browser, its fields filled from the page address, or a new email to privacy@notchmeter.com in your mail app. Two things are worth knowing. A prefilled GitHub issue carries its text in the page address, so GitHub receives that text when the page loads, before you press Submit new issue; a browser that is not signed in to GitHub is sent through GitHub's sign-in page first, with the same address to come back to; nothing is published until you do, and a published issue is public and shows your GitHub account. An email is sent only when you press Send in your mail app, from your own address, and reaches us like any other email. Neither is anonymous.
5. Legal basis for each use
Under Article 6 of the GDPR, where it applies to you:
| What | Why | Legal basis |
|---|---|---|
| Website server logs | Serving the site, keeping it up, and dealing with abuse or attacks | Article 6(1)(f), legitimate interests. Our interest is running a website that works. It is ordinary request metadata, it is not used to build a profile, and it is not combined with anything else. |
| A donation, if you choose to make one | Taking the payment you asked to make | Article 6(1)(b), the transaction you asked for. Keeping the record afterwards rests on Article 6(1)(f), our interest in holding the accounting and tax records US law requires of us. |
| App update check | Telling you when a fixed or safer version exists | Article 6(1)(f), legitimate interests in getting security fixes to installed software. You can switch automatic checking off. |
| Price catalog fetch | Pricing a model that launched after your version was built at its published rate, rather than at a guess | Article 6(1)(f), legitimate interests in the figures the app shows being right. It is public data and the request identifies nobody; you can switch it off. |
| App usage reads to AI vendors | Showing you your own usage, which is the one thing you installed the app to do | These run on your machine, at your instruction, with your own credentials, and we receive nothing from them. To the extent a basis applies to us at all it is Article 6(1)(f). Each vendor is its own controller for what it does with the request. |
| Feedback you send from the app | Reading it, answering you, and fixing what you report | Article 6(1)(f), legitimate interests in answering people who write to us and in fixing the software. You decide whether to send anything and see every word first. A GitHub issue is also processed by GitHub under its own privacy statement. |
| Everything else the app does | Showing your usage and cost locally | No basis is needed, because we do no processing. The data never leaves your Mac and we never see it. |
We do not rely on consent for anything, because nothing here needs it. We do no automated decision making or profiling that produces legal or similarly significant effects. The advice the app shows you is calculated on your own Mac from your own numbers and is never sent anywhere.
You are under no statutory or contractual obligation to give us personal data, and you do not have to provide any to use the site or the app. There is nothing on the site to fill in and no account to create. The only thing that reaches anyone by default is the request metadata your browser must send in order to load a page at all, and without that a web page cannot be delivered to you.
6. Who receives data, and where
| Who | What they get | When | Where |
|---|---|---|---|
| Vercel | Website server logs: IP address, user agent, the page requested, the time, the referrer | Every visit to notchmeter.com | Vercel is a United States company and serves the site from a global edge network |
| Stripe | Your email address, the amount, and your payment details | Only if you click the support link and choose to donate | United States |
| GitHub (Microsoft) | IP address and browser or updater details; and, if you send feedback as a GitHub issue, the text you saw in the app's feedback form | When you click through to the source, docs or issues, when you download the app, when the app checks for updates or fetches the price catalog, and when you choose to send feedback as a GitHub issue | United States |
| The European Central Bank | Your IP address and the app's user agent, asking for its public daily euro reference rates | Only while Fetch today's rate is on, which it is not by default: then once a weekday | Frankfurt, Germany, served through a content delivery network |
| Anthropic, OpenAI, Cursor, Google, GitHub for Copilot, and Moonshot for Kimi Code | Your IP address and your own saved token for that tool, plus the account, project or organisation identifier that tool's request requires | Each time the app reads your usage for a provider you have enabled | United States, and wherever else that vendor operates |
That is the complete list, other than the infrastructure those companies use themselves. GitHub, for instance, serves release downloads from Microsoft Azure storage, as noted in section 3.4.
We do not sell personal information. We do not share it for advertising. There is no affiliate programme, no marketing list and no data broker anywhere in this. Anything beyond the list above would only ever be handed over under a valid legal order, and we hold almost nothing to hand over.
7. International transfers
We are in the United States and so are all of the companies above but the European Central Bank, which is in Frankfurt and is asked only while you have turned on Fetch today's rate. If you are in the UK, the EEA or Switzerland, using this site or the app means your data is processed in the United States.
We transfer nothing ourselves, because we hold nothing to transfer. Where these providers handle UK, EEA or Swiss personal data, each publishes the mechanism it relies on:
- Vercel is certified under the EU-US Data Privacy Framework, and its Data Processing Addendum also incorporates the European Commission's 2021 Standard Contractual Clauses and, for UK transfers, the UK International Data Transfer Addendum.
- Stripe is certified under the EU-US Data Privacy Framework and relies on the Standard Contractual Clauses and the UK Addendum. See Stripe's privacy center.
- GitHub complies with the EU-US Data Privacy Framework, the UK Extension to it and the Swiss-US Data Privacy Framework, and also relies on Standard Contractual Clauses. See the GitHub Privacy Statement.
- Anthropic, OpenAI, Cursor, Google, GitHub when you use Copilot, and Moonshot when you use Kimi Code, receive requests only from your own machine, with your own credentials, under the account you already hold with them. The transfer terms of your relationship with each of them are the ones in their own privacy policies, not ours.
Each provider's own notice is the authoritative source for what it does, and those terms can change without us knowing.
8. How long anything is kept
- By us: nothing about you. There is no user database, no analytics warehouse and no log archive of our own. The exceptions are the donation record and any feedback you choose to send, both described below.
- Feedback you send. An email stays in our mailbox for as long as it is useful for answering you and fixing what you reported; ask and we delete it. A GitHub issue lives on GitHub, in public, until you or we delete it.
- Donation records. If you donate, we keep the transaction record Stripe shows us, which includes the email address you entered, for as long as US tax and accounting rules require records of income to be kept, and then no longer. We do not use it for anything else, and we never add it to a mailing list, because there is no mailing list.
- Website server logs are held by Vercel, not by us. Vercel does not publish a single retention period for them; its Data Processing Addendum commits it to anonymising or deleting personal data when it no longer needs it for the purpose it was collected for. We have no way to shorten that and no access to the raw logs.
- Payment data is kept by Stripe under its own policy, which states that it generally retains this kind of data for five or more years from the last transaction or the end of the relationship, whichever is later.
- App data on your Mac is kept by you, on your machine, until you delete it. The usage read log trims itself to 7 days. Daily cost totals and the caches stay until you remove them, and deleting the folders in section 4.3 deletes them.
- Requests to AI vendors and to GitHub are retained by those companies under their own policies. We have no control over that and no visibility into it.
9. Your rights
These are the rights the GDPR and UK GDPR give in Articles 15 to 21. We offer them to anyone who asks, wherever you live, because answering honestly costs us nothing.
- Access a copy of the personal data held about you, and information about how it is used.
- Rectification, to have inaccurate data corrected.
- Erasure, to have data deleted.
- Restriction, to have processing paused while a dispute is worked out.
- Portability, to receive data you provided in a machine readable form, where the processing is based on consent or a contract and is automated.
- Object to processing based on legitimate interests.
- Withdraw consent, where consent was the basis. We rely on consent for nothing, so there is nothing to withdraw.
Here is the practical part. We hold no records about you, unless you have donated. For most people every one of these requests has the same answer: there is nothing to give you, correct, delete or export. That is not a refusal, it is the actual state of things, and we will say so in writing if you ask.
Where data genuinely is held, it is held by someone else, and the right is exercised with them:
- Website server logs: Vercel.
- Payment details: Stripe. Our copy of the transaction record: us.
- Downloads, issue comments, update checks and the price catalog: GitHub.
- Your AI usage and account data: Anthropic, OpenAI, Cursor, Google, GitHub or Moonshot, whichever account it belongs to.
Email privacy@notchmeter.com and we will answer within one month, and help you route a request to the right provider if that is where the data actually is. There is no charge.
Complaining to a regulator
If you are unhappy with how your data has been handled, you can complain to your data protection authority. You do not have to come to us first, though we would rather you did so we can fix it.
- EU and EEA: your local supervisory authority, in the country where you live, where you work, or where you think the problem happened. The list is at edpb.europa.eu.
- United Kingdom: the Information Commissioner's Office, ico.org.uk.
- Switzerland: the Federal Data Protection and Information Commissioner, edoeb.admin.ch.
10. California notice
This section is for the California Online Privacy Protection Act and for California residents generally.
- Categories of personal information collected through this site: internet activity information only, meaning IP address, browser user agent, the page requested, the time, and the referring page. That is all. No name, no email address, no postal address, no phone number and no account identifier is collected through this website, because there is nowhere on it to enter one.
- Categories of third parties it is shared with: our host, Vercel. If you choose to donate, Stripe collects your email and payment details directly. If you click through to the source or the download, GitHub receives the request.
- Do we sell or share personal information? No. We do not sell personal information and we do not share it for cross context behavioural advertising. We never have.
- Reviewing and changing your information: there is no account and no stored profile, so there is nothing to log in to and change. If you think we hold something about you, email privacy@notchmeter.com and we will tell you what we have, which is very likely nothing, and delete it if we do.
- Do Not Track: we run no tracking of any kind on this site, so there is nothing for a Do Not Track signal to switch off. We do not track you here and we do not track you across other sites.
- Third party tracking: no third party collects information about your activity across different websites through this site. There are no ad networks, no social pixels and no cross site trackers here.
- Changes to this notice: see section 13. The effective date is at the top and the bottom of this page.
We do not meet the thresholds that make the California Consumer Privacy Act apply to a business, and we do not meet the thresholds under the other US state privacy laws either. The rights in section 9 are offered to everyone anyway.
11. Children
Notchmeter is a tool for professional software development. It is not directed at children, not designed for them, and nothing about it is aimed at them.
We do not knowingly collect personal information from anyone under 13, or under 16 where that is the age set. In practice we collect no personal information from anyone through this site beyond request metadata, and the app sends us none at all. There is no age gate, because adding one would mean asking for a date of birth, which would collect more data than we do now rather than less.
If you believe a child has provided personal information to us, email privacy@notchmeter.com and we will delete whatever we find.
12. Security
The website is served over HTTPS only. The app is signed with an Apple Developer ID and notarised by Apple, and every update is verified against a cryptographic signature before it is installed, so a tampered update is rejected.
The strongest security property here is structural rather than procedural: we hold no user data, so there is no database of yours to breach. The credentials the app reads never leave your Mac except to go back to the vendor that issued them, and they are never written to disk or copied into a Keychain by us.
Two things you should weigh yourself. The Cursor token the app reads is the same one that signs you in to the Cursor website, so it is a more powerful credential than a read-only usage key would be. And the local API, if you turn it on, has no authentication, so any program already running on your Mac can read your usage figures through it.
The app's source is public under the MIT licence, so none of this has to be taken on trust: github.com/Amir-Hackett/notchmeter.
To report a vulnerability, see SECURITY.md or email privacy@notchmeter.com.
13. Changes to this policy
If what the site or the app does changes, this page is updated before or at the same time as the change, never afterwards. The effective date at the top and bottom of this page always reflects the current version.
For a material change, meaning anything that starts a new kind of collection, adds a new recipient, or introduces cookies or device storage, we will say so plainly at the top of this page and note it in the release notes for the version that introduces it. The app has no way to message you and there is no mailing list, so the release notes and this page are the notice.
Previous versions of this page are in the public git history of the site at github.com/Amir-Hackett/notchmeter. You can see exactly what changed and when.
14. Contact
For anything about this policy or about your data:
- Hackett Labs LLC, Florida, United States
- Email: privacy@notchmeter.com
- Public issue tracker: github.com/Amir-Hackett/notchmeter/issues
Effective 24 September 2026. See also the terms of use.