How to build SurveyMonkey dashboards in Metabase
SurveyMonkey is one of the most widely used survey platforms, covering everything from quick polls to programmatic NPS and CSAT programs. 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 SurveyMonkey MCP server and loads a CSV into Metabase with the Metabase CLI, and a durable pipeline route that syncs SurveyMonkey data into a database so you can build dashboards anyone can read.
How do you connect SurveyMonkey 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 SurveyMonkey 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 SurveyMonkey 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 SurveyMonkey data into a database or warehouse with a connector, native export, or API pipeline, then point Metabase at it.
- SurveyMonkey reporting that product leadership depends on
- Joining SurveyMonkey data with CRM, support, product analytics, or revenue data
- Long-run trends for survey performance and completion and response rate by collector and channel
- 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 SurveyMonkey data in Metabase?
- Survey performance and completion — built from survey responses and the related surveys and pages, collectors, questions and answers data your sync exposes.
- Response rate by collector and channel — built from survey responses and the related surveys and pages, collectors, questions and answers data your sync exposes.
- NPS and CSAT trend from recurring surveys — built from survey responses and the related surveys and pages, collectors, questions and answers data your sync exposes.
- Drop-off by question — built from survey responses and the related surveys and pages, collectors, questions and answers data your sync exposes.
- Response volume by audience segment — built from survey responses and the related surveys and pages, collectors, questions and answers data your sync exposes.
Which SurveyMonkey 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 SurveyMonkey MCP server with the Metabase CLI?
Pair the SurveyMonkey 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 SurveyMonkey MCP and the Metabase CLI?
SurveyMonkey MCP serverofficial
- Transport
- Hosted remote MCP via Streamable HTTP
- Auth
- OAuth through SurveyMonkey
- 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": {
"surveymonkey": {
"url": "https://mcp.surveymonkey.com/mcp"
}
}
}The server is vendor-hosted but thinly documented — there's no first-party docs page yet, so set it up through your client's remote-server flow and sign in with OAuth. Expect the API's plan gates to apply: full response access needs a paid plan, and free accounts are capped at 25 responses per survey via the API. 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 survey-responses export — creates a table AND a model
mb upload csv --file surveymonkey-survey-responses.csv --collection root
# Refresh that same table later from a new export
mb upload replace <table-id> --file surveymonkey-survey-responses.csvCan you generate a SurveyMonkey dashboard with AI?
Yes. Use the prompt below with any assistant that can run the SurveyMonkey MCP server and the Metabase CLI. It works end to end: if SurveyMonkey 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 SurveyMonkey 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 SurveyMonkey data.
Step 1 — Find or load the data:
- First, check what already exists in Metabase (search for surveymonkey tables and
models). If durable SurveyMonkey 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 SurveyMonkey MCP server:
survey responses, plus surveys and pages, collectors, questions and answers.
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
SurveyMonkey — 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: SurveyMonkey 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 SurveyMonkey data into a database or warehouse?
For dashboards that need history and reliability, land SurveyMonkey 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 SurveyMonkey API v3 for control over objects, fields, and refresh cadence.
- MCP + CSV — use this for quick exploration and one-off slices.
Sync surveys, collectors, and responses with Fivetran's SurveyMonkey connector or the community-supported Airbyte source — response data needs a paid plan, the same gate as the v3 API's response endpoints (free accounts stop at 25 responses per survey).
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 SurveyMonkey data in Metabase?
Core tables
| Table | Grain | Key columns |
|---|---|---|
survey_responses | one row per response | id, survey_id, collector_id, started_at, submitted_at, completed, segment |
survey_answers | one row per answer | response_id, question_id, question_heading, answer_type, answer_value |
surveymonkey_collectors | one row per collector | id, survey_id, type, sent_count, open_count, created_at |
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 SurveyMonkey 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 SurveyMonkey 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 SurveyMonkey in Metabase?
Related
Related analytics
Related dashboards
Related integrations
FAQ
Does Metabase connect natively to SurveyMonkey?
Should Metabase replace SurveyMonkey?
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.