Version 1

List a profile's reviews

The reviews Google publishes for one Business Profile, read from our mirror: filterable, sortable and paged.

Request

GET https://api.hallie.app/v1/profiles/{profile_id}/reviews

profile_id comes from the profiles endpoint, or from the customer's dashboard on the profile's Reviews tab.

Query parameters

Parameter
Values
Default
Description
rating 1–5 Only reviews with this star rating.
replies all · answered · unanswered all Whether the review carries your reply.
search string Matches the start of a word in the author name or the review text. Ignored below two characters.
sort reviewed_at · star_rating · reviewer_name · replied_at reviewed_at Which column orders the list.
direction asc · desc desc Order of that column.
per_page 1–100 25 Reviews per page.
page integer 1 Which page to read. The response also links to the next one.

Response

{
  "data": [
    {
      "id": "AbFvOqm...",
      "rating": 5,
      "comment": "Best sourdough in Lyon.",
      "author": {
        "name": "Camille D.",
        "photo_url": "https://lh3.googleusercontent.com/..."
      },
      "reply": {
        "comment": "Thank you! See you soon.",
        "published_at": "2026-07-20T09:12:00+00:00"
      },
      "reviewed_at": "2026-07-19T18:41:00+00:00",
      "updated_at": "2026-07-19T18:41:00+00:00"
    }
  ],
  "links": { "first": "...", "last": "...", "prev": null, "next": "..." },
  "meta": { "current_page": 1, "last_page": 9, "per_page": 25, "total": 213 }
}

reply is null when you have not answered. author.name is null on a review Google publishes anonymously. The id is Google's own, so it survives a re-index and is safe to cache against.

Example

curl -s \
  -H "Authorization: Bearer $TOKEN" \
  -H "Accept: application/json" \
  "https://api.hallie.app/v1/profiles/bp_01jd8x2kqe7yq3m4v5n6p7r8s9/reviews?rating=5&per_page=10"