Privacy policy
NPC Filter reads posts and comments in your browser. Signed-in users get model checks, which send post text to our server. Feedback text is sent only if you opt in. This page says exactly what is sent, what we keep and for how long.
What runs on your device
NPC Filter's rules run inside your browser, for everyone, signed in or not. They read the posts and comments on the page you are looking at and decide whether to blur, label or hide them. The rules themselves send nothing. Model checks, below, are separate.
Chrome's extension storage on your device holds your settings, the number of posts filtered today, the posts you marked as a wrong call, feedback waiting to be sent, the model results for posts you have seen, and a random install ID. If you share usage data it also holds a separate random analytics ID. If you are signed in it holds your account details (email, name and picture link) and a sign-in token. If Chrome sync is on, Chrome syncs your settings through your Google account.
What is sent for a model check
Model checks need you to be signed in. When you are, the extension sends the text of your feed's posts and comments to our server for a second opinion from an AI model, unless the rules already flagged them as AI. Signed-out users never send text for a model check.
- We send the text of the post or comment, and whether it is a post or a comment.
- Before sending, the extension removes mentioned names and @handles from the text.
- We never send author names, handles, profile links or images in this release.
- Posts and comments the rules already call AI, and any under 25 words, are never sent.
The server asks the model, gets a score back and returns it. Our server does not keep the text. The AI providers that run the model handle it as described under "Who handles data for us".
What we store
- Model check results. We keep a one-way hash of the text together with the model's score, which signs it saw, its answer to each question, the model name, a style label and the time of the check for 30 days, so the same post isn't checked twice. The text itself is not stored. Anyone who checks the same text gets the same stored result, and the entry is not linked to you.
- Your account. When you sign in with Google we store your Google account ID, email address, name and profile picture link, your plan and the date you signed up. The email is used for your account only. It is never joined to the posts you check or to feedback.
- Your usage count. We count how many model checks you have used in the current billing month, so we can apply the free allowance. The count is tied to your account, not to the text.
- Sign-in tokens. We store a hash of your refresh token, never the token itself. We also keep a one-way hash of your Google sign-in token, kept until that token expires, so it can't be used twice.
Feedback and training text
When you press "Wrong call?", we receive a feedback report. It contains:
- a one-way hash of the text, and whether it was a post or a comment;
- the site, the label you gave, and the verdict you were shown;
- the rule score, the model's probability if there was one, the rule pack version and the model name;
- a one-way hash of your account ID, or of your install ID if you are signed out.
Feedback works signed out too, under a random install ID. It does not contain the text, unless you turn on "Help train NPC Filter" in the popup. That switch is off by default. When it is on, feedback also includes the post text (names and @handles removed, spacing tidied) so we can improve the rules. We delete that text 12 months after it was sent. You can turn the switch off at any time, which stops future text from being sent. Deleting your account also removes the text you sent while signed in (see below).
Google sign-in
Sign-in is optional. We ask Google for three scopes: openid, email and profile. These give us your Google account ID, email address, name and picture. We use them to run your account and nothing else. We do not read your mail, contacts, files or anything else in your Google account.
NPC Filter's use and transfer to any other app of information received from Google APIs will adhere to the Google API Services User Data Policy, including the Limited Use requirements.
Error reports
When the extension or our server hits an error, it can send a report to Sentry. A report holds the error message, a stack trace, the NPC Filter version, and the browser and operating system versions. Before it leaves, we strip anything that looks like an email address, a link, a token or a hash. Reports are built never to include post text, page addresses, your email or your name. Sentry is set not to store IP addresses. The content script that runs on LinkedIn never talks to Sentry itself; it passes the error to the extension, which sends it.
Anonymous usage counts
If "Share anonymous usage data" is on in the popup (it is on by default), the extension sends a few counts through our server to Google Analytics: installs, popup opens, sign-ins, and which setting you changed and to what value, such as "mode: blur". Only a fixed list of events is accepted. Each install uses a random ID that is separate from your account and from your feedback ID, so these counts can't be joined to either. They never include post text, pages or who you follow. Because they go through our server, Google sees our server's address, not yours. We tell Google Analytics not to use these counts for ads or ad personalization.
Turn the switch off and nothing is sent from then on, not even the change that turns it off. The random analytics ID is deleted from your device when you turn the switch off. Turning it back on starts a new one. The switch syncs through Chrome. A fresh install may send one anonymous "install" count before a switch you turned off on another device reaches it.
What we never do
- We never sell your data.
- We never show ads.
- We never build a score or a profile of any author.
- We never store post text without your opt-in.
- We never put the text of your posts in error reports or usage counts.
We use your IP address only as a rate-limit key on sign-in and usage-count requests. It is checked in the moment and not stored or logged by us.
Deleting your account
To delete your account, email privacy@npcfilter.com from the address of your Google account. We will delete it and confirm by reply. This removes:
- your account record (Google ID, email, name, picture, plan and sign-up date);
- all your sign-in tokens;
- the text of feedback you sent while signed in.
Your usage count stays in storage under a random account ID. Once your account is deleted, nothing links it to you.
Text sent while signed out is tied to a random install ID, not an account. Deleting your account does not remove it, and we delete it 12 months after it was sent.
Feedback rows themselves remain, without text. They hold only hashes, labels and scores. The reporter ID in them is a one-way hash, and once your account is gone it points to no one. Your settings stay on your device until you remove the extension. Signing out only ends your session. It does not delete your account.
How long we keep things
- Model check results (hash, score and answers): 30 days.
- Hash of your Google sign-in token: until the token expires, about an hour.
- Sign-in tokens: 30 days after they are issued. Expired ones are deleted daily.
- Training text from the opt-in: 12 months after it was sent, or sooner if you delete your account and sent it while signed in.
- Account details: until you delete your account.
- Your usage count: it stays under a random account ID after you delete your account, with nothing linking it to you.
- Feedback hashes, labels and scores: kept without text to improve the rules.
- Error reports and usage counts: kept by Sentry and Google under their own retention settings.
- Text sent to the backup model: kept by OpenAI under its API data policies, not by us.
Who handles data for us
- Cloudflare hosts our server and our storage, and runs our main AI model for checks. We turned off request logging and caching in AI Gateway on our side.
- OpenAI runs a backup model. When the main model can't answer, a backup model from OpenAI may be asked instead. We reach it through Cloudflare AI Gateway, and OpenAI gets the same post text as a model check. OpenAI handles that text under its API data policies (how OpenAI handles API data). How long it keeps the text is set by those policies, not by us.
- Google provides sign-in and the usage counts.
- Sentry receives scrubbed error reports.
As our host, Cloudflare also sees the technical details of every connection, such as the IP address, under its own terms. We share data only with the providers listed here, and only to run NPC Filter.
Contact
Questions, or want your data removed? Write to privacy@npcfilter.com. If we change this policy in a way that matters, we will update the version and date at the top of this page.