---
title: "Import and export"
description: "Export submissions, one form at a time."
requested_language: ar
language: en
translation_notice: "This page isn't translated yet"
url: https://docs.systhema.app/ar/payload/forms/import-export
version: unreleased (main)
docs_index: https://docs.systhema.app/ar/llms.txt
---
> This page isn't translated yet. Showing English.


Payload's [Import/Export plugin](https://payloadcms.com/docs/plugins/import-export) wired up for you. It turns on automatically wherever the Forms module is enabled, and adds an **Export** action to the Form Submissions list view.

Exporting submissions from the stored shape is close to useless: the form comes out as a numeric id, every answer is keyed by the field's internal `name`, and a question renamed in the admin splits across two columns because older submissions still carry the old key. Systhema's default export writes a readable file instead:

| Created At       | Form    | First name | Last name | Email address    | …   | UTM source |
| ---------------- | ------- | ---------- | --------- | ---------------- | --- | ---------- |
| 2026-08-03 13:30 | Contact | Jane       | Doe       | jane@example.com | …   | newsletter |

The timestamp is rendered in the Admin's own time zone (`admin.timezones.defaultTimezone`, else UTC) rather than as a UTC ISO string a spreadsheet shows as a blob; the form's **title** replaces its id; each question becomes a column under the field's own label, in the order the form asks them; and anything the form doesn't define — the block's hidden and tracking fields — is appended last rather than dropped. Exporting several forms at once yields the union of their columns, so filter to one form first (a [saved view](https://docs.systhema.app/ar/payload/forms/submissions.md#saving-views) does this in one click) when you want a clean single-form file.

Import stays **off** for submissions — that table is a record of what visitors actually sent — and because nothing is importable, the plugin's `imports` collection is hidden from the Admin and locked against writes.

## Exporting one form at a time

An export covers whatever the list view is currently showing, so **filter first, then export**. Exporting everything at once yields the union of every form's questions, which leaves each row mostly empty cells; narrowing to a single form collapses the file to just that form's columns.

Three ways to scope it, all of which the export drawer picks up automatically:

1. **Filter the list** — `Filters → Form equals Contact`, then **⋮ → Export**.
2. **Tick the rows** you want before opening the drawer.
3. **Load a saved view** — a [query preset](https://payloadcms.com/docs/query-presets/overview) sets the list's filters, which is exactly what the export reads.

The drawer then offers a **Selection to use** control — _Use current selection_ / _Use current filters_ / _Use all documents_ — preselected on the narrowest option available, with the preview reporting how many documents will be written. Worth knowing: that control **hides itself** when neither a filter nor a selection is active, because "all documents" would be the only choice; an export drawer with no Selection to use is telling you nothing is narrowing it.

The drawer's **Fields** control picks which columns the file gets, and in which order. It starts on **Created At · Form · Submission Data**, where `Submission Data` expands in place into one column per question of whichever forms the export covers — so the default needs no per-form setup and still reads properly. To narrow it down, drop `Submission Data` and add that form's own columns instead: they are listed under the same `"<Form>: <Field>"` labels as in the list view, so you can export just First name + Email address for the Contact form.

The preview table below the control reflects each change as you make it, and is exactly what the downloaded file will contain. A per-form column stays empty on rows belonging to a different form, which is another reason to filter to one form first.

Systhema defaults the drawer's **Limit** to _no limit_. Upstream it inherits the list view's per-page, so opening Export from a list showing 10 per page proposes a 10-row file — you asked for the data and got the first page of it. Set a limit explicitly when you want one.

## Configuration

Every option of the upstream plugin is accepted and wins over the defaults, plus two Systhema additions:

```ts
importExport: {
  // Tune the readable CSV (or set `false` to export the raw stored shape).
  formSubmissionExport: {
    timeZone: 'Europe/Budapest',
    // Headings for hidden/tracking fields the form doesn't define.
    columnLabels: { utm_source: 'UTM source', page_url: 'Page URL' },
    // An answer stored under a field name the form no longer uses, folded
    // into the column it belongs to now.
    renamedFields: { promote: 'whatWouldYouLikeToPromote' },
  },
}
```

| Key                                  | Type                     | Default                    | Description                                                                                      |
| ------------------------------------ | ------------------------ | -------------------------- | ------------------------------------------------------------------------------------------------ |
| `enabled`                            | `boolean`                | on when `forms` is enabled | Turn the plugin off entirely, or on for a project without forms.                                 |
| `collections`                        | upstream                 | submissions, export-only   | Replaces the default entry outright — use it to make other collections exportable or importable. |
| `formSubmissionExport.timeZone`      | `string`                 | Admin default, else UTC    | IANA zone for the "Created At" column.                                                           |
| `formSubmissionExport.columnLabels`  | `Record<string, string>` | —                          | Headings for submitted names the form doesn't define.                                            |
| `formSubmissionExport.renamedFields` | `Record<string, string>` | —                          | Old field name → current name. Applied only when the form no longer has the stored key.          |

Everything else — `batchSize`, `exportLimit`, `overrideExportCollection`, per-collection `disableJobsQueue` / `disableSave` / `format` / `hooks` — is the upstream plugin's own API and passes straight through. Two defaults worth knowing: exports run **synchronously** (`disableJobsQueue: true`), because Systhema configures no job autorun and a queued export would sit unprocessed while the download button pretended otherwise; and they are **not saved** (`disableSave: true`), so exporting downloads a file instead of piling up documents.

Note that enabling this adds the plugin's `exports` and `imports` collections — two new tables on your next schema push. The Export dialog itself is the upstream plugin's UI and carries the upstream plugin's own translations.
