SurveyMonkey
Build surveys, analyze responses, and uncover insights directly in ChatGPT. Search your surveys, review results, generate summaries, and explore trends without switching tools. Easily turn feedback into clear next steps for teams, customers, employees, and more.
- Integration type
- Plugin
- Verification status
- Not applicable
- Platform
- ChatGPT
- Primary Subcategory
- Form & Survey Builders
- Secondary Subcategories
- None listed
- Brand
- SurveyMonkey
- Access
- Account required
- First tracked
- 2026-08-06
- Tool count
- 20
- Geography
- US
The Primary Subcategory used for this profile’s headline score.
Other Subcategories where the Integration is visible.
ChatGPT Plugin Discoverability Score
ChatGPT organic discovery is not live yet
SurveyMonkey is tracked in the ChatGPT Plugin registry. Public organic-discovery measurement is not live for ChatGPT yet, so there is no score to publish today.
Get notified when your score goes live
Enter your work email and we’ll notify you when ChatGPT Plugin organic discovery scoring launches.
No spam. Unsubscribe any time.
Competing in ChatGPT Form & Survey Builders
View CategoryHow the Discoverability Score works
Organic discovery scoring for SurveyMonkey on ChatGPT is not live yet. The score will use measured agent conversations when it launches.
Organic discovery scoring is pending. Your Plugin score will appear on this scale when measurement goes live.
FoundDiagnostic
Whether Claude found your Plugin in connector search. It must be Found before it can reach the picker, but the score counts picker appearances—not search results.
PickedMain score
How often your Plugin appeared in the picker, or Claude invoked it directly, across contested conversations. This percentage is the Discoverability Score; the headline number is rounded.
PositionedDiagnostic
What position your Plugin appeared in when it was shown in the picker. This shows prominence, but it does not affect the score.
20 tools agents can invoke
Add a new page to a survey. BLOCKED when the survey has responses. The page is inserted at the specified position. **USE THIS WHEN:** User explicitly asks to add a NEW page to an EXISTING survey that already has questions on its first page. **DO NOT USE after create_survey.** New surveys already have a default page whose ID is returned as `default_page_id` in the create_survey response. Add questions to that page — do not create another one. Only use this tool when you need ADDITIONAL pages beyond the default. **TRIGGER PHRASES:** - "add a page..." - "create a new page..." - "insert a page..." - "add a section called..." - "add ... at the beginning/end/position X" **IMPORTANT:** Call this tool directly - do not stop after calling get_surveys or get_pages. If the user says "add a page at the beginning", use position=1. For "at the end", use position=0. After gathering any needed info (like survey_id), you MUST call add_page to complete the task. Never stop at just reading information - always follow through with the add_page call. Args: survey_id: The ID of the survey position: Position to insert the page (1-based). Use 0 to add at the end. page: Dictionary describing the new page. Fields: - title: Page title (string, required) - description: Optional page description (string) Returns: Dictionary containing the created page with its assigned ID Example: add_page(survey_id="123456", position=0, page={"title": "Demographics"})
add_page
Add a question to a survey page. BLOCKED when the survey has responses. **USE THIS WHEN:** User wants to add, create, or insert a question in a survey. **TRIGGER PHRASES:** - "add a question..." - "add a multiple choice question..." / "add a single choice question..." - "add a star rating question..." / "add a rating question..." - "add a slider question..." / "add a scale question..." - "add an email question..." / "add a contact info question..." - "add an NPS question..." / "add a Net Promoter Score question..." - "add a text question..." / "add an open-ended question..." / "add a comment box..." - "add a matrix question..." / "add a grid question..." - "create a question asking..." - "insert a question at the end/beginning..." **QUESTION TYPE REFERENCE:** WARNING: SurveyMonkey names are OPPOSITE of common usage. Read carefully: - "Multiple choice" / radio buttons (pick ONE answer): family="single_choice", subtype="vertical" Users saying "multiple choice" almost always want radio buttons = "single_choice" in the API. - Checkboxes / "select all that apply" (pick MANY answers): family="multiple_choice", subtype="vertical" "multiple_choice" in the API creates CHECKBOXES, not radio buttons. - Dropdown menu (pick ONE from dropdown): family="single_choice", subtype="menu" - Star rating: family="matrix", subtype="rating", display_options={"display_type":"emoji","display_subtype":"star"} - Slider: family="open_ended", subtype="single", display_options={"display_type":"slider"}, validation={"type":"integer","text":"Enter a number between {0} and {1}.","min":0,"max":100} - Email: family="demographic", subtype="email" - NPS (Net Promoter Score): Use question bank format with question_bank_question_id="669": question={"question_bank": {"question_bank_question_id": "669", "modifier_options": {"36628": null}}} - Open text: family="open_ended", subtype="essay" (comment box) or "single" (short answer) Call get_question_types for the full list of available types. **WORKFLOW:** 1. If you need the page_id, call get_pages first to find the target page 2. Then call add_question to create the question - do NOT stop after reading **POSITION:** Use position=0 to add at end of page, position=1 for first, etc. Args: survey_id: The ID of the survey page_id: The ID of the page to add the question to position: Position on page for question (0 = end of page) question: Dictionary describing the question. Required fields: - family: Question family (e.g., "single_choice", "multiple_choice", "open_ended") - subtype: Question subtype (e.g., "vertical", "menu", "essay") - headings: List with at least one heading object: [{"heading": "Question text"}] - answers: Answer choices object (for choice questions) Returns: Dictionary containing the created question with its assigned ID Example (single choice): add_question( survey_id="123456", page_id="789012", position=0, question={ "family": "single_choice", "subtype": "vertical", "headings": [{"heading": "How satisfied are you?"}], "answers": { "choices": [ {"text": "Very satisfied"}, {"text": "Satisfied"}, {"text": "Neutral"}, {"text": "Dissatisfied"} ] } } )
add_question
Create a weblink collector for a survey. A weblink collector generates a shareable URL that allows respondents to take your survey. Use this to create a link you can share via email, social media, or embed on a website. The new weblink has a status of open and is ready to collect responses immediately. Args: survey_id: The ID of the survey (string) name: Name for the weblink collector (string) Returns: Dictionary containing: - id (str): Collector ID - name (str): Collector name - href (str): API URL for the collector - url (str): Public survey URL to share with respondents - status (str): Status of the collector (e.g. "open", "closed") Example: { "id": "987654321", "name": "My Weblink", "href": "https://api.surveymonkey.com/v3/collectors/987654321", "url": "https://www.surveymonkey.com/r/ABC123", "status": "open" }
create_weblink_collector
Create an empty survey with the EXACT title provided. Returns a survey with a DEFAULT FIRST PAGE (including its page_id) but NO questions. **IMPORTANT - Adding questions workflow:** The response includes `default_page_id` — use it directly with `add_question`. If `default_page_id` is null, call `get_pages` to retrieve it before proceeding. Do NOT call `add_page` — the survey already has a page. Only use `add_page` if you need ADDITIONAL pages beyond the default. **USE THIS WHEN:** User provides a SPECIFIC survey title/name. **TRIGGER PHRASES - Use this tool when you see:** - "create a survey **called** [exact title]" - "make a survey **named** [exact title]" - "create a survey **titled** [exact title]" - User provides explicit survey name in quotes **DO NOT USE FOR:** - "create a survey **about** [topic]" → Use generate_survey_plan instead - "generate a survey **for** [purpose]" → Use generate_survey_plan instead - Requests that describe survey CONTENT/QUESTIONS → Use generate_survey_plan instead **KEY DISTINCTION:** - "Survey called Customer Feedback" → THIS TOOL (exact title provided) - "Survey about customer feedback" → generate_survey_plan (needs AI to design) Args: title: The exact title/name for the survey (e.g., "Customer Satisfaction Survey") language: Optional survey language code (e.g., "fr", "es", "ja", "de"). Defaults to "en" if not specified. When using generate_survey_plan, pass the plan's "detected_language" value here. Returns: Dictionary containing survey details including the default page ID: { "id": "123456789", "title": "My Survey", "href": "https://api.surveymonkey.com/v3/surveys/123456789", "default_page_id": "987654321" } Use `default_page_id` directly when calling `add_question` — no need to call `get_pages` first.
create_survey
Delete a question from a survey. BLOCKED when the survey has responses. **USE THIS WHEN:** User wants to delete, remove, or get rid of a question. **TRIGGER PHRASES:** - "delete question..." - "remove the question..." - "delete question X from..." - "remove question X..." - "get rid of question..." **IMPORTANT:** Call this tool directly to delete the question. If you need to find the question_id or page_id first: 1. Call get_questions to find the question details 2. Then immediately call delete_question to remove it Do not stop after reading - always follow through with the delete_question call. **PREREQUISITE:** You need survey_id, page_id, and question_id. Use get_questions first if needed. Args: survey_id: The ID of the survey containing the question page_id: The ID of the page containing the question question_id: The ID of the question to delete Returns: Dictionary with deletion status: {"status": "deleted"} Example: delete_question(survey_id="123456", page_id="789012", question_id="345678")
delete_question
Edit, modify, update, move, reword, or reposition a question. BLOCKED when the survey has responses. This is the ONLY tool for changing a single question. Use this for: - Changing question text/wording (text parameter) - reword, rephrase, rewrite, make less leading/biased - Making required/optional (required parameter) - Moving to position 1, 2, 3, etc. (position parameter) - Moving to another page (target_page_id parameter) **TRIGGER PHRASES - use this tool when you see:** - "reword the question..." / "rephrase..." / "rewrite..." / "change the wording..." - "make the question less leading/biased/confusing" - "edit/modify/update question..." - "move question to position..." / "put question first/last" - "change question text to..." **WORKFLOW for editing by description (e.g., "reword the satisfaction question"):** 1. First call get_questions to find the question matching the description 2. Then call THIS tool (edit_question) with the question_id and new text **KEY DISTINCTION:** "reorder question 123" = use THIS tool. "reorder ALL questions" = use reorder_questions. **NPS/QUESTION BANK RESTRICTIONS:** NPS questions (question_bank_question_id="669") have restricted modifications: - CANNOT change: answer choices/scale (standardized for benchmarking), question family/subtype - CAN change: position, required status, page location **IMPORTANT:** After calling get_questions to find a question, you MUST call edit_question to complete the task. Never stop after just reading - always follow through with the edit action. Args: survey_id: The ID of the survey containing the question page_id: The ID of the page currently containing the question question_id: The ID of the question to edit text: New question text/heading (e.g., "What is your favorite color?") required: Whether the question requires an answer (True/False) answers: Update answer choices - format: {"choices": [{"text": "Option 1"}, {"text": "Option 2"}]} validation: Update validation rules (e.g., {"min": 1, "max": 100} for numeric questions) position: New position on the page (1-based). Use this to reorder within a page. target_page_id: Move question to this page. If different from page_id, performs cross-page move. Returns: Dictionary containing the edit result including new question ID if moved Example (change question text): edit_question(survey_id="123", page_id="456", question_id="789", text="What is your favorite color?") Example (make question required): edit_question(survey_id="123", page_id="456", question_id="789", required=True) Example (move to position 1 on same page): edit_question(survey_id="123", page_id="456", question_id="789", position=1) Example (move to different page): edit_question(survey_id="123", page_id="456", question_id="789", target_page_id="012", position=1) Example (combined - change text and position): edit_question(survey_id="123", page_id="456", question_id="789", text="New question text", position=2)
edit_question
Generate an AI survey plan from a natural language DESCRIPTION of survey goals/content. Returns a JSON plan with suggested title and questions. The plan is NOT persisted — after receiving the plan, use create_survey + add_question to build the actual survey. **USE THIS WHEN:** User describes survey TOPIC, PURPOSE, or CONTENT (not an exact title). **TRIGGER PHRASES - Use this tool when you see:** - "create a survey **about** [topic]" - "generate a survey **for** [purpose]" - "build a survey **to** [goal]" - "survey measuring [metric]" - "feedback survey" (without explicit title) - "survey with questions about [topics]" **DO NOT USE FOR:** - "Survey **called** [name]" → Use create_survey instead - "Survey **named** [name]" → Use create_survey instead - "Survey **titled** [name]" → Use create_survey instead **KEY DISTINCTION:** - "Survey about employee satisfaction" → THIS TOOL (describes content) - "Survey called Employee Satisfaction Survey" → create_survey (exact title) **WORKFLOW — FOLLOW EXACTLY:** 1. Call this tool with a description to get a survey plan 2. Call create_survey(title=plan["survey_title"]) — include language=plan["detected_language"] only if it's not "en" — the response includes `default_page_id` 3. For each question in the plan, call add_question(page_id=default_page_id, ...) mapping the question type to the correct PAPI family/subtype **WARNING:** Do NOT call add_page — create_survey already provides the default page. Use the `default_page_id` from the create_survey response directly. If `default_page_id` is null, call `get_pages` to retrieve it before proceeding. Args: description: Natural language describing survey purpose, topics, or content (e.g., "customer satisfaction survey for a coffee shop with questions about service quality, product quality, and likelihood to recommend") Returns: Dictionary containing AI-generated survey plan: { "status": "success", "status_code": 200, "predictions": [{ "survey": { "status": "succeed", "survey_title": "Coffee Shop Customer Satisfaction Survey", "detected_language": "en", "questions": [ { "type": "single_choice", "title": "How satisfied are you with our service?", "answer_choices": ["Very satisfied", "Satisfied", ...] } ] } }] } Error Handling: - Invalid Input (400): Validation errors or improper request format - Model Disabled (403): Model temporarily unavailable - Model Not Found (404): Model version not available - Rate Limiting (429): Too many requests - User Temporarily Blocked (430): User-level rate limiting
generate_survey_plan
Get available question types and their schemas. The list includes all question types regardless of the user's plan. **NOTE:** This returns types for MANUAL question creation only. NPS questions use the question bank format (question_bank_question_id="669"). See add_question documentation for NPS question creation. Returns: Dictionary containing question types list
get_question_types
Get the number of responses received for a survey. Use this to check how many people have submitted responses to a survey. This is useful for determining if a survey has collected any data before attempting operations like analysis or determining if the survey can be modified. Args: survey_id: The ID of the survey (string) Returns: Dictionary containing: - response_count (int): Number of responses submitted Example: {"response_count": 42}
get_response_count
Get details about a specific page. **PREREQUISITES:** - survey_id: Get this from `search_surveys` - page_id: Get this from `get_pages(survey_id)` Args: survey_id: The ID of the survey containing the page (get from search_surveys) page_id: The ID of the page to retrieve (get from get_pages) Returns: Dictionary containing page details
get_page
Get details about a specific question. **PREREQUISITES:** - survey_id: Get this from `search_surveys` - page_id: Get this from `get_pages(survey_id)` - question_id: Get this from `get_questions(survey_id, page_id)` Args: survey_id: The ID of the survey containing the question (get from search_surveys) page_id: The ID of the page containing the question (get from get_pages) question_id: The ID of the question to retrieve (get from get_questions) Returns: Dictionary containing question details
get_question
Get a complete statistical summary of all responses to a survey. Returns pre-computed, numerically accurate counts, percentages, and statistics for every question — with human-readable choice labels already resolved. **TRIGGER PHRASES — use this tool when the user asks:** - "How many people said/chose/answered/picked/selected yes/no/X..." - "What percentage/proportion..." - "What are the results/statistics/numbers..." - "Summarize/analyze the responses..." - "What's the average/mean rating..." - "Show me the breakdown/distribution..." - "How did people respond to..." - "Count of people who..." - "Did more people choose X or Y..." - "What's the most/least popular/common answer..." - "How popular was option X..." - Any counting, tallying, comparison, or aggregation of response data **DO NOT use get_responses, get_pages, or get_questions for counting or aggregation.** Those tools return raw data that requires manual iteration. Use THIS tool for any numerical analysis of responses. **WORKFLOW:** 1. search_surveys → get survey_id 2. get_response_summary(survey_id) → returns ALL questions with headings and counts 3. Find the relevant question in the results by its heading text 4. Report the counts/percentages directly to the user You do NOT need get_pages or get_questions first. This tool already returns every question's heading, answer text, counts, and percentages in one call. **Supported question types:** - single_choice / multiple_choice: per-choice counts, percentages, and stats - matrix: per-row breakdown with choice counts and stats - open_ended: answered/skipped counts only (no text content) **Required OAuth scopes:** responses_read_detail Args: survey_id: The ID of the survey (string or int) status: Filter responses by status (completed, partial, disqualified, overquota) Returns: Dictionary containing: - data (list): Per-question summaries with choice text, counts, percentages - total_responses (int): Total responses included in the summary
get_response_summary
Get details about a specific survey. **PREREQUISITE:** You need a survey_id. To get survey IDs, use `search_surveys` first which returns a list of surveys with their `id` fields. **USE THIS WHEN:** User already has a survey ID and wants its details. **DO NOT USE WHEN:** User doesn't know their survey ID - use `search_surveys` first. **IF search_surveys FAILS:** Tell the user there's a temporary issue and to try again later. Do NOT suggest looking at URLs, web UI, or other methods to find the survey ID. **RETURNS:** Survey metadata including: id, title, href, preview URL, is_owner, date_modified, date_created, language, nickname, folder_id, and question_count. Owner user ID is not returned. Args: survey_id: The numeric ID of the survey (get this from search_surveys) Returns: Dictionary containing survey details (preview, is_owner, dates, language, nickname, folder_id, question_count, and core id/title/href).
get_survey
Get survey responses with full answer data. Retrieves responses for a survey including all answer details. Supports pagination for surveys with many responses. Automatically enriches responses with question headings and answer choice text. **IMPORTANT — TOOL SELECTION:** For counting, percentages, averages, or any numerical analysis of responses, use get_response_summary instead. It returns pre-computed, accurate statistics. This tool (get_responses) returns raw individual response records and is appropriate for reading specific respondent answers or qualitative text content. **Required OAuth scopes:** responses_read, responses_read_detail **Plan limitations:** Basic plan accounts are limited to the first 25 responses. Attempting to retrieve beyond this limit will return an UpgradeRequired error. To access all responses, upgrade to a paid plan. **PARTIAL ANALYSIS DISCLOSURE — MANDATORY:** This tool returns PAGINATED results. The response includes: - ``data``: Response records for this page only - ``page``: Current page number - ``per_page``: Records per page (default: 10, max: 100) - ``total``: Total responses across ALL pages **YOU MUST ALWAYS:** 1. Check if ``total > len(data)`` — this means the analysis covers only a SUBSET of responses 2. If partial, ALWAYS tell the user BEFORE presenting any analysis: "Note: I retrieved {len(data)} of {total} total responses. This analysis covers only {len(data)} responses." 3. NEVER present partial analysis as if it covers all responses 4. NEVER say "Based on all 270 responses" when you only retrieved 100 5. If total is large (e.g., >50) and the user wants analysis or statistics, note: "I retrieved {len(data)} of {total} total responses. For accurate statistics across all {total} responses, use get_response_summary instead." **REQUIRED response format when total > len(data):** ✓ "Note: Analyzing {len(data)} of {total} total responses (page {page}):" ✓ "I retrieved {len(data)} responses out of {total} total — here's what they show:" ✗ "Based on the survey responses:" (WRONG — implies complete coverage) ✗ "The survey results show:" (WRONG — doesn't disclose partial data) Args: survey_id: The ID of the survey (string or int) page: Page number for pagination (default: 1, minimum: 1) per_page: Number of responses per page (default: 10, max: 100) Returns: Dictionary containing: - data (list): List of response objects with enriched answer data - page (int): Current page number - per_page (int): Number of items per page - total (int): Total number of responses Example success response: { "data": [ { "id": "12345", "survey_id": "67890", "pages": [ { "id": "page_1", "questions": [ { "id": "q1", "heading": "How satisfied are you?", "family": "single_choice", "answers": [ { "choice_id": "123", "choice_text": "Very Satisfied" } ] } ] } ] } ], "page": 1, "per_page": 10, "total": 42 }
get_responses
Returns information about the MCP server. Returns: Dictionary containing server information
get_server_info
Get pages for a survey. **PREREQUISITE:** You need a survey_id. To get survey IDs, use `search_surveys` first. **USE THIS WHEN:** User needs page IDs from a survey. The returned `id` field for each page is what `get_questions`, `get_page`, and other page-related tools need. **NEVER use for response analysis.** If the user asks how many people answered, what percentage chose X, or any counting/aggregation of responses, use get_response_summary instead — it already returns all question headings and pre-computed counts in one call without needing page_id or question_id. **ID HIERARCHY:** - `search_surveys` → survey_id - `get_pages(survey_id)` → page_id (this tool) - `get_questions(survey_id, page_id)` → question_id Args: survey_id: The ID of the survey (get this from search_surveys) page: Page number for pagination (default: 1) per_page: Number of pages per page (default: 50, max: 100) Returns: Dictionary containing pages list and pagination info
get_pages
Get questions for a specific page in a survey. **PREREQUISITES:** - survey_id: Get this from `search_surveys` - page_id: Get this from `get_pages(survey_id)` - REQUIRED **IMPORTANT:** page_id is REQUIRED. Questions are anchored under pages in the SurveyMonkey Public API. To get all questions in a survey, first call `get_pages()` then call this for each page. **NEVER use for response analysis.** If the user asks how many people answered, what percentage chose X, or any counting/aggregation of responses, use get_response_summary instead — it already returns all question headings and pre-computed counts in one call without needing page_id or question_id. **ID HIERARCHY:** - `search_surveys` → survey_id - `get_pages(survey_id)` → page_id - `get_questions(survey_id, page_id)` → question_id (this tool) Args: survey_id: The ID of the survey (get from search_surveys) page_id: The ID of the page (get from get_pages - REQUIRED) page: Page number for pagination (default: 1) per_page: Number of questions per page (default: 50, max: 100) Returns: Dictionary containing questions list and pagination info
get_questions
Bulk operation: reorder ALL questions on a page. BLOCKED when the survey has responses. Requires a list of ALL question IDs. **USE THIS WHEN:** - User provides a COMPLETE LIST of question IDs in a new order - User wants to move a GROUP of questions (e.g., "move demographic questions to end") - User wants to reorganize the entire page order **WORKFLOW for "move X questions to end" requests:** 1. Call get_questions to get ALL questions on the page 2. Identify which questions match the user's criteria (e.g., demographic type) 3. Reorder the list with matching questions at the end 4. Call this tool with the complete reordered list **NEVER use for single-question operations.** If user mentions just ONE question (like "move question 123 to first"), use edit_question instead. **KEY RULE:** This tool requires ALL question IDs on the page. You must: 1. First call get_questions to get the current list 2. Reorder the IDs as needed 3. Pass the complete reordered list to this tool Args: survey_id: The ID of the survey page_id: The ID of the page to update question_order: List of ALL question IDs on the page in desired order (must include every question) Returns: Dictionary with updated questions list for the page, or partial failure info
reorder_questions
Get a list of surveys for the authenticated user. **DISCOVERY NOTE:** This is the PRIMARY tool for discovering survey IDs. When a user asks "how do I get a survey ID" or "what's my survey ID", use this tool first. The returned `id` field is what other tools need. **USE THIS WHEN:** User wants to see, view, list, or browse their surveys, OR when user needs to find a survey ID. **TRIGGER PHRASES:** - "show my surveys" - "list my surveys" - "what surveys do I have?" - "view my questionnaires" - "how many surveys do I have?" - "get all my surveys" - "how do I get a survey ID?" - "what's my survey ID?" - "find my survey called..." **IF THIS TOOL FAILS:** Tell the user there's a temporary issue and to try again later. Do NOT suggest looking at URLs, web UI, or other methods to find survey IDs. **AUTHENTICATION:** Requires a valid bearer token in the Authorization header. The token is automatically extracted from the request context. **PAGINATION HANDLING - MANDATORY:** This tool returns PAGINATED results (default 10 per page). The response includes: - `data`: Array of surveys returned in this page - `page`: Current page number - `per_page`: Maximum surveys per page (default: 10, max: 100) - `total`: Total number of surveys across ALL pages **YOU MUST ALWAYS:** 1. Check if `total` > `len(data)` - this means results are PARTIAL 2. If partial, ALWAYS tell the user: "You have {total} surveys. Showing {len(data)} of {total}." 3. NEVER say "Here are your surveys" or "Here are all X surveys" when showing partial results 4. For "how many" questions, ALWAYS report the `total` field value, NOT len(data) **REQUIRED RESPONSE FORMAT when total > len(data):** ✓ "You have 35 surveys total. Here are the first 10:" ✓ "Showing 10 of 35 surveys:" ✗ "Here are your surveys:" (WRONG - doesn't indicate partial results) ✗ "Here are your 10 surveys:" (WRONG - implies this is all of them) **QUERY PARAMETER - WHEN TO USE:** The `query` parameter filters surveys by title/nickname matching. **USE query parameter WHEN user says:** find, search, look for, locate, + specific topic - "find surveys about cats" → query="cats" - "search for customer feedback" → query="customer feedback" - "look for NPS surveys" → query="NPS" - "find my satisfaction surveys" → query="satisfaction" **DO NOT use query parameter WHEN user says:** list, show, view, display, get all - "list my surveys" → NO query parameter - "show all my surveys" → NO query parameter - "what surveys do I have" → NO query parameter **DECISION RULE:** If the user mentions a TOPIC to search for, use query. If they just want to see their surveys, don't use query. Args: query: Optional search term that will match survey titles and nicknames with fuzzy matching page: Page number for pagination (default: 1, minimum: 1) per_page: Number of surveys per page (default: 10, max: 100) filters: Optional filters. Valid keys: - start_date: ISO 8601 date-time string (e.g. 2024-01-01T00:00:00Z) - end_date: ISO 8601 date-time string (e.g. 2024-12-31T23:59:59Z) - folder_id: integer folder ID - survey_state: one of "DRAFT", "OPEN", "CLOSED" sort_by: Optional sort field choose from: [ date_modified, title, nickname, survey_state, response_count ] sort_order: Optional sort order (asc/desc) Returns: Dictionary containing surveys search results and pagination info Example response: { "data": [ { "id": "123456789", "title": "Survey title 1234", "nickname": "", "survey_state": "OPEN", "folder_id": 0, "response_count": 0, "date_modified": "2026-02-12T12:00:00Z", "href": "https://api.surveymonkey.com/v3/surveys/125166945" } ], "page": 1, "per_page": 10, "total": 50 } Note: In this example, `total` (50) > `len(data)` (1), indicating 49 more surveys on subsequent pages. Error responses: - {"error": "missing_auth", "message": "Missing Authorization header"} - {"error": "invalid_auth", "message": "Invalid Authorization header format..."} - {"error": "unauthorized", "message": "Invalid or expired access token"} - HTTP 401 - {"error": "forbidden", "message": "Token lacks required scopes"} - HTTP 403 - {"error": "api_error", "message": "...", "status_code": N} - Other HTTP errors - {"error": "timeout", "message": "Request timed out"} - {"error": "service_error", "message": "Failed to connect to SurveyMonkey API"}
search_surveys
Update survey properties like title or nickname. BLOCKED when the survey has responses. **USE THIS WHEN:** User wants to rename a survey, change the survey title, or update survey properties. **TRIGGER PHRASES:** - "rename the survey to..." - "change the survey title to..." - "update the survey name..." - "call this survey..." - "set the survey nickname..." **IMPORTANT:** Call this tool directly to make the change. Do not just read information first - take action immediately when the user requests a rename or title change. Args: survey_id: The ID of the survey to update patch: Dictionary with fields to update. Common fields: - title: New survey title (string) - nickname: Optional survey nickname (string) Returns: Dictionary containing the updated survey details Example: update_survey(survey_id="123456", patch={"title": "Customer Feedback Q1 2026"})
update_survey
How do I improve a ChatGPT Plugin's discoverability?
The levers are the listing surface agents actually read: names, descriptions, keywords, tool metadata, and registry health. Which lever matters depends on where discovery breaks, which is what continuous measurement shows.
What are SurveyMonkey alternatives on ChatGPT?
As of 2026-08-14, SurveyMonkey competes with Cognito MCP, CrowdHum, deoochform, Formbyte, FormEdge, Formester, Formfacade, FormHug, Fyrebox, Jotform, Neartail, SurveySparrow: Forms & Surveys, Tally in ChatGPT Form & Survey Builders, ranked by public Discoverability Score.
Where is this profile measured?
This profile uses the geography attached to the latest public registry snapshot: US. Locale tags are intentionally omitted.