npc filter

Privacy policy

Version 8. Effective 2026-11-02.

NPC Filter reads posts and comments in your browser. Signed-in users get model checks, which send post text to our server. Feedback never includes post text. The only free text is an optional note you write yourself. 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 LinkedIn, Reddit or X 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 (including whether you accepted the LinkedIn warning, and when), 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. Cloudflare runs the model and handles the text as described under "Who handles data for us".

Promoted posts, and the comments under them, are never checked or sent.

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.
  • Error reports. Error reports rest on our legitimate interest in keeping the service working. They are scrubbed of post text, links, emails and tokens before they leave.
  • Feedback labels. Feedback labels rest on our legitimate interest in improving the rules. They hold only hashes, labels and scores. Reports from Report AI also hold the optional note you type, in your own words.
  • 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

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 never contains the text of the post.

On a post or comment NPC Filter did not flag, you can press the small icon to report it as looking AI-written. We call this Report AI. It goes to the same place as "Wrong call?" feedback, under the same rate limits and the same retention. A Report AI report contains:

  • a one-way hash of the text, the site, and whether it was a post or a comment;
  • the pattern groups and signs you ticked;
  • the note you typed, if any, at most 280 characters;
  • NPC Filter's own scores for it: the rule score and signs, and the model's probability if there was one;
  • a one-way hash of your account ID, or of your install ID if you are signed out.

A Report AI report never contains the text of the post, or author names, handles or profile links.

We never store post text. Model checks and feedback keep only one-way hashes, labels and scores. The one exception is the optional Report AI note. It is your own words and is stored as you wrote it, so please don't paste the post into it. Older versions of the app may still send the post text along with feedback. Our server throws it away on arrival and never stores or logs it.

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 scripts that run on LinkedIn, Reddit and X never talk to Sentry themselves; they pass the error to the extension, which sends it.

LinkedIn is opt-in

Filtering on LinkedIn is off until you turn it on and accept a warning. LinkedIn's rules prohibit extensions that change how its site looks. Using NPC Filter on LinkedIn may lead to your account being restricted. On LinkedIn, NPC Filter starts in Label mode, which changes the page the least.

When you accept, we keep a record of the warning version and the time you accepted it, on your device and, if you are signed in, on your account. The record is deleted when you delete your account. Until you accept, NPC Filter does not change the LinkedIn page and sends nothing from it.

Reddit

On Reddit, NPC Filter is on by default and works on post pages: the post and its comments. It does not touch your home feed, subreddit lists or search results. You can switch it off in the popup, and you pick its mode there too. Reddit is not behind the LinkedIn warning.

Promoted posts and ads on Reddit, and anything inside them, are never read, checked, sent or changed.

X

On X, NPC Filter is on by default and works on posts in timelines (home, profiles, lists and search) and on the replies on a post's own page. You can switch it off in the popup, and you pick its mode there too. X is not behind the LinkedIn warning.

Ads on X, and anything inside them, are never read, checked, sent or changed.

Anonymous usage counts

If "Share anonymous usage data" is on in the popup, 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.

In the EU, the EEA, the UK and Switzerland, usage sharing is off until you turn it on. Everywhere else it is on by default. To decide that, the extension asks our server which country Cloudflare reports for the request. We never store or log the country or your IP address. If the country is unknown, we treat it as one of those regions. Your own choice in the popup always wins over this default.

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.

Legal bases

This section is for people in the EU, the EEA, the UK and Switzerland. In the UK the UK GDPR applies, and in Switzerland the Swiss Federal Act on Data Protection (FADP). We apply the same bases there.

  • Model checks. Model checks rest on our legitimate interest (Article 6(1)(f) of the GDPR) in giving readers a cleaner feed. We weighed that against the interests of the people who wrote the posts, and keep the impact small: names and handles are removed first, the text is not stored (only a one-way hash and a score, for 30 days), promoted posts are never sent, and only signed-in users send anything. You can object at any time by writing to us. Signed-out use never sends text.
  • Training. We do not train any model on post text in production. Training on post text would need its own consent flow, and we would update this page before doing it.
  • Usage counts. Usage counts rest on your consent. That is why they start off in the regions above.
  • Your account. We process your account details to provide the service you asked for.

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.
  • 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, usage-count and region 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, billing period and sign-up date);
  • your Stripe customer ID and subscription ID;
  • all your sign-in tokens;
  • your record of accepting the LinkedIn warning.

If you have a Pro subscription, deleting your account cancels it immediately. There is no refund for the current period.

Stripe keeps its own customer and invoice records, as described under "Payments", and deleting your NPC Filter account does not erase them.

Your usage count stays in storage under a random account ID. Once your account is deleted, nothing links it to you.

Feedback rows themselves remain. They hold only hashes, labels and scores. A Report AI row also keeps its note, if you wrote one. 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.
  • Account details and your record of accepting the LinkedIn warning: 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, and Report AI notes: kept to improve the rules.
  • Error reports and usage counts: kept by Sentry and Google under their own retention settings.
  • Stripe customer ID, subscription ID, plan and billing period: until you delete your account.
  • Stripe's own customer and invoice records: kept by Stripe, as long as tax law requires.

Who handles data for us

  • Cloudflare hosts our server and our storage, and runs the AI model that checks your text. One model does the checking, and no other AI provider sees the text. We turned off request logging and caching in AI Gateway on our side.
  • Google provides sign-in and the usage counts.
  • Sentry receives scrubbed error reports.
  • Stripe takes payments for Pro and keeps your payment records. We send it your email address and our internal user ID, and receive only your Stripe customer ID, subscription ID and plan status back.

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.

Payments

Pro is a paid plan. Payments are handled by Stripe, our payment processor. When you upgrade, the extension opens Stripe's checkout page in a new browser tab, and you give your payment details to Stripe there. Card data never reaches our server and we never store it.

To set up your Stripe customer record, we send Stripe your email address and our internal user ID. We store the Stripe customer ID and subscription ID that Stripe creates for your account, your plan, whether the subscription is set to end, and the date the paid period ends. We use them to show your plan, apply your monthly allowance and open Stripe's billing portal for you.

Stripe keeps its own customer record (your email address, billing address, and payment and invoice history) under Stripe's privacy policy, and keeps invoices as long as tax law requires. Deleting your NPC Filter account does not erase that record. To have your customer record removed from Stripe, say so when you write to us, and we will delete it there, apart from what tax law requires Stripe to keep.

Deleting your account also cancels a Pro subscription immediately, with no refund for the current period. To stop payments without deleting your account, cancel from Manage plan in the popup.

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.