Answers/Can I visualize CSV data in a dashboard?

Can I visualize CSV data in a dashboard?

Updated March 2026

Yes. Upload a CSV file, get a dashboard URL. Three API calls total.

Step 1: Presign the upload. POST /api/dashboards/upload with your filename and file size in bytes. You get back an uploadUrl and a csvObjectId.

Step 2: PUT your CSV file to the uploadUrl. This uploads directly to storage -- the file doesn't pass through Sutrena's servers. Include the headers from the uploadHeaders field in the presign response.

Step 3: Create the dashboard. POST /api/dashboards with the csvObjectId, a title, and your DSL definition. Sutrena parses the CSV, detects column types (string, number, date), pre-aggregates the data according to your widget definitions, and returns a dashboard URL.

Limits: 10MB per CSV file, 100,000 rows, 50 columns. These are hard limits. For larger datasets, pre-aggregate in your pipeline before uploading.

The dashboard renders instantly because data is pre-aggregated at creation time. No query runs when someone opens the URL. This also means the dashboard is static -- it shows exactly the data you uploaded. No auto-refresh, no live updates. Upload a new CSV and create a new dashboard to update.

Type detection is automatic. Columns that look like numbers become numeric (summable, chartable). Columns that look like dates become temporal. For date columns, use the $column:day, $column:week, or $column:month syntax in groupBy to bucket by time period. Everything else is treated as categorical.

What Sutrena cannot do with CSV dashboards: no joins across multiple CSVs, no SQL queries, no computed columns. If you need those, use a proper BI tool like Metabase or Grafana connected to your database. Sutrena handles the simple case -- upload a file, get a visual dashboard -- well. For numeric aggregation, metric cards support sum(field), avg(field), min(field), and max(field) in addition to count(*). Chart widgets accept an optional aggregate field for the same expressions.

# Step 1: Presign the CSV upload
curl -X POST https://sutrena.com/api/dashboards/upload \
  -H "Authorization: Bearer st_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{ "filename": "sales.csv", "sizeBytes": 245000 }'

# Step 2: Upload the file to the presigned URL
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: text/csv" \
  --data-binary @sales.csv

# Step 3: Create the dashboard with the csvObjectId
curl -X POST https://sutrena.com/api/dashboards \
  -H "Authorization: Bearer st_live_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Sales Dashboard",
    "csvObjectId": "'"$CSV_OBJECT_ID"'",
    "isPublic": true,
    "dsl": {
      "version": 1,
      "widgets": [
        { "type": "metric_card", "title": "Total Rows", "value": "count(*)" },
        { "type": "metric_card", "title": "Total Revenue", "value": "sum(amount)" },
        { "type": "bar_chart", "title": "Revenue by Region", "groupBy": "region", "aggregate": "sum(amount)" },
        { "type": "line_chart", "title": "Sales Over Time", "groupBy": "$date:month" },
        { "type": "data_table", "title": "Raw Data", "columns": ["date", "region", "amount"], "limit": 50 }
      ]
    }
  }'

Ready to build?

Get a trial API key instantly — no signup required.

Can I visualize CSV data in a dashboard? — Sutrena | Sutrena