Migrate surveys
Move survey exports from other survey tools into Deck as CSV uploads, and confirm that Deck processed every row.
This page is an agent-readable workflow for Deck. Humans can follow along. Coding agents should treat the steps as the source of truth.
Migrate surveys — agent workflow
- Use it when: the user says "import our Typeform results", "move our Qualtrics or SurveyMonkey history into Deck" or "bring our old NPS survey into Deck".
- Outcome: each survey export is a CSV upload in Deck with the status
COMPLETED, and the user knows what Deck found in it. - Needs: Deck MCP and the Deck web app. The user uploads the file in Manage → CSV Uploads, because no MCP tool imports feedback. Free text answers use credits. A file can be at most 10 MB. NPS through MCP needs the Starter plan or higher.
1. Probe Deck MCP
Call get_user_context. This must be a real tool call.
- 401 Unauthorized: tell the user to connect Deck MCP in this client (Settings → Connections). Stop.
- No Deck tools: fetch and follow https://docs.getdeck.io/docs/agents/getting-started/prompts/ai-pm.md. Stop this workflow until the tools work.
- More than one Deck organization: call
select_organization, ask which one to use, and pass itsorg_idon every later call.
2. Check what Deck already has
Make these calls in parallel:
list_sourceswith import_source set toCSV: readfile_name,csv_type,statusandtotal_rowsof each upload. Do not upload the same export again.explore_integrationswithintegration_type: "POSTHOG": PostHog surveys sync through the native integration. For PostHog, follow Connect feedback stack instead.get_overview: record Deck's data counts before the import.
3. Pick the CSV type
Ask the user for each export file and the tool that made it. Then pick one Deck type:
| Export | Deck CSV type | Format |
|---|---|---|
| Full survey from Qualtrics, SurveyMonkey, Typeform or Google Forms | Survey | One row for each respondent, one column for each question. Keep the native export. Deck detects the platform. |
| NPS score list | NPS | One row for each response. score (0-10) is required. reason, respondent_email, respondent_name and response_date are optional. |
| Open comments only | Feedback | One row for each comment. content is required. |
See CSV Import for every field.
4. Prepare the file
You can do these checks on the user's local file:
- Do not change the respondents' words. Do not translate, summarize or fix answers.
- Keep the email columns. Deck uses them to link each row to a contact.
- A file larger than 10 MB: split it by rows. Put the full header block at the top of each part. Qualtrics uses 3 header rows and SurveyMonkey uses 2.
- A large export: suggest a test file of 20-50 rows first.
- Do not reshape a native survey export into the flat format.
5. Check credits
For a large file or a survey with many free text questions, follow Credits readiness check first. The upload wizard shows the credit cost of a Survey upload before the user submits. Structured answers (NPS, rating, yes or no, select) use 0 credits.
6. Hand off the upload
Give the user these steps:
- In the Deck web app, open Manage → CSV Uploads and click Upload CSV.
- Select the type from step 3.
- Survey: check the column roles (Question, Metadata or Skip) and the question types. Read the credit counter.
- Other types: check the column mapping.
- Review the invalid rows, then submit.
Wait until the user says that the upload is submitted.
7. Track processing
- Call
list_sourceswith import_source set toCSV. Find the new upload. Readstatus,total_rows,processed_rowsandfailed_rows. - While
statusisPENDINGorPROCESSING, wait about 10 seconds and call again. Stop after 5 checks and tell the user that processing continues in the background. - Call
list_sourceswith theupload_idto see each row and its status. PARTIALLY_COMPLETEDorFAILED: the user can click Retry Failed in the upload detail view. Retried rows use credits again.CREDIT_BLOCKED: follow Credits readiness check.
8. Show what Deck found
Make these calls in parallel:
get_overview: report Deck's data counts after the import.explore_themeswithsort: "insight_count": Deck's largest themes after the import.explore_nps(Starter plan or higher), for an NPS upload or a survey with an NPS question: the score and the breakdown.
For an NPS or Feedback upload, call read_transcript with the feedback_id of one row to show what Deck extracted. Survey rows have no feedback_id.
A large import can add new themes. To clean them up, follow Review the theme taxonomy.
Rules
- No MCP tool uploads a CSV. The user uploads it in the Deck web app.
- Never invent, edit or merge survey answers.
- Only the user deletes an upload, in Manage → CSV Uploads. A delete is permanent and Deck does not refund the credits.
- Quote Deck's numbers. Do not compute your own. Let the upload wizard compute the credit cost.
- This workflow only reads. Do not call write tools.
Done when
- Each export is an upload with the status
COMPLETED, or the user knows the blocker and the next step. - The user has Deck's row counts for each upload and Deck's top themes after the import.