Export a form’s submissions from the 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
curl https://YOUR-QUICKFORMS-HOST/api/v1/forms/FORM_ID/export?sandbox=false \
-H "Authorization: Bearer $QUICKFORMS_TOKEN" \
-o submissions.csvcurl "https://YOUR-QUICKFORMS-HOST/api/v1/forms/FORM_ID/export?format=json&since=2026-11-01" \
-H "Authorization: Bearer $QUICKFORMS_TOKEN" \
-o submissions.jsonThe API key needs to belong to the form’s team. See API.
Parameters
All are optional query parameters.
| Parameter | Values | Description |
|---|---|---|
format |
csv, json, ndjson |
Defaults to csv. |
sandbox |
true, false, 1, 0 |
Only 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 smart rules, or only ones that didn’t. |
confirmation |
pending, confirmed, expired |
Filter by 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. |
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. |
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
YesorNo, and several choices are joined with,. - Files are their download link.
- 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:
{
"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. |
tracking |
The attribution data stored with the submission, or null. |
File links
Files in an export get a signed download link 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.