Motivation Form Docs

Data export

CSV and JSON export formats, date filtering, and jq pipe examples.

This guide covers exporting submission data for offline analysis, spreadsheet import, or piping into other tools.

Exporting

CLI:

mf export contact                          # CSV to stdout
mf export contact --format json            # JSON to stdout
mf export contact --output data.csv        # Write CSV to file
mf export contact --since 2026-04-01
mf export contact --since 2026-04-01 --until 2026-04-30

REST API:

curl "https://app.form.gold/api/forms/contact/submissions/export?format=csv" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -o submissions.csv

MCP tool:

export_submissions({
  slug: "contact",
  format: "csv",
  since: "2026-04-01",
  until: "2026-04-30"
})

CSV format

Each row is one submission. Columns are in this order:

ColumnTypeNotes
idstringSubmission UUID
submitted_atstringISO 8601 UTC timestamp
ipstringSubmitter IP (if collect.ip: true)
user_agentstringBrowser user agent (if collect.user_agent: true)
referrerstringReferring URL (if collect.referrer: true)
{field_id}variesOne column per form field, in definition order

Example:

id,submitted_at,ip,user_agent,referrer,name,email,message
01JE...,2026-04-28T09:14:00Z,203.0.113.1,Mozilla/5.0,...,https://twitter.com,Jane Smith,jane@example.com,Hello!
01JD...,2026-04-27T18:30:00Z,198.51.100.5,Mozilla/5.0,...,,Alex Chen,alex@example.com,Question about pricing

Multi-select fields (checkbox) are serialized as a semicolon-separated list within the cell:

North America;Europe;Asia Pacific

File upload fields contain the Supabase Storage URL.


JSON format

An array of submission objects:

[
  {
    "id": "01JE...",
    "submitted_at": "2026-04-28T09:14:00Z",
    "ip": "203.0.113.1",
    "user_agent": "Mozilla/5.0 ...",
    "referrer": "https://twitter.com",
    "fields": {
      "name": "Jane Smith",
      "email": "jane@example.com",
      "message": "Hello!"
    }
  }
]

jq examples

Extract all email addresses:

mf export contact --format json | jq '[.[].fields.email]'

Count submissions per campaign type:

mf export campaign-brief --format json | \
  jq 'group_by(.fields.campaign_type) | map({ type: .[0].fields.campaign_type, count: length })'

Filter to submissions this week:

mf export contact --format json --since $(date -v-7d +%Y-%m-%d) | jq length

Export to CSV and open in Numbers / Excel:

mf export contact --output ~/Desktop/submissions.csv && open ~/Desktop/submissions.csv

Extract all file upload URLs for a field:

mf export campaign-brief --format json | jq '[.[].fields.brief_pdf] | map(select(. != null))'

On this page