How it works · in depth

Verification

What the receipt actually checks.

After a run, Excise PDF reopens the file it just wrote and reads the report out of those bytes — never out of what the run believed it did. This page is what that report is made of, and what it cannot tell you.

Two engines, because most of a PDF's text is not on the page

A verifier that only re-extracts page text is checking the half of the document a reader can see. So the check is split in two, on a line chosen so the halves neither overlap nor leave a gap:

ChannelWhat it doesThe question it answers
Page content Re-extracts the text of every page from the written file — the raw extraction, which is the adversary's view. Is the text still on the page?
Object graph Enumerates every indirect object in the document and every string inside it. Content streams are deliberately excluded here; they belong to the other channel. Is the text in a form value, a bookmark title, the document info, a name tree?

The evidence that both are needed is in the test corpus, and it is the most useful thing on this page. One fixture extracts as Owner of record: — the page text names nobody — while a form field still holds the name. Another has a page that names nobody at all, a document-info entry naming the subject, and a bookmark titled after the deposition. A verifier built on re-extraction alone passes both of them.

Scope is stated before findings

The receipt opens with what was inspected — pages, objects, strings, which hidden-data categories were checked, and which ones you asked it to keep — and only then says what was found. Scope is the part a reader cannot reconstruct afterwards: “nothing found” means nothing without the sentence above it saying where the looking happened.

A receipt panel: a Verified banner naming the written file, an Inspected line counting the pages, objects and strings that were read, a note that an exemption code was printed on two redactions, and the plain-text receipt listing every hidden-data category that was checked.

The receipt for one file, under one policy — which is the only kind of statement it makes.

A pass is conjunctive

Passing is not “we looked and found nothing.” It is every condition holding at once, and the conditions include the ones where the app could not look:

  • Nothing the rules target is still extractable from any page.
  • Nothing they target is left in the object graph.
  • The areas you drew read back empty at their own coordinates.
  • Every match you reviewed was applied. A match you left unchecked is still extractable, so the receipt reports it as extractable rather than forgiving it.
  • Every page could be read by something. A page nothing could read leaves a question open.
The rule this page exists to protect

An unanswered question is not a pass. The cheapest thing in software to draw is a green banner. Everything here is arranged so one can only appear over a claim that something actually measured.

OCR is an explicitly weaker third channel

A page with no text layer is unanswerable by either engine above. If you asked for OCR, the verifier re-renders that page out of the written file and reads it back with Vision, on device. It is kept apart from the other two on purpose, and the receipt prints the reason next to the result:

Printed beside every OCR result

“An empty residual text result means the file does not contain the words. An empty OCR result means an OCR engine did not read the words off a picture of the page — a good sign, and not a proof.”

The resolution the page was actually read at is printed with it — the lowest, not the average, and measured from the render rather than taken from the setting. A page OCR read nothing from stays unchecked and keeps the document from passing: from here, a blank sheet and a scan too poor to read are the same observation.

What the receipt does not do

  • It does not certify anything. It reports what was inspected and what was found, in one file, under the settings of that run. Marketing may quote it; it may not summarise it upward, and neither should you.
  • It does not look inside embedded file streams. An attachment is removed whole or kept whole. A policy that keeps them gets a line saying they were kept and how many are present — not a claim about their contents.
  • It is not a claim that no forensic route exists. The claim is mechanical and specific: the characters were removed from the content stream, the object graph was sanitized, and the written file was reopened and read back.
  • It does not know whether your redactions were the right ones. Which words must go is your decision; the receipt only says what happened to the ones you chose.

The receipt is the product. Everything else on the site is how it gets its evidence.

See launch details

Read next