Export shipments to CSV
Conterminal has two CSV exports. One is a button in the Container Dashboard that writes whatever the grid is showing you. The other is a server route that streams a filtered carrier operations list. They produce different columns, different filenames, and different row counts — knowing which one you are holding is most of the work.
6 minute read · Updated July 27, 2026
Only one of them has a button.
The Container Dashboard export is a normal button you can click. The carrier operations export is a URL with no entry point anywhere in the current app — no link, no menu item, no keyboard shortcut. If you need it, contact support rather than hunting for the control.
The two exports
Both exports write a comma-separated file with one header row and one row per container. That is where the similarity ends.
- Container Dashboard export
- A button in the grid footer. Runs entirely in your browser against the rows already loaded on screen, so it is instant and needs no round trip. 35 columns. Available to carrier, forwarder, and warehouse workspaces.
- Carrier operations export
- A server route at /protected/operations/export that re-queries the database and streams the result. 18 columns. Carrier workspaces only, and reachable only by URL — nothing in the app links to it.
In practice, if you clicked something to get your file, you have the dashboard export. Check the filename: the dashboard writes trucker-container-dashboard-report.csv or forwarder-shipment-status-report.csv, and the carrier route writes something like carrier-operations-at_pier-2026-07-27.csv.
Neither export is a report of your whole account. Both are a projection of one filtered list at one moment. If you need a complete historical extract, say so when you contact support — do not assume a dashboard export covers it.
Exporting from the dashboard grid (visible rows only)
Open Container Dashboard from the left rail. Filter and sort the grid until it shows exactly the rows you want, then export.
- Wait for the grid to finish loading. The row count next to the search box reads Counting rows while the dashboard is still pulling its working set. The export button stays disabled until that finishes — see Container Dashboard basics for how the working set is loaded.
- Narrow the grid. Pick a view, apply column filters, and type in the search box. Every one of those narrows what gets exported. So does the sort you have applied — the file comes out in the order the grid is displaying.
- Click Export CSV. On desktop the button sits at the far right of the footer bar under the grid, labeled Export CSV. On a phone or a narrow window it is a button labeled CSV under a small Export heading in the card above the list.
- Find the file. Nothing appears on screen. The browser downloads the file straight to your downloads folder under a fixed name, so a second export replaces or numbers alongside the first depending on your browser.
What the file actually contains
The export takes the grid's current row model. That means:
- Filters and search are honored
- Column filters and the local search box both narrow the file, and the rows come out in the sort order on screen.
- Row selection is ignored
- Ticking checkboxes changes nothing. The export always writes every visible row, not the selected ones.
- Column visibility is ignored
- The column list is fixed. Hiding, reordering, or resizing columns in the grid has no effect — hidden columns are still in the file, in the file's own order.
- Only loaded rows exist
- Anything outside the dashboard's history window was never loaded into the browser, so it cannot be exported. Widen the window first.
The column list differs by workspace type. A carrier workspace gets a dispatch-shaped set that opens Status, Holds, Container, Customer, Importer (BCO), PO and carries Dispatch, Chassis, Scheduled Return, and Billed. A forwarder workspace gets a documentation-shaped set that opens Status, Holds, Container, Importer (BCO), Owner, MBL. A warehouse workspace gets the forwarder set with Customer and Broker in place of Importer (BCO) and Owner. All three end with Source, Added, and Updated, and all three are 35 columns wide.
The Holds column drops holds.
A container can carry several holds at once — a customs hold, a freight hold, a manual override, an offsite-review flag. The grid shows them all. The CSV writes only the first one and silently discards the rest, so do not use an exported Holds column to prove a container was clear.
Two columns write raw internal values rather than the labels on screen. Status comes out as on_water, at_pier, scheduled, gate_out, delivered, or returned — note that returned is what the grid calls Gate In. Source comes out as delivery_order or managed_tracking, where the app says Native D/O and Managed Tracking. Map them yourself if the file is going to someone outside operations.
The carrier operations export (filters honored, streaming)
There is no button for this.
The carrier operations export lives at /protected/operations/export. The only screen that ever rendered a Download CSV link to it is no longer wired to a route, and carrier workspaces that open /protected/operations are redirected to the Container Dashboard instead. The route still works if you reach it by URL, but you will not find a control for it in the app. Ask support before you build a URL by hand.
It behaves differently from the dashboard button in three ways that matter.
- It re-queries the database. Nothing is taken from your browser. The route runs the same container query the operations list uses and applies the filters in the URL to it, so the file reflects the database at the moment of the request rather than whatever your screen was holding.
- It streams, and it is not paginated. The route walks the whole result set 500 rows at a time and writes each batch to the response as it goes. There is no page size and no row cap — a filter that matches ten thousand containers produces ten thousand rows. The page parameter is stripped before the query runs.
- It honors more filters than the list did. Tab, terminal, clearance, and the free-text query are applied, and so are vessel, steamship line, BCO (or the older consignee spelling), customer, LFD urgency, empty-LFD urgency, and exposure. Multi-value filters are pipe-delimited. The date range is applied only on the Gate Out and Gate In tabs; on every other tab it is ignored outright.
The filename is built from the tab and the current business date in US Eastern time — carrier-operations-gate_out-2026-07-27.csv for the Gate Out tab, and so on. The default tab is at_pier, which the app labels At Terminal.
The 18 columns are Container, Terminal, Vessel, BCO, Consignee, Customer Org, Status, D/O Received, LFD, LMTFD, Clearance, Provider Clearance, Manual Override, Reference, Driver, Pickup, Delivered, and Returned. The three clearance columns are deliberately separate: Provider Clearance is what the terminal or steamship-line source reported, Manual Override is what a dispatcher set by hand, and Clearance is the effective value after the override is applied. If you are auditing a disagreement, all three are in the file.
The route requires a carrier workspace and one of the tenant_admin, tenant_manager, or tenant_user roles. Anyone else is redirected to the unauthorized page instead of getting a file. See why a page shows Access Denied.
Reading the file in Excel
Both files are UTF-8 text with a single header row and line feeds between rows. A value is wrapped in double quotes only when it contains a comma, a double quote, or a line break, and an embedded double quote is doubled. That is standard CSV and every real parser reads it correctly. Excel is where it gets awkward.
| File | Byte order mark | What that means |
|---|---|---|
| Carrier operations export | Yes | Excel detects UTF-8 on its own. Accented names and other non-ASCII characters open correctly on a double-click. |
| Container Dashboard export | No | Excel on Windows may guess the wrong encoding and mangle non-ASCII characters. Import it rather than double-clicking it. |
- Import instead of opening. In Excel, use Data → From Text/CSV, pick the file, and set File Origin to 65001: Unicode (UTF-8). This is the only reliable way to read the dashboard export on Windows.
- Force the reference columns to Text. Before you load, set Container, PO, MBL, Booking, Broker Ref, Tracking, and Reference to Text. Excel will otherwise strip leading zeros from a reference number and convert anything that looks numeric into a number.
- Leave the date columns alone. Dates are written as plain text exactly as Conterminal stores them. If you let Excel auto-detect them it will reformat them to your machine locale, which quietly makes two people's copies of the same export disagree.
The Added column carries the exact added-to-Conterminal timestamp rather than a day value, because that is what the grid sorts on. If you sort an export by Added and it does not match the grid, check that Excel has not truncated it to a date.
The Contents column can contain commas and, occasionally, line breaks from the original document. Those rows are quoted correctly, so they will look wrong only in a tool that splits on commas without respecting quotes. If a row appears to spill into the next line in something other than Excel, that is the reason.
Limits
- 10,000 rows in the dashboard
- The Container Dashboard holds a working set with a 10,000-row budget. Over that it refuses to load at all, and there is nothing to export until the history window is shortened.
- The history window
- The dashboard loads one of three windows — 120d, 12mo, or 36mo. Rows older than the selected window are not in the browser and therefore not in the export.
- No row cap on the carrier route
- The streaming export has no limit. It walks the entire filtered result set in batches of 500 rows and keeps writing until the query is exhausted.
- Fixed column sets
- 35 columns for the dashboard export, 18 for the carrier export. Neither is configurable, and neither follows the columns you chose to show in the grid.
If the workspace history window is too wide, the dashboard shows “The workspace history window exceeds the 10,000-row dashboard limit. Ask an admin to shorten it in Settings → Reporting defaults.” Nothing loads and nothing can be exported until an administrator changes that default. Shortening the window is the fix; reloading is not.
There is no scheduled export, no emailed export, and no API key you can point a spreadsheet at. If you need a recurring extract, that is a support request, not a setting.
Troubleshooting
The Export CSV button is greyed out
Two things disable it. Either the dashboard has not finished loading its working set — the row count beside the search box still reads “Counting rows” — or the grid is currently showing zero rows. Wait for the count to resolve, then loosen a filter until at least one row is visible. A dashboard that failed to load, rather than one that is still loading, also leaves the button disabled; reload the page in that case.
The row count does not match the screen
Work through the four usual causes in order. The header row makes the file one line longer than the row count. Row selection is ignored, so ticking twelve checkboxes still exports every visible row. The dashboard export can only contain rows inside the loaded history window. And the carrier operations export re-applies vessel, steamship line, BCO, customer, LFD urgency, empty-LFD urgency, and exposure filters from the URL, which the operations list itself never applied — so that file can legitimately be shorter than the list you were looking at.
The download stopped partway
This only happens on the carrier operations export. Because it streams, the response headers and the first rows are already sent before anything can go wrong, so a failure mid-stream cannot turn into an error page — the download simply aborts and you are left with a truncated file. Check the last container number in the file, then request it again. If it stops at roughly the same place twice, narrow the filters and send support the exact URL you used.
A container has several holds but the file shows one
Expected, and a real limitation. The Holds column writes only the first hold label and discards the rest. Open the container in the grid to see the full set.
Status and Source columns look like code
They are the underlying values, not the display labels. Status is on_water, at_pier, scheduled, gate_out, delivered, or returned — returned is the grid's “Gate In”. Source is delivery_order or managed_tracking, shown in the app as “Native D/O” and “Managed Tracking”.
Columns I hid are still in the file
Column visibility and column order are grid settings only. The export writes the same fixed column list every time, in its own order. There is no way to export a custom column set.
Every export overwrites the last one
The dashboard export uses a fixed filename with no date or filter in it, so repeated exports collide in your downloads folder. Rename each file as you save it. The carrier operations export includes the tab and the business date, but two exports of the same tab on the same day still collide.
Opening /protected/operations/export sends me to Access Denied
That route is carrier-only and needs the tenant_admin, tenant_manager, or tenant_user role. A forwarder, warehouse, or importer workspace cannot use it at all — use the Container Dashboard export instead.
Accented names come out as garbage
You double-clicked the dashboard export, which carries no byte order mark, and Excel guessed the wrong encoding. Re-import it with Data → From Text/CSV and File Origin set to 65001: Unicode (UTF-8). The carrier operations export does carry a byte order mark and does not have this problem.