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-30REST API:
curl "https://form.motivationlabs.ai/api/forms/contact/submissions/export?format=csv" \
-H "Authorization: Bearer YOUR_API_KEY" \
-o submissions.csvMCP 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:
| Column | Type | Notes |
|---|---|---|
id | string | Submission UUID |
submitted_at | string | ISO 8601 UTC timestamp |
ip | string | Submitter IP (if collect.ip: true) |
user_agent | string | Browser user agent (if collect.user_agent: true) |
referrer | string | Referring URL (if collect.referrer: true) |
{field_id} | varies | One 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 pricingMulti-select fields (checkbox) are serialized as a semicolon-separated list within the cell:
North America;Europe;Asia PacificFile 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 lengthExport to CSV and open in Numbers / Excel:
mf export contact --output ~/Desktop/submissions.csv && open ~/Desktop/submissions.csvExtract all file upload URLs for a field:
mf export campaign-brief --format json | jq '[.[].fields.brief_pdf] | map(select(. != null))'