Create a scheduled export
The quickest way is from a query you have already set up:
- Open the collection, add your filters and sort, and choose Run.
- Choose Export ▾, then Schedule this export….
- The New scheduled export dialog opens with the project, collection path and filters filled in. The sort, the Group setting and Match any filter are kept too.
- Choose how often, the format and the folder (see Every option), then choose Save schedule.
Or start from the list of schedules:
- Choose Tools → Scheduled exports (Ctrl+Shift+E, or Cmd+Shift+E on a Mac). It's also in the sidebar's Settings menu.
- Choose New scheduled export and fill in the dialog.
- Choose Save schedule.
Firetool saves the schedule and registers it with your system's scheduler. A message confirms it, for example Scheduled "orders": Daily at 02:00. If the system scheduler refuses, the schedule is still saved and the message shows what the scheduler said.
Scheduled exports need Firetool Pro, both to save one and for every run. Each run is an export like any other: if policy turns exports off for the project (Allow exports (CSV/JSON) in Tools → Policy and roles), the run fails.
Every option
| Option | What it does |
|---|---|
| Name | Shown in the list and used at the start of each file name. It defaults to the collection path. |
| Project, Database | Where to read from. The project list includes the account it's reached through. The database defaults to (default). |
| Collection path | The collection to export, such as orders or users/alice/orders. Required. |
| Filters | The query's filters as JSON. Leave [] to export every document. Filling it from Schedule this export… is easier than typing it. |
| How often | Daily, Weekly or Hourly. |
| Time | For daily and weekly runs, in your computer's time. The default is 02:00. Not used for hourly runs. |
| Day | For weekly runs only: Monday to Sunday. The default is Monday. |
| Format | CSV (Excel) or JSON, the same formats as a normal export. |
| Keep files for (days, 0 = forever) | After each successful run, this schedule's files older than that many days are deleted. The default is 90. |
| Flatten nested fields in CSV | Maps become columns such as address.city. On by default. |
| Save files in | The folder for the files. Choose… picks one. If you leave it empty, Firetool uses Documents/Firetool exports in your home folder. The folder is created if it doesn't exist. |
A filter in the JSON list looks like this. op is the operator's name (EQUAL, NOT_EQUAL, LESS_THAN, LESS_THAN_OR_EQUAL, GREATER_THAN, GREATER_THAN_OR_EQUAL, ARRAY_CONTAINS, ARRAY_CONTAINS_ANY, IN, NOT_IN, IS_NULL, IS_NOT_NULL):
[{"field":"status","op":"EQUAL","value":"Active","type":"string"}]
A scheduled export writes CSV or JSON files only. It isn't a Firetool backup and doesn't include subcollections. For that, see Backup and restore.
The files it writes
Each run writes two files into the folder:
- The export, named after the schedule and the start time in UTC:
orders_2026-10-01_0200.csv(or.json). Characters other than letters, digits,_,-and.in the name become_. - A checksum next to it, with
.sha256added:orders_2026-10-01_0200.csv.sha256. It holds the file's SHA-256 hash and its name, in the formatsha256sumuses.
Each run also adds an entry to the audit log with the schedule's name, the collection, the filters, the format and the number of documents.
Retention removes only files whose names match this schedule (its name, a date and time, and .csv, .json or .sha256). A schedule named orders never deletes the files of one named orders_daily, and other files in the folder are left alone.
Run, pause, edit or delete
Tools → Scheduled exports lists every schedule with its source (project, path and number of filters), when it runs, the format, the folder and the last run. Each row has:
- Run now: runs it straight away and offers Show in folder. Handy to test a new schedule.
- Edit: opens Edit scheduled export with the same options.
- Pause and Resume: a paused schedule is taken out of the system scheduler and shows a Paused badge.
- Delete: stops the schedule. Files it already wrote are kept.
How it runs when Firetool is closed
Firetool registers each schedule with the scheduler built into your system. At the chosen time, the scheduler starts Firetool in the background with:
<path to Firetool> --run-export <schedule id>
That run opens no window and asks no questions. It reads the documents, writes the files and closes. It uses the system proxy settings if there are any.
| System | Where the schedule lives |
|---|---|
| Windows | Windows Task Scheduler: a task named Firetool export <id> in the Firetool folder. It runs as you, with normal (not administrator) rights. |
| macOS | launchd: a launch agent at ~/Library/LaunchAgents/app.firetool.export.<id>.plist. |
| Linux | cron: a line in your crontab ending in # firetool-export:<id>. cron has to be installed. |
What has to be true at that time, as the app itself says:
- Windows: your PC has to be on and you have to be signed in to Windows. Firetool doesn't store your Windows password, so the task can't run while you're signed out.
- macOS: your Mac has to be awake and you have to be logged in.
- Linux: the computer has to be on, cron has to be running and you have to be logged in, so the run can reach your keyring for the saved sign-in.
If the computer is off or nobody is signed in at that time, that run doesn't happen. The next one runs at its usual time. Use Run now if you need the missing file.
The schedule uses the account it was saved with, and reads with that account's access. Keep that account in Firetool: if it's no longer there, the run fails with The account for this export isn't available on this computer any more. If you move Firetool to another folder, it registers your schedules again with the new location the next time it starts.
A scheduled run doesn't ask before reading a lot of documents. Firestore bills one read per document exported, on every run. An hourly export of a large collection adds up quickly.
Check a file with its checksum
The .sha256 file lets you prove an export hasn't been changed since it was written. Open a terminal in the export folder.
Windows (PowerShell): prints True when the file matches.
$f = "orders_2026-10-01_0200.csv"
(Get-FileHash $f -Algorithm SHA256).Hash -eq (Get-Content "$f.sha256").Split(" ")[0]
macOS: prints OK after the file name when it matches.
shasum -a 256 -c orders_2026-10-01_0200.csv.sha256
Linux: prints OK after the file name when it matches.
sha256sum -c orders_2026-10-01_0200.csv.sha256
To make tampering harder to hide, copy the .sha256 files somewhere separate from the exports.
When a run fails
- The last run column shows OK with the time and number of rows, or Failed with the time and the error.
- A failed run is also recorded in the audit log.
- Background runs add lines starting with
scheduled exporttostudio.login the.firetoolfolder in your home folder. Open it with Open settings folder in the sidebar's Settings menu. - Common causes: the account was removed, Pro has ended, policy turned exports off, the folder can't be written to, or the network was down.
Questions
Does Firetool have to be open for a scheduled export to run?
No. Windows Task Scheduler, launchd or cron starts it in the background. You only have to be signed in to the computer.
Can a scheduled export make a full backup with subcollections?
No. It writes CSV or JSON for one collection or query, without subcollections. Use Back up collection… for an exact copy.
At what minute does an hourly export run?
On macOS and Linux, on the hour. On Windows, Task Scheduler counts each hour from when you saved the schedule.
Related
- Firestore import and export: what Firetool's import and export can do.
- Export Firestore to CSV or JSON: the file formats in detail.
- Back up and restore: exact copies with subcollections.
- Roles and production safety: the export switch and the audit log.