# How to connect Google Maps to OpenClaw (no API keys)

> Connect Google Maps to OpenClaw with ClawLink in one click — 19 tools your AI agent can call from chat via hosted OAuth. No API keys, no manual setup.

Web version: https://claw-link.dev/openclaw/google-maps

The usual route to Google Maps access for OpenClaw is an MCP server you configure and keep running, plus your own OAuth app or API keys. ClawLink gives OpenClaw a more practical Google Maps setup: install one ClawHub skill, connect Google Maps in the browser, and OpenClaw can call real Google Maps actions from any chat surface with no auth, token refresh, or tool wiring to build yourself.

**Start here:** install the ClawLink plugin (`openclaw plugins install clawhub:clawlink-plugin`), pair it in the browser, then connect the app in the ClawLink dashboard. The interactive install prompt is on the web version of this page: https://claw-link.dev/openclaw/google-maps

## Setup

It takes three steps to connect OpenClaw to Google Maps.

1. **Install ClawLink** — add the plugin to OpenClaw once.
2. **Connect Google Maps** — one-click OAuth in the ClawLink dashboard.
3. **Use it from chat** — ask OpenClaw in plain English.

**Alternative for any agent (no plugin needed):** if the OpenClaw plugin route isn't available or doesn't work, any AI agent with shell access can use the ClawLink CLI instead:

```bash
npx -y @useclawlink/cli login          # sign in via browser — no API key to paste
npx -y @useclawlink/cli connect google-maps  # connect Google Maps (browser OAuth)
npx -y @useclawlink/cli actions google-maps  # list available actions
npx -y @useclawlink/cli run google-maps <action> --input '<json>'  # execute (add --confirm for writes)
```

### Install by command

The setup prompt above does all of this in one paste. By hand, it is one install command plus a browser approval:

```bash
openclaw plugins install clawhub:clawlink-plugin
```

Then ask OpenClaw to set up ClawLink. It starts browser pairing and prints an approval link — open it, approve the device, return to the chat, and say `done`. Finally, connect Google Maps in the [ClawLink dashboard](https://claw-link.dev/dashboard) — a one-click OAuth approval, no API keys.

Verify the connection by asking OpenClaw:

> Find "\<place name>" in \<city> using google_maps_text_search, show me the top candidates with their place ids, and once I confirm which one, pull the full details with google_maps_get_place_details.

### Using a different agent?

The OpenClaw plugin is one client of ClawLink's MCP server. Claude Code, Cursor, Codex, or any agent that can run a shell command pairs with the same ClawLink account through the CLI:

```bash
npx -y @useclawlink/cli login
```

`login` opens the same browser approval and stores a credential locally. Once Google Maps is connected in the dashboard, that agent calls the same 19 Google Maps tools over MCP. Full setup for MCP clients and shell agents: [connect apps to any AI agent](https://claw-link.dev/learn/connect-apps-to-any-ai-agent).

## Google Maps MCP for OpenClaw

Looking for a Google Maps MCP server for OpenClaw? ClawLink connects Google Maps to OpenClaw and exposes 19 Google Maps tools your agent can call over [MCP](https://claw-link.dev/learn/what-is-an-mcp-server), with [hosted auth](https://claw-link.dev/learn/oauth-for-ai-agents) and nothing to run or maintain yourself. Using Hermes instead? The [Hermes Google Maps integration](https://claw-link.dev/hermes/google-maps) works the same way.

The usual Google Maps setup is a Cloud project with billing enabled and an API key restricted to the right APIs, and that is genuinely the shape of Maps Platform — which is why almost every answer about agents and Maps starts there. This connection is different: it authorizes through OAuth rather than a key you hold, so there is no project of yours to configure, no billing account to attach, and no key to restrict or rotate. OpenClaw can call the 19 Maps tools below — geocoding, place details, nearby and text search, routes and route matrices, autocomplete, tiles and aerial imagery — from the next message.

## What the OpenClaw Google Maps integration can do

19 Google Maps tools are ready for OpenClaw once the account is connected.

### All 19 Google Maps tools for OpenClaw

| Tool | What it does |
|---|---|
| **Autocomplete** `google_maps_autocomplete` | Returns place and query predictions for text input. Use when implementing as-you-type autocomplete functionality for place searches. Returns up to five predictions ordered by relevance. |
| **Compute route matrix** `google_maps_compute_route_matrix` | Calculates travel distance and duration matrix between multiple origins and destinations using the modern Routes API; supports OAuth2 authentication and various travel modes. |
| **Geocode address with query** `google_maps_geocode_address_with_query` | Tool to map addresses to geographic coordinates with query parameter. Use when you need to convert a textual address into latitude/longitude coordinates using the modern v4beta API. |
| **Geocode destinations** `google_maps_geocode_destinations` | Tool to perform destination lookup and return detailed destination information including primary place, containing places, sub-destinations, landmarks, entrances, and navigation points. |
| **Geocode location** `google_maps_geocode_location` | Tool to convert geographic coordinates (latitude and longitude) to human-readable addresses using reverse geocoding. Use when you need to find the address or place name for a given set of coordinates. |
| **Geocode place** `google_maps_geocode_place` | Tool to perform geocode lookup using a place identifier to retrieve address and coordinates. Use when you need to get detailed geographic information for a specific Google Place ID. |
| **Geocoding API** `google_maps_geocoding_api` | Convert addresses into geographic coordinates (latitude and longitude) and vice versa (reverse geocoding), or get an address for a Place ID. |
| **Geolocate** `google_maps_geolocate` | Tool to determine location based on cell towers and WiFi access points. Use when you need to find the geographic location of a device using network infrastructure data. |
| **Get place details** `google_maps_get_place_details` | Retrieves comprehensive details for a place using its resource name (places/\{place_id\} format). Use when you need detailed information about a specific place. |
| **Get route** `google_maps_get_route` | Calculates one or more routes between two specified locations. Uses various travel modes and preferences; addresses must be resolvable by Google Maps. |
| **Get2d tile** `google_maps_get2d_tile` | Tool to retrieve a 2D map tile image at specified coordinates for building custom map visualizations. Use when you need to download individual map tile images for roadmap, satellite, or terrain views. |
| **Get3d tiles root** `google_maps_get3d_tiles_root` | Tool to retrieve the 3D Tiles tileset root configuration for photorealistic 3D map rendering. |
| **Lookup aerial video** `google_maps_lookup_aerial_video` | Look up an aerial view video by address or video ID |
| **Maps embed API** `google_maps_maps_embed_api` | Generate an embeddable Google Map URL and HTML iframe code |
| **Nearby search** `google_maps_nearby_search` | Searches for places (e.g., restaurants, parks) within a specified circular area, with options |
| **Place photo** `google_maps_place_photo` | Retrieves high quality photographic content from the Google Maps Places database |
| **Text search** `google_maps_text_search` | Searches for places on Google Maps using a textual query (e.g., "restaurants in London" |
| **Render aerial video** `google_maps_render_aerial_video` | Starts rendering an aerial view video for a US postal address |
| **Tiles create session** `google_maps_tiles_create_session` | Create a session token required for accessing 2D Tiles and Street View imagery |

## Example prompts

**Resolve a place properly**

> Find "\<place name>" in \<city> using google_maps_text_search, show me the top candidates with their place ids, and once I confirm which one, pull the full details with google_maps_get_place_details.

**Check travel time before scheduling**

> Use google_maps_get_route to work out driving time from \<origin> to \<destination>, and tell me what time I need to leave to arrive by \<time>.

**Compare several sites at once**

> Use google_maps_compute_route_matrix for these 5 origins and 8 destinations. Map results using originIndex and destinationIndex, ignore any pair with no route, and give me a table of drive times.

**Clean up a list of addresses**

> Geocode each of the addresses above with google_maps_geocode_address_with_query, tell me which ones resolved unambiguously, and flag any that returned a different city than the one written.

## How the Google Maps tools behave

Limits and response quirks taken from the tools' own schemas — the ones that decide whether an answer is right rather than merely returned.

- **Route matrices are capped at 625 elements.** That is 25 origins by 25 destinations. Larger sets have to be chunked, or the call fails with a resource-exhausted error.
- **Matrix results can arrive out of order.** Map them back with `originIndex` and `destinationIndex` rather than by position, or durations get attributed to the wrong pairs.
- **Not every matrix pair has a route.** Only elements whose condition says a route exists are usable; the rest are placeholders and must be filtered out.
- **Autocomplete returns at most five predictions.** They are ordered by relevance, so a generic query may not surface the place you meant. Adding a city is the fix.
- **Place ids are the stable handle.** Resolve a name to a place id with search or autocomplete, then use `google_maps_get_place_details` against that id. Re-searching by name each time is how an agent silently changes which place it is talking about.
- **Geocoding has several entry points.** There are separate tools for addresses, locations, places, and destinations; picking the one that matches your input shape gives better results than forcing everything through one.

## ClawLink vs. building it yourself

The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Google Maps working from chat.

| | Manual | ClawLink |
|---|---|---|
| **Connection flow** | Register a Google Maps app, configure redirect URLs, manage consent details, and reconnect users when auth settings drift. | Users connect Google Maps through the hosted browser flow and ClawLink keeps the token lifecycle out of your app code. |
| **Ongoing maintenance** | You own refresh logic, permission debugging, environment config, and every provider-specific edge case for Google Maps. | ClawLink handles the repetitive integration plumbing so your team can focus on the workflow instead of the infrastructure. |
| **Agent usability** | You still need to expose the right Google Maps actions to the runtime in a format your agent can reliably use. | 19 tools for Google Maps are already exposed through ClawLink, so the agent can read and act from chat immediately. |

## ClawLink vs. Composio

Composio also exposes Google Maps to AI agents. It is developer infrastructure: Python and TypeScript SDKs, an MCP server, and a catalog past 1,000 apps, aimed at teams shipping agent products. ClawLink is built for OpenClaw users instead. You install the plugin once, connect Google Maps in the browser, and the 19 tools above work from chat. There is no SDK, no config file, and no API key handling. Choosing between them? Read the full [Composio alternatives](https://claw-link.dev/hub/composio-alternatives) comparison.

### OpenClaw installed the Google Maps skill but can't call the tools
The ClawHub skill teaches OpenClaw about Google Maps, but the calls run through the ClawLink plugin and your connected account. Make sure Google Maps is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

### Connection succeeds but no tools appear
Reconnect Google Maps from the dashboard, then start a fresh chat if the runtime still has the old tool catalog loaded.

### "Tool schema not loaded yet" error when calling Google Maps tools
Google Maps tool schemas load on demand the first time a tool runs and are cached after that, so this error usually clears on its own: wait a few seconds and retry the same request. If every Google Maps call keeps failing with it in a fresh chat, reconnect from the dashboard, and contact support if it still persists — that pattern points to a configuration problem on our side, not something you can fix by reconnecting again.

### Google Maps returns 403 or "permission denied" on one action while others work
Two usual causes. The connected account may not have access to the specific workspace, inbox, store, or project in the request — check that first. If access looks right, the agent may have sent a placeholder value (like "YOUR_ID" or an example id from documentation) instead of a real one: ask it to run a list or search tool first, then retry the action with a real id from those results. Most failures at this stage are one of these two, not ClawLink bugs.

### Google Maps returns a permission or quota error although the account is connected
First, the thing most search results get wrong for this setup: you are not being asked to fix a Google Cloud project, enable an API, or attach billing, because there is no project of yours in this path. Advice to check your key restrictions or enable the Places API is written for the key-based route. What does cause errors here is usually the request rather than the authorization. Route matrix calls are capped at 625 elements, so a large origin-by-destination grid fails with a resource-exhausted error until it is chunked into smaller batches. Requests for places that do not resolve, or coordinates outside coverage, return empty rather than erroring. If every Maps call fails rather than one shape of call, the connection itself is the thing to reconnect from the dashboard.

Ask the agent to diagnose it:

```text
Tell me exactly which Maps tool you called and with what arguments, including how many origins and destinations if it was a route matrix. Quote the exact error. Do not retry yet.
```

### The route matrix comes back incomplete or in the wrong order
Both are documented behaviours rather than faults, and an agent that does not know them will misreport results. The response elements are not guaranteed to arrive in the order you supplied, so results must be mapped back using the origin and destination indexes rather than by position — an agent that zips the arrays naively will attribute the wrong duration to the wrong pair. Separately, the matrix may be incomplete: only elements whose condition indicates a route exists are usable, and pairs with no viable route are present but meaningless. Ask the agent to filter on that condition and to map by index explicitly.

Ask the agent to diagnose it:

```text
Show me the raw route matrix response. Confirm you mapped results using originIndex and destinationIndex, and tell me which pairs had no route.
```

### Place lookups return the wrong location or nothing at all
Almost always ambiguity in the query rather than a failure. A place name without a city or region matches whichever candidate ranks highest globally, which is how an agent ends up reporting a restaurant on another continent. The reliable pattern is two-stage: resolve first with autocomplete or text search to get a place id, confirm the candidate is the right one, and then fetch details against that id. Note that autocomplete returns at most five predictions ordered by relevance, so a very generic query may simply not include the place you meant among them — adding a city usually fixes it immediately.

### OAuth finished in the browser but the account is still missing
Try reconnecting Google Maps and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

### Is there a OpenClaw Google Maps integration?
Yes. ClawLink is the fastest way to connect OpenClaw to Google Maps: link your Google Maps account once in the browser and OpenClaw can call the Google Maps API through 19 ready-made tools — no custom code or token handling.

### How do I add Google Maps to OpenClaw with ClawLink?
Paste the setup prompt from this page into OpenClaw. It installs the ClawLink Google Maps skill from ClawHub, then you click Connect in the dashboard to authorize Google Maps. OpenClaw calls the tools from the next message — no config files or API keys to manage.

### How long does it take to connect Google Maps to OpenClaw?
About two minutes. Sign in, click Connect next to Google Maps in the dashboard, authenticate, and OpenClaw can use it from the next chat message.

### Why use ClawLink instead of wiring Google Maps up myself?
The alternative to ClawLink is usually manual OAuth app setup plus your own token handling, permission troubleshooting, and tool plumbing for OpenClaw. That is fine if you want to build and maintain the integration yourself. Most teams just want Google Maps working from chat.

### Do I need a Google Cloud project, an API key, and billing enabled?
No, and this is worth stating plainly because the most common answer to this question says otherwise. Maps Platform normally works through an API key tied to a project with a billing account, which is why guides tell you to enable the Places and Routes APIs, create a key, and restrict it. This integration authorizes over OAuth instead, so you approve access in the browser and there is no key on your side to create, restrict, or leak, and no billing account of yours attached to the calls. If you have read that a connected agent still needs its own configured project and quotas, that is accurate for the key-based route and not for this one.

### How is this different from Google's own Maps MCP options?
Google offers its own managed paths for giving a model access to Maps data, and if Maps is the only thing your agent needs, using Google's own route is a perfectly sensible choice. The structural difference here is that these tools sit alongside every other integration you have connected, under one pairing step and one place to revoke access. That matters for the workflows that are not really about Maps — enriching a CRM record with a verified address, checking travel time before scheduling a calendar event, adding location context to a support ticket — because the agent already holds those other connections.

### What can it actually do — is it just addresses?
Geocoding is the smallest part of it. Beyond converting addresses to coordinates and back, the toolset covers place details and photos, nearby search and text search, autocomplete predictions, single routes and multi-origin route matrices, geolocation, and map imagery including 2D tiles, 3D tiles, and aerial video lookups. In practice the two most useful families for agents are place resolution — turning a vague name into a real place id with real details — and the routing tools, which answer distance and duration questions properly rather than by estimating.

### Is it safe to connect Google Maps to an AI agent?
The risk profile here is unusually mild compared with most integrations, because Maps is a read-oriented data service rather than something holding your private records — these tools look up places and compute routes, they do not read your mail or write to your accounts. There is no API key of yours that could leak, which removes the most common Maps-specific failure, where a key ends up in a repository and gets abused against someone's billing account. The ordinary care still applies: the connection can be revoked from the ClawLink dashboard whenever you want.

### OpenClaw installed the Google Maps skill but can't call the tools
The ClawHub skill teaches OpenClaw about Google Maps, but the calls run through the ClawLink plugin and your connected account. Make sure Google Maps is connected in the dashboard, then start a fresh chat so OpenClaw reloads the tool catalog. If OpenClaw runs as a persistent gateway, restart it so the new tools register.

## Related

- [Connect Google Super](https://claw-link.dev/openclaw/google-super) — Unified access to multiple Google services in one integration
- [Connect Google Drive](https://claw-link.dev/openclaw/google-drive) — Upload, search, and manage files
- [Google Analytics](https://claw-link.dev/openclaw/google-analytics) — Connect Google Analytics properties through hosted Google OAuth
