HubSpot Feedback Survey Responses
How did customers rate us this month, and who left a detractor score? Pull NPS, CSAT, CES and custom survey responses from HubSpot, search them by survey, sentiment or date, and open each response with the contact and ticket it belongs to.
Connect this API to an AI agent Browse all specs
What you can do with HubSpot Feedback Survey Responses via MCP
Every endpoint below becomes a governed tool your AI agent (Claude, ChatGPT, or a customer-facing VX agent) can call — with scoped permissions, sandbox testing, and audit logs.
| Method | Path | Operation | Description |
|---|---|---|---|
| GET | /crm/objects/2026-09/feedback_submissions |
listSurveyResponses | List survey responses page by page with chosen properties |
| POST | /crm/objects/2026-09/feedback_submissions/search |
searchSurveyResponses | Search survey responses by survey, sentiment, channel or date |
| GET | /crm/objects/2026-09/feedback_submissions/{objectId} |
getSurveyResponse | Get one survey response, with its contact or ticket if asked |
| POST | /crm/objects/2026-09/feedback_submissions/batch/read |
batchReadSurveyResponses | Read up to 100 survey responses by id in one call |
Authentication
private_app_token
Bearer token — sent as Authorization: Bearer <token>
HubSpot private app access token (or an OAuth access token), sent as Authorization: Bearer <token>.
How to get a credential
- In HubSpot, open Development (or Settings > Integrations) > Legacy apps / Private apps.
- Click Create legacy app > Private, and name it (e.g. VX Agents surveys).
- On the Scopes tab add
crm.objects.feedback_submissions.readandcrm.objects.contacts.read. - Create the app and copy the access token (
pat-...).
Permissions used
| Scope | Operations |
|---|---|
crm.objects.feedback_submissions.read |
listSurveyResponses, searchSurveyResponses, getSurveyResponse, batchReadSurveyResponses |
crm.objects.contacts.read |
the same operations (HubSpot accepts either scope) |
Common errors
| Status | Meaning | Fix |
|---|---|---|
| 401 | Token missing, expired or revoked | Copy the token again from the private app; rotate it if it was revoked. |
| 403 | Scope missing, or the scope is not available on your HubSpot subscription | Add the scopes above (they only appear when the account has customer feedback surveys) and use the new token. |
| 400 | Bad search filter or property name | Use internal property names such as hs_sentiment and hs_survey_channel. |
| 429 | Rate limit | Wait and retry; search allows a few requests per second. |
Store the token as a VX Agents credential (Bearer token). The API is read-only: it cannot change survey responses.
Usage guide
Setup
- Credential: a HubSpot private app token with
crm.objects.feedback_submissions.read(andcrm.objects.contacts.read). - Worth pinning: the survey you report on most (its name or id, from Service > Customer feedback in HubSpot) and the property list you always want back, e.g.
hs_sentiment,hs_survey_channel.
Review survey results
- Recent responses:
searchSurveyResponseswith afilterGroupsfilter onhs_createdate(GTE, epoch milliseconds), sorted byhs_createdateDESCENDING. Add ahs_sentimentfilter to see only detractors or promoters. - Ask for the properties you need in
properties. Default answers only includehs_createdate,hs_lastmodifieddateandhs_object_id;hs_sentiment(how the contact feels) andhs_survey_channel(where they answered, e.g. email) are named in the HubSpot reference. - Who answered:
getSurveyResponsewithassociations=contacts,ticketsreturns the contact (and the ticket for support surveys) linked to the response. - Many at once:
listSurveyResponsespages through everything (limitup to 100,afterfrompaging.next);batchReadSurveyResponsesreads up to 100 known ids. - Summarise by sentiment or survey type, and list the detractors with their contact ids so the team can follow up.
Good to know
- This API is read-only: it cannot create, edit or delete survey responses, and response properties can only be created in HubSpot's survey tool.
- Surveys cover NPS, customer satisfaction (CSAT), customer effort (CES) and custom surveys. Sentiment is derived from the rating (detractor, passive, promoter).
- Other response fields (rating, written response, survey name, survey type) also exist; if a property name returns nothing, look up its internal name under Settings > Properties > Feedback submission properties.
- Search returns at most 200 per page and 10,000 in total; page with
after.
Source: HubSpot API reference (https://developers.hubspot.com/docs/api-reference/latest/crm/objects/feedback-submissions/guide), checked 2026-10-25.
How to use this spec
- Create a free VX Agents account (sandbox tools included).
- Open the marketplace and connect “HubSpot Feedback Survey Responses” to an agent.
- Expose it as an MCP server for Claude/ChatGPT, or chat with it directly.