Under the hood
What the importer does, in full.
A tracker that gets one deadline wrong is worse than no tracker. So the rules are written down here rather than described as “smart”.
Step 1
Working out the shape of your file.
An .xlsx workbook takes a shorter path. It is a zip of XML, unzipped and read in your browser: the cells are already cells, so there is no separator to guess, and a date cell is a number with a format attached rather than text — which means it converts exactly, with no month-first or day-first question to ask. When there are several sheets you pick the right one.
Pasted text and CSV have to be worked out. Tab, comma, semicolon and pipe are each tried against the first twenty lines. The winner is the one that produces the same column count on every line — consistency identifies a separator far more reliably than frequency does. Quoted cells containing the separator or a newline are handled, a UTF-8 byte-order mark is stripped, and Windows line endings are normalised.
The header is the first row with two or more filled cells, so a title or a “Fall 2026” banner sitting above your column names is skipped rather than read as the header.
Step 2
Reading dates, and admitting when it cannot.
| Your cell | Read as | Confidence | What happens |
|---|---|---|---|
| 2026-09-12 | 12 September 2026 | exact | Imported silently. ISO is unambiguous. |
| Sep 12, 2026 | 12 September 2026 | exact | Imported silently. |
| Mon Sep 12 | 12 September, year inferred | assumed | Imported, flagged, with a note saying which year was assumed. |
| 9/12/2026 | 12 September or 9 December | ambiguous | Both readings are shown. You say once whether the sheet is month-first or day-first. |
| 9/25/2026 | 25 September 2026 | exact | Only one reading is a real date, so there is nothing to ask. |
| 46366 | 10 December 2026 | assumed | Recognised as a spreadsheet serial number and flagged. |
| next Friday | the coming Friday | assumed | Resolved against today and flagged. |
| TBD | — | none | Row is kept with no date and listed in the review step. |
Times of day are pulled out separately (Friday 11:59pm, due 5pm) and stored apart from the date, because a due time that shifts by an hour twice a year is a real bug. All scheduling arithmetic is done in wall-clock terms in your timezone, so a 7am reminder stays at 7am across a daylight-saving change.
Step 3
Matching a re-import to what you already have.
Each row gets an identity. If your sheet has an ID column, that is it. Otherwise the identity is the class name and the assignment title, both normalised — so “Problem Set 6” and “problem set 6” are the same thing, and “Problem set 7” is not.
No match
Created as new work.
One match, fields differ
Only the fields that differ are updated, and each one is listed in the preview.
One match, identical
Left alone entirely. No write, no history entry.
More than one match
Shown to you. Never merged automatically.
Step 4
Undo, and what it costs you.
Every write records what the field held before it. An import is a batch, so reverting it walks its changes backwards: created rows are removed and updated fields are put back to their previous values. Undoing your most recent import is free. Restoring an older edit or an earlier import from the history page is part of the paid plan.
The original row from your file is stored alongside each imported assignment, so it is always possible to see the text the record was built from rather than only the interpretation of it.