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

FromChooseFormatsRows
A chart in a reportThe chart's ⋯ menuExport 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 reportExportCSV, Excel workbook, JSONEvery row, as readers sorted and filtered it, up to the author's limit
The chart editorDownloadImage (PNG), Rows (CSV)What the chart loaded
A dataset's explorerExportCSV, Excel workbook, Every row as CSV, Every row as Excel, Every row as JSONLoaded rows, or all rows
A public link or embedThe chart's ⋯ menu, or a table's ExportCSV, Excel, JSON, and charts' PNGUp to 10,000 rows, if the author allows it
A public link or embedPDF, in the headerPDFThe whole report, if the author allows it
A scheduleSend it asPDF, CSV (zip), JSONUp 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

ToNeeds
Export in Halo DataThe Export data permission (data.export). Owners, Admins, Builders and Analysts have it. Viewers and External guests don't
Export from one chart or tableThe 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 embedsPeople 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 embedsThey 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.

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:

  1. In a dataset's explorer, set up the table: columns, filters and sorts carry into the file.

  2. Choose Export, then Every row as CSV, Every row as Excel or Every row as JSON.

  3. Halo says Export started, with View job to follow it.

  4. 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

LimitAmount
Rows in one background export10 million
Rows on one Excel sheetAbout a million. Past 1,048,575, the file continues on more sheets
How long a background export's file lasts7 days. The link stops working and the file is deleted
Exports per daySet 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
    }
  ]
}