Trust & security

The promises behind every answer.

Four properties are protected by how Countdat is built, not by policy. A fifth covers answers: every one shows its working.

1 · Read-only where it reaches out

A job reading your database cannot change it.

When a scheduled job reads your own MySQL database, read-only is enforced three ways, on every query:

  • a read-only connection,
  • inside a read-only session,
  • with a time limit.

in pilot A probe goes further: it sends no query at all. Your system answers a fixed, signed health check, with no database login.

JobKey Headroom · reads your database every hour
read-only connection ✓ read-only session ✓ time limit ✓
2 · A preview before anything is saved

See the result first. Then say yes.

Imports, jobs, alerts, buttons and field changes all show their result before they are saved. Jobs are dry-run, alerts are checked against your real rows, and buttons are tried on a real row.

Import preview · sales-sept.xlsx
2 sheets · 3 tables found412 rows to add0 rows written yet
3 · A record of everything

Nothing is overwritten. Nothing is erased.

A correction is a new row pointing at the old one. A delete is a void - marked, not erased. Every row says where it came from: a tap, a sentence, a file or a job.

latte 09:12 · tap flat white 09:14 · voided espresso 09:20 · corrects 09:14
4 · Secrets stay secret

Your passwords never reach a model.

Passwords for your own systems are encrypted at rest and used only by the server. They are never shown to an AI model and never written to a log.

encrypted at rest ✓ used only by the server ✓ shown to an AI model never written to a log never
And a fifth · Answers show their working

Checkable, not just believable.

Every answer page has a Show the working link: the exact SQL the analyst ran, why each query ran, how many rows it read and how long it took. When an answer can't find a figure, it says so rather than inventing one.

How Show the working works →

-- Answer Log
-- Counter: coffee-count · biggest-day
-- Work: 2 queries · 46 rows read · 412 ms

-- 1. Counting coffees per day.
-- 23 rows · 190 ms
SELECT DATE(tapped_at) AS day, COUNT(*) AS coffees
FROM   rows
WHERE  voided_at IS NULL
GROUP BY day
ORDER BY coffees DESC;

Where your data lives

Each counter has its own database schema on Countdat's servers. People are asked before anything about them is recorded, and asked again if what is recorded changes.

Privacy policy · Terms · Ask a security question