# Search Google Maps places by keyword and location

Returns the Google Maps places that match a search around a point, with address, rating, phone and website. Use it to find local businesses and their place IDs.

Tool `google.serp.maps` 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.serp.maps/calls \
  -H "Authorization: Bearer $VOXORIA_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"input":{"query":"coworking space","viewport":"@30.2672,-97.7431,14z"}}'
```

Python:

```python
import os

import httpx

response = httpx.post(
    "https://api.voxoria.ai/v1/tools/google.serp.maps/calls",
    headers={"Authorization": f"Bearer {os.environ['VOXORIA_API_KEY']}"},
    json={
        "input": {
            "query": "coworking space",
            "viewport": "@30.2672,-97.7431,14z",
        },
    },
    timeout=60,
)
print(response.json())
```

TypeScript:

```ts
const response = await fetch("https://api.voxoria.ai/v1/tools/google.serp.maps/calls", {
  method: "POST",
  headers: {
    Authorization: `Bearer ${process.env.VOXORIA_API_KEY}`,
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    "input": {
      "query": "coworking space",
      "viewport": "@30.2672,-97.7431,14z",
    },
  }),
});
console.log(await response.json());
```

MCP (`tools/call` params):

```json
{
  "name": "call_tool",
  "arguments": {
    "tool": "google.serp.maps",
    "input": {
      "query": "coworking space",
      "viewport": "@30.2672,-97.7431,14z"
    }
  }
}
```

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 |
| --- | --- | --- | --- | --- |
| `query` | string | Yes |  | What to look for on the map, such as "coffee shops in Austin, TX". |
| `viewport` | string | No |  | Center and zoom of the map to search, written as @latitude,longitude,zoomz as in a Google Maps address, such as "@30.2672,-97.7431,14z". Matches `^@-?[0-9]+(\.[0-9]+)?,-?[0-9]+(\.[0-9]+)?,[0-9]+(\.[0-9]+)?z$`. |
| `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. |
| `page` | integer | No | `1` | Page of results. At least 1. |

## Output

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

### results

A list of rows. Always present, possibly empty.

| Field | Type | Required | Description |
| --- | --- | --- | --- |
| `position` | integer | Yes | Rank among the places found, starting at 1. |
| `title` | string | Yes | Name of the business or place. |
| `address` | string | No |  |
| `latitude` | number | No |  |
| `longitude` | number | No |  |
| `rating` | number | No | Average review rating, out of 5. |
| `review_count` | integer | No |  |
| `price_range` | string | No | Typical spend per person as Google shows it, a range with its currency symbol. Not parsed. |
| `category` | string | No | Kind of business, such as "Coffee shop". |
| `phone` | string | No | Phone number as Google shows it. |
| `website` | string | No | Address of the place's own website. |
| `image_url` | string | No | Address of the place's thumbnail image. |
| `cid` | string | No | Google's customer ID of the place, in decimal digits. |
| `place_id` | string | No | Google's place ID of the place. |

## Example output

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

```json
{
  "results": [
    {
      "position": 1,
      "title": "Dwell Coworking Downtown Austin",
      "address": null,
      "latitude": 30.2597047,
      "longitude": -97.732563,
      "rating": 4.9,
      "review_count": 11,
      "price_range": null,
      "category": null,
      "phone": null,
      "website": null,
      "image_url": null,
      "cid": "8698911662649447527",
      "place_id": "ChIJgx-4eTm1RIYRZxS5gBG-uHg"
    },
    {
      "position": 2,
      "title": "Firmspace Austin",
      "address": null,
      "latitude": 30.2659316,
      "longitude": -97.7491087,
      "rating": 4.9,
      "review_count": 99,
      "price_range": null,
      "category": null,
      "phone": null,
      "website": null,
      "image_url": null,
      "cid": "5159563162888948973",
      "place_id": "ChIJKabdEQ-1RIYR7cwvMFxzmkc"
    },
    {
      "position": 3,
      "title": "Trick Hat Workway",
      "address": null,
      "latitude": 30.267407799999997,
      "longitude": -97.7542058,
      "rating": 4.8,
      "review_count": 16,
      "price_range": null,
      "category": null,
      "phone": null,
      "website": null,
      "image_url": null,
      "cid": "3904465725510140700",
      "place_id": "ChIJN1ctt_O1RIYRHEO4_uNyLzY"
    }
  ]
}
```
