Privacy

Last updated 14 August 2026.

The short version

Your log files are read and analysed entirely inside your browser. They are never uploaded, never stored, and never seen by this server or by anyone operating it. That is not a policy promise we ask you to take on trust: it is how the product is built, and you can confirm it yourself in your browser's network inspector while a file is being analysed.

What we do store is an account (your email address) and a count of how many files you have analysed. The exact payload that count is sent as is printed in full below.

Your log files

The analysis engine is a WebAssembly module that runs in a background thread in your browser. When you drop a file onto the page, the browser reads it from your own disk and hands it to that engine in chunks. Nothing about the file's contents crosses the network.

This includes everything a PBX log contains that you would not want shared: extension numbers, dialled numbers, caller IDs, trunk and peer names, SIP headers, IP addresses, and the log text itself. None of it is transmitted, and neither are hashes or fingerprints of any individual value in it. A short hash of an extension number would be trivially reversible by trying every extension, so we do not produce one.

The page also stores nothing on your device. There is no local history, no cached copy of your file, and no offline database. Closing the tab discards the analysis.

Your account

Creating an account stores your email address, a hash of your password (Argon2id, never the password itself), whether you have confirmed your email, and the date you signed up. We also keep a count of consecutive failed sign-in attempts and the time of the last one, which is what lets us lock an account temporarily after repeated failures.

If you sign in with Google, GitHub, or Microsoft instead, we store the provider's name and the account identifier it gives us, matched to your email address. We never receive your password for those services.

Email confirmation and password reset links are random tokens. We store only a SHA-256 hash of each one, they can be used once, and they expire after 24 hours. A copy of our database would not yield a working link.

Usage measurement, in full

Accounts have a monthly limit on how many files can be analysed, so the number has to be counted somewhere. When an analysis finishes, and only if you are signed in, your browser sends exactly this:

{
  "tag":   "4f3c1a…",   // 64 hex characters, described below
  "bytes": 128394217,   // size of the file analysed
  "calls": 4127,        // number of calls found in it
  "ms":    14320        // how long the analysis took
}

That is the entire message. There is no filename in it: a filename is the one field that routinely carries a customer or company name, and counting does not need it.

The tag is an HMAC-SHA256 of the file's bytes, computed in your browser using a key derived for your account alone. Its only job is to recognise a file you have already analysed, so that re-running it does not cost you a second analysis. Because the key differs per account, two people analysing the same file produce unrelated tags and we cannot tell that it was the same file.

Being straight about the limit of that: the key is derived on our server, so we could confirm a match for a file we already possessed a copy of. It prevents correlation between accounts. It is not a claim that the tag is irreversible against a file someone already has.

The message is sent after an analysis completes, never before, so a file you load and then abandon is never recorded at all.

Cookies

One cookie, pbxray_session, set when you sign in. It holds a random token, is marked HttpOnly and Secure so scripts on the page cannot read it, uses SameSite=Lax, and expires after 30 days. We store only a hash of it.

There are no analytics cookies, no advertising cookies, and no third-party cookies, because there is no third-party code on this site at all. No analytics service, no tag manager, no CDN, no hosted fonts, no error reporter. The page's Content-Security-Policy blocks connections to anywhere but this site, so a future mistake on our part would fail visibly rather than quietly send data somewhere.

Server logs

The web server records requests it serves: the time, the method and path, the response status, and the browser's user-agent string. Client IP addresses are stripped before the entry is written. Keeping them is ordinary practice and we would rather not: a product whose premise is that your logs stay on your machine should not quietly keep a log of everyone who visited. These files roll at 10 MB and only the five most recent are kept.

Who else is involved

We do not sell, rent, or share your information with anyone else, and there is no advertising on this site to sell it to.

Where it is kept, and for how long

Everything lives in a single database on one server in New Jersey, United States. pbxray is operated from South Africa.

Sign-in sessions expire after 30 days. Email links expire after 24 hours and are deleted the moment they are used. Your account and its analysis counts are kept until you ask us to delete them.

Your choices

Email privacy@pbxray.com and we will give you a copy of everything held about your account, correct it, or delete it and the account with it. There is no form to fill in and no retention period we will hold you to.

Changes

If this policy changes in a way that affects what we collect, the date at the top changes with it and account holders are emailed. We are not going to quietly widen it.