Skip to main content

Export

Category: Processing

The Export activity produces output files from the finished transaction: searchable PDFs, JSON data, and other formats. Output is organized into export profiles, each defining a scope, format, and any preprocessing.

Configuration​

SettingDescriptionDefault
ProfilesThe export profiles to run. Each defines scope, format, and preprocessing.(none)
Run in parallelExecute independent profiles concurrently. Turn it off to run them one after another.On

Scope​

A profile's scope says what one output unit is.

ScopeOutput
TransactionOne unit for the whole transaction.
Transaction (Filtered)One unit for the whole transaction, only when it passes the filters.
Per DocumentOne unit per document.
Per Document (Filtered)One unit per document that passes the filters.

Pages and documents are exported in the order the Transaction Viewer shows: the documents in their order, and each document's pages in its order. A reviewer who reorders documents or pages, or a Data Transform step that moves them, changes the order of the export too. A page that belongs to no document comes last. In a JSON or XML export with schema version 2, a page's page_number is its position in the transaction in this same order, and each document's page list also gives the page's position in the document; where a page came from is its source file and its page number in that file. JPG file names number pages the same way (see JPG output).

The filtered scopes have two filters, applied in this order:

  1. Document types: include or exclude documents by class, picked from the project's list of document types. For Transaction (Filtered), the transaction passes when at least one of its documents does. The filter remembers each type itself, not its name, so renaming a document type keeps the filter working. A type that has been deleted is flagged in the list, and the workflow shows a warning until you remove it.
  2. Condition (optional): the same condition an If step uses, with the same presets, the same Custom JavaScript editor, the same Write the condition box and the same runtime interface.
    • For Transaction (Filtered) it is checked once for the whole transaction, exactly like an If condition, and the transaction is exported only when it returns true.
    • For Per Document (Filtered) it is checked once for each document the type filter lets through. The code reads the document being decided as document, while documents still holds the whole transaction. Only the presets that make sense for one document are offered (document class, field value, transaction metadata), worded for it.
// Per Document (Filtered): export only invoices above 10,000
return document.document_type === 'Invoice' &&
parse_number(get_field_value(document, 'Total')) > 10000;

A condition that throws fails the Export step, as an If condition does, rather than silently exporting nothing; for a per-document condition the error names the document. Anything other than a literal true skips the transaction or the document.

File names​

Each profile names its files with a filename template, set under Filename Template in the profile. The template is built from parts, shown in a row:

  • Field… adds the value of an extracted field. Pick the document type, then the field. Fields inside a group and columns of a repeating group are listed as paths (Supplier / Name, Line Items[] / Code). Any document type lists the general fields, the ones every document type has.
  • Metadata… adds the value of a transaction metadata key, for example a key your import connector or API client sets.
  • Variable adds a value the platform knows: the transaction id, the profile name, the document type, the document number, the uploaded file name, the date or the time. A JPG profile also offers the page's number in the transaction, in its document, and in the file it was uploaded in (see JPG output).
  • Text adds fixed text, and Folder adds a /, which puts the files in a subfolder.

Drag a part by its handle to move it. Click a field, document type, document number or file name part to change how it picks its value, or a metadata part to change its key. The Preview under the row shows the file name the template gives, with field names standing in for their values: INV_‹Invoice Number›.json. The file extension comes from the format.

A field part remembers the document type and the field themselves, not their names, so renaming either keeps the file names working.

When there are several values​

A field can have more than one value in a transaction: several invoices, several rows of a table, a field that holds a list. In a file for the whole transaction, the document type and the document number have one value per document, and the uploaded file name one per file. For these parts, choose which values go into the name. A per-document file has just one of each, so the choice makes no difference there, but it is offered the same way. A metadata key holds one value, so it has no such choice.

ChoiceFile name getsExample
FirstThe first value found, in the order of the Transaction Viewer. The default.INV-001
AllEvery value in that order, repeats included, joined with the separator.INV-001;INV-002;INV-001
All, without repeatsEvery value once, joined with the separator.INV-001;INV-002

The separator is ; unless you change it. Empty values are skipped.

Which documents a field part reads​

It depends on the profile's scope:

  • Transaction and Transaction (Filtered) read every document of the chosen type in the transaction.
  • Per Document and Per Document (Filtered) read only the document the file is for. A field of another document type is empty in that file, so a per-document file never takes its name from a different document. Transaction metadata is still available.

How values are made safe for a file name​

  • A / or \ inside a value becomes _, so INV/2026/01 gives INV_2026_01 rather than a folder. Only a Folder part (a / in the template) makes a folder. Line breaks in a value become spaces.
  • Characters that file systems do not allow (\ : * ? " < > |) become _.
  • Each folder or file name is cut to 200 bytes, so All over many documents cannot produce a name the file system rejects.
  • When two files would get the same name, the later ones get _2, _3 and so on.
  • When the whole template comes out empty (for example, the field is empty in every document, or you removed every part), the file is named <transaction id>_<profile name> instead, and the step logs a warning. With no parts at all, the preview already shows that default name.

When a document type or field is deleted​

A part that names a deleted document type or field shows in red, and the workflow shows a warning naming the Export step and profile. The part is empty in every file until you pick the field again. The document-type filter and the field filter warn the same way.

Profiles saved before the pickers existed may name a field by its name. Such a part shows in amber, because renaming the field breaks it: click it and choose Pin to field to switch it to the field itself.

Template text​

Edit as text shows the template as text, which is also how the API and the assistant set it. Parts are written in double braces:

PartText
A field{{ field:<document type id>/<field id> }}, with * in place of the document type id for a general field. A field in a group is <group id>/<field id>; a column of a repeating group is <group id>[]/<column id>, or [2] for the third row only.
A metadata value{{ meta:<key> }}
A variable{{ transaction_id }}, {{ profile_name }}, {{ document_type }}, {{ document_index }}, {{ source_filename }}, {{ date }}, {{ timestamp }}
A field by name (older form){{ field.Invoice Number }}

After the name, | adds a step. first, all("sep") and all_unique("sep") pick among several values, on a field, document_type, document_index or source_filename. lower, upper, replace('a', 'b'), pad(3) and truncate(20) format the result. For example, {{ field:c1a2b3c4/bda68d0a | all_unique | upper }}.

JSON output options​

A JSON profile exports the transaction's extracted data as structured JSON. By default it includes field values with their confidence, reasoning, and confirmation state, per-field bounding boxes, a per-page block, and the transaction's metadata. Optional settings add the page OCR text and word-level OCR layout, and several settings let you trim the output.

Two things are always included and have no toggle: the per-page block (how each page maps to its source file, plus the image-transform frame that maps coordinates back onto the original page) and the transaction metadata (the key-value pairs supplied when the transaction was created, plus created-at, source, and review summary).

OptionDescriptionDefault
Field FilterWhich fields to export. All fields, Include only the fields you pick, or Exclude them. Pick fields and groups from the project's list, which shows nested fields as paths (Supplier / Name, Line Items / Description); picking a group includes or excludes all of its children. The filter remembers each field itself, so renaming a field or group keeps it working. Edit as text takes display paths instead, using / for nested fields (Supplier/Name). This same Field Filter works identically in every format (JSON, XML, CSV, Excel).All fields
Include Field DetailsWhen on, keeps each field's confidence, reasoning, confirmation state, and bounding boxes alongside its value. When off, keeps just the extracted value, the smallest output.On
Include Page Full TextThe full OCR text of each page.Off
Include Page OCR DataWord-level OCR layout per page (every word with its bounding box, in rasterized page-image pixel coordinates). Can be large.Off
Pretty PrintFormat the JSON with indentation and line breaks. Turn off for a compact, single-line file.On
Exclude JSON Paths (advanced)Remove specific branches from the finished file by path, one per line, with * as a wildcard, to reduce size. For example documents.*.fields.*.reasoning drops every field's reasoning. Unmatched paths are ignored.(none)

For the full JSON structure, the coordinate system, and how to map OCR content back onto the original page, see Export to JSON.

XML output options​

An XML profile exports the same structured document as a JSON profile, serialized as XML. It carries identical content and offers every JSON option (field filter, field details, page text/OCR, pretty print, exclude paths), plus one XML-only setting:

OptionDescriptionDefault
Root ElementThe name of the XML document's root element.document

All the other options behave exactly as they do for JSON (see the JSON output options above). For the XML structure and the rules that map the JSON shape onto elements, see Export to XML.

JPG output (page images)​

A JPG profile exports one JPEG image per page: the exact page image the platform ran OCR on.

This is the supported way to obtain the page images for a custom review interface. Pair a JPG profile with a JSON or XML profile: the data profile carries the values and coordinates, the JPG carries the matching page image. Give both the same Image orientation and every bounding box drops directly onto the page image with no conversion.

With Image orientation set to Corrected, a page that OCR found sideways (or a reviewer rotated) is exported the way the viewer shows it. Pages that needed no rotation are exported verbatim, byte for byte. With Original, every page is exported exactly as stored.

Each file is one page, named by the profile's filename template. Three variables name the page:

VariableValue
page_numberThe page's position in the transaction, from 1, in the order the documents and their pages have when the export runs. The same number as page_number in a JSON export with schema version 2.
document_page_numberThe page's position in its document, from 1. The same number as a bounding box's page_index in that document (document_page_number in schema version 2).
source_file_page_numberThe page's number in the file it was uploaded in.

In a page's file name, the document type, the document number, the uploaded file name and field values are those of the page's own document and file, whatever the scope. For example, {{ document_index | pad(2) }}/{{ document_page_number | pad(3) }} puts each document's pages in a folder of their own: 01/001.jpg, 01/002.jpg, 02/001.jpg.

A template that uses none of the three page variables gets a page suffix, so that the pages keep distinct names: in a per-document profile, the page's position in its document ("invoice_page_1.jpg", "invoice_page_2.jpg"), and in a transaction profile, its position in the transaction. A page that belongs to no document has no document values, and its suffix is its position in the transaction.

Options​

OptionWhat it doesDefault
Image orientationCorrected applies the rotation detected during OCR (or set by a reviewer) so a sideways scan is exported the way the viewer shows it; a rotated page is re-encoded. Original exports the page exactly as it was stored. Use the same setting as the paired JSON or XML profile.Corrected for new profiles; Original for profiles created before the option existed
ResolutionDownscales each page image toward a chosen resolution (300 / 200 / 150 / 100 / 72 DPI) to shrink file size. Pages already at or below the target keep their resolution, and pages are never upscaled.Original
CompressionRe-compresses each page as a new JPEG at a quality you set (1 to 100). Leave it off to keep the stored image unchanged.Off

Compression does not change pixel dimensions, so bounding-box coordinates still line up.

Resolution changes break coordinate overlay

Changing the resolution rescales the exported page images. Bounding-box coordinates in a JSON export, both field boxes and OCR word boxes, are recorded in the original pixel space and will no longer line up with these images. Keep the resolution at Original if you overlay a JSON export on the page images.

See Accessing OCR & Field Data for how to combine the two exports in your own client.

CSV output options​

A CSV profile flattens the extracted field values into one comma-separated table, one row per document. Standalone and group fields each become a column (Supplier/Name); a repeating group's columns are flattened too, with the instance values for a column joined into a single cell (Widget | Gadget). Only field values are exported (no confidence, boxes, or reasoning). When a transaction mixes document types, the table holds the union of their columns.

OptionDescriptionDefault
DelimiterColumn separator: comma, semicolon, tab, or pipe.Comma
Include Header RowWrite a header row of column labels.On
Original text columnsAll fields follows each field's column with <Field> (original): the text on the page the value came from, before normalization (03/04/26 beside 2026-04-03).None
Field FilterSame as JSON: All fields, Include only, or Exclude the fields you pick.All fields

Excel (XLSX) output options​

An Excel profile writes the extracted field values into a workbook. Only field values are exported. Field order and labels follow the Data Panel (Group/Child).

OptionDescriptionDefault
LayoutTable (multi-document; standalone/group fields as columns on a main sheet, each repeating group on its own sheet) or Form (key/value, one document per sheet).Table
Sheet GroupingTable: one sheet set per document type, or per document. Form: one sheet per document, or all on a single sheet.Per type / per document
MetadataWhich document-metadata columns (transaction id, document id, type, source filename, page count, created-at) to include: all, only a listed set, or all except a listed set.All
Original text columnsSame as CSV: All fields follows each field's column with <Field> (original), in the main sheet and in each table's sheet.None
Field FilterSame as JSON: All fields, Include only, or Exclude the fields you pick.All fields
Auto-size ColumnsFit column widths to their content.On
Freeze Header RowKeep the header row visible when scrolling.Off

PDF output options​

OptionDescriptionDefault
Searchable PDF (OCR layer)Overlays invisible OCR text so the PDF can be searched and copied from.Off
Page SizeOriginal, Letter, or A4.Original
OrientationAuto, portrait, or landscape.Auto
Archival profile (PDF/A)Produces an ISO 19005-3 archival PDF: PDF/A-3b (basic conformance), PDF/A-3u (adds guaranteed Unicode text mapping), or PDF/A-3a (adds an accessible tagged structure built from the OCR text, in reading order). PDF/A-3a always includes the OCR layer.None
Document languagePDF/A-3a only: the document language recorded in the archive file, as a BCP-47 tag (for example "en", "de", "pt-BR"). When left empty, the OCR-detected language is used where available, otherwise English.Auto
Embed extracted dataEmbeds the extracted data as a file attachment inside the PDF, so one self-contained file carries both the page images and the machine-readable data. Cannot be combined with redaction.Off
Embedded data formatSerialization of the embedded data file, JSON or XML. Both carry the identical content. Shown only when Embed extracted data is on.JSON

Notes​

  • Pair Export with a Notification step to tell an external system where to download the results.
  • Re-running a transaction from a step before Export removes the files the last run exported; re-running After Export keeps them.