Feedback analytics metrics
⚠️ This feature is available only for organisations subscribed to Feedback Management. ⚠️
Retrieve aggregated feedback analytics data for your organisation.
A request is composed of:
- One or more metrics — the data you want to compute (required)
- An optional dimensions — how the data is grouped
- If omitted, the request returns the aggregated totals across all data matching the filters
- An optional order_by — how the rows are sorted
- Filters to narrow the data:
- By business (business__in, business__notin)
- By group or group section (groups, group_section_id)
- By date range (filter_date__gte, filter_date__lte)
- By survey or field (survey__in, survey_field__in, survey_field_type__in)
- By NPS score (result_nps_score__in)
- By free-text comment (verbatim_query)
- By data quality issues (issues__in, issues__notin)
- By business location (city, query)
Metrics are grouped into five categories:
| Category | Prefix | Examples |
|---|---|---|
| Survey | survey. | survey.response_rate, survey.nb__sent |
| CSAT | result.csat. | result.csat.score, result.csat.avg_score |
| NPS | result.nps. | result.nps.score, result.nps.promoters |
| Response | response. | response.avg_response_time, response.method.nb__ai |
| Result field | result_field. | result_field.rating, result_field.choices |
Dimensions control how rows are grouped:
- Entity: business, user, feedback_form, group, group_section, feedback_form_field, result
- Time: day, month, year
Excel download: add download=true to receive the data as an .xlsx file instead of JSON. Use table_name to customise the filename.
Metadata: add metadata=true to include full entity objects (businesses, forms, users…) alongside the data array. Useful for resolving IDs to display names without extra API calls.
Query parameters
Comma-separated list of analytics metrics to return. At least one value is required.
Survey metrics
- survey.response_rate: Response rate (submissions / sends)
- survey.nb__sent: Number of surveys sent
- survey.nb__with_comments: Number of responses with a comment
- survey.nb__without_comments: Number of responses without a comment
- survey.total_surveys: Total number of survey submissions
- survey.clicks: Number of survey link clicks
- survey.respondents: Number of unique respondents
- survey.verbatims: Number of verbatim comments
- survey_details: Full per-result survey details
Survey form stats metrics (email-delivery stats, best used with the feedback_form, business, or date dimensions)
- survey.sent: Number of survey emails sent
- survey.delivered: Number of survey emails delivered
- survey.opened: Number of survey emails opened
- survey.clicked: Number of survey link clicks (from the email)
- survey.error_bounces: Number of survey emails that bounced
CSAT metrics
- result.csat.score: CSAT score (percentage of ratings 4-5)
- result.csat.avg_score: Average CSAT rating
- result.csat.pct__rating_5: Percentage of 5-star ratings
- result.csat.pct__rating_4: Percentage of 4-star ratings
- result.csat.pct__rating_3: Percentage of 3-star ratings
- result.csat.pct__rating_2: Percentage of 2-star ratings
- result.csat.pct__rating_1: Percentage of 1-star ratings
- result.csat.pct__rating_1_2: Percentage of 1-2 star ratings combined
- result.csat.rating_5: Count of 5-star ratings
- result.csat.rating_1_2: Count of 1-2 star ratings combined
- result.csat.total_responses: Total number of CSAT responses
NPS metrics
- result.nps.score: NPS score (promoters % − detractors %)
- result.nps.promoters: Number of promoters (score 9-10)
- result.nps.passives: Number of passives (score 7-8)
- result.nps.detractors: Number of detractors (score 0-6)
- result.nps.avg__score: Average NPS raw score
- result.nps.pct__promoters: Percentage of promoters
- result.nps.pct__detractors: Percentage of detractors
- result.nps.pct__passives: Percentage of passives
- result.nps.pct__with_comments: Percentage of responses with comments
- result.nps.pct__without_comment: Percentage of responses without comments
- result.nps.total_responses: Total number of NPS responses
Response metrics
- response.created.replied_under_2days: Replies sent within 2 days
- response.created.replied_over_2days: Replies sent after 2 days
- response.created.not_replied: Feedback not yet replied to
- response.method.nb__manual: Number of manual replies
- response.method.nb__ai: Number of AI-assisted replies
- response.not_replied: Total feedback not replied to
- response.under_2days: Total replies under 2 days
- response.over_2days: Total replies over 2 days
- response.avg_response_time: Average response time (seconds)
- response.total_surveys: Total surveys included in response stats
- response.total_responses: Total replies sent
- response.method_ai: Replies using AI (alias)
- response.method_manual: Replies sent manually (alias)
Result field metrics (use with feedback_form_field dimension)
- result_field.rating: Rating value for a form field
- result_field.content: Text content of a form field response
- result_field.choices: Selected choices for a form field
- result_field.field_position: Position of the field within the form
- result_field.result_count: Number of results for a field
Comma-separated list of dimensions to group the returned data by. If omitted, the response contains aggregated totals across all data.
Entity dimensions
- business: Group results by business
- user: Group results by user
- feedback_form: Group results by survey form
- group: Group results by business group
- group_section: Group results by group section
- feedback_form_field: Group results by form field (use with result_field.* metrics)
- result: Return individual feedback results (one row per result)
Date dimensions
- day: Group by calendar day
- month: Group by calendar month
- year: Group by calendar year
Comma-separated list of fields to sort by. Prefix a field name with - to sort in descending order; no prefix sorts ascending. Each field must be one of the metrics or dimensions values included in the request.
Examples: order_by=result.csat.score, order_by=-result.nps.score,business
Filter results to only the specified business IDs (comma-separated).
Exclude the specified business IDs from results (comma-separated).
Filter results to the specified user IDs (comma-separated integers). For non-admin users this is automatically restricted to their accessible users when the user dimension is requested.
Filter results to businesses belonging to the specified group IDs (comma-separated integers).
Filter results to businesses belonging to the specified group section ID.
Filter results to businesses located in the specified city.
Fuzzy search businesses by name, city, or zipcode.
Return only feedback results whose date is greater than or equal to this value.
Return only feedback results whose date is less than or equal to this value.
Filter results to the specified survey (feedback form) IDs (comma-separated).
Filter results to the specified form field IDs (comma-separated).
Filter results to the specified form field types (comma-separated, e.g. CSAT,NPS).
Filter results to the specified NPS scores (comma-separated integers, 0–10).
Filter to specific feedback result IDs (comma-separated).
Full-text search within feedback comments and verbatim responses.
Filter to results that have one of the specified data quality issues (comma-separated).
- deleted_business: The associated business has been deleted
- missing_store_code: The business is missing a store code
Exclude results that have one of the specified data quality issues (comma-separated).
- deleted_business: The associated business has been deleted
- missing_store_code: The business is missing a store code
When true, the response includes a metadata object containing full entity details (businesses, forms, users, groups, etc.) referenced by IDs in the data array. Useful for resolving IDs to display names without additional API calls.
When true, the response is an Excel file (.xlsx) instead of JSON. The Content-Disposition header contains the generated filename.
Custom label used as part of the generated Excel filename when download=true. Special characters are sanitised automatically.
Page number to retrieve (1-based).
Number of results per page.
Response
OK.
When download=true, the response is an Excel file (.xlsx) with a Content-Disposition: attachment header containing the generated filename, instead of the JSON body described below.
Example response
{
"data": [
{
"result.csat.score": 87.5,
"result.csat.avg_score": 4.2,
"result.csat.total_responses": 120,
"business_id": "59b2645db12ff60643ef832c",
"date": "2024-01-01"
}
],
"metadata": {
"feedback_form": [
{
"id": "674d791c13c9d976e20001b1",
"display_name": "Customer Satisfaction Q1 2024"
}
],
"feedback_form_field": [
{
"id": "674d791c13c9d976e20001c3",
"field_type": "CSAT",
"field_label": "How satisfied are you?",
"form_id": "674d791c13c9d976e20001b1",
"form_display_name": "Customer Satisfaction Q1 2024"
}
]
},
"page": 1,
"count": 42,
"max_page": 5
}