# List a Google Maps contributor's reviews

Returns the reviews one Google Maps contributor has written, each with the place it is about, and the contributor's profile. Use it to check a reviewer's history.

Tool `google.maps.contributor-reviews` on Google. Contract version 1, released 2026-10-27.

## Example call

Over REST, send the input in the body. Over MCP, pass the same input to `call_tool`.

cURL:

```bash
curl https://api.voxoria.ai/v1/tools/google.maps.contributor-reviews/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"contributor_id":"109736708296406538146"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/google.maps.contributor-reviews/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={"input": {"contributor_id": "109736708296406538146"}},
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/google.maps.contributor-reviews/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({"input": {"contributor_id": "109736708296406538146"}}),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "google.maps.contributor-reviews",
    "input": {
      "contributor_id": "109736708296406538146"
    }
  }
}
```

Both return [the full response](/docs/call-response.md): the call's ID, status and cost, with this tool's result in `output`.

## Input

| Input | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `contributor_id` | string | Yes |  | Google's identifier of the contributor, in decimal digits, as in the address of a Google Maps profile (/maps/contrib/{id}). |
| `country` | string | No |  | Two-letter ISO 3166-1 country code. Case-insensitive. One of the 249 values of the `countries` list: ISO 3166-1 alpha-2 country codes, lowercase. |
| `language` | string | No | `en` | Two-letter ISO 639-1 language code. Case-insensitive. One of the 184 values of the `languages` list: ISO 639-1 two-letter language codes, lowercase. |

## Output

A successful call returns these blocks in its `output`. A field not marked required can be `null`.

### reviews

A list of rows. Always present, possibly empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `review_id` | string | No | Google's identifier of the review. |
| `rating` | number | Yes | Rating the contributor gave, out of 5. |
| `text` | string | No |  |
| `url` | string | No | Address of the review on Google Maps. |
| `published_label` | string | No | Age of the review as Google shows it, such as "a week ago". Not a timestamp. |
| `likes` | integer | No |  |
| `image_urls` | array of string | No | Address of each photo attached to the review. |
| `owner_response_text` | string | No | The owner's reply to the review. |
| `owner_response_published_label` | string | No | Age of the reply as Google shows it. Not a timestamp. |
| `place_name` | string | No | Name of the business or place reviewed. |
| `place_address` | string | No |  |
| `place_category` | string | No | Kind of business, such as "Coffee shop". |
| `place_latitude` | number | No |  |
| `place_longitude` | number | No |  |
| `place_data_id` | string | No | Google Maps feature ID of the place, in hexadecimal, such as "0x89c259a9b3117469:0xd134e199a405a163". |

### contributor

One object. Can be `null`.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `contributor_id` | string | No |  |
| `name` | string | No |  |
| `image_url` | string | No |  |
| `local_guide` | boolean | No | Whether the contributor is a Google Local Guide. |
| `level` | integer | No | Local Guide level. |
| `points` | integer | No | Local Guide points. |
| `review_count` | integer | No | Reviews the contributor has written in total. |
| `photo_count` | integer | No | Photos the contributor has added in total. |

## Example output

The `output` of a real call, each list cut to 3 items.

```json
{
  "reviews": [
    {
      "review_id": "Ci9DQUlRQUNvZENodHljRjlvT25WV1RtaGpVbXcxV0ZSNFRVcExWM1kwTTNGb1ZFRRAB",
      "rating": 3,
      "text": "I stopped by Ministry of Chocolate after a workout and immediately felt a bit unwelcome. Someone working on a laptop near the front gave me a strange look, and it wasn't exactly the warmest first impression.\n\nThat said, the staff behind the counter were helpful and provided everything I needed to place my order and get my food without any issues.\n\nI also tried a croissant. They offered to warm it up, which was appreciated, but it didn't do much for the taste. Honestly, I've had better croissants from Lidl and even Costco.\n\nThe chocolate cake was the highlight of the visit and tasted great. My only complaint was that one of the toppings was so hard that it was difficult to break apart with a fork. I either had to use my hands or risk making a mess trying to cut through it.\n\nOne thing worth noting is that staff seem to clear tables after customers finish eating. Because of that extra service, I'd recommend leaving a tip, even if it's just 10%.\n\nOverall, the dessert was enjoyable and the service was solid, but the experience had a few rough edges.",
      "url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT25WV1RtaGpVbXcxV0ZSNFRVcExWM1kwTTNGb1ZFRRAB!2m1!1s0x0:0x3967ad5bf2fcb228!3m1!1s2@1:CAIQACodChtycF9oOnVWTmhjUmw1WFR4TUpLV3Y0M3FoVEE%7C%7C?hl=en-US",
      "published_label": "2 weeks ago",
      "likes": 0,
      "image_urls": [
        "https://lh3.googleusercontent.com/grass-cs/AABkmLf9omkodXk8ljnb0Whz033r0v_yTx58VANmwSNx_NzHYuJD9RmFFmH1uMeSjaUNcsFauAoFivhmBHrjdNndEICy6pHlSfi-4jnYV0UN0saYwbdstdLxkus37wGvvcyWzZM5d5tn_jxJnSZq=k-no"
      ],
      "owner_response_text": null,
      "owner_response_published_label": null,
      "place_name": "Ministry of Chocolate",
      "place_address": "145 Richmond St W, Toronto, ON M5H 2L2, Canada",
      "place_category": "Chocolate cafe",
      "place_latitude": 43.6497807,
      "place_longitude": -79.3856042,
      "place_data_id": "0x882b3538ce187153:0x3967ad5bf2fcb228"
    },
    {
      "review_id": "Ci9DQUlRQUNvZENodHljRjlvT2xSdllUTjVTVFJmUW1OVGNHOTVXbmgyVW5STlRVRRAB",
      "rating": 5,
      "text": "Really impressed with this place. The food was fresh, colorful, and packed with flavor. The menu was intuitive, and I appreciated how it clearly limited the number of selections per category, making customization easy. If poke keeps expanding like this, I could see it becoming the next big thing in fast-casual dining.",
      "url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2xSdllUTjVTVFJmUW1OVGNHOTVXbmgyVW5STlRVRRAB!2m1!1s0x0:0xa02a34848e087a31!3m1!1s2@1:CAIQACodChtycF9oOlRvYTN5STRfQmNTcG95Wnh2UnRNTUE%7C%7C?hl=en-US",
      "published_label": "2 weeks ago",
      "likes": 0,
      "image_urls": [
        "https://lh3.googleusercontent.com/grass-cs/AABkmLc44Q8ovQmn2Nbz5TGVwjlU_kagfttP-WyYoD8t7yX8kgxo1t-Rigql1WaaMuAyez86ZcRMCEHOqc0UqdSqEC0JxnXcxhSOKwenI_YXOKUJXNlkHNuGrKY1G8RwB4SShZygzvd3Rr59LMVe=k-no"
      ],
      "owner_response_text": null,
      "owner_response_published_label": null,
      "place_name": "Poke Eats Restaurant - Hawaiian Inspired Food & Take Out - Broadview",
      "place_address": "339 Broadview Ave, Toronto, ON M4M 2H1, Canada",
      "place_category": "Hawaiian restaurant",
      "place_latitude": 43.664803,
      "place_longitude": -79.352069,
      "place_data_id": "0x89d4cbceb06a7893:0xa02a34848e087a31"
    },
    {
      "review_id": "Ci9DQUlRQUNvZENodHljRjlvT2pkNE0xa3pZVzlLZVdRMk5saHFjR2RPVEROemVWRRAB",
      "rating": 4,
      "text": "Super affordable and you can customize pretty much everything, which I appreciated. It honestly feels like street food served in a restaurant setting. The food was decent, looked great, and was put together well, but the flavors didn't quite wow me. The grilled rice balls had a nice crispy crust and the skewers were good, but I kept wanting a little more seasoning and punch. Still, for the price, it's hard to complain too much.",
      "url": "https://www.google.com/maps/reviews/data=!4m8!14m7!1m6!2m5!1sCi9DQUlRQUNvZENodHljRjlvT2pkNE0xa3pZVzlLZVdRMk5saHFjR2RPVEROemVWRRAB!2m1!1s0x0:0x319444dc3543ad7c!3m1!1s2@1:CAIQACodChtycF9oOjd4M1kzYW9KeWQ2NlhqcGdOTDNzeVE%7C%7C?hl=en-US",
      "published_label": "2 weeks ago",
      "likes": 0,
      "image_urls": [
        "https://lh3.googleusercontent.com/grass-cs/AABkmLfL1QpR7WEyoSH_Qu-lR8plUnbZcuB06_suDDgg4flgF_jie8rZlRrloAQCd7yavnVkgwpipFXwAbUx0EBFo1R4jERoPE-ihYZq9rquZ5yz192bCMocKf2YxrFVu8MnkLnLAq5q--4cDo_V=k-no",
        "https://lh3.googleusercontent.com/grass-cs/AABkmLdAmJNl2qiwUllsFykmq1I8k9X4GU0z0SuWe_ftFrd05XL5CEbCGnocigurcOy02CqqMI3DMMxOkdW-5XP3wMxSZxk3_KGySp-0pP7WY8DQXfZMtbb6chrwyK0EhIhpAd0vMWvzrJHtQqar=k-no"
      ],
      "owner_response_text": null,
      "owner_response_published_label": null,
      "place_name": "Manpuku Modern Japanese Eatery",
      "place_address": "105 McCaul St, Toronto, ON M5T 2X4, Canada",
      "place_category": "Authentic Japanese restaurant",
      "place_latitude": 43.653698,
      "place_longitude": -79.390967,
      "place_data_id": "0x882b34cf5d1b0781:0x319444dc3543ad7c"
    }
  ],
  "contributor": {
    "contributor_id": "109736708296406538146",
    "name": "K.A",
    "image_url": "https://lh3.googleusercontent.com/a-/ALV-UjWgDSd-336OyI2fxq87o3SPcMEUtaqHSDNyK1ZZVa7SvSSVz3SG4Q=s120-c-rp-mo-ba12-br100",
    "local_guide": true,
    "level": 8,
    "points": 23099,
    "review_count": 529,
    "photo_count": 1418
  }
}
```
