---
title: "Available exports"
description: "Every export IoTFlows offers, with the column list for each one. Seven surfaces download data: the Downtimes report, the Advanced Report and historical production as CSV or PDF, and Operator Performance, Production Insights, the maintenance table and the scheduler table as CSV. Every export carries the filters you have on screen. The PDF is rendered from the report URL, so it looks like the page; the CSV carries the rows. The audit log has no export."
category: "Reference"
source_url: "https://www.iotflows.com/docs/monitoring/exports-reference/"
---
# Available exports

Every export in the product: where it lives, what format, and what it contains.

Seven surfaces download data. Three reports offer both CSV and PDF, four tables offer CSV only, and everything else in IoTFlows is read on screen. Every export sends the rows the surface is currently showing, so the filters you set are the filters you get.

## Exports by surface
| Surface | Format | Respects filters | Column reference | Page |
|---|---|---|---|---|
| Downtimes report, `/assets?select=downtimes` | CSV, PDF | Yes | [Downtimes CSV](#downtimes-csv) | [Analyze downtime](/docs/monitoring/downtimes/) |
| Advanced Report, `/assets?select=advanced_report` | CSV, PDF | Yes | [Advanced Report CSV](#advanced-csv) | [Build a utilization report](/docs/monitoring/advanced-report/) |
| Historical production, `/production?select=historical_report` | CSV, PDF | Yes | [Historical production CSV](#historical-csv) | [Compare production over weeks and months](/docs/production/historical-production/) |
| Operator Performance, `/assets?select=operator_performance` | CSV | Yes | [Operator report CSV](#operator-csv) | [Measure operator work sessions](/docs/monitoring/operator-performance/) |
| Production Insights, `/production?select=insights` | CSV | Yes | [Production Insights CSV](#insights-csv) | [Analyze cost and on-time performance](/docs/production/production-insights/) |
| Maintenance board, **Table** view, `/maintenance` | CSV | Yes | [Work order fields](/docs/maintain/work-order-fields/) | [Organize work on the maintenance board](/docs/maintain/maintenance-board/) |
| Scheduler board, **Table** and Gantt, `/production?select=scheduler` | CSV | Yes | [Job and scheduler fields](/docs/production/job-fields-reference/) | [Plan jobs on the scheduler board](/docs/production/scheduler/) |

The three reports put their downloads in one place. Open **Actions** at the right of the filter bar and pick **Download as PDF** or **Download as CSV**, under the **Report actions** heading. The same menu carries **Share** and **Schedule**.

The four tables each carry their own control:

- **Operator Performance**: a **CSV** button on the toolbar, next to the date range. It is disabled while the report is empty.
- **Production Insights**: an **Export CSV** button at the right of the **All operations** table. With **Group** set to **None** it downloads immediately. With **Group** set to **Job** or **Asset** it opens a menu offering **Operation rows**, **Totals by job** or **Totals by asset**, and **Rows + totals**.
- **Maintenance** and **Scheduler**: a **CSV** button on the filter bar, rendered only on the **Table** view. The scheduler repeats it as a download icon on the Gantt toolbar, so you do not have to leave the board to get the file.

### Choose CSV or PDF
Use CSV when the number is going into a spreadsheet, and PDF when it is going into a meeting.

The PDF is rendered on the server from the URL you are on, so it carries the filters and switches you had on screen and it looks like the page: the same charts, the same order. The CSV carries the rows, and nothing else.

You do not need either one to get a report to someone who does not log in. **Share** emails the same view to a colleague now, and **Schedule** emails it on a cadence, see [Emailed and scheduled reports](#email).

## CSV column references
### Downtimes CSV
Downloads as `Downtime Classification Data.csv`. One row per stop, covering every row the filters match rather than the 25 on the visible page. The header is the raw field names.

| Column | Holds |
|---|---|
| `asset_identifier` | The machine's identifier, or its UUID if it has none |
| `asset_name` | The machine's name |
| `utilization_start_timestamp` | When the stop began |
| `utilization_end_timestamp` | When the stop ended |
| `downtime_duration` | The stop's length, formatted for reading |
| `downtime_duration_seconds` | The same length in seconds |
| `downtime_category_name` | The reason on the stop, empty when the stop is unclassified |
| `utilization_downtime_note` | The note an operator left on the stop |

Sort on `downtime_duration_seconds`, not on `downtime_duration`. The formatted column is text, so a spreadsheet puts `9m 12s` above `1h 4m`.

### Advanced Report CSV
Downloads as `Utilization_Report_2026-08-01_to_2026-08-31.csv`. The file opens with a title block, then a blank line, then the table.

The title block records what produced the numbers: the report title and date range, the generation date and your organization timezone, the shifts selected, and one line for each switch that was on, reading `Excluding Unknown from OEE`, `Excluding None from OEE` or `Showing only uptime`. Skip those rows when you import the file, or the spreadsheet reads the title as the header.

A report built with **Shift islands** on adds one more line, `Shift islands: on (an overnight shift is counted on the day it began)`. It follows the same rule as the switches: the line appears only when the setting is on, and its absence means the shift was split at midnight. Read it before you compare two exports of the same night shift, because that one line is what separates them, see [Shift islands](/docs/monitoring/advanced-report/#shift-islands).

One row per machine per interval, with these 12 columns: `Department Name`, `Asset Name`, `Asset Identifier`, `Period`, `Category`, `Uptime Hours`, `Downtime Hours`, `Unknown Hours`, `Uptime Percentage`, `Downtime Percentage`, `Unknown Percentage`, `Tags`. `Period` is the interval's start and `Category` is its label, so a monthly report at a daily interval writes 31 rows per machine. Multiple tags arrive in one cell, comma separated.

Each figure is defined once in [How each metric is calculated](/docs/monitoring/metrics-reference/).

### Historical production CSV
Downloads as `Production_Historical_Report.csv`. The name carries no date, so rename the file before you file it or you will not know which window it covers.

One row per operation per machine per interval, with these 11 columns: `Timestamp`, `categories`, `part_name`, `operation_name`, `operation_description`, `asset_identifier`, `asset_name`, `total_operation_good_count`, `total_operation_scrap_count`, `asset_good_count`, `asset_scrap_count`.

`Timestamp` is the interval's start and `categories` is its label. The two `total_operation_*` columns are the operation's counts across every machine that ran it, repeated on each machine's row, and the two `asset_*` columns are that one machine's share.

> **Warning:**
> **Columns not lining up?** This file is written without quoting, unlike every other export here. A part name, operation name or description containing a comma splits into two cells and shifts the rest of that row left.
>
> Every data row also ends with a trailing comma, so spreadsheets show one empty column at the right. Remove commas from the names you care about, or check the row widths after importing.

### Operator report CSV
Downloads as `operators_report_Aug 1, 2026_to_Aug 31, 2026.csv`. One row per clocked session, per operator and machine. An operator and machine pair with no sessions in the window still gets a row, with `N/A` in the clock columns.

| Column | Holds |
|---|---|
| `Username` | The operator's IoTFlows handle |
| `User First Name`, `User Last Name`, `User Email` | The operator's profile fields |
| `Asset Name`, `Asset Identifier` | The machine worked during the session |
| `Department Name` | The machine's department |
| `Clocked Category` | The label the report gives this session |
| `Clocked Runtime Hours`, `Clocked Downtime Hours` | The machine's uptime and downtime during the session |
| `Clocked Runtime Percentage`, `Clocked Downtime Percentage` | The same two as a share of the session |
| `Clock Start`, `Clock End` | When the operator clocked in and out |

> **Warning:**
> **Hours columns missing from the file?** The header is taken from the first row of the report. If that row is an operator and machine pair with no sessions, the file comes out in the shorter ten-column form, without the four `Clocked` hour and percentage columns, and the name and email cells are blank on every row below. Filter the report to operators who worked in the window, then download again.

### Production Insights CSV
Downloads as `production-insights-operations-2026-09-19.csv`, or `production-insights-operations-job-totals-2026-09-19.csv` for a totals-only export. Either file holds every row the table's search, status and hide-zero filters match, in the sort order the table is in, not just the visible page.

There are two layouts, and one control that writes them:

- **Operation rows**, 17 columns: `Job`, `Operation`, `Part`, `Asset`, `Asset ID`, `Workorder #`, `Title`, `Status`, `Labor Hours`, `Production Hours`, `Units`, `Total Cost`, `Labor $/unit`, `Production $/unit`, `Profit`, `Profit $/unit`, `Created`.
- **Totals by job** or **Totals by asset**, 10 columns: the group name, then `Operations`, `Units`, `Labor Hours`, `Production Hours`, `Labor Cost`, `Production Cost`, `Total Cost`, `Profit`, `Profit $/unit`.

**Rows + totals** writes both tables into one file, separated by a blank line. Pick it when you want a finance reader to see the summary without losing the detail behind it, and pick **Operation rows** when the file is going into a pivot table.

### Maintenance and scheduler table CSVs
Both boards export the columns their table is showing, in the order it is showing them. Grouping is ignored: the file is one flat list, whatever the board is grouped by on screen. Both files open with a *byte order mark*, the marker that tells Excel a file is Unicode, so accented names survive the import.

| Board | File | Always exported | Total columns available |
|---|---|---|---|
| Maintenance | `maintenance-tasks-2026-09-19.csv` | **WO #**, **Title**, **Assigned To**, **Asset** | 15 |
| Scheduler | `scheduler-tasks-2026-09-19.csv` | **Title**, **Assignees**, **Operation**, **Part**, **Quantity**, **Asset**, **Job** | 24 |

To widen the export, turn the columns on in the table first. The maintenance table ships showing six optional columns, and the scheduler two, so a default download is far narrower than the totals above.

**Part** is the one column that behaves differently. The scheduler table draws the part and the operation in a single cell, but the CSV gives the part its own column, placed immediately after **Operation**.

Every column is defined in [Work order fields and statuses](/docs/maintain/work-order-fields/) and [Job and scheduler fields](/docs/production/job-fields-reference/).

## Emailed and scheduled reports
The Downtimes report, the Advanced Report and historical production each carry **Share** and **Schedule** alongside the two downloads in the **Actions** menu. **Share** emails the view you built to members of your organization now. **Schedule** saves that view and emails it on a daily to yearly cadence.

Neither is a download. Nothing lands in your Downloads folder, and a recipient has to be a member of your organization already, because both dialogs pick from the member list rather than taking a typed address.

Choose an export when you need the numbers to leave IoTFlows, and a schedule when the same people need the same report every week. Full procedure in [Email a report and schedule it to repeat](/docs/monitoring/share-and-schedule-reports/).

## What has no export
The audit log at `/logs` has no export in any format. Read it in the browser, and filter it down before you go looking, see [Review the organization audit log](/docs/admin/audit-log/).

The live monitoring surfaces have none either, by design. The Assets page, Canvas, wallboards and a machine's Health tab are all views of the current moment, and the reports exist to put a window around that data. For utilization use the Advanced Report, and for stops use the Downtimes report.

## Export errors
| Message | What happened | Fix |
|---|---|---|
| Failed to download CSV. Please try again. | The browser could not build the file from the rows on screen | Reload the page, wait for the table to finish loading, then download again |
| Something went wrong generating the PDF. | The server could not render the report URL | Try again. If it repeats, narrow the date range: a long window at a fine interval is the usual cause |
| An error occurred while downloading | A file or image attached to a work order failed to download. This is not a report export | Open the work order and download the attachment from its detail panel |

The PDF takes a few seconds, and a toast reads **Generating PDF report… this may take a few seconds.** while it works. Leaving the page cancels it.

## See also
- [Email a report and schedule it to repeat](/docs/monitoring/share-and-schedule-reports/)
- [Work order fields and statuses](/docs/maintain/work-order-fields/)
- [Job and scheduler fields](/docs/production/job-fields-reference/)
- [Review the organization audit log](/docs/admin/audit-log/)
- [How each metric is calculated](/docs/monitoring/metrics-reference/)
