Import & Export Guide

Your espresso data belongs to you. The Data screen lets you export everything to CSV, import from CSV, undo imports, and bulk-delete records you no longer need.

Getting There

The Data screen is one tap from the Account menu. All import and export controls live there.

Exporting Your Data

Tap Export CSV next to Shots or Beans. On mobile the share sheet opens so you can save or send the file. On web the file downloads directly to your browser's downloads folder.

The exported file includes all your records and opens correctly in Excel, Google Sheets, or any CSV editor.

Tip: Export regularly as a backup. Re-importing an export is always safe — duplicates are detected and skipped automatically.

Downloading Templates

Tap ↓ template next to Shots or Beans to download a CSV file with the correct headers and one example row. Fill it in and import it back — this is the easiest way to get the format right without guessing column names.

Importing Data

Tap Import CSV next to Shots or Beans, then pick your file.

After the import finishes you'll see a summary like:

Imported 12 shots, 3 skipped

  • Imported — new records added to your account
  • Skipped — duplicates that already existed (not added again)
  • Had invalid data — rows with missing required fields or bad values (skipped without failing the whole import)

Every import is tracked in Import history below the buttons so you can undo it if needed.

Required columns

Shots

ColumnRequiredNotes
shot_dateRequiredISO 8601 timestamp, e.g. 2024-04-13T09:00:00
dose_gRequiredNumber, e.g. 18.5
yield_gRequiredNumber, e.g. 36
time_secRequiredInteger seconds, e.g. 28
bean_nameOptionalMatched to your beans; auto-created if not found
grind_settingOptionalFree text
ratingOptionalInteger 1–5
tasting_notesOptionalFree text
machine_nameOptionalMatched to your machines
grinder_nameOptionalMatched to your grinders

Beans

ColumnRequiredNotes
bean_nameRequired
roaster_nameOptionalMatched to your roasters
roast_levelOptionalLight / Medium-Light / Medium / Medium-Dark / Dark
roast_dateOptionalYYYY-MM-DD
originOptionalFree text
processOptionalFree text
notesOptionalFree text

How duplicates are handled

The app skips records it's already seen, so re-importing an export is always safe.

  • Shots: skipped if the same shot_date + dose_g + yield_g + time_sec already exists
  • Beans: skipped if the same bean_name + roaster_name already exists

Bean auto-creation

If a shot row references a bean_name that isn't in your beans yet, the app creates a minimal bean record automatically (name only, no other fields). You can fill in the rest later from the Beans screen.

Undoing an Import

Import history shows every import you've done with the date and record counts. Tap Undo next to any entry to delete all records from that import in one step.

Note: If you've manually edited a record that came in via import, undoing still removes it. The undo removes everything tied to that batch, regardless of later edits.

Bulk Delete

Tap Manage Data to open the bulk-delete modal. Switch between Shots and Beans with the toggle at the top.

By range

Delete a consecutive run of records using their sequence numbers (#1, #2, #3… as shown on the list screens).

  1. 1Enter a From # and To #
  2. 2Tap Preview — you'll see how many records will be deleted
  3. 3Tap Confirm Delete

By selection

Browse the full list and check individual records to delete.

  1. 1Tap any row to check it
  2. 2Tap again to uncheck
  3. 3When you're ready, tap Delete N selected at the bottom

Sequence numbers

Each shot and bean has a sequence number (#1, #2, etc.) shown on the list screens and in the Manage Data modal. These numbers reflect the current order — they shift when records are deleted. They aren't stored permanently; they're calculated fresh each time.