Twelve-month ranking

Overview

Get your top 10 locations, ranked on review count, average rating and response rate combined. With no dates, the window is the last 13 complete months (from the start of the month 13 months ago to the end of last month).

Use this for a long-view leaderboard.

You'll need a token.

Returns the ranked list, best first.

Prerequisites

  • A bearer token. See Authentication.
  • Optional: a location (store_id), a review site (review_site_id) and a window (range_start, range_end, both Y-m-d H:i:s).

Base URL

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

Endpoint

GET /api/v1/account/dashboard/get-overall-ranking-bylocation-last12months

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 H:i:s (this endpoint needs the time part; a bare Y-m-d returns 422). The time is ignored: the window starts at the beginning of that day. Default: the start of the month 13 months ago.
range_endquerystringNoEnd of the window, Y-m-d H:i:s. Must be on or after range_start. The time is ignored: the window ends at the end of that day. Default: the end of last month.

Request body

None.

Request payload

None.

Response body

data is an array of up to 10 locations, best first.

FieldTypeDescription
data[]array of objectsUp to 10 locations, best overall rank first.
data[].idstringloc_ followed by the location's id, e.g. loc_3007.
data[].final_gradestringOverall grade: A+, A, B, C or D (fewer grades when few locations differ), or N/A.
data[].namestringThe location's name, then - and its client_location_id (or its store code when that's empty).
data[].avgRatingstringAverage rating as text with 2 decimals, e.g. "4.38".
data[].review_countintegerReviews in the window that count toward the rating.
data[].response_countstringResponses and response rate as text: "<count> (<percent>%)".

Response payload

{
  "data": [
    {
      "id": "loc_3007",
      "final_grade": "A+",
      "name": "Acme Coffee - docs-test-loc-001",
      "avgRating": "4.38",
      "review_count": 230,
      "response_count": "0 (0%)"
    },
    {
      "id": "loc_3008",
      "final_grade": "A",
      "name": "Acme Coffee - Circular Quay - Sydney",
      "avgRating": "0.00",
      "review_count": 0,
      "response_count": "0 (0%)"
    }
  ]
}

Examples

Success payload

No dates, so the last 13 complete months: see Response payload.

One location and Google, January to September 2026:

{
  "data": [
    {
      "id": "loc_3007",
      "final_grade": "A+",
      "name": "Acme Coffee - docs-test-loc-001",
      "avgRating": "4.40",
      "review_count": 223,
      "response_count": "0 (0%)"
    }
  ]
}

Error payload

422 Date without a time

{
  "message": "The range start field must match the format Y-m-d H:i:s.",
  "errors": {
    "range_start": [
      "The range start field must match the format Y-m-d H:i:s."
    ]
  }
}

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
200Up to 10 ranked locations.
401The token is missing, expired or invalid.
422A date isn't Y-m-d H:i:s, 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/get-overall-ranking-bylocation-last12months?store_id=3007&review_site_id=44" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json'

Did this page help you?