Skip to content

Export responses as CSV

Download a survey's responses as a spreadsheet-ready file, and parse it without surprises.

Adding format=csv to the responses endpoint returns the same responses as the JSON list, written as a file a spreadsheet can open. It is the same table the in-app export produces, so a scheduled job and a manual download stay comparable.

Downloading one survey's completed responses
bash
curl "https://www.asqiro.com/api/v1/surveys/s_7t2qk8wvbf31/responses?format=csv&status=completed" \
  -H "Authorization: Bearer $ASQIRO_API_KEY" \
  -o responses.csv

# Content-Type: text/csv; charset=utf-8
# Content-Disposition: attachment; filename="survey-s_7t2qk8wvbf31-responses.csv"

# The CLI wraps the same call.
asqiro responses export s_7t2qk8wvbf31 > responses.csv

What the file contains

Three fixed columns come first, then one column per question in survey order, then a trailing column for answers whose question no longer exists.

An export with two responses
csv
"Submitted","Status","Variant","How often do you review?","What would you change?","Other answers"
"2026-08-11T15:56:12.771Z","Completed","A - Control","Weekly","Fewer emails; A dark theme",""
"2026-08-11T16:40:03.118Z","Incomplete","A - Control","Monthly","","Retired question: Yes"
  • Submitted is when the response was started, as an ISO 8601 UTC timestamp. It is the same value as createdAt in the JSON response, not the moment the respondent finished.
  • Status is Completed or Incomplete, matching the completed field in the JSON response.
  • Variant names the survey variant the response came from. A survey without variants reports A - Control.
  • One column per question, headed by the question's label as plain text. The header is derived from the survey definition rather than from the answers, so a question nobody answered still gets its own empty column, and section headings get none.
  • Other answers is the last column. An answer whose question has since been deleted has no column of its own and is written here as label: value.
Note The CSV carries no response id and no externalUserId. To join an export to records of your own, read the responses endpoint as JSON instead.

Cell values

  • Several answers to one question share a single cell, separated by "; ".
  • A question the respondent skipped is an empty cell, not a missing column.
  • A date-range answer is written as start - end.
  • Question labels are exported as plain text. Formatting applied to a label in the builder is stripped.

Parse it safely

  • Every cell is wrapped in double quotes, and a double quote inside a value is doubled.
  • The file is UTF-8 with no byte-order mark, and rows are separated by a single newline.
  • The first row is always the header. Match columns by name rather than by position: adding a question to the survey moves every column after it, including Other answers.

A cell whose value starts with =, +, -, @, a tab, or a carriage return is written with a leading apostrophe, so a spreadsheet reads it as text instead of executing it as a formula. A plain signed number such as -5 is left alone, because a number evaluates to itself.

How a formula-like answer reaches the file
text
Answer as the respondent typed it:  =2+2
Cell as written to the file:        "'=2+2"
Important Strip that leading apostrophe when you load the file into anything that is not a spreadsheet. It belongs to the file format, not to the respondent's answer.

Filters and size

  • status=completed and status=incomplete narrow the export exactly as they narrow the JSON list.
  • limit and cursor do not apply. A CSV export is never paginated.
  • The file streams every matching response, with no cap on how many. Expect a long download on a large survey, and keep the connection open until it ends rather than retrying it.