All integrations

Google Analytics

DATA · DATA & ANALYTICS

Core, realtime, and funnel reports for the properties that person can see.

Connecting Google Analytics in practice

The Analytics Data API charges tokens rather than requests, and a standard property gets 200,000 core tokens a day and 40,000 an hour — of which a single Cloud project may spend only 14,000 per property per hour, so a second integration on the same property competes for the same budget. Server errors are metered too: ten from your project against one property in an hour is itself an exhausted quota.

Scopes that draw scrutiny

  • https://www.googleapis.com/auth/analytics.readonly Reads every Analytics property the authorizing user can reach, not the one property the agent was pointed at.
  • https://www.googleapis.com/auth/analytics.edit What the Admin API requires for any create, patch, delete or archive call, so a configuration agent holding it can archive a property.
  • https://www.googleapis.com/auth/analytics The read-and-write scope runReport accepts alongside analytics.readonly, and the wider of the two for the same report.

Rate limits

  • Data API core, standard property: 200,000 tokens per day, 40,000 tokens per hour, and 14,000 tokens per project per property per hour.
  • Data API core, Analytics 360 property: 2,000,000 tokens per day, 400,000 per hour, and 140,000 per project per property per hour.
  • Concurrent core requests: 10 per standard property, 50 per Analytics 360 property.
  • Core server errors: 10 per project per property per hour on a standard property, 50 on Analytics 360.
  • 120 potentially thresholded requests per property per hour. The Realtime and Funnel categories carry the same figures as Core.
  • Admin API: 1,200 requests per minute, 600 per minute per user, 600 writes per minute, 180 writes per minute per user, and 500 user deletions per day per property.

Worth knowing

  • Requests that touch userAgeBracket, userGender, brandingInterest, audienceId or audienceName count against the thresholded-request quota and can come back with rows withheld for privacy, so a report succeeds and is still empty.
  • Ask for returnPropertyQuota on a Data API request to read the remaining token balance back in the response; there is no separate quota endpoint to poll.
  • Because failures are metered, a retry loop on a malformed query burns the server-error quota and locks the agent out of a property it could otherwise read.
  • Google notes that quota limits may be throttled for projects that violate the Analytics Terms of Service, so the published figures are a ceiling rather than a guarantee.

Checked against Data API v1 quotas (2026-09-29), Admin API quotas (2026-09-29), properties.runReport authorization scopes (2026-09-29)

Acts as the person, not as itself

Each user connects their own account. Every call carries both identities — the agent and the person it is acting for — so the agent can never reach past what that individual can already do.

Credentials never touch the agent

Tokens live in the vault and attach server-side at call time. The agent holds a session, not a secret, and revoking access does not mean rotating a key.

Every call on the record

Who asked, which agent acted, which action ran, and the verdict that let it through — one audit trail across every integration, not one per vendor.

What an agent can do

Each action is granted on its own. An agent allowed to read is not thereby allowed to write, and the scope beside each row is what the acting user must have connected for it to run at all.

googleanalytics_get_v1alpha_by_nameREAD

Fetch a v1alpha resource by its full resource name: an audience list (properties/{property}/audienceLists/{id}), a recurring audience list (.../recurringAudienceLists/{id}) or a report task (.../reportTasks/{id}) via GET /v1alpha/{+name}

analytics.readonly
googleanalytics_get_v1alpha_by_parent_audiencelistsREAD

List a property's v1alpha audience lists (cursor pagination via pageToken/pageSize) via GET /v1alpha/{+parent}/audienceLists

analytics.readonly
googleanalytics_get_v1alpha_by_parent_recurringaudiencelistsREAD

List a property's recurring audience lists -- configurations that produce a fresh audience list daily via GET /v1alpha/{+parent}/recurringAudienceLists

analytics.readonly
googleanalytics_get_v1alpha_by_parent_reporttasksREAD

List a property's report tasks (cursor pagination via pageToken/pageSize) via GET /v1alpha/{+parent}/reportTasks

analytics.readonly
googleanalytics_get_v1beta_by_nameREAD

Fetch a v1beta resource by its full resource name: an audience export's configuration and state (properties/{property}/audienceExports/{id}) or a property's report metadata -- its available dimensions and metrics (properties/{property}/metadata) via GET /v1beta/{+name}

analytics.readonly
googleanalytics_get_v1beta_by_parent_audienceexportsREAD

List a property's audience exports, newest first (cursor pagination via pageToken/pageSize) via GET /v1beta/{+parent}/audienceExports

analytics.readonly
googleanalytics_post_v1alpha_by_name_queryWRITE

Read the users out of a finished v1alpha audience list by its full resource name (properties/{property}/audienceLists/{id}) via POST /v1alpha/{+name}:query

analytics
googleanalytics_post_v1alpha_by_parent_audiencelistsWRITE

Create an audience list -- the v1alpha form of an audience export snapshot; poll it with the get tool and read rows with the query tool once it is ready via POST /v1alpha/{+parent}/audienceLists

analytics
googleanalytics_post_v1alpha_by_parent_recurringaudiencelistsWRITE

Create a recurring audience list, which produces a new audience list for the audience each day via POST /v1alpha/{+parent}/recurringAudienceLists

analytics
googleanalytics_post_v1alpha_by_parent_reporttasksWRITE

Create a report task -- an asynchronous report run; fetch the task by name once its state is ACTIVE to read the report via POST /v1alpha/{+parent}/reportTasks

analytics.readonly
googleanalytics_post_v1alpha_by_property_chatWRITE

Ask a natural-language question about a property's analytics data (Google's alpha chat endpoint) via POST /v1alpha/{+property}:chat

analytics.chatbot.read
googleanalytics_post_v1alpha_by_property_runfunnelreportWRITE

Run a GA4 funnel report, showing user drop-off across a sequence of steps via POST /v1alpha/{+property}:runFunnelReport

analytics.readonly
googleanalytics_post_v1alpha_by_property_runreportWRITE

Run a customized GA4 report through the v1alpha surface (same shape as the v1beta runReport) via POST /v1alpha/{+property}:runReport

analytics.readonly
googleanalytics_post_v1beta_by_name_queryWRITE

Read the exported users out of a finished audience export by its full resource name (properties/{property}/audienceExports/{id}) via POST /v1beta/{+name}:query

analytics
googleanalytics_post_v1beta_by_parent_audienceexportsWRITE

Create an audience export -- an asynchronous snapshot of the users in a GA4 audience; poll it with the get tool and read rows with the query tool once it is ready via POST /v1beta/{+parent}/audienceExports

analytics
googleanalytics_post_v1beta_by_property_batchrunpivotreportsWRITE

Run up to five GA4 pivot reports for the same property in one batch call via POST /v1beta/{+property}:batchRunPivotReports

analytics.readonly
googleanalytics_post_v1beta_by_property_batchrunreportsWRITE

Run up to five GA4 reports for the same property in one batch call via POST /v1beta/{+property}:batchRunReports

analytics.readonly
googleanalytics_post_v1beta_by_property_checkcompatibilityWRITE

Check which dimensions and metrics can be added to a report request without breaking its compatibility rules via POST /v1beta/{+property}:checkCompatibility

analytics.readonly
googleanalytics_post_v1beta_by_property_runpivotreportWRITE

Run a GA4 pivot report, whose pivots describe visual layout beyond what a plain report expresses via POST /v1beta/{+property}:runPivotReport

analytics.readonly
googleanalytics_post_v1beta_by_property_runrealtimereportWRITE

Run a realtime GA4 report over event data from the last 30 minutes (up to 60 with Analytics 360) via POST /v1beta/{+property}:runRealtimeReport

analytics.readonly
googleanalytics_post_v1beta_by_property_runreportWRITE

Run a customized GA4 report: pick dimensions, metrics, date ranges and filters in the request body and get back an aggregated row set for one property via POST /v1beta/{+property}:runReport

analytics.readonly

Put Google Analytics behind one governed endpoint.

Same permissions, same audit trail, whatever else you connect next.