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
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. Define an input line and expected structured result.
- 2. Build the Node and Python packages from source.
- 3. Run identical cases against both implementations.
- 4. Publish fixtures, per-case checks and runner source.
{
"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.
| Family | Layout | Node | Python |
|---|---|---|---|
| iOS | YYYY/MM/DD bracketed | ✓ Pass | ✓ Pass |
| iOS | ISO date + AM/PM | ✓ Pass | ✓ Pass |
| CJK | AM/PM marker before time | ✓ Pass | ✓ Pass |
| iOS | Slash date + AM/PM | ✓ Pass | ✓ Pass |
| Android | Slash date, dashed sender | ✓ Pass | ✓ Pass |
| Europe | Dotted 4-digit year | ✓ Pass | ✓ Pass |
| Europe | Dotted bracketed | ✓ Pass | ✓ Pass |
| Europe | Dotted 2-digit year | ✓ Pass | ✓ Pass |
| Brazil | DD/MM/YYYY | ✓ Pass | ✓ Pass |
| Netherlands | DD-MM-YYYY | ✓ Pass | ✓ Pass |
| Netherlands | Bracketed DD-MM-YYYY | ✓ Pass | ✓ Pass |
| Spanish iOS | YY-MM-DD | ✓ Pass | ✓ Pass |
| ISO | YYYY-MM-DD dashed | ✓ Pass | ✓ Pass |
| Android | YYYY/MM/DD dashed | ✓ Pass | ✓ Pass |
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.
Need media-rich output instead of the offline text-only CLI? Preview the hosted converter.
