Methodology
Scores are claims. Receipts are proof.
NoThanks exists to make concerns about digital products concrete and checkable. This page defines the score scale, the four dimensions, the evidence we require, and the validation that runs on every proposed change.
Scoring model
Every entity is scored on the same four dimensions, each on a 0–10 scale. Higher scores indicate more predatory behavior or greater user harm. The overall score is the unweighted average of the four dimensions, rounded to one decimal place.
Scores are editorial judgments informed by receipts. They are not measurements of harm, and they are not legal findings. A dimension can be scored even when receipt collection is still in progress; the receipts section will say so explicitly.
| Band | Range | What it means |
|---|---|---|
| Low | 0.0–3.9 | Practice is absent, opt-in, or easy to avoid. Residual concerns may be documented. |
| Moderate | 4.0–6.9 | Practice is present and material, but bounded by controls, pricing, or user choice. |
| High | 7.0–8.9 | Practice is pervasive or hard to avoid, with limited meaningful consent. |
| Severe | 9.0–10 | Practice is core to the business model, coercive, or effectively inescapable. |
Working rules
- Scores reflect observed practice, not intent or reputation.
- A high score requires evidence; absence of evidence is recorded as a gap, not a clean bill of health.
- When evidence is thin, the dimension summary states the uncertainty.
- Scores are comparable across entities because the scale and bands are fixed.
Dimension definitions
The four dimensions are deliberately broad so that different kinds of products can be compared without forcing every concern into one bucket.
Financial Manipulation
Pricing traps, gambling-like mechanics, and dark patterns that push spending.
Signals we look for
- Loot boxes and gacha pulls
- Obscured or layered pricing
- Pay-to-skip progression walls
- Recurring charges with weak cancellation paths
Data Extraction
Data collection, tracking, sharing, and telemetry that follows you around.
Signals we look for
- Device and advertising identifiers
- Contact graph or media indexing
- Third-party analytics SDKs
- Broad or ambiguous retention
Behavioral Gating
Engagement pressure, notifications, streaks, and lockouts that shape behavior.
Signals we look for
- Streaks and timed energy meters
- Push reminders and re-engagement loops
- Default-on read receipts
- Friction when downgrading or leaving
Protocol Locking
Proprietary formats, export restrictions, and interoperability barriers.
Signals we look for
- No data export or a walled export format
- No federation or third-party clients
- Account transfer codes instead of portability
- Closed APIs and terms that block interoperability
Evidence requirements
A receipt is a falsifiable claim with a way to check it. Every receipt should be specific enough that a reviewer could confirm or refute it without inside access.
Required
- A non-empty
claim: a concrete, observable statement. - Claims must be about the product or service, not about a category in the abstract.
Expected whenever possible
url: the primary source — policy, documentation, store listing, filing, or reproducible observation.archiveUrl: a Wayback or equivalent snapshot for mutable pages.date: when the evidence was observed or captured.snippet: a short excerpt that gives the claim context.
Quality bar
- Prefer primary sources over summaries or news coverage.
- Distinguish observation from inference in summaries.
- Do not mix marketing language into claims; describe what was observed.
- All entries are real products with primary-source evidence. No mock or demo content.
Real products only. All entries are real products with primary-source evidence. No mock or demo content is published.
How PR validation works
Proposed changes to entity data or site code run through the checks defined in
.github/workflows/validate-pr.yml. The goal is to keep the index
structurally valid, sourced, and buildable.
- Schema & template validation.
node scripts/process/validate-data.mjschecks that every entity file matches the schema: required fields, slug/filename agreement, score ranges, and http(s) URLs. - URL alive check.
node scripts/process/check-urls.mjsverifies that URLs in changed entity files return reachable responses. - Content guardrail.
node scripts/process/llm-guardrail.mjsruns heuristic checks for biased or non-neutral language, with an optional LLM review hook when provider credentials are configured. - Build.
npm run buildconfirms the static site still generates correctly.
Data-only changes should pass the same bar as code changes. If a URL cannot be archived, say so in the PR description and include the observation date.
New entities usually start with the research CLI:
npm run research -- "Product Name". It fetches official pages and
produces a draft scorecard with receipts for review before a PR. See
docs/RESEARCH.md for the command reference and evidence rules.
Limitations & corrections
This is a work in progress. Coverage is uneven, products change frequently, and scores reflect the evidence available at the time of the last update.
- A low score is not an endorsement; it means the observed practice was absent, bounded, or easy to avoid.
- A high score is a prompt to look at the receipts, not a verdict.
- Missing receipts are gaps. A dimension with no receipts may still carry a score, but the summary should say so.
- To challenge a score or receipt, open a pull request with a better source.
Help improve the index
Add an entity, challenge a receipt, or propose a methodology change. The contribution guide covers the data format, evidence standards, and PR steps.
Read the contribution guide