Export
Use the Export node when a workflow needs to turn data into a file that people can download, share, or send to another system.
Common examples:
- Convert database results into an Excel file.
- Create a CSV file for finance or operations.
- Generate a Word document report after data reconciliation.
- Prepare rows for upload to another tool.
Before You Use This Node
| What you may need | Where to set it up | Why it matters |
|---|---|---|
| Reusable source data | Datasets | Keep common business data in one place before exporting it. |
| Saved file inputs or files used by nearby steps | Files | Files can be stored centrally and reused by upload, download, or reporting steps. |
| Reusable names, dates, or report periods | Global Variables | Use the same report period or file name pattern across workflows. |
What the Export Node Can Do
| Action | Plain meaning | Use it when |
|---|---|---|
export:csv | Create a .csv file | The next system expects a simple spreadsheet-style text file. |
export:xlsx | Create an Excel .xlsx file | People need a familiar Excel report. |
export:doc | Create a Word .docx document | You need a formatted document with headings, text, and images. |
Modes
export:csv and export:xlsx support two modes. export:doc always creates a new file (overwrite only).
| Mode | What it does | Needs existing file? |
|---|---|---|
| Overwrite | Creates a new file from input data | No |
| Upsert | Finds rows by a match column and updates them. Inserts new rows if no match is found | Yes |
The Basic Idea
What You Fill In (CSV and Excel)
CSV and Excel exports read their configuration from exportDetails (format, fileName, mode, fileId/file, matchColumn, input), with per-format options under options and an optional columns list.
Overwrite Mode
| Field | What it means | Example |
|---|---|---|
| Input rows | The list of records to export | Result from SQL, DataTable, or API step |
| Format | File type (xls/xlsx are auto-detected for Excel) | CSV or XLSX |
| File name | Name without the extension | monthly-report-april |
| Columns | Which fields should appear in the file, and how they are formatted | See Columns below |
| Include headers | Whether the first row should show column names | Yes |
| Sheet name | Excel sheet name, for XLSX only | Report |
Overwrite options
- CSV:
includeHeaders,dateFormat. - Excel:
includeHeaders,autoFilter,autoColumnWidth,dateFormat,numberFormat,sheetName. Excel output is written using a streaming writer, so large exports stay memory-safe.
Upsert Mode
| Field | What it means | Example |
|---|---|---|
| Input data | A JSON object (single row) or JSON array (multiple rows) | {{$('fetchData').result}} |
| File | Existing file to update (fileId or file) | Select from Files section |
| Match Column | The column header used to find existing rows | Date or Order ID |
| Sheet Name | Target sheet in Excel (optional) | Baby_jogger |
| Columns | Optional explicit field-to-header mapping | Only needed when input keys differ from file headers |
| Create Row If Missing | Insert a new row when no match is found | Yes (default) |
| Merged Header Separator | Separator for addressing merged headers in Excel | :: (default) |
Upsert options
- CSV:
createRowIfMissing,headerRowIndex,downloadTimeoutSeconds. - Excel:
preserveExistingFormat,createSheetIfMissing,sheetIndex,headerRowIndex,mergedHeaderSeparator(default::),createRowIfMissing,downloadTimeoutSeconds.
Columns
Each entry in the columns list describes one output column:
| Field | What it means |
|---|---|
field | Source key, dot-notation supported for nested values (e.g. customer.name) |
header | Column header text to write |
type | Optional value type, date or datetime, for typed formatting |
format | Date/number format pattern applied to the value |
For Excel, a column can additionally be targeted by position using columnIndex, index, or column (a numeric index or an Excel column letter such as C), and can specify a parentHeader to address a cell under a merged header.
For upsert mode, input keys are automatically mapped to file column headers. If the file has merged headers (e.g., a parent cell "12 PM to 1 PM" spanning sub-columns "Orders" and "Failed"), use the :: separator in your input keys:
{
"Date": "5-29-2026",
"Total Order Count": 35,
"OMS": 22,
"12 PM to 1 PM::Orders": 3,
"12 PM to 1 PM::Failed": 1
}
Create a Word Document (export:doc)
export:doc builds a .docx document from an ordered list of content blocks. Its configuration lives under exportDocDetails.
| Field | What it means | Example |
|---|---|---|
fileName | Output name; the .docx extension is added automatically | reconciliation-summary |
pageOrientation | Page layout: portrait (default) or landscape | portrait |
content | Ordered list of blocks that make up the document | See below |
Each block in content has a type:
| Block type | Fields | Notes |
|---|---|---|
heading | text, level | level sets the size: H1 = 24pt, H2 = 20pt, H3 = 16pt |
text | text, bold | A paragraph of body text; bold optional |
image | path, caption, width, height, fitToPage | Defaults width 400, height 300; fitToPage sizes the image to 450x340 |
pagebreak | — | Starts a new page |
URLs in text are detected and rendered as clickable hyperlinks. If an image cannot be loaded, a red [Image not found] placeholder is inserted in its place so the document still generates.
export:doc always creates a new file; there is no upsert mode.
Friendly Example — Overwrite
You want to send finance an Excel file after a reconciliation step.
| Field | Value |
|---|---|
| Input rows | {{Reconcile Accounts.output.rows}} |
| Format | XLSX |
| File name | reconciliation-{{reportMonth}} |
| Columns | Account, Expected Amount, Actual Amount, Difference |
| Include headers | Yes |
What happens:
- Automation Hub reads the rows from the previous step.
- It creates the Excel file.
- The step output includes the file name and storage details.
- A later Email, S3, FTP, or SFTP step can use the generated file.
Friendly Example — Upsert
You have an Order Count Tracker Excel file with hourly data per day. Every hour, an automation fetches the latest counts and updates the current day's row.
| Field | Value |
|---|---|
| Input data | {{$('fetchHourlyData').result}} |
| Mode | Upsert |
| File | Order Count Tracker.xlsx |
| Match Column | Date |
| Sheet Name | Baby_jogger |
What happens:
- The step downloads the existing Excel file.
- It looks for a row where the Date column matches the input's Date value.
- If found, it updates only the cells that have matching headers in the input.
- If not found, it creates a new row at the bottom.
- The updated file is saved back.
Output
The output envelope depends on the action:
export:csv/export:xlsxreportstatus: "success". Overwrite runs also returnfileName,format,mode,rowCount,columnCount, and the generatedartifact. Upsert runs returnrowsProcessed,rowsUpdated,rowsInserted,rowsSkipped, and the updatedfileId/file.export:docreturns a booleansuccessflag along withfileName,format: "docx",contentBlocks(the number of blocks written), and the generatedartifact.
Tips
- Use clear column names so the file is understandable outside Automation Hub.
- Use Global Variables for file names that include a month, region, team, or environment.
- Use CSV when another system will import the file.
- Use Excel when people will review the file manually.
- Use Upsert when you need to update specific rows in an existing tracker or report without overwriting the entire file.
- In Upsert mode, only the cells you provide in the input are updated — other cells in the row are left untouched.