schultetable
Data & privacyTracker exportsLocal history

How to Back Up Your Schulte Table History

Learn how Schulte Table history is stored locally, when to export CSV or JSON, how JSON import works, and what happens when you clear browser storage or switch devices.

By schulte-table.org editorial team ·

The Progress Tracker does not read an online account. It reads versioned attempt records from localStorage for schulte-table.org in the current browser. That keeps the workflow simple, but it also means clearing site data or moving to another browser can leave the new context with no history.

The practical safeguard is an export. CSV is useful for inspecting selected records in a spreadsheet. JSON preserves the structured records the current Tracker can validate and import, so it is the format for a round-trip backup and restore.

1. Where the shared history lives

The current storage key is schulte:attempts:v1. It belongs to this site’s browser origin and holds an array of validated version-1 records. A different browser profile, another browser, or another device has a separate local storage area. The site does not automatically copy these records between them.

A supported tool saves a record only when its code calls the shared attempt store. Generator and printable layouts do not become Tracker records. Some tools also keep separate page-specific settings or histories under other keys; exporting the Progress Tracker covers the shared attempt collection, not every preference or every tool-specific local object.

Browser clearing controls, private-browsing behavior, storage pressure, extensions, or organizational policies can remove or isolate local storage. If the history matters, make a file export before clearing data or changing environment.

Supported tool completes or saves a round
Validated record
schulte:attempts:v1 in this browser
CSV for inspection or JSON for restore
User-retained file

2. What one record contains

Every accepted record has schemaVersion 1, a non-empty ID, an ISO completion timestamp, grid size from 3 through 10, matching cell count, an allowed mode, non-negative duration, non-negative integer mistakes, and a completion boolean. An optional inputMethod can be mouse, touch, keyboard, or unknown. An optional challengeId can carry local challenge context.

The schema has no field for a name, email address, IP address, or device fingerprint. That does not mean it contains no device-related context at all: inputMethod is a broad optional local field. The exported file is still a history of activity times and dates, so store or share it according to your own needs.

// Example only — fictional data
{
  "schemaVersion": 1,
  "id": "example-record",
  "completedAt": "2026-08-14T04:00:00.000Z",
  "gridSize": 5,
  "cellCount": 25,
  "mode": "number-ascending",
  "durationMs": 32800,
  "mistakes": 1,
  "completed": true,
  "inputMethod": "mouse"
}

3. CSV and JSON have different purposes

CSV exports the currently filtered records with a header row and one row per attempt. Its columns are schemaVersion, id, completedAt, gridSize, cellCount, mode, durationMs, mistakes, completed, inputMethod, and challengeId. Quoting is applied where a value contains a comma, quote, or line break.

JSON exports a wrapper with schemaVersion, exportedAt, and the attempts array. It retains number and boolean types and the nested collection structure. The current interface offers Import JSON only; it has no CSV importer. CSV is therefore export-for-analysis, not the round-trip restore format.

The Export buttons use the active Tracker filters, not necessarily the full unfiltered history. Before calling a JSON file a complete backup, choose filters that include the records you intend to preserve—typically All dates, all sizes, all modes, all input methods, and completed-state settings appropriate to the collection.

Current export and import behavior
FormatGood forKeeps full record schemaCan current Tracker import it?Human-readable
CSVSpreadsheet inspection and analysisAll record columns, flattenedNoYes, rows and columns
JSONBackup, transfer, and restoreYes, structured wrapper and attemptsYesYes, structured text

4. How JSON import validates and merges

Import reads the file you select in the browser and parses JSON. The parser accepts either an array or an object with an attempts array, then keeps only records that satisfy the current version-1 schema. A version mismatch, invalid date, impossible cell count, unknown mode, negative duration, invalid mistake count, or other failing field makes that item invalid.

Valid incoming records merge with existing records. IDs are the deduplication key: if an incoming ID matches one already present, the existing first occurrence is kept once. Import does not wipe the current collection before merging. The merged result is sorted with newer completion timestamps first and written back to the same localStorage key.

If the file produces no valid records, the interface reports failure and does not perform a useful import. It does not attempt to repair an old schema or infer missing fields. Keep the original export file if you are testing a transfer, and confirm the expected records appear before deleting the source browser’s data.

Validated

Each item must match the current version, allowed fields, grid/cell relationship, mode list, timestamp, duration, mistakes, and completion rules.

Merged

Incoming valid records join current records. Import is not a replace-all operation.

Deduplicated

A matching record ID is retained once. Similar times with different IDs remain separate records.

5. A safe browser-to-browser transfer

First open the source Tracker and reset filters so the intended history is visible. Export JSON and save the file somewhere you control. Open the destination browser on schulte-table.org, choose Import JSON, select the file, and review both the import notice and the visible raw records.

A second import of the same file should not double records with the same IDs. If the destination already has its own history, the two collections merge. Export again from the destination after verification if you want one consolidated file.

  • Show the full intended source set
  • Export JSON
  • Retain the original file
  • Import JSON in the destination browser
  • Check count, modes, dates, and raw records
  • Make a new consolidated export if useful

6. Delete filtered versus delete all

Delete filtered removes the records currently included by the active filters and leaves the rest. Delete all removes the entire shared attempt collection. Both controls open the same explicit confirmation dialog warning that the site cannot restore the local records and suggesting an export first.

Deletion in the Tracker does not necessarily clear separate Daily Challenge, guided-session, or page-specific storage keys. Conversely, deleting Daily Challenge data does not automatically remove already saved shared Tracker entries. Use the control for the dataset you mean to manage.

7. Privacy and interpretation boundary

Tracker export and import run in the browser; the selected file is not uploaded to schulte-table.org by that workflow. The site’s Privacy page separately explains automatically loaded Google services and browser controls. Keeping task history local does not mean no network services load on the page.

The exported fields describe browser tasks: configuration, time, mistakes, completion, and limited input context. They are not a medical record, attention evaluation, intelligence score, population percentile, or promise of reading or study outcomes. A backup preserves records; it does not add evidentiary meaning to them.

Frequently asked questions

Can a CSV file restore my history?

Not with the current interface. CSV is for spreadsheet use; the Tracker imports JSON.

Does JSON import overwrite my existing records?

No. Valid records merge with the existing collection, and matching IDs are kept once.

What happens after I clear site data?

The browser can remove the local attempt collection. The site has no account copy from which to restore it; use a retained JSON export if available.

Does the export contain my name or email?

No such fields exist in the current shared attempt schema. It can contain dates, task data, and an optional broad input method.

Related tools

Site references