SurveyMonkey AI: transcribe and analyze every survey response
Speak AI ingests every SurveyMonkey response, transcribes audio and video answers in 100+ languages, and runs sentiment, topic, and keyword analysis across your entire open-ended dataset. Turn voice-of-customer feedback into a queryable insights layer.
Mit tehetsz
SurveyMonkey tells you how many respondents chose each option. Speak AI tells you what the open-ended responses actually mean. Every NPS verbatim, every exit interview comment, every market research audio upload becomes searchable, analyzable, and exportable structured data.
Auto-ingest every survey response
Export survey responses from SurveyMonkey as CSV/XLSX and drop them into Speak’s bulk uploader, or register a SurveyMonkey webhook so every new response flows into Speak automatically. Text, audio, and video answers are all supported. Zero manual copying.
Transcribe audio and video answers in 100+ languages
SurveyMonkey Enterprise supports audio and video response questions. Speak transcribes every answer in 100+ languages with speaker diarization and sentence-level timestamps. Auto-detected language. Typical processing: under 2 minutes per hour of audio.
Sentiment, topic, and keyword analysis across responses
Run document and sentence-level VADER sentiment scoring, keyword extraction, and topic clustering across every open-ended response in the dataset. Segment by NPS score, collector, or custom tag. Surface the exact phrases that separate promoters from detractors.
One-click push to HubSpot, Salesforce, or Zoho
Verified webhook recipe: receive Speak’s media.analyzed event, fetch the insight, create a CRM contact note tagged with sentiment and survey source. Same pattern across HubSpot, Salesforce, and Zoho. Source-tagged with surveymonkey so reports stay clean.
3 lépésben beállítható
The fastest path takes 2 minutes: export a SurveyMonkey CSV and drop it into Speak’s bulk uploader. The webhook automation path takes about 10 minutes: create a SurveyMonkey app token, register a response_completed webhook, and handle the thin notification payload. The cron poll path requires no webhook server at all.
Regisztráljon a Speak AI-ra
Hozzon létre ingyenes fiókot a app.speakai.co. Kap egy 7 napos próbaverziót teljes hozzáféréssel. Nincs szükség hitelkártyára. Miután bejelentkezik, lépjen a Settings > API és másolja ki az API kulcsot.
Válassza ki az integrációs útvonalát
Export survey responses as CSV or XLSX from SurveyMonkey’s Analyze tab. Drop the file into Speak’s bulk uploader. Speak extracts and analyzes every open-text field automatically. Zero configuration – works for any survey, any plan.
Generate a personal access token or OAuth app token from the SurveyMonkey developer portal. Register a webhook via POST https://api.surveymonkey.com/v3/webhooks a címen event_type: "response_completed" and your subscription_url. SurveyMonkey sends a thin notification – your handler calls back to GET /v3/surveys/{survey_id}/responses/{response_id}/details to fetch the full payload, extracts text/audio/video answers, and pushes them to Speak. Full recipe in Tab 1 below.
For teams without webhook infrastructure: set up a cron job that calls GET https://api.surveymonkey.com/v3/surveys/{survey_id}/responses/bulk daily or hourly. Compare response IDs to what has already been processed, extract new open-text answers, and upload to Speak. Simpler to operate; latency is the cron interval.
Already have SurveyMonkey responses in Speak? Connect Claude Desktop with npx @speakai/mcp-server init, or add the remote MCP URL to Claude.ai or ChatGPT. Search and synthesize the entire survey corpus through conversation.
Feliratkozás a következőre: media.analyzed
Speak fires a signed webhook when transcription and AI analysis complete (typically within 60 seconds for a text response, under 2 minutes per hour of audio). Register your endpoint via POST /v1/webhook and act on results as they land – push sentiment and keywords to your CRM, route negative NPS verbatims to a Slack alert, or trigger a follow-up sequence.
Valódi munkafolyamatok, valódi eredmények
Four production patterns Speak customers use with SurveyMonkey. Pick the one that fits your team and copy the recipe.
Auto-analyze every SurveyMonkey response as it lands
Register a SurveyMonkey response_completed webhook. On each submission, SurveyMonkey sends a thin notification to your handler, which calls back to fetch the full response, extracts open-text and audio/video answers, and pushes them to Speak for immediate analysis. Near-real-time: typically processed within 60-90 seconds of submission.
# Auth: OAuth2 or personal access token from https://developer.surveymonkey.com/
# Scopes needed: surveys_read, responses_read, webhooks_write
curl -X POST https://api.surveymonkey.com/v3/webhooks
-H "Authorization: Bearer $SM_TOKEN"
-H "Content-Type: application/json"
-d '{
"name": "speak-ingest",
"event_type": "response_completed",
"object_type": "survey",
"object_ids": ["YOUR_SURVEY_ID"],
"subscription_url": "https://your-app.example.com/sm/webhook"
}'
# SurveyMonkey sends a thin payload on each response -- your handler must
# call back to GET /v3/surveys/{survey_id}/responses/{response_id}/details
# to fetch the full response including open-text, audio, and video answers.
import express from "express";
import fetch from "node-fetch";
import FormData from "form-data";
const app = express();
app.use(express.json());
app.post("/sm/webhook", async (req, res) => {
res.sendStatus(200); // Respond immediately
const { event_type, object_id: surveyId, resources } = req.body;
if (event_type !== "response_completed") return;
const responseId = resources?.response_id;
if (!responseId) return;
// 1. Fetch full response details from SurveyMonkey
const smRes = await fetch(
`https://api.surveymonkey.com/v3/surveys/${surveyId}/responses/${responseId}/details`,
{ headers: { Authorization: `Bearer ${process.env.SM_TOKEN}` } }
).then(r => r.json());
// 2. Extract open-text answers (skip choice/rating answers)
const openText = (smRes.pages ?? [])
.flatMap(p => p.questions ?? [])
.flatMap(q => q.answers ?? [])
.map(a => a.text || "")
.filter(Boolean)
.join("n---n");
if (!openText) return; // nothing to analyze
// 3. Push to Speak AI as text media
await fetch("https://api.speakai.co/v1/media/upload", {
method: "POST",
headers: {
"x-speakai-key": process.env.SPEAK_API_KEY,
"Content-Type": "application/json",
},
body: JSON.stringify({
name: `SM response ${responseId}`,
text: openText,
mediaType: "text",
tags: `surveymonkey,survey-${surveyId}`,
}),
});
});
app.listen(3000);
import os, requests
from fastapi import FastAPI, Request
app = FastAPI()
@app.post("/sm/webhook")
async def webhook(request: Request):
body = await request.json()
if body.get("event_type") != "response_completed":
return {"ok": True}
survey_id = body.get("object_id")
response_id = (body.get("resources") or {}).get("response_id")
if not survey_id or not response_id:
return {"ok": True}
# 1. Fetch full response from SurveyMonkey
sm_res = requests.get(
f"https://api.surveymonkey.com/v3/surveys/{survey_id}/responses/{response_id}/details",
headers={"Authorization": f"Bearer {os.environ['SM_TOKEN']}"},
timeout=30,
).json()
# 2. Extract open-text answers
open_text_parts = []
for page in sm_res.get("pages", []):
for question in page.get("questions", []):
for answer in question.get("answers", []):
if answer.get("text"):
open_text_parts.append(answer["text"])
if not open_text_parts:
return {"ok": True}
# 3. Push to Speak AI
requests.post(
"https://api.speakai.co/v1/media/upload",
headers={"x-speakai-key": os.environ["SPEAK_API_KEY"]},
json={
"name": f"SM response {response_id}",
"text": "n---n".join(open_text_parts),
"mediaType": "text",
"tags": f"surveymonkey,survey-{survey_id}",
},
timeout=30,
)
return {"ok": True}
SurveyMonkey webhooks send a thin response_completed notification – the response payload does not include the answer text. Your handler must always call back to /v3/surveys/{survey_id}/responses/{response_id}/details to retrieve the full response. Store the token in SM_TOKEN as an env var. Required OAuth scopes: surveys_read, responses_read, webhooks_write.
Bulk-import historic SurveyMonkey responses to Speak
Pull all existing responses for a survey using the bulk endpoint and push them into Speak as text media. Run once for a historic backfill, or schedule it daily to catch any responses from teams not using the webhook path.
# 1. Pull all bulk responses for a survey (paginated, max 100 per page)
curl "https://api.surveymonkey.com/v3/surveys/$SURVEY_ID/responses/bulk?per_page=100&simple=true"
-H "Authorization: Bearer $SM_TOKEN"
-H "Content-Type: application/json"
# 2. Register a Speak webhook for when analysis completes
curl -X POST https://api.speakai.co/v1/webhook
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Content-Type: application/json"
-d '{
"callbackUrl": "https://your-app.example.com/speak/analyzed",
"events": ["media.analyzed"],
"description": "SurveyMonkey bulk import callback"
}'
import os, requests
SM_TOKEN = os.environ["SM_TOKEN"]
SPEAK_API_KEY = os.environ["SPEAK_API_KEY"]
SURVEY_ID = os.environ["SURVEY_ID"]
def pull_and_push(survey_id: str, since_id: str | None = None):
"""Pull SurveyMonkey bulk responses and push open-text to Speak."""
page = 1
processed_ids: set[str] = set()
while True:
params = {"per_page": 100, "simple": "true", "page": page}
if since_id:
params["start_created_at"] = since_id # ISO timestamp filter
resp = requests.get(
f"https://api.surveymonkey.com/v3/surveys/{survey_id}/responses/bulk",
headers={"Authorization": f"Bearer {SM_TOKEN}"},
params=params,
timeout=60,
).json()
responses = resp.get("data", [])
if not responses:
break
for r in responses:
response_id = r["id"]
if response_id in processed_ids:
continue
processed_ids.add(response_id)
open_text_parts = []
for page_data in r.get("pages", []):
for question in page_data.get("questions", []):
for answer in question.get("answers", []):
if answer.get("text"):
open_text_parts.append(answer["text"])
if not open_text_parts:
continue
requests.post(
"https://api.speakai.co/v1/media/upload",
headers={"x-speakai-key": SPEAK_API_KEY},
json={
"name": f"SM response {response_id}",
"text": "n---n".join(open_text_parts),
"mediaType": "text",
"tags": f"surveymonkey,survey-{survey_id},backfill",
},
timeout=30,
)
if not resp.get("links", {}).get("next"):
break
page += 1
pull_and_push(SURVEY_ID)
The SurveyMonkey bulk endpoint returns up to 100 responses per page. Use the links.next field to paginate through all results. For scheduled daily pulls, pass a start_created_at ISO timestamp to limit to new responses since the last run. Tag uploads with backfill to distinguish them from real-time webhook ingests.
Push survey response sentiment to HubSpot, Salesforce, or Zoho
Same verified middleware pattern as the rest of the integrations cluster: receive Speak’s flat {eventType, state, mediaId} notification, fetch full insight via GET /v1/media/insight/:mediaId, then create a CRM contact note with sentiment and key themes. Source-tagged with surveymonkey so reports can isolate survey-sourced contacts vs live call recordings.
// Speak webhook body shape (verified 2026-05-07): { eventType, state, mediaId }
import express from "express";
const app = express();
app.use(express.json());
app.post("/speak/survey-to-crm", async (req, res) => {
const { eventType, state, mediaId } = req.body;
if (eventType !== "media.analyzed" || state !== "processed") return res.sendStatus(204);
res.sendStatus(202);
// 1. Fetch full insight from Speak
const { data } = await fetch(
`https://api.speakai.co/v1/media/insight/${mediaId}`,
{ headers: { "x-speakai-key": process.env.SPEAK_API_KEY } }
).then(r => r.json());
// Only process SurveyMonkey-tagged media
if (!data.tags?.includes("surveymonkey")) return;
const sentimentScore = data.sentiment?.[0]?.document?.Compound ?? 0;
const sentimentLabel = sentimentScore > 10 ? "Positive" : sentimentScore < -10 ? "Negative" : "Neutral";
// 2. Push to HubSpot as a contact note (or Salesforce Task, or Zoho Note)
await fetch("https://api.hubapi.com/crm/v3/objects/notes", {
method: "POST",
headers: {
Authorization: `Bearer ${process.env.HUBSPOT_TOKEN}`,
"Content-Type": "application/json",
},
body: JSON.stringify({
properties: {
hs_timestamp: new Date().toISOString(),
hs_note_body: [
`Survey response analyzed by Speak AI`,
`Sentiment: ${sentimentLabel} (${sentimentScore.toFixed(1)})`,
`Source: SurveyMonkey`,
`View in Speak: https://app.speakai.co/media/${mediaId}`,
].join("n"),
},
}),
});
});
app.listen(3000);
Full destination-specific code (HubSpot Note + contact association, Salesforce Task + SOQL contact resolution, Zoho Notes) on /integrations/hubspot/, /integrations/salesforce/, és /integrations/zoho/. The Speak side is identical across all three CRM destinations.
Search every SurveyMonkey response from Claude or ChatGPT
Connect Speak's MCP server to Claude or ChatGPT and your team queries the entire SurveyMonkey response corpus through conversation. No SQL, no dashboards, no manual coding of themes.
# Claude Desktop / Claude Code (automatikusan detektálja a telepítést)
npx @speakai/mcp-server init
# Illessze be az Speak API-kulcsot, amikor a rendszer kéri. A beállítás körülbelül 2 percet vesz igénybe.
# Claude.ai (web) and ChatGPT MCP connector
# Settings > Integrations > Add MCP Server
# Remote URL: https://api.speakai.co/v1/mcp
# Auth header: x-speakai-key: YOUR_SPEAK_API_KEY
# Verify the connection responds:
curl -s https://api.speakai.co/v1/mcp
-H "x-speakai-key: $SPEAK_API_KEY"
-H "Accept: application/json"
2. Előfordulási promptok, amelyeket csapata ma használhat:
- "Show every SurveyMonkey response tagged
surveymonkey,detractorswhere a respondent mentioned pricing or value." - "Summarize the top 5 recurring themes from Q3 NPS open-ended responses."
- "Pull verbatim quotes from exit interview survey responses where sentiment was negative."
- "Compare promoter vs detractor language across the last 3 months of customer surveys. Group by theme."
- "Find every SurveyMonkey response where a respondent mentioned a competitor. Pull exact quotes."
Works with Claude.ai, Claude Desktop, Claude Code, and ChatGPT MCP connectors. Tag SurveyMonkey imports with surveymonkey and collector-specific tags (e.g. nps,q3-2026) to scope MCP queries precisely. MCP server megtekintése →
Why Speak AI + SurveyMonkey
SurveyMonkey collects the responses. Speak turns those responses into structured data. The combination handles the full pipeline from response submission to CRM note, research deliverable, or executive dashboard - without manual coding, tagging, or tool switching.
Multi-source ingest, not just SurveyMonkey
SurveyMonkey is one of many inputs. The same Speak workspace ingests Zoom interview recordings, Google Meet exports, embed recorder submissions, and direct audio/video file uploads. One searchable library across every voice-of-customer source your team uses.
Egyéni Magic Prompts, nem rögzített sablonok
Speak's Magic Prompt runs your prompts on every SurveyMonkey response: NPS theme extraction, exit interview classification, employee sentiment scoring, market research rubric scoring. Save prompts once, run them on every new response automatically.
SOC 2 + GDPR + HIPAA-eligible
Speak ships with SOC 2 Type 2, GDPR compliance, and HIPAA-eligible plans for healthcare and HR customers. Your survey response data is encrypted in transit and at rest. Speak does not train on your data.
MCP-natív Claude és ChatGPT számára
A hivatalos @speakai/mcp-server exposes 83 tools to AI assistants. Your team queries the full SurveyMonkey response corpus in plain English from Claude Desktop or ChatGPT - no exports, no SQL, no dashboards needed.
Teams trust Speak AI for their most important research
4.9 a G2-n
“A Speak AI döntő szerepet játszott abban, hogy átalakítottuk a kvalitatív adatok kezelésének módját. Az átirat pontossága lenyűgöző, és az NLP insights sok órányi kézi analízist spórol meg számunkra.”
Kutatási igazgató | Tanácsadó cég
“We use Speak with our NPS surveys and the open-ended verbatims are now actually useful. Sentiment scoring and theme extraction happen automatically - we just read the summary.”
CX Manager | SaaS vállalat
“The ability to search across all our survey responses and pull specific moments is a game-changer for our research team. What used to take days now takes minutes.”
Head of Research | Market Research Firm
How to use Speak AI with SurveyMonkey for response transcription and analysis
SurveyMonkey is the survey platform used by millions of teams to collect customer feedback, run NPS programs, conduct exit interviews, and gather employee sentiment. Every open-text response is a potential source of insight. Every audio or video answer from a video survey question is an unstructured asset. Speak AI is what turns those responses into structured, searchable, shareable data - without a manual analysis step or a tool switch.
Where Speak fits in the SurveyMonkey pipeline
Speak runs after the response is submitted. SurveyMonkey handles survey design, distribution, collection, and quantitative reporting. Speak handles open-text analysis in 100+ languages, audio and video transcription with speaker diarization, custom Magic Prompt extraction, cross-response theme clustering, and downstream automation to CRM, Slack, or BI tools. The handoff happens via a SurveyMonkey webhook on response_completed (Path B), a cron bulk pull (Path C), or a manual export drop into the Speak uploader (Path A).
How SurveyMonkey webhooks work with Speak
SurveyMonkey webhook notifications are thin: SurveyMonkey sends your subscription_url a POST with the event type, survey ID, and response ID - but not the actual response content. Your handler must call back to GET https://api.surveymonkey.com/v3/surveys/{survey_id}/responses/{response_id}/details to fetch the full response including all page and question answer data. Extract the open-text answer fields, concatenate them, and push to Speak's POST /v1/media/upload a címen mediaType: "text". This two-step notification + fetch pattern is standard for SurveyMonkey. Speak does not have a direct SurveyMonkey OAuth connector - the webhook handler pattern above is the production path.
How do I analyze SurveyMonkey open-text responses with AI?
Three production paths, ranked by setup effort:
- Export and drop. Export responses as CSV from SurveyMonkey's Analyze tab, drop into Speak's bulk uploader. Speak extracts and analyzes open-text fields automatically. Zero setup.
- SurveyMonkey webhook handler. Register a
response_completedwebhook via the SurveyMonkey API, call back to fetch the full response, push open-text and audio/video answers to Speak. Near-real-time. - Cron bulk pull. Poll
GET /v3/surveys/{id}/responses/bulkon a schedule, compare processed IDs, upload new responses to Speak. No webhook server required.
All three deliver the same output: VADER sentiment scoring, keyword extraction, topic clustering, Magic Prompt results, and optional CRM push via the media.analyzed webhook.
Can Speak transcribe SurveyMonkey audio and video answers?
Yes. SurveyMonkey Enterprise supports audio and video response question types. When a respondent submits an audio or video clip, your handler downloads the file from the SurveyMonkey response payload and uploads it to Speak's POST /v1/media/upload as a binary file instead of text. Speak transcribes the audio or video in 100+ languages with full speaker diarization and pushes the transcript and AI analysis back via the media.analyzed webhook.
Felhasználási esetek szerepkör szerint
CX and VoC teams use Speak with SurveyMonkey to analyze NPS verbatims at scale. Tag promoter responses with surveymonkey,promoters and detractor responses with surveymonkey,detractors. Run a Magic Prompt that extracts the top 5 themes per cohort and surfaces verbatim quotes. The analysis that used to take a week of manual coding takes under 2 minutes.
Market research teams pipe open-ended survey responses from SurveyMonkey into Speak alongside Zoom interview recordings, embed recorder sessions, and podcast interview audio. Code themes across the full mixed-method corpus. Ask Claude for verbatim quotes via MCP. Build research deliverables in hours instead of days. See Speak AI for market researchers.
HR and people ops teams use Speak to analyze employee engagement survey open-text fields, exit interview responses, and pulse survey verbatims. Magic Prompts extract sentiment by department, flag urgent themes, and summarize recurring concerns. HIPAA-eligible plans and SOC 2 compliance meet HR data requirements.
Termékcsapatok pipe customer feedback survey responses from SurveyMonkey into Speak alongside in-app recordings and support transcripts. Speak surfaces recurring feature requests, pain points, and competitor mentions across every qualitative input channel the team uses. See Speak AI kvalitatív kutatók számára.
Gyakran ismételt kérdések
Does Speak access my whole SurveyMonkey account?
No. When you register a webhook, you specify the object_ids field with the exact survey IDs to monitor. Speak only processes responses from those surveys. If you use the manual export path, Speak only analyzes the CSV file you upload - it has no connection to your SurveyMonkey account at all.
What OAuth scopes does the SurveyMonkey token need?
For the webhook path: surveys_read, responses_read, és webhooks_write. For the bulk pull path: surveys_read és responses_read only. Use a personal access token from the SurveyMonkey developer portal for team integrations. For OAuth apps: request only the scopes your pipeline actually needs.
Can I limit the integration to one specific survey?
Yes. In the webhook registration payload, pass only the target survey ID in the object_ids array. The webhook only fires for responses to that survey. For the bulk pull path, the endpoint is scoped to a specific survey by design: GET /v3/surveys/{survey_id}/responses/bulk.
What audio and video formats does Speak support for survey answers?
Speak processes MP3, MP4, WAV, M4A, MOV, WEBM, AAC, OGG, FLAC, and most other common audio and video formats. SurveyMonkey audio response questions typically output MP4 or WebM. Download the file from the SurveyMonkey response payload and upload it to Speak's POST /v1/media/upload as a binary file. For a full supported format list, see the Speak API docs.
How does this work with NPS and open-ended verbatims?
Upload all NPS responses to Speak as text media. Tag promoters (score 9-10) with nps-promoter and detractors (score 0-6) with nps-detractor during the upload. Run a Magic Prompt that extracts the top themes per cohort and returns verbatim quotes. Speak's VADER scoring also gives you document-level and sentence-level sentiment across the entire verbatim dataset - without manually reading each response.
Can I push analyzed results back to SurveyMonkey?
SurveyMonkey's API does not support writing back to response records - you can read survey and response data but not update it. The standard pattern is to push analyzed results forward to your CRM (HubSpot, Salesforce, Zoho), a Slack channel, or a BI tool like Looker. See Tab 3 above for the CRM push recipe.
Start using Speak AI with SurveyMonkey today
83 analysis tools. 100+ languages. SurveyMonkey webhook ingest, bulk import, CRM push, and MCP-native for Claude and ChatGPT. Same workspace as your Zoom, Meet, Teams, and live recorder sessions.
Próbálja ki a Speak AI-t ingyenesen
Create your account, export a SurveyMonkey CSV, drop it into the Speak uploader, and the analysis lands in your workspace automatically. Full access for 7 days. No credit card required.
Foglaljon bemutatót
For teams evaluating Speak for a SurveyMonkey-connected VoC or NPS analysis pipeline, book a demo with the Speak team. We will walk through the webhook setup, bulk import, and CRM push live.




