Export and import live in the Content Library’s own menus:
| Where | What |
|---|---|
| Entry editor → More actions (⋯) | Export… the open record |
| Records table → the selection bar’s Bulk actions (⋯) | Export the ticked records |
| Records table → More actions (⋯) | Import… — opens Import records (hidden in the trash) |
Exporting
- Choose the records (or open one).
- Export… — pick a format and what to Include:
- Related records — one step out, e.g. an article’s author.
- Files — the actual media files (ZIP only).
- All languages — every translation of the chosen records.
- Languages of related records — off by default; it multiplies the size.
- Check the counts — they come from the real export. Related records can turn 40 records into 4,000.
- Download.
Formats
| Format | Carries files | Lossless | Good for |
|---|---|---|---|
| JSON | no | yes | One file, several types, readable |
| JSON Lines | no | yes | Streaming, line-by-line diffs |
| ZIP archive (with files) | yes | yes | Anything with media |
| CSV (flat) | no | no | A spreadsheet someone will edit |
CSV is lossy on purpose
Media is not restored from a CSV — a filename is not a file. Use CSV to hand content to a spreadsheet user; use JSON or ZIP to move content between installations.
Importing
- More actions → Import…
- Choose the file. (Need a starting point? Download a blank CSV template from the same dialog.)
- Answer the two questions below.
- Check the file — each record gets a verdict: Create, Update, Skip or Problem, with the reason.
- Import.
Changing the file or either answer clears the verdicts — you always check again before importing.
Two questions, not one
| Question | About | Choices | Default |
|---|---|---|---|
| If a record is already here | The records the file is about | Leave it alone · Update it with the file’s values · Add a second copy · Stop and import nothing | Leave it alone |
| Records this file links to | The related records that came along | Link to the ones already here · Link to them, and update them from the file · Add them again as new records | Link to the ones already here |
“Add a second copy of this article” must not mean “and a second author” — hence two questions.
How a record is recognised
Not by its internal id, which only means something in one database. Instead:
- An identifying field — a slug, SKU or email (per language on translated types).
- The original id, only if nothing matched and that record exists in this workspace.
Without a configured identifying field, Ortha guesses (a field named like slug, sku, email, then the first required text field) and says so in the export. Ask your developers to set it per type — that is what makes importing the same file twice update instead of duplicate. See the transfer plugin.
What it guarantees
- Every write goes through the same checks as the editor: validation, relations, languages, media, versions, the activity log.
- Imports always land in the workspace you are in — whatever workspace the file came from.
- Exports and imports have size limits, so a careless filter or a hostile file cannot overload the server.
Permissions
Export and Import need content:export and content:import — held by contributors and administrators. Downloading an import template needs only content:read.