Exports
Download rows and images from charts, tables and datasets as CSV, Excel, JSON or PNG, and run big exports in the background.
Halo gets data out wherever you find it: rows from a chart or table, a whole dataset, or a picture of a chart. This table has the same Export menu you'll find on tables in Halo. Try it:
Sample rows. Here, Export gives you the rows that are loaded, as CSV or Excel.
What you can export, from where
| From | Choose | Formats | Rows |
|---|---|---|---|
| A chart in a report | The chart's ⋯ menu | Export rows (CSV), (Excel), (JSON), Download image (PNG) | The chart's whole result, as it shows it: a top ten stays ten |
| A table in a report | Export | CSV, Excel workbook, JSON | Every row, as readers sorted and filtered it, up to the author's limit |
| The chart editor | Download | Image (PNG), Rows (CSV) | What the chart loaded |
| A dataset's explorer | Export | CSV, Excel workbook, Every row as CSV, Every row as Excel, Every row as JSON | Loaded rows, or all rows |
| A public link or embed | The chart's ⋯ menu, or a table's Export | CSV, Excel, JSON, and charts' PNG | Up to 10,000 rows, if the author allows it |
| A public link or embed | PDF, in the header | The whole report, if the author allows it | |
| A schedule | Send it as | PDF, CSV (zip), JSON | Up to 10,000 per chart and 100,000 per table |
For a whole report on paper, see Printing and PDFs.
PNG is for charts drawn as graphics. Scorecards with their own number, and a chart showing as a table, don't offer it.
Who can export
| To | Needs |
|---|---|
| Export in Halo Data | The Export data permission (data.export). Owners, Admins, Builders and Analysts have it. Viewers and External guests don't |
| Export from one chart or table | The author can turn it off with Readers can download its rows on a chart, or Export the rows on a table |
| Export on public links and embeds | People who open public links and embeds can export data, in the Share dialog. Off by default, and it takes effect when you publish |
| A PDF from public links and embeds | They can download the report as a PDF, in the Share dialog. Off by default. Signed embeds never offer it |
Row policies apply to every export. You only ever get the rows you can already see. See Row policies.
From a report's charts and tables
Exports from a report go through Halo's servers, so they're in the audit log and count toward your plan's exports, like any other:
Up to 10,000 rows download straight away.
More than 10,000 run in the background, as from a dataset's explorer below, and Halo notifies you with a download link. You'll see Exporting in the background, with View job.
A table's file has its columns in the order you see them. A pivoted table's file has the plain rows beneath it.
From public links and embeds
People who open a public link or embed can export up to 10,000 rows from a chart or table, and download the report as a PDF, where you've allowed each in the Share dialog. Each reader can make ten exports and ten PDFs an hour from one link. Past that, Halo asks them to try later.
On a report that reads from a snapshot, a chart's rows come from the snapshot, as the reader sees them.
The PDF is the report as the link shows it, with no one's row policies applied, like the link itself. Every reader of the same snapshot or edition gets the same file; without a snapshot, the file is printed again at most once an hour.
Each export and PDF is in the audit log, with no one as its actor and the link it came from.
Loaded rows and all rows
Loaded rows are built in your browser from what the page already has, so they arrive at once. They don't reach past that. A very long table holds only the rows in view, so the menu says so and offers all rows instead, where it can.
All rows runs as a job on Halo's servers, and you can carry on working:
In a dataset's explorer, set up the table: columns, filters and sorts carry into the file.
Choose Export, then Every row as CSV, Every row as Excel or Every row as JSON.
Halo says Export started, with View job to follow it.
When it's done, Halo notifies you with a download link.
If the table is pivoted, the export isn't: you get the plain rows.
Limits
| Limit | Amount |
|---|---|
| Rows in one background export | 10 million |
| Rows on one Excel sheet | About a million. Past 1,048,575, the file continues on more sheets |
| How long a background export's file lasts | 7 days. The link stops working and the file is deleted |
| Exports per day | Set by your plan, and counts every export that goes through Halo's servers, straight downloads and background ones alike. Loaded rows don't count. Past it, Halo refuses with a message saying so. See Usage and limits |
A failed background export is tried once more. Each is in the audit log.
What's in the file
Values go out raw, not formatted, so spreadsheets can do math on them: numbers as numbers, dates as ISO dates, timestamps as YYYY-MM-DD HH:mm:ss, and true and false as TRUE and FALSE. Empty values stay empty. Column headers are the fields' labels, with a time grain or an aggregate other than sum in brackets, such as "Visit date (month)". Number formats and color rules stay in Halo.
JSON
Every row as JSON in a dataset's explorer writes an array with one object a row, keyed by each column's key rather than its label, so programs read it reliably: numbers as numbers, dates and times as ISO text, true and false as JSON's, and empty values as null.
[
{"region":"North","visit_date__month":"2026-01-01","visitors":1200},
{"region":"South","visit_date__month":"2026-01-01","visitors":980}
]A scheduled email can also send JSON, with every chart and table's rows in one document:
{
"report": { "id": "…", "title": "Monthly revenue", "version": 12, "publishedAt": "2026-11-01T09:00:00Z" },
"generatedAt": "2026-11-03T09:00:04Z",
"timeZone": "America/Chicago",
"filters": [],
"elements": [
{
"id": "by-region",
"kind": "chart",
"title": "Revenue by region",
"page": { "id": "overview", "title": "Overview" },
"datasetId": "…",
"columns": [
{ "key": "region", "label": "Region", "type": "string", "role": "dimension" },
{ "key": "revenue", "label": "Revenue", "type": "number", "role": "measure" }
],
"rows": [{ "region": "North", "revenue": 182400 }],
"truncated": false
}
]
}