Docs

This page isn't translated yet

Import and export

Export submissions, one form at a time.

On this page

Payload's Import/Export plugin (opens in new tab) 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 AtFormFirst nameLast nameEmail address…UTM source
2026-08-03 13:30ContactJaneDoejane@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 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 timeLink to this section

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 (opens in new tab) 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.

ConfigurationLink to this section

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

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' },
  },
}
KeyTypeDefaultDescription
enabledbooleanon when forms is enabledTurn the plugin off entirely, or on for a project without forms.
collectionsupstreamsubmissions, export-onlyReplaces the default entry outright — use it to make other collections exportable or importable.
formSubmissionExport.timeZonestringAdmin default, else UTCIANA zone for the "Created At" column.
formSubmissionExport.columnLabelsRecord<string, string>—Headings for submitted names the form doesn't define.
formSubmissionExport.renamedFieldsRecord<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.