---
title: "Exports"
description: "Download a form's submissions as CSV, JSON or NDJSON, from the dashboard or the API, with filters."
---

> Documentation Index
> Fetch the complete documentation index at: https://docs.getquickforms.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Exports

Export a form's submissions from the [dashboard](https://docs.getquickforms.com/dashboard/) or with `GET /api/v1/forms/{form}/export`. Both take the same formats and filters. Exports are streamed, so large forms download without loading everything at once.

## From the dashboard

On the form's **Submissions** tab, click **Export** and pick **CSV** or **JSON**. The export uses the view you are looking at: Live (the default), All, Sandbox, Spam, Broke rules or Unconfirmed, plus any delivery, personal link and date range filters.

## From the API

### CSV

```bash
curl https://YOUR-QUICKFORMS-HOST/api/v1/forms/FORM_ID/export?sandbox=false \
  -H "Authorization: Bearer $QUICKFORMS_TOKEN" \
  -o submissions.csv
```

### JSON

```bash
curl "https://YOUR-QUICKFORMS-HOST/api/v1/forms/FORM_ID/export?format=json&since=2026-11-01" \
  -H "Authorization: Bearer $QUICKFORMS_TOKEN" \
  -o submissions.json
```

The API key needs to belong to the form's team. See [API](https://docs.getquickforms.com/api/).

## Parameters

All are optional query parameters.

| Parameter | Values | Description |
| --- | --- | --- |
| `format` | `csv`, `json`, `ndjson` | Defaults to `csv`. |
| `sandbox` | `true`, `false`, `1`, `0` | Only [sandbox](https://docs.getquickforms.com/sandbox/) submissions, or only live ones. |
| `spam` | `true`, `false`, `1`, `0` | Only submissions marked as spam, or only ones that aren't. |
| `failed_rules` | `true`, `false`, `1`, `0` | Only submissions that broke one of the form's [spam filter](https://docs.getquickforms.com/spam-filter/) smart rules, or only ones that didn't. |
| `confirmation` | `pending`, `confirmed`, `expired` | Filter by [double opt-in](https://docs.getquickforms.com/double-opt-in/) status. |
| `delivery` | `failed`, `retrying`, `issue` | Only submissions with a delivery in that state. `issue` is either. |
| `link_id` | A link ID | Only submissions through that [personal link](https://docs.getquickforms.com/personal-links/). |
| `since` | A date | Submitted at or after this date and time. |
| `until` | A date | Submitted at or before this date and time. |

Leave a filter out to include everything. An invalid value returns a `422`. Submissions come out oldest first.

## The file

The file is named after the form and the day, for example `contact-submissions-2026-11-06.csv`.

| Format | Content type | Shape |
| --- | --- | --- |
| `csv` | `text/csv; charset=UTF-8` | A header row, then one row per submission. |
| `json` | `application/json` | One JSON array of submissions. |
| `ndjson` | `application/x-ndjson` | One JSON submission per line. |

Columns and fields follow the form's live schema.

### CSV

The columns are:

| Column | Value |
| --- | --- |
| `id` | The submission ID. |
| `submitted_at` | When it was submitted, as ISO 8601. |
| `sandbox` | `yes` or `no`. |
| `spam` | `yes` or `no`. |
| `failed_rules` | `yes` or `no`. |
| `confirmation` | `pending`, `confirmed`, `expired`, or empty. |
| `link` | The label of the personal link it came through, or empty. |
| One per field | Headed with the field's label, or its name. |

```csv title="contact-submissions-2026-11-06.csv"
id,submitted_at,sandbox,spam,failed_rules,confirmation,link,Name,Email,Message
01jca9qf3tz5b8m2k7w4r6x0hn,2026-11-06T10:24:00+00:00,no,no,no,,,"Ada Lovelace",ada@example.com,"Interested in a demo"
```

The values are illustrative.

Answers are written as plain text:

- Checkboxes are `Yes` or `No`, and several choices are joined with `, `.
- Files are their [download link](#file-links).
- Empty answers are empty cells.
- A cell starting with `=`, `+`, `-`, `@`, a tab or a carriage return gets a `'` in front, so spreadsheets don't run it as a formula.

### JSON and NDJSON

Each submission is an object:

```json title="One submission"
{
  "id": "01jca9qf3tz5b8m2k7w4r6x0hn",
  "submitted_at": "2026-11-06T10:24:00+00:00",
  "sandbox": false,
  "spam": false,
  "failed_rules": false,
  "confirmation_status": null,
  "link_id": null,
  "data": { "name": "Ada Lovelace", "email": "ada@example.com", "message": "Interested in a demo" },
  "tracking": null
}
```

| Key | Description |
| --- | --- |
| `confirmation_status` | `pending`, `confirmed`, `expired` or `null`. |
| `link_id` | The ID of the personal link it came through, or `null`. |
| `data` | The answers as submitted. File values include a `url` [download link](#file-links). |
| `tracking` | The [attribution data](https://docs.getquickforms.com/tracking/) stored with the submission, or `null`. |

## File links

Files in an export get a [signed download link](https://docs.getquickforms.com/file-uploads/#download-links) that lasts `QUICKFORMS_EXPORT_FILE_LINK_DAYS` days (7 by default), longer than the usual links, so a saved export keeps working for a while.

Source: https://docs.getquickforms.com/exports/index.mdx
