method
How this is sourced
An independent tracker. No vendor pays for placement, reviews entries, or sees them before they're published. How it is funded.
- Favourable
- Caution
- Unfavourable
- Unverified
- Neutral / n/a
- rules
Method
Where the data comes from
Only the vendor's own pages: privacy policies, terms, trust and security pages, and product docs. No third-party blogs, no Reddit threads, no sales calls. Every field stores the URL, a short quote or paraphrase, and the date it was checked.
What “unverified” means
If an official page doesn't state something clearly, the field says unverified (Unverified) with a note on what we looked at. We don't fill gaps with what a vendor is “known” to do. A blank is more useful in a security review than a confident wrong answer. Right now 26 of 200 fields are unverified; each one is a WARN line in the event stream.
What's checked
- Trains by default: whether your inputs and outputs train models without you doing anything, and how to opt out.
- Default retention: how long prompts and outputs are kept if you change nothing.
- Zero data retention: whether it exists and how you get it (self-serve, by request, by approval).
- Abuse-monitoring exception: what can still be stored or human-reviewed when content is flagged, including under ZDR.
- Data residency: region options, with Singapore and APAC called out.
- SOC 2 / ISO 27001, HIPAA BAA, and self-host options.
How statuses are assigned
The status lights are a reading aid, not a score. They come from fixed rules applied to the value text at build time (see scripts/derive.py), so the same value always gets the same status. Each status has its own shape as well as its own colour, and the table and evidence log also spell it out in text. Read the quote before you rely on one.
| Light | Status | Shape |
|---|---|---|
| Favourable | filled circle | |
| Caution | triangle | |
| Unfavourable | square | |
| Unverified | hollow ring | |
| Neutral / n/a | dash |
| Field | Rule |
|---|---|
| Trains on your data by default | no → favourable · depends on plan/provider → caution · yes → unfavourable |
| Default retention | nothing kept by default → favourable · a range that starts at zero, or up to 30 days, or an unstated period → caution · more than 30 days or until deleted → unfavourable (caution if the value says it only applies conditionally, e.g. “if shared”) · configurable / follows other settings → neutral |
| Zero data retention | available (default, self-serve, on request or on approval) → favourable · partial → caution · not offered → unfavourable · not applicable → neutral |
| Abuse-monitoring exception | none stated → favourable · any carve-out that can keep or review content → caution · not applicable → neutral |
| Data residency / regions | Singapore region → favourable · APAC but not Singapore → caution · no APAC option → neutral (this column is an APAC lens) |
| SOC 2 / ISO 27001 | SOC 2 or ISO 27001 confirmed → favourable · other certifications only → caution |
| HIPAA BAA | BAA available → favourable · not available → unfavourable |
| Self-host option | yes → favourable · partial or a separate product → caution · hosted only → neutral |
Retention values are free text. To draw the retention chart, the build reads the numbers and units in the value (for example “14 days (base) / 180 days (extended)” becomes 14 to 180 days), treats “none by default”, “transient” or “not logged” as zero, and “until deleted” or “indefinite” as no limit. Values with no number, like “configurable”, are listed under the chart instead of drawn.
How it stays current
A script fetches every cited page nightly, strips it to the main text and diffs it against the last snapshot (121 pages in the checker index at the last run, 2026-10-26). A diff is a prompt to re-read the page, not an automatic update. Confirmed changes go in the changelog.
Where the event stream comes from
Every line in the event stream is built from files in the repo: confirmed changes in data/changelog.json (CHANGE), checker runs and fetch failures in snapshots/index.json and its git history (INFO, ERROR), fields re-checked after the baseline (INFO), and unverified fields (WARN). The checker records dates, not times, so no times are shown. The per-tool source-check row shows one cell per run on record; nothing before the first run is filled in.
Limits
- Policies differ by plan. Where a tool has free, paid and enterprise tiers, the field says so.
- Your signed contract, DPA or order form overrides any public page.
- Some trust portals only render with JavaScript and couldn't be read; those fields stay unverified until there's a readable source.
- This is not legal advice.
Corrections
Corrections are welcome, especially from people who work at these vendors. Point to an official page that shows the right answer and the entry gets updated with the new source and date. To report one, open a GitHub issue. To ask for a tool that is not listed, suggest a tool.
Data
25 tools, newest field check 2026-10-25. Download the full dataset as CSV or JSON.
This site counts visits with Cloudflare Web Analytics, which uses no cookies and does not track you across sites. Why I picked Cloudflare over GoatCounter.