How to build Tally dashboards in Metabase
Tally is a free-first form builder popular with startups for surveys, waitlists, and feedback forms. Metabase is where you turn those customer signals into shared, trustworthy dashboards. This guide covers two complementary paths: a lightweight MCP + CLI route that pulls live data with the Tally MCP server and loads a CSV into Metabase with the Metabase CLI, and a durable pipeline route that syncs Tally data into a database so you can build dashboards anyone can read.
How do you connect Tally to Metabase?
Most teams combine both routes: use MCP and CLI uploads for a fast first pass, then move recurring product reporting to a warehouse-backed model.
Live data in, quick analysis out
Pair the Tally MCP server with the Metabase CLI. Use MCP for live lookups, write a scoped result to CSV, then load it into Metabase as a ready-to-query table and model.
- Quick lookups such as "show me survey performance and completion"
- Loading a Tally export into Metabase in seconds
- Spot-checks and one-off analyses without a warehouse
- Great for exploration, not governed recurring reporting
- Use read-only/scoped credentials wherever the MCP server supports them
- CSV uploads are snapshots — refresh or move to the pipeline for history
Durable dashboards with history
Sync Tally data into a database or warehouse with a connector, native export, or API pipeline, then point Metabase at it.
- Tally reporting that product leadership depends on
- Joining Tally data with CRM, support, product analytics, or revenue data
- Long-run trends for survey performance and completion and submission volume by form
- You own the refresh schedule and the modeling layer
- Sync entities and rollups — not raw event or session firehoses
- Metric definitions must be consistent across teams and tools
What can you analyze from Tally data in Metabase?
- Survey performance and completion — built from form submissions and the related forms and fields, answers, respondent metadata data your sync exposes.
- Submission volume by form — built from form submissions and the related forms and fields, answers, respondent metadata data your sync exposes.
- Drop-off by question — built from form submissions and the related forms and fields, answers, respondent metadata data your sync exposes.
- Feedback themes from open text — built from form submissions and the related forms and fields, answers, respondent metadata data your sync exposes.
- Waitlist and signup form conversion — built from form submissions and the related forms and fields, answers, respondent metadata data your sync exposes.
Which Tally dashboards should you build in Metabase?
Survey performance
Whether surveys reach people and get finished.
- Responses per survey per week (line)
- Response rate by channel (bar)
- Completion rate by survey (bar)
- Median time to complete (number)
NPS and CSAT program
The headline experience scores, trended honestly.
- NPS trend by month (line)
- Promoters, passives, detractors (stacked bar)
- CSAT by touchpoint (bar)
- Response volume behind each score (line)
Question health
Where respondents drop off or answer poorly.
- Drop-off by question position (bar)
- Skip rate by question (table)
- Open-text answer rate (line)
- Suspiciously fast completions (table)
Segment insight
How scores differ across the customers you care about.
- NPS by plan or segment (bar)
- Score by customer tenure cohort (line)
- Verbatim theme counts by segment (table)
- Survey coverage of active customers (number)
How do you use the Tally MCP server with the Metabase CLI?
Pair the Tally MCP server with the Metabase CLI for fast, hands-on analysis. MCP is useful for scoped lookups and summarized exports; the Metabase CLI's upload command loads CSV data into Metabase and creates a ready-to-query table and model.
Example workflow
- Ask the MCP server for response-level exports for one survey, with started and submitted timestamps and completion status.
- Export the result as CSV, keeping stable IDs, statuses, segments, and timestamps.
- Run
mb upload csvto load it into Metabase as a table and model, then build questions and dashboards on top.
Be honest about the limits
- MCP lookups are excellent for exploration, not scheduled reporting.
- A CSV upload is a snapshot; refresh it with
mb upload replaceor move to the pipeline for real history. - Invitation or view counts alongside responses are required for true response and completion rates.
mb upload csvneeds an uploads database configured under Admin → Settings → Uploads.
How do you set up Tally MCP and the Metabase CLI?
Tally MCP serverofficial
- Transport
- Hosted remote MCP via Streamable HTTP (beta)
- Auth
- OAuth through Tally, or a Bearer API key
- Best for
- Live scoped lookup and export
Metabase CLIofficial
- Install
npm install -g @metabase/cli- Auth
mb auth login- Load data
mb upload csv --file data.csv- Requires
- An uploads database (Admin → Settings → Uploads)
{
"mcpServers": {
"tally": {
"url": "https://api.tally.so/mcp"
}
}
}The server is in beta but available on every plan, including free — unusual among survey tools. This is Tally the form builder (tally.so), not the Tally ERP accounting product. Endpoint verified July 2026.
# Install the Metabase CLI
npm install -g @metabase/cli
# Log in (opens your browser; requires Metabase v62+)
mb auth login --url https://your-metabase.example.com
# Load a form-submissions export — creates a table AND a model
mb upload csv --file tally-form-submissions.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file tally-form-submissions.csvCan you generate a Tally dashboard with AI?
Yes. Use the prompt below with any assistant that can run the Tally MCP server and the Metabase CLI. It works end to end: if Tally tables already exist in Metabase it analyzes those; otherwise it pulls scoped, summarized data over MCP, loads it with mb upload csv, then builds the dashboard and caveats any metric that needs missing history.
Create a polished Metabase dashboard for Tally survey analytics.
Work end to end: get the data into Metabase if it isn't there yet, then build.
Goal: Help product teams understand response and completion rates, NPS and CSAT trends, question health, and segment differences from Tally data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for tally tables and
models). If durable Tally data is already present — synced from a warehouse
or uploaded earlier — use it and skip to Step 2.
- If nothing is there, pull a scoped, summarized export with the Tally MCP server:
form submissions, plus forms and fields, answers, respondent metadata.
Prefer aggregated or rollup views over raw events. Write each result to a CSV,
then load it with the Metabase CLI — run "mb upload csv --file <export>.csv" so
each upload creates a table and a ready-to-query model. Use "mb upload replace
<table-id> --file <export>.csv" to refresh an existing table instead of creating
duplicates.
Step 2 — Inspect before querying:
Do not assume exact table or column names. Inspect available fields, statuses,
segments, and timestamps, and whether history exists before creating duration
or trend cards.
Important:
- Build on whatever data is present; don't claim Metabase connects natively to
Tally — it reads a database or CLI-uploaded tables.
- Never load raw event or session streams into Metabase; use rollups, entity
tables, and response- or request-grain data.
- Compute NPS as % promoters (9-10) minus % detractors (0-6) on the 0-10 scale,
and always show response volume next to the score.
- Only compute durations (time to close, time to complete) when the required
timestamps exist.
- Exclude internal, test, and anonymous-preview activity from headline cards,
and segment by plan or customer segment where the field exists.
- A single CSV is a point-in-time snapshot: only build trend cards if there is a
usable date column or multiple periods have been uploaded.
Dashboard title: Tally Survey Overview
Sections:
1. Executive summary: Responses last 30 days; Response rate; Completion
rate; Current NPS; Current CSAT.
2. Performance: Responses by survey and week; response rate by channel.
3. Scores: NPS and CSAT trends with response volume; promoter/passive/
detractor distribution; scores by segment.
4. Question health: Drop-off by question position; skip rates.
5. Verbatims: Open-text volume and themes where categorized.
Filters: Date range, Product area, Segment, Status, Survey or Feature.
Output: Build the dashboard if you have permission; otherwise provide the exact
questions, SQL, model definitions, and layout. Include caveats for any metric
that cannot be calculated from the available data.How do you sync Tally data into a database or warehouse?
For dashboards that need history and reliability, land Tally data in a database first, then connect Metabase to that database.
Connector options
- Managed ETL or native export — use a connector or the vendor's own warehouse sync when one covers the objects you need.
- Custom pipeline — use the Tally API for control over objects, fields, and refresh cadence.
- MCP + CSV — use this for quick exploration and one-off slices.
No managed connector exists — script the Tally API for forms and submissions on a schedule, or use MCP + CSV for lightweight recurring pulls; volumes are usually small enough that a simple script covers it.
Notes
- Decide the grain first — request, response, or daily rollup — it drives every trend card and the warehouse bill.
- Land raw entity tables first, then build clean Metabase models on top.
- Normalize survey, question, respondent segment, channel, started-at, and submitted-at fields.
How should you model Tally data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
survey_responses | one row per submission | id, form_id, started_at, submitted_at, completed, source |
survey_answers | one row per answer | response_id, field_id, field_label, answer_type, answer_value |
tally_forms | one row per form | id, name, field_count, created_at, is_closed |
Modeling advice
- Build a clean
survey_responsesmodel with common columns across tools, so multi-source dashboards don't fork definitions. - Separate entity tables (requests, surveys, features, accounts) from time-series rollups and event-grain tables.
- Exclude internal users, test workspaces, and preview traffic from headline metrics; keep segment as an explicit column.
- Use stable IDs for account, request, and survey joins; display names change.
Which Tally metrics should you track in Metabase?
| Metric | Definition | Notes |
|---|---|---|
| Survey response rate | Responses divided by invitations, opens, or views. | Pin the denominator once — sends, opens, and views differ. |
| Survey completion rate | Completed responses divided by started responses. | Falls fast with length; segment by question count. |
| Net Promoter Score | Percent promoters minus percent detractors on the 0-10 scale. | Always report response volume next to the score. |
| CSAT | Satisfied responses over all satisfaction responses. | Define the satisfied threshold once (usually 4-5 of 5). |
What SQL powers Tally dashboards in Metabase?
These assume a cleaned analytical model in a warehouse (PostgreSQL dialect). Adjust table and column names to match your pipeline.
Promoters minus detractors, with response volume.
SELECT
date_trunc('month', submitted_at) AS month,
COUNT(*) AS responses,
ROUND(
100.0 * (
COUNT(*) FILTER (WHERE score >= 9)
- COUNT(*) FILTER (WHERE score <= 6)
) / NULLIF(COUNT(*), 0), 1
) AS nps
FROM nps_responses
GROUP BY 1
ORDER BY 1;Reach and finish rates side by side.
SELECT
s.name AS survey,
s.invited_count,
COUNT(r.id) AS responses,
ROUND(
100.0 * COUNT(r.id) / NULLIF(s.invited_count, 0), 1
) AS response_rate,
ROUND(
100.0 * COUNT(r.id) FILTER (WHERE r.completed)
/ NULLIF(COUNT(r.id), 0), 1
) AS completion_rate
FROM surveys s
LEFT JOIN survey_responses r ON r.survey_id = s.id
GROUP BY s.name, s.invited_count
ORDER BY response_rate DESC;Where respondents drop off inside a survey.
SELECT
a.question_position,
a.question_title,
COUNT(DISTINCT a.response_id) AS answered,
ROUND(
100.0 * COUNT(DISTINCT a.response_id)
/ NULLIF(MAX(t.total_responses), 0), 1
) AS answer_rate
FROM survey_answers a
CROSS JOIN (
SELECT COUNT(*) AS total_responses
FROM survey_responses
WHERE survey_id = {{survey_id}}
) t
WHERE a.survey_id = {{survey_id}}
GROUP BY a.question_position, a.question_title
ORDER BY a.question_position;What are common mistakes when analyzing Tally in Metabase?
Related
Related analytics
Related dashboards
Related integrations
FAQ
Does Metabase connect natively to Tally?
Should Metabase replace Tally?
Can I compute NPS in Metabase from raw responses?
How do I combine surveys from multiple tools?
survey_responses and survey_answers models with consistent survey, question, segment, and timestamp fields. Keep tool-specific extras in extension tables so cross-tool response and completion rates stay comparable.