Trust

Methodology & Integrity Verification

Exactly what ScanMyChat does to a WhatsApp export, what its fingerprints can and cannot establish, and how anyone can check a package with free, standard tools.

Processing steps

All steps run in JavaScript in your browser. Nothing is uploaded.

  1. 1

    Read the file locally

    The WhatsApp export (.zip or .txt) is read into the browser tab’s memory. It is not uploaded.

  2. 2

    Fingerprint the source

    Before anything else, the SHA-256 hash of the unmodified file is computed with the browser’s Web Crypto API.

  3. 3

    List and fingerprint the archive

    For ZIP exports, every file in the archive is listed and hashed individually.

  4. 4

    Parse the messages

    The chat text is read line by line. A new message starts at each line with a WhatsApp timestamp header; following lines are continuations of that message.

  5. 5

    Interpret dates

    Day/month order is inferred from all dates in the file. If it is ambiguous, it is flagged and you can override it. Timestamps are reproduced as written — device local time, no time-zone conversion. You may declare the time zone in the case details.

  6. 6

    Run consistency checks

    The checks below are run and their results listed for review.

  7. 7

    Render the package

    The transcript, indexes and report PDF are generated locally. The source file is never modified.

What the package contains

<report-id>_report.pdf
Cover, summary, integrity manifest, processing methodology, known limitations, consistency checks, chronological transcript with Bates-style page stamps (PREFIX-000001), attachment index, chain-of-custody worksheet, unsigned declaration template, Appendix A verification.
<report-id>_transcript.csv
Every message with its number, source line number, timestamp, sender, text, marker flags and attachment status. Keeps original characters, including emoji.
integrity-manifest.json
Machine-readable record of the SOURCE and TRANSCRIPT hashes, the hashes of the PDF and CSV, a hash for every file in the source archive, the check results and the user-supplied case details.
VERIFY.txt
Plain-text instructions and expected hashes for checking the package without any ScanMyChat software.

The three fingerprints

SHA-256 turns any file or text into a 64-character value. Change a single byte and the value changes completely. Each package records three of them, so each layer can be checked on its own.

SOURCE SHA-256

Fingerprint of: The exact file you imported (the .zip or .txt from WhatsApp).

Lets you check: Whether another copy of the export is bit-for-bit identical to the file that was processed.

TRANSCRIPT SHA-256

Fingerprint of: The canonical transcript text: one line per message in the form index<TAB>timestamp<TAB>sender<TAB>text, with line breaks inside a message written as \n, lines joined by \n, encoded as UTF-8.

Lets you check: That the transcript can be reproduced from the source file, independent of PDF layout.

REPORT SHA-256

Fingerprint of: The generated report PDF.

Lets you check: Whether a later copy of the PDF has changed since it was generated. A file cannot contain its own hash, so this value is recorded in integrity-manifest.json and VERIFY.txt.

What the hashes do not show: who wrote a message, whether its content is true, or that the export is complete. A matching hash shows a copy is unchanged since it was fingerprinted — nothing about what happened on the phone before the export.

Five questions that are easy to confuse

People often treat these as one question. They are not, and a package helps with only some of them.

Source integrity

Is this the same file that was exported and processed? The SOURCE hash answers this for anyone holding a copy.

Copy integrity

Has the transcript or report been changed since it was generated? The TRANSCRIPT and REPORT hashes answer this.

Authorship

Who actually typed a message. No export or hash shows this; it is usually established through testimony, device or account records.

Authentication

Showing the evidence is what it claims to be — typically testimony from someone with knowledge, supported by records like these. The package supports this; it cannot do it for you.

Admissibility

Whether a court will accept the evidence. Decided by the court under your jurisdiction’s rules. No software can guarantee it.

Consistency checks

Each check flags an item for a person to review. A flag is never a finding of tampering — most have ordinary explanations.

Timestamp earlier than previous message
A message dated more than one minute before the one above it. Often caused by a phone clock change, travel across time zones or delayed delivery; it can also indicate that a file was edited.
Identical consecutive message
The same sender sent the same text twice in a row. Usually a double-send or forwarding; worth confirming against the device.
Referenced attachment missing from the ZIP
A message refers to a file that is not in the archive. Common when media was not downloaded on the phone or was deleted before export.
Files in the ZIP not referenced by any message
Extra files in the archive. May be harmless (e.g. contact cards) or may mean the archive was assembled or modified after export.
Media omitted markers
WhatsApp wrote “<Media omitted>” because the chat was exported without media or the media was unavailable.
Deleted-message markers
WhatsApp shows a placeholder where a message was deleted before export. The original content is not in the export.
Edited-message markers
The message was edited after it was sent. The export contains only the final version.
Gaps of 60 days or more
No messages for a long period. Useful context for a timeline; may also mean messages are missing from the export.
Ambiguous day/month order
Every date in the file fits both day-first and month-first formats. Confirm the interpretation against the phone; you can override it.
Unrecognized leading lines
Lines before the first timestamped message that could not be parsed. They are not included in the transcript.

Reproducibility

The SOURCE hash depends only on the file, so any tool gives the same value. The TRANSCRIPT hash depends on the file and the parser: importing the same source file in the same software version reproduces the same transcript and the same hash. Every report records the software version (currently 2.1.0) and package format (evidence-package/2).

The REPORT hash identifies one specific PDF. Generating the package again creates a new PDF — with a new generation time and report ID — and therefore a new report hash, while the source and transcript hashes stay the same.

How to verify a package

No ScanMyChat software or account is needed.

  1. Open VERIFY.txt or integrity-manifest.json from the package and note the expected hashes.
  2. Open a terminal in the folder containing the file you want to check and run:
    # macOS / Linux
    shasum -a 256 "WhatsApp Chat.zip"
    
    # Windows (PowerShell)
    Get-FileHash "WhatsApp Chat.zip" -Algorithm SHA256
  3. Compare the output with the expected value. Upper or lower case doesn’t matter; every other character must match.
  4. Repeat for the report PDF (REPORT hash) and, if needed, for individual attachments against the attachment index.
  5. To check the TRANSCRIPT hash, rebuild the canonical text described above from the transcript CSV and hash it, or re-import the source file in the same software version.

Known limitations

  • A WhatsApp export contains only what WhatsApp includes. Deleted messages, reactions, call logs, read receipts and device metadata are generally not present.
  • WhatsApp caps the number of messages it exports (particularly with media). Completeness should be confirmed against the device.
  • Display names come from the exporting device’s contact list. They do not identify account holders.
  • Timestamps are shown as the device recorded them, in its local time. No time-zone conversion is applied.
  • The PDF’s embedded font cannot draw emoji and some non-Latin scripts; these appear as code points such as [emoji U+1F602]. The CSV keeps the original characters.
  • The software cannot prove who wrote a message, whether its content is true, or whether the device or export was manipulated before it was imported.
  • Consistency checks flag items for human review. A flag is not a finding of tampering, and the absence of flags is not proof that nothing was altered.
  • ScanMyChat cannot guarantee that any court will admit the package.

Changelog

v2.1.0 — September 2026 · package format evidence-package/2

  • Case timeline: messages tagged by the preparer, with page references, plus a timeline CSV
  • Non-destructive redaction of phone numbers, emails, custom terms and excluded message ranges, with a redaction log and a separate REDACTED TRANSCRIPT hash
  • Transcript CSV gains excluded, redactions and tag columns

v2.0.0 — September 2026 · package format evidence-package/2

  • Integrity manifest with separate SOURCE, TRANSCRIPT and REPORT hashes
  • SHA-256 fingerprints for every attachment
  • Consistency checks flagged for review
  • Chain-of-custody worksheet and unsigned declaration template
  • Free local analysis before purchase
  • Replaces the v1 report, which recorded a single hash of the PDF