This tool reads a Playwright storage-state export from your own authenticated browser session and converts current Any.do data into JSON files for migration to another system.
This project is unofficial and is not affiliated with, endorsed by, or supported by Any.do.
Use this tool only for exporting your own data and only if your use complies with Any.do's terms and all applicable laws.
This project exists to provide a small, practical, one-time export path for personal data portability when an official export flow is unavailable or insufficient.
Use this tool to:
- Back up your own tasks
- Analyze your data
- Migrate to another system
- Create AI-friendly structured exports
This project reads a Playwright storageState export (with IndexedDB included) from your own authenticated browser session and converts it to structured JSON.
It does not bypass login, call private APIs directly, modify your Any.do account, or automate task changes.
This code is offered as a convenience and as an example for others. It is provided without guarantees, and it is not actively maintained.
anydo_export.json— full export from Any.do web IndexedDB (anydo-sync-db)anydo_completed_tasks.json— only tasks withstatus == "CHECKED"anydo_export_summary.json— counts and quick overviewanydo_export_flat.json— normalized AI-friendly export (tasks,lists,labels,tags)
The exporter redacts sensitive auth-like fields in output (keys containing:
tokenpasswordauthidSalt
Redacted values are replaced with "[REDACTED]".
Redaction is best-effort only. Exported files may still contain sensitive personal or account-related data (for example: task content, notes, participant information, location metadata, and other fields outside current redaction rules). Review output files carefully before sharing them with other people, tools, or AI systems.
- Any.do web at
https://app.any.do(observed March 2026) - Playwright
storageState({ indexedDB: true }) - Python
3.14.3
- Python
3.9+ - A Playwright storage-state file with IndexedDB included
The script expects a Playwright storage-state file at:
anydo_storage_state.json
That file must include IndexedDB for https://app.any.do.
In a Playwright-enabled session (Codex + Playwright MCP):
- Navigate to
https://app.any.do/ - Log in normally (email/password/2FA)
- Run this in Playwright context:
await page.context().storageState({ path: 'anydo_storage_state.json', indexedDB: true });This writes anydo_storage_state.json in the current project directory.
From this directory:
python3 export_anydo.pyOr with a custom input/output path:
python3 export_anydo.py anydo-state.json --output-full anydo_export.json --output-completed anydo_completed_tasks.json --output-summary anydo_export_summary.jsonAfter anydo_export.json exists, run:
python3 flatten_anydo_export.pyOr with custom input/output files:
python3 flatten_anydo_export.py anydo_export.json --output anydo_export_flat.jsonThis creates anydo_export_flat.json with list names resolved on each task and simplified task fields for downstream AI import.
Example output from python3 export_anydo.py:
{
"database": "anydo-sync-db",
"taskCounts": {
"all": 115,
"completed": 77,
"active": 38
}
}Top-level keys in anydo_export_flat.json:
exportedAtsourcetaskCountsliststagslabelstasks
- Schema-dependent: Any.do IndexedDB structure may change and break decoding.
- Best-effort redaction: output is not guaranteed safe for public sharing.
- Single-user utility: no multi-account orchestration or long-term maintenance guarantees.
Data flow is:
- IndexedDB records in Playwright storage state
- Decode encoded key/value structures
- Emit full and flat JSON exports
After successful export, remove the storage-state file to reduce exposure:
rm -f anydo_storage_state.jsonNo active support is provided for this project.