Headline counts
Overview
Get the account's top-line counts: reviews, rating, review requests sent, response rate, response time, and reviews awaiting a response.
Use this for the dashboard header.
You'll need a token. Send both range_start and range_end to count only that window and get a comparison with the previous window (the same length, immediately before range_start). Without both dates the counts are all-time and comparison is null.
Returns the counts.
Prerequisites
- A bearer token. See Authentication.
- Optional: a location (
store_id), a review site (review_site_id) and a date range (range_start,range_end, bothY-m-d).
Base URL
| Environment | URL |
|---|---|
| Production | https://production-api.shoutaboutus.com |
| Development | https://development-api.shoutaboutus.com |
Endpoint
GET /api/v1/account/dashboard/reviews/count
Authentication
Partner or Account token
store_idmust be inside your own account tree; otherwise422.- Without
store_id, the figures cover every location the token can see: every location under the partner for a Partner token, the account's locations for an Account token, or only the assigned locations for a user limited to some locations.
Rate limit
120 requests per minute, counted per user (the token’s user). See Rate limits.
Request parameters
| Parameter | In | Type | Required | Description |
|---|---|---|---|---|
store_id | query | integer | No | One location. Must exist and be inside your account tree. Leave it out to cover every location your token can see. |
review_site_id | query | integer | No | Only this review site, e.g. 44 for Google. Must be an existing review site. |
range_start | query | string | No | Start of the window, Y-m-d. Used only together with range_end. |
range_end | query | string | No | End of the window, Y-m-d. Must be on or after range_start. Used only together with range_start. |
Request body
None.
Request payload
None.
Response body
The payload is inside data.
| Field | Type | Description |
|---|---|---|
reviews_count | integer | Reviews in the window (all-time without one). |
avg_rating | number | Average star rating of those reviews. |
request_count | integer | Email and SMS review requests sent in the window. |
response_rate_pct | number | Percentage of those reviews that have a response. |
avg_response_time | number | Average time to respond, in days. 0 when there are no responses. |
awaiting_response | integer | Reviews with no response yet that the location may respond to, in the window; all-time without one. Not part of comparison. |
comparison | object or null | The window against the previous one. null unless both range_start and range_end are sent. |
comparison.previous_period | object | The previous window: the same length, immediately before range_start. |
comparison.previous_period.range_start | string | First day of the previous window, Y-m-d. |
comparison.previous_period.range_end | string | Last day of the previous window, Y-m-d. |
comparison.reviews_count | object | reviews_count: this period against the previous one. |
comparison.reviews_count.current | number | Value for the selected window. |
comparison.reviews_count.previous | number | Value for the previous window. |
comparison.reviews_count.change_pct | number or null | Change from previous to current, in percent, one decimal. null when previous is 0. |
comparison.reviews_count.direction | string | up, down or flat (flat when there's no change or change_pct is null). |
comparison.avg_rating | object | avg_rating: this period against the previous one. |
comparison.avg_rating.current | number | Value for the selected window. |
comparison.avg_rating.previous | number | Value for the previous window. |
comparison.avg_rating.change_pct | number or null | Change from previous to current, in percent, one decimal. null when previous is 0. |
comparison.avg_rating.direction | string | up, down or flat (flat when there's no change or change_pct is null). |
comparison.request_count | object | request_count: this period against the previous one. |
comparison.request_count.current | number | Value for the selected window. |
comparison.request_count.previous | number | Value for the previous window. |
comparison.request_count.change_pct | number or null | Change from previous to current, in percent, one decimal. null when previous is 0. |
comparison.request_count.direction | string | up, down or flat (flat when there's no change or change_pct is null). |
comparison.response_rate_pct | object | response_rate_pct: this period against the previous one. |
comparison.response_rate_pct.current | number | Value for the selected window. |
comparison.response_rate_pct.previous | number | Value for the previous window. |
comparison.response_rate_pct.change_pct | number or null | Change from previous to current, in percent, one decimal. null when previous is 0. |
comparison.response_rate_pct.direction | string | up, down or flat (flat when there's no change or change_pct is null). |
comparison.avg_response_time | object | avg_response_time: this period against the previous one. |
comparison.avg_response_time.current | number | Value for the selected window. |
comparison.avg_response_time.previous | number | Value for the previous window. |
comparison.avg_response_time.change_pct | number or null | Change from previous to current, in percent, one decimal. null when previous is 0. |
comparison.avg_response_time.direction | string | up, down or flat (flat when there's no change or change_pct is null). |
Response payload
{
"data": {
"reviews_count": 223,
"avg_rating": 4.4,
"request_count": 0,
"response_rate_pct": 0,
"avg_response_time": 0,
"awaiting_response": 223,
"comparison": {
"previous_period": {
"range_start": "2025-04-03",
"range_end": "2025-12-31"
},
"reviews_count": {
"current": 223,
"previous": 22,
"change_pct": 913.6,
"direction": "up"
},
"avg_rating": {
"current": 4.4,
"previous": 4.09,
"change_pct": 7.6,
"direction": "up"
},
"request_count": {
"current": 0,
"previous": 0,
"change_pct": null,
"direction": "flat"
},
"response_rate_pct": {
"current": 0,
"previous": 0,
"change_pct": null,
"direction": "flat"
},
"avg_response_time": {
"current": 0,
"previous": 0,
"change_pct": null,
"direction": "flat"
}
}
}
}Examples
Success payload
Google at one location, January to September 2026: see Response payload.
No parameters: every location, all-time, so comparison is null:
{
"data": {
"reviews_count": 682,
"avg_rating": 4.21,
"request_count": 1,
"response_rate_pct": 0,
"avg_response_time": 0,
"awaiting_response": 682,
"comparison": null
}
}Error payload
422 Date not in Y-m-d
{
"message": "The range start field must match the format Y-m-d.",
"errors": {
"range_start": [
"The range start field must match the format Y-m-d."
]
}
}422 range_end before range_start
{
"message": "The range_end must be greater than or equal to range start.",
"errors": {
"range_end": [
"The range_end must be greater than or equal to range start."
]
}
}422 Location outside your tree
{
"message": "The selected store id does not belong to your company hierarchy.",
"errors": {
"store_id": [
"The selected store id does not belong to your company hierarchy."
]
}
}422 Review site doesn't exist
{
"message": "The selected review site id is invalid.",
"errors": {
"review_site_id": [
"The selected review site id is invalid."
]
}
}429 Too many requests
{
"message": "Too Many Attempts."
}| Status | Meaning |
|---|---|
200 | The counts. |
401 | The token is missing, expired or invalid. |
422 | A date isn't Y-m-d, range_end is before range_start, store_id doesn't exist or is outside your tree, or review_site_id doesn't exist. |
429 | More than 120 requests in a minute from this user. |
500 | Unexpected server error. |
Example request
curl --request GET \
--url "https://production-api.shoutaboutus.com/api/v1/account/dashboard/reviews/count?store_id=3007&review_site_id=44&range_start=2026-01-01&range_end=2026-09-30" \
--header 'Authorization: Bearer <bearer-token>' \
--header 'Accept: application/json'Updated 17 days ago
