Check report status

Overview

See whether a report is ready.

Poll after submitting.

You'll need the location (store_id) and the report id (report_id).

Returns the status and, when done, the report.

Prerequisites

Base URL

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

Endpoint

POST /api/v1/account/competitive-report/status

Authentication

Partner or Account token

  • store_id must be inside your own account tree, and the report must belong to that location. A Partner token can check reports for any location under the partner; an Account token only for its own locations.
  • A location outside your tree is rejected with 422. A report that doesn't belong to store_id returns 404.

Rate limit

60 requests per minute, counted per user (the token’s user). See Rate limits.

Request parameters

None.

Request body

FieldTypeRequiredDescription
store_idintegerYesThe location the report is for. Must exist and be inside your account tree.
report_idintegerYesThe report's id (competitive_report_id). Must exist and belong to store_id.

Request payload

{
  "store_id": 3007,
  "report_id": 48
}

Response body

The payload is inside data.

FieldTypeDescription
competitive_report_idintegerThe report's id.
store_idintegerThe location.
review_site_idintegerThe review site.
publisherstringThe review site's source, e.g. maps.google.com.
yearintegerThe report year.
monthinteger or nullThe report month, or null for a full-year report.
themestringThe report theme.
statusstringAs reported by the generator, e.g. pending, queued, waiting_for_scrape, processing, succeeded, failed.
codeinteger or nullThe generator's result code.
reason_codestring or nullThe generator's reason code, set when a report fails.
task_idstring or nullThe report generator's task id.
competitorsarray of objectsThe competitors compared: id, name, profile_key, and any address, phone, description and tags sent with them.
competitor_countintegerHow many competitors.
review_countinteger or nullHow many reviews the report scored. null until it's complete.
report_dataobject or nullThe report itself, once it's complete. null until then.
failure_reasonstring or nullWhy the report failed, e.g. scrape_failed.
failure_detailsstring or nullMore detail on the failure.
created_atstring or nullWhen the report was requested (ISO 8601).
completed_atstring or nullWhen the report finished (ISO 8601).

Response payload

{
  "data": {
    "competitive_report_id": 48,
    "store_id": 3007,
    "review_site_id": 44,
    "publisher": "maps.google.com",
    "year": 2026,
    "month": 8,
    "theme": "home-services",
    "status": "failed",
    "code": 400,
    "reason_code": null,
    "task_id": "605eefee-6253-4c66-a831-5945e17dce64",
    "competitors": [
      {
        "id": "comp_4b6b2b957d4856aa",
        "zip": "2000",
        "city": "Sydney",
        "name": "Circular Quay",
        "state": "NSW",
        "street": "Circular Quay",
        "country": "AU",
        "profile_key": "https://www.google.com/maps/place/Circular+Quay/@-33.8615,151.2108,17z"
      }
    ],
    "competitor_count": 1,
    "review_count": null,
    "report_data": null,
    "failure_reason": "scrape_failed",
    "failure_details": "The on-demand scrape for competitor 1 returned a terminal failure",
    "created_at": "2026-09-28T14:48:05+00:00",
    "completed_at": "2026-09-28T14:48:10+00:00"
  }
}

Examples

Success payload

The report failed (a competitor's profile couldn't be read): see Response payload.

Still generating:

{
  "data": {
    "competitive_report_id": 54,
    "store_id": 3007,
    "review_site_id": 44,
    "publisher": "maps.google.com",
    "year": 2026,
    "month": 9,
    "theme": "home-services",
    "status": "queued",
    "code": null,
    "reason_code": null,
    "task_id": "605eefee-6253-4c66-a831-5945e17dce64",
    "competitors": [
      {
        "id": "comp_4b6b2b957d4856aa",
        "name": "Pacific Breeze Heating & Air",
        "profile_key": "<competitor-profile-url>",
        "street": "123 Main St",
        "city": "San Diego",
        "state": "CA",
        "zip": "92101",
        "country": "US",
        "phone": "+15555550100"
      }
    ],
    "competitor_count": 1,
    "review_count": null,
    "report_data": null,
    "failure_reason": null,
    "failure_details": null,
    "created_at": "2026-10-01T09:00:00+00:00",
    "completed_at": null
  }
}

Error payload

404 Report not found for this location

{
  "message": "Competitive report not found for this store.",
  "status": "error",
  "errors": []
}

422 Report doesn't exist

{
  "message": "The selected report id is invalid.",
  "errors": {
    "report_id": [
      "The selected report id is invalid."
    ]
  }
}

422 report_id missing

{
  "message": "The report id field is required.",
  "errors": {
    "report_id": [
      "The report id field is required."
    ]
  }
}

429 Too many requests

{
  "message": "Too Many Attempts."
}
StatusMeaning
200The report's current status, with the report once it's complete.
401The token is missing, expired or invalid.
404The report doesn't belong to store_id.
422A field is missing or invalid, the location is outside your tree, or the report doesn't exist.
429More than 60 requests in a minute from this user.
500Unexpected server error.

Example request

curl --request POST \
  --url "https://production-api.shoutaboutus.com/api/v1/account/competitive-report/status" \
  --header 'Authorization: Bearer <bearer-token>' \
  --header 'Accept: application/json' \
  --header 'Content-Type: application/json' \
  --data '{"store_id": 3007, "report_id": 48}'

Did this page help you?