ClawLink

How to connect Google Analytics to Hermes Agent

Connect Google Analytics to Hermes Agent with no Google Cloud project, no OAuth client, and no service account JSON. Hosted OAuth, 67 GA4 tools, and fixes for the GA4 errors agents actually hit.

Get started for free
Hermes Agent
Hermes Agent
ClawLink
ClawLink
Google Analytics
Google Analytics
Google AnalyticsOAUTH2MCP

Connect Google Analytics properties through hosted Google OAuth. Once connected, Hermes Agent can read and act on Google Analytics from chat — pairing, token refresh, and tool wiring handled for you.

67 tools

Most guides for giving Hermes Agent Google Analytics access start with registering your own OAuth app or pasting API keys into env files, then leave the token refresh and tool wiring to you. ClawLink gives Hermes a more practical Google Analytics setup: pair once in the browser and your always-on Hermes agent can act on Google Analytics for you, reading and doing real work on your behalf with no auth, token refresh, or tool wiring to build yourself.

Copy this prompt into Hermes to install the plugin and pair your account.

Prompt for Hermes
Set up ClawLink for Hermes and tell me when it's ready.

1. Install the plugin:
hermes plugins install ClawLink-HQ/hermes-plugin --enable

2. Start pairing. It prints an approval link, so show me the link and stop, don't wait:
hermes clawlink begin

3. I'll approve it in my browser, then reply "approved".

4. When I say approved, finish setup:
hermes clawlink finish

5. Then run `hermes clawlink test` and tell me whether ClawLink is ready.

Setup

It takes three steps to connect Hermes to Google Analytics.

  1. 1

    Install and pair

    Install the ClawLink plugin, then pair Hermes with a one-time browser approval:

    hermes plugins install ClawLink-HQ/hermes-plugin --enable
  2. 2

    Connect Google Analytics

    One-click OAuth in the dashboard.

  3. 3

    Use it from chat

    Ask Hermes Agent: "What can you do with Google Analytics?"

The whole pairing handshake, start to finish. Run these once, then connect Google Analytics in the dashboard:

hermes plugins install ClawLink-HQ/hermes-plugin --enable
hermes clawlink begin     # approve the link in your browser
hermes clawlink finish
hermes clawlink test

hermes clawlink test is the one that tells you pairing actually worked. If it fails, run hermes clawlink begin again for a fresh link: approval links expire. Start a new chat after connecting so Hermes reloads its tool catalog.

Using a different agent?

The Hermes 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:

npx -y @useclawlink/cli login

login opens the same browser approval and stores a credential locally. Once Google Analytics is connected in the dashboard, that agent calls the same 67 Google Analytics tools over MCP. Full setup for MCP clients and shell agents: connect apps to any AI agent.

Google Analytics MCP for Hermes

Looking for a Google Analytics MCP server for Hermes Agent? ClawLink connects Google Analytics to Hermes Agent and exposes 67 Google Analytics tools your agent can call over MCP, with hosted auth and nothing to run or maintain yourself. Using OpenClaw instead? The OpenClaw Google Analytics integration uses the same hosted Google provider and the same 67 tools, but OpenClaw installs and activates ClawLink through its own skill flow rather than the Hermes pairing commands.

Hermes Agent ships no Google Analytics integration of its own, so every documented route starts by making you a Google Cloud administrator. Google's own Analytics MCP server wants a Cloud project, the Analytics Data and Admin APIs enabled by hand, an OAuth client or a service account, a downloaded JSON key, the gcloud CLI, and then a Property Access Management step inside GA4 to give that robot account Viewer rights. It also runs locally over stdio, so an always-on Hermes agent on a server or a phone cannot reach it at all. Wiring Google up as a plain MCP server instead runs into a problem Hermes documents itself: some Google servers reject the dynamic client registration step that bare auth: oauth depends on. ClawLink avoids all of it by owning the verified Google OAuth app. You approve Google's own consent screen in the browser, and Hermes reads the properties your Google account can already see from the next message.

What the Hermes Agent Google Analytics integration can do

67 Google Analytics tools are ready for Hermes Agent once the account is connected. The 30 below are the ones people reach for most; your agent can call all 67.

30 of 67 Google Analytics tools for Hermes

ToolWhat it does
Batch run reports google_analytics_batch_run_reportsRun multiple GA4 reports in a batch
Check compatibility google_analytics_check_compatibilityCheck dimension and metric compatibility
Get metadata google_analytics_get_metadataGet GA4 metadata (dimensions and metrics)
Get property google_analytics_get_propertyGet a GA4 property
List account summaries google_analytics_list_account_summariesList GA account summaries
List audiences google_analytics_list_audiencesList audiences in a GA4 property
List data streams google_analytics_list_data_streamsList data streams for a GA4 property
List key events google_analytics_list_key_eventsList key events in a GA4 property
List properties filtered google_analytics_list_properties_filteredList GA4 properties
Run funnel report google_analytics_run_funnel_reportRun a funnel exploration report
Run pivot report google_analytics_run_pivot_reportRun a pivot report in GA4
Run realtime report google_analytics_run_realtime_reportRun a real-time GA4 report
Run report google_analytics_run_reportRun a GA4 report with dimensions and metrics
Update property google_analytics_update_propertyUpdate a GA4 property
Batch run pivot reports google_analytics_batch_run_pivot_reportsReturn multiple pivot reports in a batch for a GA4 property
Get account google_analytics_get_accountRetrieve a single Account by its resource name
Get attribution settings google_analytics_get_attribution_settingsRetrieve attribution configuration for a Google Analytics property
Get audience google_analytics_get_audienceRetrieve a single Audience configuration from a Google Analytics property
Get audience export google_analytics_get_audience_exportGet configuration metadata about a specific audience export
Get audience list google_analytics_get_audience_listGet configuration metadata about a specific audience list
Get custom dimension google_analytics_get_custom_dimensionRetrieve a single CustomDimension by its resource name
Get data retention settings google_analytics_get_data_retention_settingsRetrieve data retention configuration for a Google Analytics property
Get data sharing settings google_analytics_get_data_sharing_settingsRetrieve data sharing configuration for a Google Analytics account
Get google signals settings google_analytics_get_google_signals_settingsRetrieve Google Signals configuration settings for a GA4 property
Get key event google_analytics_get_key_eventRetrieve a Key Event
Get property quotas snapshot google_analytics_get_property_quotas_snapshotRetrieve all property quotas organized by category (corePropertyQuota, funnelPropertyQuota
Get recurring audience list google_analytics_get_recurring_audience_listGet configuration metadata about a specific recurring audience list
Get report task google_analytics_get_report_taskGet report metadata about a specific report task
List accounts v1 beta google_analytics_list_accounts_v1_betaList all Google Analytics accounts accessible by the caller using v1beta API
List adsense links google_analytics_list_adsense_linksList all AdSenseLinks on a property

Try it: find the Google Analytics tool you need

Browse the 30 Google Analytics tools

Click any tool to see exactly what Hermes can do and copy a ready-to-use prompt.

Example prompts

List my Google Analytics account summaries, then run a report on that property for the last 28 days with dimensions date and sessionDefaultChannelGroup and metrics sessions and activeUsers. Show it as a table.

Before building the report, call google_analytics_get_metadata on properties/0/metadata and pick the exact apiName values for the fields I described. Do not guess API names from the labels shown in the GA4 interface.

Run a realtime Google Analytics report on my main property with the dimension country and the metric activeUsers, and tell me how many people are on the site right now.

Compare the last 7 days with the previous 7 days on my main property broken down by sessionSource, and call out any source whose sessions fell more than 20 percent. If Google rejects a dimension and metric pair, drop the exact field the error names and retry instead of asking me.

What the Google Analytics tools actually expect

These are the argument-level rules the GA4 APIs enforce, read from the live tool schemas and confirmed by running the calls. They are the difference between a report that returns and a 400 your agent cannot explain. Two of them fail without erroring at all.

  • The property argument has four different names across the 67 tools, and the reporting tools use the odd one out. The eight report tools, including google_analytics_run_report, want property. Thirty-three list and create tools want parent. Eighteen get tools want name. google_analytics_get_audience alone wants propertyId. All of them take the same properties/123456789 shape, so an agent that carries one call's arguments into the next gets arguments.property is required or arguments.parent is required rather than a hint about the rename.
  • property must be the numeric property id with its prefix, never a measurement ID. properties/123456789 works. A bare 123456789 is rejected with property must match pattern properties/\{property_id\} where property_id is a numeric ID (e.g., 'properties/123456789'), and a G-XXXXXXXXXX measurement ID is a tagging identifier the Data API has never accepted. Have the agent call google_analytics_list_account_summaries and copy a property value from that response verbatim.
  • dimensions and metrics are arrays of objects, not arrays of strings. [\{"name": "country"\}] works; ["country"] fails with Input should be a valid dictionary on parameter \dimensions.0``. This one catches models that have read Google's own MCP server, which takes a looser form, so it is worth stating in the prompt.
  • Ask for the field list instead of letting the agent guess it. google_analytics_get_metadata accepts properties/0/metadata, which returns Google's universal dimension and metric list with both apiName and uiName without touching a real property. GA4 interface labels are not API names, and this is what stops an agent inventing averageEngagementTime when the field is engagementRate.
  • One report takes at most 9 dimensions and 10 metrics. Exceed either and the Data API returns 400 before running anything, and batch reports count each nested request separately. Split the request and join the results on a dimension both halves share, usually date.
  • dateRanges is required for a standard report and must be omitted for a cohort report. Dates accept YYYY-MM-DD or relative values like 7daysAgo and today. Passing dateRanges alongside cohortSpec fails, so the rule runs in both directions.
  • Realtime reports accept only four metrics: activeUsers, eventCount, keyEvents and screenPageViews, over a default window of the last 30 minutes. The realtime tool's own description points at a list_properties tool that is not in this toolkit; use google_analytics_list_account_summaries for property ids.
  • list_account_summaries returns 50 properties by default and 200 at most. If you manage more than 50, an agent that does not page will quietly work from a partial list and tell you a property does not exist. Ask it to keep paging until the response carries no pageToken.
  • Quota is counted in tokens, not requests, and you can read the remaining balance in the same call. Set returnPropertyQuota: true on a report and Google returns the live figures. On a standard property that block reads 200,000 Core tokens per day, 40,000 per hour, 14,000 per project per hour, 10 concurrent requests, and 10 server errors per hour before the property is blocked for that project. Most reports cost 10 tokens or fewer; wide date ranges and complex filters cost more.
  • Seven of the 67 tools cannot run on this connection at all. google_analytics_update_property, google_analytics_create_custom_dimension, google_analytics_create_custom_metric, google_analytics_archive_custom_dimension, google_analytics_create_expanded_data_set, google_analytics_create_rollup_property and google_analytics_provision_account_ticket declare Google's analytics.edit scope, which ClawLink does not request. They return 403 every time. Everything else, including every report, works.
  • Two more tools do not use your Google connection at all. google_analytics_send_events and google_analytics_validate_events are Measurement Protocol calls: they need a measurement_id, an api_secret you create yourself under Admin, Data Streams, Measurement Protocol API secrets, plus a client_id and an events array. Connecting Google Analytics in ClawLink does not supply those, so ask for them explicitly if you want an agent sending events.

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

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

Composio also exposes Google Analytics 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 Hermes Agent users instead. You install the plugin once, connect Google Analytics in the browser, and the 67 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 comparison.

Troubleshooting

Hermes paired but still can't use Google Analytics

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.

Connection succeeds but no tools appear

Reconnect Google Analytics 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 Analytics tools

Google Analytics 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 Analytics 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 Analytics 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.

"The request's dimensions & metrics are incompatible" from Google Analytics

This is the single most common Google Analytics failure in ClawLink: 21 of the 51 real tool errors we have logged. GA4 stores some dimension and metric combinations separately and refuses to query them together, so the pairing is rejected rather than returned empty. The useful part is that Google names the exact field to drop. Asking for the dimension campaignName with the metric screenPageViews returns Please remove screenPageViews to make the request compatible for example, and swapping the metrics returns Please remove campaignName instead. Attribution dimensions such as campaignName, campaignId and defaultChannelGroup are the usual culprits against page and user metrics. Tell your agent to remove the single field the error names and retry, rather than rebuilding the request from scratch. Ignore the hint about demographic dimensions that arrives with this error; it is generic text and it is usually pointing at the wrong cause.

"The dimensions and metrics are incompatible" from google_analytics_check_compatibility

The incompatibility error tells your agent to validate with google_analytics_check_compatibility, and then that tool fails with a 400 on the very combination you are trying to diagnose. It is not broken. Passing an already-incompatible pair makes it error instead of answering. Use it the other way round: send only the metrics you want plus compatibilityFilter: "INCOMPATIBLE", and it returns the full list of dimensions that will not work with them, each with its apiName and description. That is the call that actually tells you what to avoid, and the one to put in the prompt.

"Did you mean keyEvents? Field pageviews is not a valid metric" from Google Analytics

The agent used a Universal Analytics name or a GA4 interface label instead of an API name. The three differ, and the reporting interface never shows the API name. We have logged this with averageEngagementTime, averageUserEngagementDuration, sessionCampaign, sessionGoogleAdsKeywordText and exits, none of which exist in the Data API. Treat Google's suggestion with care, because it is often wrong: pageviews returns Did you mean keyEvents? when the field you actually want is screenPageViews, and exits returns Did you mean sessions? when GA4 simply has no exits metric. The reliable fix is to have the agent call google_analytics_get_metadata with properties/0/metadata first and choose apiName values from that response.

Google Analytics returns no rows and Hermes reports that you have no traffic

This one has no error string, because the call succeeds. A report with a valid property and a valid field list comes back with "rowCount": 0, an empty rows array, and the note Query returned no data for the specified parameters, and an agent reading that will tell you the site had no visitors. Three things produce it. The property genuinely has no data for that window, which is common on a property created for testing or one whose data stream was only just tagged. The date range landed outside the data, so ask for 30daysAgo to today before believing a quiet week. Or the report used a thresholded dimension: userAgeBracket, userGender, brandingInterest, audienceId and audienceName are withheld by Google when a report could identify individuals, and a low-traffic property returns nothing at all for them. Ask the agent to re-run with country or date before concluding the numbers are zero.

"Request had insufficient authentication scopes" (ACCESS_TOKEN_SCOPE_INSUFFICIENT) from Google Analytics

Two distinct causes that need opposite responses. If the tool was an administrative write, it needs Google's analytics.edit scope, which ClawLink does not request; seven of the 67 tools are in that group and reconnecting will never change it. If a report or a list tool fails this way, the grant itself is incomplete. ClawLink requests three Google scopes, which is the condition under which Google shows its granular consent screen with a separate checkbox per permission, and clearing the Analytics box produces exactly this error. Note that Google's Admin API accepts only analytics.readonly or analytics.edit, so the broader analytics permission on its own will read reports but still fail on google_analytics_list_account_summaries. Reconnect from the dashboard and leave every box on Google's consent screen ticked.

"User does not have sufficient permissions for this property" from Google Analytics

Despite the wording this is almost never a permissions problem, and reconnecting is the wrong first move. It is a property id the connected Google account cannot see, usually one the agent invented or copied out of documentation. Ask it to call google_analytics_list_account_summaries and reuse a property value from that response exactly as returned.

"The Google Analytics Data API limits requests to 10 metrics per request" or "limited to 9 dimensions"

A hard Data API limit rather than a ClawLink one, and batch reports count each nested request on its own. Split the work into several calls of at most 9 dimensions and 10 metrics each, then join the results on a dimension they share, usually date. Asking one report to cover everything at once is the usual cause.

"A dateRange is required for non-cohort reports" from Google Analytics

The report went out with no date range. Standard reports need at least one, for example dateRanges: [\{"startDate": "30daysAgo", "endDate": "today"\}]. The exception runs the other way: a cohort report carries its own window in cohortSpec and fails if you also pass dateRanges.

"Connected account is in EXPIRED state" when Hermes calls Google Analytics

The Google grant behind the connection lapsed, usually because the Google password changed, the app was revoked under Third-party apps and services, or the account sat unused long enough for the refresh token to be invalidated. Nothing on the Hermes side fixes it. Reconnect Google Analytics from the ClawLink dashboard and approve the consent screen again, then start a fresh chat.

OAuth finished in the browser but the account is still missing

Try reconnecting Google Analytics and complete the consent flow in the same browser session. Partial OAuth approvals or switching accounts mid-flow can leave the connection incomplete.

FAQ

Is there a Hermes Agent Google Analytics integration?

Yes. ClawLink is the fastest way to connect Hermes to Google Analytics: link your Google Analytics account once in the browser and Hermes Agent can call the Google Analytics API through 67 ready-made tools — no custom code or token handling.

How do I connect Google Analytics to Hermes with ClawLink?

Install the plugin with hermes plugins install ClawLink-HQ/hermes-plugin --enable, then pair once: run hermes clawlink begin, approve the link in your browser, and run hermes clawlink finish. Connect Google Analytics in the dashboard and Hermes can use it from the next message — no config files or API keys to manage.

How long does it take to connect Google Analytics to Hermes Agent?

About two minutes. Sign in, click Connect next to Google Analytics in the dashboard, authenticate, and Hermes Agent can use it from the next chat message.

Why use ClawLink instead of wiring Google Analytics up myself?

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

Do I need a Google Cloud project or a service account to connect Google Analytics to Hermes Agent?

No. That is the requirement every other route imposes, including Google's own Analytics MCP server, which asks you to create a Cloud project, enable the Analytics Data and Admin APIs by hand, create an OAuth client or an impersonable service account, run a gcloud login, add that service account's email to your GA4 property as a Viewer, and point a config file at a credentials JSON on disk. ClawLink owns the verified OAuth app instead. You pair Hermes once, click Connect, approve on Google's consent screen, and ClawLink holds and refreshes the token. There is no Cloud project, no OAuth client, no JSON key on the machine running Hermes, and no Property Access Management step for a robot account.

Which Google Analytics permissions does ClawLink ask for?

Three scopes: https://www.googleapis.com/auth/analytics.readonly, https://www.googleapis.com/auth/analytics and https://www.googleapis.com/auth/userinfo.profile. Because that is more than one non-sign-in scope, Google shows its granular consent screen with a checkbox per permission, and the connection only works if you leave them ticked. ClawLink does not request analytics.edit, so it cannot create, rename or archive properties, custom dimensions or custom metrics. You can review or revoke the grant at any time under Third-party apps and services in your Google account.

Can Hermes Agent change my Google Analytics configuration?

Not through ClawLink today. The 67 tools include GA4 Admin API endpoints that would edit a property, but they declare the analytics.edit scope ClawLink does not request, so they return 403. We confirmed this against a live connection rather than inferring it from the catalog. In practice this integration is reporting and inspection: standard, pivot, funnel and realtime reports, plus reads of property, audience, data stream, key event and link configuration, and field compatibility checks. If you need GA4 configuration writes, that is a real limit of this integration rather than something a reconnect will fix.

How is this different from the official Google Analytics MCP server?

Google's server is open source, labelled experimental, described by Google as available for read requests only, and it runs locally over stdio, which means an always-on Hermes agent on a server or a phone cannot use it at all. Its README documents seven tools. Reaching a first query needs pipx, a Google Cloud project, two manually enabled APIs, an OAuth client or service account you create, and the gcloud CLI. ClawLink exposes 67 tools through a hosted connection with nothing to install or keep running, at the cost of routing calls through our infrastructure rather than your own machine. If you want a local, self-owned setup and are comfortable in the Google Cloud Console, the official server is a reasonable choice.

Hermes paired but still can't use Google Analytics

Pairing is a two-step handshake: run hermes clawlink begin, approve the link in your browser, then run hermes clawlink finish. If you ran finish before approving, or the approval link expired, run hermes clawlink begin again to get a fresh link. Confirm the plugin was installed with --enable, then verify with hermes clawlink test.