Import & export
Your data is yours. Settings → Data → Import & export lets you bring records in from another system, and take a complete copy of everything out — without asking us, and without anyone writing a script.
TL;DR — Export to take a copy out; choose JSONL if you ever want to load it back, CSV if you want to read it in Excel. Import to bring a spreadsheet in: pick where it goes, upload the file, check what will happen, then import.
Exporting
| Field | What it does | Accepted values / default |
|---|---|---|
| Data file (JSONL) | Moving to another system, or keeping a copy you can restore. | Keeps dates, numbers and structure exactly as they are. This is the only format that can be imported back. |
| Spreadsheets (CSV in a ZIP) | Reading your data in Excel, Numbers or Sheets. | One spreadsheet per table. Every value becomes text, so this format cannot be imported back. |
| Everything / Choose tables | Export the whole workspace, or just the parts you need. | Choosing tables is useful when you only want one module's records. |
| Check what's included | See the table list, the row counts and anything left out — before you download. | Nothing leaves the workspace at this step. |
Exporting asks for your passkey
An export contains every record in the workspace, including other people's. Because of that it asks you to confirm with a Passkey or security key — a password alone is not enough. The export is recorded in your Audit log both when it starts and when it finishes, with the number of rows taken.
What is not in the export
Three kinds of thing are deliberately left out, and the export tells you which — nothing is dropped silently.
| Field | What it does | Accepted values / default |
|---|---|---|
| Your audit log | It has its own export, with its own filters and date ranges. | Settings → Audit log → Export. |
| Passwords, API keys and tokens | Anything that acts as a credential. | Listed by name in the export manifest, so you can see what was withheld. |
| Internal bookkeeping | Tables AxisSynapse uses to run the workspace. | They mean nothing outside this system. |
Every export includes a _manifest.json listing each table, its
columns, the row counts, and both of the above. If a table could not be
read, the export fails rather than handing you an archive with an
empty file in it — a copy that looks complete and is not is worse than
no copy at all.
Importing
Four steps, and none of them requires knowing what a table is called internally.
- Choose where it goes. A list of your workspace's own tables, grouped by module. Tables that cannot take data are shown but not selectable, with the reason.
- Upload the file. CSV or tab-separated, with a header row, up to 20,000 rows at a time. Split anything larger into batches.
- Match the columns. Headings from your file are paired with real columns automatically wherever the names line up. Each column shows what it holds — a date, a whole number, yes/no — and whether it is required. Anything you do not want is left as Don't import.
- Check and import. You are told how many rows will be written, how many will be skipped, and exactly what is wrong with each one.
Running an import twice is safe
If your table has an identifier column and your file supplies it, rows that already exist are updated rather than added again. That is what makes a large migration survivable: if it stops halfway, fix the file and run the whole thing again — nothing is duplicated.
If your file does not supply an identifier, every row is added as new, and the preview says so before you commit.
When a row is refused
A row is never partly imported. If any cell in it cannot be read — a date that is not a date, a required column left blank — the whole row is skipped and named in the preview, and the rest go in. Fix those rows and run the file again.
Moving in from another system
The shortest path from a system you are leaving:
- Export from the old system as CSV, one file per kind of record.
- In AxisSynapse, import each file: choose the table, upload, match, check, import.
- Where the old system's identifiers matter to you, map them to an identifier column so a second run corrects rather than duplicates.
Moving out
Export in JSONL. Each line is one record, tagged with the table it came from, and the first line describes every table and column in the file — so any tool can read it in a single pass without loading the whole thing into memory.
The download is live
Your export is streamed straight to you as it is read. We do not keep a copy — there is nothing stored on our side afterwards for anyone to find. The trade-off is that a very large export needs the download to finish in one go; if the connection drops, start it again.
Intake APIs are different
Settings → Data → Intake APIs is for a continuous feed: another system posting records to you as they happen. Import is for a file you have in your hand right now. Both write to the same tables and follow the same rules about which tables can receive data.
Related