OPEN BENCHMARK · 2026.07

Can one parser read WhatsApp exports from 14 date formats?

We converted a compatibility claim into a public test: 24 synthetic fixtures covering date layouts, non-Western numerals, multiline messages and message classification, run against the same open-source parser in Node.js and Python.

24

synthetic cases

14

timestamp layouts

2

language runtimes

0

private chats used

Node.js 0.1.1

24 / 24

100.0%

Deterministic assertions passed

Python 0.1.1

24 / 24

100.0%

Deterministic assertions passed

Read this result narrowly: 100% means both published parsers passed this published fixture set. It does not mean they support every WhatsApp version, device, locale or malformed export in existence.

Methodology

The benchmark is small enough to audit line by line

Every input is synthetic and every expected value is explicit: message count, participant extraction, sender, message text, classification and date/time components. Both runners read the same JSON fixture file and exit with a failure code if any assertion fails.

  1. 1. Define an input line and expected structured result.
  2. 2. Build the Node and Python packages from source.
  3. 3. Run identical cases against both implementations.
  4. 4. Publish fixtures, per-case checks and runner source.
synthetic-fixtures.json
{
  "id": "timestamp-android-slash",
  "input": "3/15/24, 2:30 PM - Researcher: Hello",
  "expected": {
    "messageCount": 1,
    "sender": "Researcher",
    "year": 2024,
    "month": 3,
    "day": 15,
    "hour": 14,
    "type": "text"
  }
}

Timestamp compatibility

All 14 published layouts passed in both runtimes

This table reports the timestamp category only. The downloadable results also include four numeral-normalisation cases and six behavioural cases.

FamilyLayoutNodePython
iOSYYYY/MM/DD bracketedPassPass
iOSISO date + AM/PMPassPass
CJKAM/PM marker before timePassPass
iOSSlash date + AM/PMPassPass
AndroidSlash date, dashed senderPassPass
EuropeDotted 4-digit yearPassPass
EuropeDotted bracketedPassPass
EuropeDotted 2-digit yearPassPass
BrazilDD/MM/YYYYPassPass
NetherlandsDD-MM-YYYYPassPass
NetherlandsBracketed DD-MM-YYYYPassPass
Spanish iOSYY-MM-DDPassPass
ISOYYYY-MM-DD dashedPassPass
AndroidYYYY/MM/DD dashedPassPass

Numeral normalisation

Arabic-Indic, Persian, Devanagari and Thai digits are translated before timestamp matching.

Conversation behaviour

Multiline continuation, participant extraction, system messages, media, deleted messages and calls are asserted.

Ambiguous dates

When both day and month are 12 or below, the parser uses format context and AM/PM heuristics. Verify against the source device.

Limitations and non-claims

  • The fixtures are representative synthetic examples, not a statistically sampled corpus of real exports.
  • The benchmark tests parsing compatibility; it does not test whether WhatsApp exported an entire conversation.
  • It does not establish authorship, truth, authenticity, chain of custody, lawful collection or legal admissibility.
  • It does not benchmark PDF visual fidelity, embedded media, voice transcription, speed or memory use.
  • New WhatsApp releases and locale formats can appear. Re-run the public suite and submit missing formats as issues.

Reproduce or extend it

The parser, runners and fixtures are open source

Run the same cases locally, inspect every assertion, or open an issue with a missing export header. The local CLI keeps chat text on your own machine.

View on GitHub

Need media-rich output instead of the offline text-only CLI? Preview the hosted converter.