Send Survey Responses to
Email, WhatsApp, Notion, Google sheets & More
Get notified instantly when someone fills out your survey. Connect Mapster to 6,000+ apps like Slack, Google Sheets, WhatsApp, and email through Zapier.
Documentation
How It Works
Someone fills out your survey → Mapster instantly sends the response to any app you choose. No code needed.
Connect
Link your Mapster account to Zapier with your API key
Choose
Pick where you want responses sent -Slack, Sheets, email, etc.
Done
Every new response is automatically sent to your chosen app in real time
What Can You Do With It?
Slack
Get a Slack message every time someone submits a response
Receive survey responses as WhatsApp messages
Google Sheets
Automatically add each response as a new row in a spreadsheet
Get an email notification for every new response
HubSpot / CRM
Create or update contacts in your CRM with survey data
Notion / Airtable
Build a live response tracker in your favorite database
Setup Guide
Step 1: Get your API Key
- Log in to your Mapster dashboard
- Go to the Alerts page
- Click Generate API Key for Zapier
- Copy the key - you'll need it in the next step
Step 2: Create a Zap
- Go to zapier.com and click Create a Zap
- For the trigger, search for Mapster
- Choose New Survey Response
- Paste your API key when asked to connect your account
- Optionally pick a specific survey, or leave blank for all surveys
Step 3: Choose where to send responses
- Add an action - pick the app you want (Slack, Google Sheets, email, etc.)
- Map the survey fields (response, survey name, location, etc.) to the app
- Test it, then turn on your Zap
That's it! Every new survey response will automatically be sent to your chosen app.
What Data Gets Sent?
Each time someone submits a response, Zapier receives the following information that you can use in your actions:
- •Survey name - which survey the response came from
- •Answers - all questions and their answers, formatted and readable
- •User info - any custom attributes you passed (plan, company, etc.)
- •Location - country and city of the respondent
- •Device - desktop, mobile, or tablet + browser
- •Timestamp - when the response was submitted
Good to Know
- •Responses are sent instantly - no delays
- •Your API key works for all your Zaps - you only need to connect once
- •If you regenerate your API key, you'll need to reconnect your Zaps
- •Want responses from specific surveys only? Select a survey when setting up the trigger
- •Need multiple surveys going to different places? Create a separate Zap for each
API Reference
All Mapster API endpoints. The Zapier integration endpoints use an API key passed in the x-api-key request header. Widget endpoints are public. Dashboard endpoints require a Clerk browser session.
Zapier Integration Endpoints
/api/alerts/zapier/zapier-api-keyReturns the authenticated user's current API key record. Used by the Mapster dashboard to display the key.
Auth: Clerk session (dashboard only)
Response: { api_key: { id, api_key, label, created_at } }
/api/alerts/zapier/zapier-api-keyGenerates a new API key for the user (replaces any existing key). Called from the Mapster dashboard before connecting to Zapier.
Auth: Clerk session (dashboard only)
Response: { api_key: { id, api_key, label, created_at } }
/api/alerts/zapier/surveysReturns the user's surveys as a list. Zapier calls this to populate the survey dropdown when setting up a trigger.
Auth: x-api-key header
Response: [ { id: string, label: string } ]
/api/alerts/zapier/sampleReturns a static sample response payload. Zapier uses this during Zap setup so users can see and map available fields before any real responses exist.
Auth: x-api-key header
Response: [ { id, survey_id, survey_title, survey_responses, user_attributes, country, city, device_type, browser, submitted_at } ]
/api/alerts/zapier/subscribeRegisters a webhook URL with Mapster. Called automatically by Zapier when a user turns on a Zap. Mapster will POST to this URL whenever a new survey response is received.
Auth: x-api-key header
Body: { hookUrl: string, poll_id?: string }
Response: { id: string }
/api/alerts/zapier/unsubscribeRemoves a webhook subscription. Called automatically by Zapier when a user turns off a Zap.
Auth: x-api-key header
Query param: ?id={webhookId}
Response: { success: true }
Outbound Webhook Payload
When a new survey response is received, Mapster sends an HTTP POST to the hookUrl registered during subscribe. The request body is JSON with the following fields:
| Field | Type | Description |
|---|---|---|
id | string | Unique ID of this response |
survey_id | string | The survey's shareable ID |
survey_title | string | Title of the survey |
survey_responses | string | All answers formatted as Question: Answer, separated by double newlines |
user_attributes | string | null | Custom attributes passed at embed time (e.g. plan, company), formatted as key: value pairs. Null if none were passed. |
country | string | null | Respondent's country (from geo-IP) |
city | string | null | Respondent's city (from geo-IP) |
device_type | string | desktop, mobile, or tablet |
browser | string | Browser name (e.g. Chrome, Safari) |
submitted_at | string | ISO 8601 timestamp of when the response was submitted |
If Zapier responds with HTTP 410 Gone, Mapster automatically removes the subscription.
Widget / Embed Endpoints
These endpoints are called by the Mapster widget embedded on your site. They are publicly accessible and support CORS from any origin.
/api/polls/get-pollFetches the survey definition for the embedded widget - questions, display settings, widget config, active/expired status, and branding options.
Auth: None (public)
Query params: poll_id - the survey's shareable ID
Response: { success: true, data: { poll_id, poll_id_to_share, questions, is_active, isExpired, response_limit_reached, display_settings, widget_config, show_mapster_branding } }
/api/polls/answer-pollSubmits a survey response. Called by the embedded widget when a visitor completes a survey. Validates the survey is active, rate-limits by IP, geo-locates the respondent, stores the response, and fires Zapier and Slack webhooks.
Auth: None (public)
Body: { answers: Answer[], user_attributes?: object, turnstile_token?: string, visitor_id?: string }
Response: { success: true, message: string }
/api/eventTracks a widget analytics event (e.g. survey shown, survey skipped). Called by the widget to record visitor interactions.
Auth: None (public)
Body: { event: string, properties: { poll_id?, page_type?, url?, referrer?, session_id?, visitor_id?, timezone?, language? }, timestamp: number }
Response: { success: true, message: "ok" }
Dashboard Endpoints
These endpoints power the Mapster dashboard. They require an active Clerk session (the authenticated user's browser session) and are not intended for third-party integrations.
/api/polls/get-poll-votesReturns paginated individual responses for a survey. Supports filtering by date range, vote source, and answer values.
Auth: Clerk session
Query params: poll_id, page, limit (max 1000), sort_order, filter_duplicates, date_range, vote_via_filter, question_filters
/api/polls/get-poll-stats-mapReturns geo-aggregated response data (country/city counts with coordinates) for rendering the map view in the dashboard.
Auth: Clerk session
Query params: poll_id, date_range, filter_duplicates, vote_via_filter, question_filters
/api/polls/get-poll-stats-nonmapReturns aggregate answer statistics (counts, percentages, averages) for all questions in a survey, used by the dashboard charts.
Auth: Clerk session
Query params: poll_id, date_range, filter_duplicates, vote_via_filter, question_filters
/api/polls/get-poll-engagement-statsReturns engagement metrics for a survey: total views, response count, completion rate, and device/browser breakdown.
Auth: Clerk session
Query params: poll_id, date_range, filter_duplicates, vote_via_filter
/api/polls/get-poll-rating-trendsReturns time-series average rating data for rating-type questions (NPS, star, emoji, scale), used to render trend charts.
Auth: Clerk session
Query params: poll_id, question_id, date_range, filter_duplicates
/api/polls/get-user-feedback-activity-statsReturns account-level response activity stats (total responses, responses over time) across all of the user's surveys.
Auth: Clerk session
/api/polls/get-user-attributesReturns the distinct custom attribute keys seen across all responses for a survey, used to populate the filter UI.
Auth: Clerk session
Query params: poll_id
/api/polls/delete-poll-answerDeletes an individual survey response. Only the survey owner can delete responses from their own surveys.
Auth: Clerk session
Body: { poll_answer_id: string, poll_id: string }
/api/alerts/slack/webhookSaves or removes a Slack incoming webhook URL for the user's account. When set, new survey responses are also POSTed to this Slack webhook.
Auth: Clerk session
Body: { webhook_url: string | null }
Need help Let us know