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, both Y-m-d).

Base URL

EnvironmentURL
Productionhttps://production-api.shoutaboutus.com
Developmenthttps://development-api.shoutaboutus.com

Endpoint

GET /api/v1/account/dashboard/reviews/count

Authentication

Partner or Account token

  • store_id must be inside your own account tree; otherwise 422.
  • 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

ParameterInTypeRequiredDescription
store_idqueryintegerNoOne location. Must exist and be inside your account tree. Leave it out to cover every location your token can see.
review_site_idqueryintegerNoOnly this review site, e.g. 44 for Google. Must be an existing review site.
range_startquerystringNoStart of the window, Y-m-d. Used only together with range_end.
range_endquerystringNoEnd 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.

FieldTypeDescription
reviews_countintegerReviews in the window (all-time without one).
avg_ratingnumberAverage star rating of those reviews.
request_countintegerEmail and SMS review requests sent in the window.
response_rate_pctnumberPercentage of those reviews that have a response.
avg_response_timenumberAverage time to respond, in days. 0 when there are no responses.
awaiting_responseintegerReviews with no response yet that the location may respond to, in the window; all-time without one. Not part of comparison.
comparisonobject or nullThe window against the previous one. null unless both range_start and range_end are sent.
comparison.previous_periodobjectThe previous window: the same length, immediately before range_start.
comparison.previous_period.range_startstringFirst day of the previous window, Y-m-d.
comparison.previous_period.range_endstringLast day of the previous window, Y-m-d.
comparison.reviews_countobjectreviews_count: this period against the previous one.
comparison.reviews_count.currentnumberValue for the selected window.
comparison.reviews_count.previousnumberValue for the previous window.
comparison.reviews_count.change_pctnumber or nullChange from previous to current, in percent, one decimal. null when previous is 0.
comparison.reviews_count.directionstringup, down or flat (flat when there's no change or change_pct is null).
comparison.avg_ratingobjectavg_rating: this period against the previous one.
comparison.avg_rating.currentnumberValue for the selected window.
comparison.avg_rating.previousnumberValue for the previous window.
comparison.avg_rating.change_pctnumber or nullChange from previous to current, in percent, one decimal. null when previous is 0.
comparison.avg_rating.directionstringup, down or flat (flat when there's no change or change_pct is null).
comparison.request_countobjectrequest_count: this period against the previous one.
comparison.request_count.currentnumberValue for the selected window.
comparison.request_count.previousnumberValue for the previous window.
comparison.request_count.change_pctnumber or nullChange from previous to current, in percent, one decimal. null when previous is 0.
comparison.request_count.directionstringup, down or flat (flat when there's no change or change_pct is null).
comparison.response_rate_pctobjectresponse_rate_pct: this period against the previous one.
comparison.response_rate_pct.currentnumberValue for the selected window.
comparison.response_rate_pct.previousnumberValue for the previous window.
comparison.response_rate_pct.change_pctnumber or nullChange from previous to current, in percent, one decimal. null when previous is 0.
comparison.response_rate_pct.directionstringup, down or flat (flat when there's no change or change_pct is null).
comparison.avg_response_timeobjectavg_response_time: this period against the previous one.
comparison.avg_response_time.currentnumberValue for the selected window.
comparison.avg_response_time.previousnumberValue for the previous window.
comparison.avg_response_time.change_pctnumber or nullChange from previous to current, in percent, one decimal. null when previous is 0.
comparison.avg_response_time.directionstringup, 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."
}
StatusMeaning
200The counts.
401The token is missing, expired or invalid.
422A 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.
429More than 120 requests in a minute from this user.
500Unexpected 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'

Did this page help you?