Connect and confirm access
Addhttps://ga4.hireotto.com/mcp to your remote MCP-capable AI client, complete the HireOtto sign-in, then authorize Google Analytics separately. Use a Google login that can access the required property. See the GA4 quickstart for the complete flow.
The Free trial, Starter, Pro, and Agency plans include GA4 beta. The trial provides 200 credits or 14 days, whichever comes first; Starter includes 2,000 monthly credits and Pro 5,000. Agency includes unlimited credits and multiple connected profiles. Creating named GA4 connections requires Agency or enabled Enterprise access. Google permissions and API quotas still apply on every plan. See current pricing.
Choose the right tool
Shared inputs
profile_id, supplying null, or supplying a blank value selects default. Surrounding whitespace is removed. Profile IDs cannot contain a colon. Use the same profile for discovery and later property requests. A profile name does not extend the permissions of its Google login.
Use a property ID returned by discovery, not the account ID or a web stream’s G-... measurement ID. PROPERTY_ID below is a placeholder to replace with your discovered property.
Authenticate Google Analytics
Input: optionalprofile_id; default default.
Returns a Google authorization link and identifies the selected profile. Open the link, choose the intended Google login, grant read-only Analytics permission, and finish the connection steps. Return to the AI client and list accounts and properties.
Connect Google Analytics using the default profile. After I finish authorization, list the properties that login can access.
Connect another Google Analytics login using profile client_acme. Keep subsequent discovery and reporting requests on that profile.
List GA4 Accounts and Properties
Input: optionalprofile_id; default default. No property ID is needed.
Returns accounts and properties visible to the connected Google login. Accounts include a name and ID. Properties include a name, ID, type, and parent account name and resource. A property count is also returned. Discovery follows the available result pages; there is no user-supplied row-limit parameter on this tool.
List GA4 accounts and properties for the default profile. Show the account name, account ID, property name, and property ID so I can select the production property.
Get GA4 Property Configuration
Inputs: requiredproperty_id; optional profile_id.
Reads six sections:
- Property details
- Data streams
- Key events
- Google Ads links
- Custom dimensions
- Custom metrics
status and data. A section can return status: error, an HTTP status, a message, and data: null while other sections succeed. An overall successful tool response therefore does not mean every configuration section was read.
Inspect configuration for property PROPERTY_ID. Summarize all six sections and list any failed sections separately. Do not treat a failed key-events or Ads-links read as an empty configuration.
Get GA4 Reporting Metadata
Use metadata to find the actual reporting names available to the property, including custom definitions, before asking for a custom report.include_deprecated to false removes deprecated-name aliases from entries. It does not discard an entire field merely because it has a deprecated alias. Prefer the current API name when building requests.
Search metadata for property PROPERTY_ID for landing-page fields. Show current API names and descriptions, with a limit of 100 per list.
Check GA4 Report Compatibility
For property PROPERTY_ID, check whether sessionDefaultChannelGroup can be combined with sessions and activeUsers. Return compatible fields. Do not run the report yet.
Run GA4 Report
Use this for historical acquisition, page, event, and other supported Core reports. Dates, dimensions, and metrics come from your request; HireOtto does not select a default report or date window for you.Parameters
Request fields
Use camelCase insiderequest_json and snake_case for the tool’s outer parameters.
property_id. A property value inside the JSON does not override it. See Google’s Core report request reference for field shapes and restrictions. Support for a request object does not imply support for separate pivot, funnel, audience-export, or batch-report tools.
Dates are inclusive. Standard dates can be YYYY-MM-DD, NdaysAgo, yesterday, or today; relative dates use the property’s reporting timezone. Up to four date ranges are supported. For 28 complete days, use 28daysAgo through yesterday; ending at today includes the current partial day. See date-range rules.
Example: acquisition over 28 complete days
For property PROPERTY_ID, check the requested fields, then show sessions and active users by session default channel group for the last 28 complete days. Sort by sessions descending and return both inline rows and a CSV.
28daysAgo to yesterday and another from 56daysAgo to 29daysAgo. Keep date-range labels in the results and calculate changes from matching rows. An absent row or zero prior value is not a reliable percentage-growth calculation.
Collection, display, and export are separate limits
The report collects up tomax_rows, or the lower request_json.limit when supplied. It then displays at most inline_limit and exports at most export_limit from those collected rows.
For example, with defaults and a 60,000-row result, HireOtto collects at most 10,000 rows, shows at most 200 inline, and can export at most those 10,000 collected rows. The 50,000-row export default does not cause an additional 40,000 rows to be collected.
To request up to 60,000 rows, set both max_rows and export_limit to 60000 and remove any lower request limit. This still does not guarantee 60,000 matching rows or an unthrottled response.
Read coverage before interpreting the result
truncated: false does not guarantee the inline preview or CSV contains every collected row. Check those output caps separately. With a nonzero offset, earlier rows are intentionally omitted even if no later rows remain.
The CSV contains flattened dimension and metric rows, not a separate metadata or totals appendix. Keep metadata and coverage notes with the exported file. Report metric values may arrive as strings; parse them numerically before calculating ratios. Do not treat the sum of a limited preview—or a sum of users across overlapping groups—as an account-wide total. Use returned report aggregates when requested and appropriate.
Run GA4 Realtime Report
Use realtime for a recent-activity check, not a historical report or a replacement for browser-based tracking validation.Parameters
max_rows parameter and does not automatically collect subsequent result pages. Use request_json.limit to control the response from Google; if omitted, Google defaults to 10,000 rows. A larger response still cannot make the CSV exceed HireOtto’s 10,000-row realtime export cap.
The JSON accepts realtime dimensions, metrics, dimensionFilter, metricFilter, limit, metricAggregations, orderBys, returnPropertyQuota, and minuteRanges. Quota information is requested by default. The outer property ID determines the property.
Time window and field boundaries
WithoutminuteRanges, the report uses the last 30 minutes. Standard properties can query that 30-minute window; Analytics 360 properties can query up to 60 minutes. Google allows up to two minute ranges. A range defaults to startMinutesAgo: 29 and endMinutesAgo: 0. Realtime rejects dateRanges; use the standard report for dates. See Google’s realtime request reference.
Realtime uses a different field set from Core reporting. Examples include country, deviceCategory, eventName, minutesAgo, and streamId, with metrics such as activeUsers or eventCount. Registered user-scoped custom dimensions are supported; event-scoped custom dimensions and custom metrics are not. Use the realtime field reference, not a Core compatibility result, to select realtime fields.
Example: recent events by stream
For property PROPERTY_ID, show event counts by event name and stream ID for the last 30 minutes. Return a summary and CSV. State how many rows Google reports, how many were returned, and how many are shown inline.
row_count, returned_rows, inline_row_count, and a window note, but no Core-style truncated flag. Compare the counts yourself. A realtime snapshot changes as new activity arrives and older activity leaves the window; repeated calls are not a stable historical export.
Output modes and export failures
rows are expected even when a file exists. Confirm the export result and link before telling someone the download is ready. An export failure is not proof that Google returned no data. Retry with a smaller request or use summary output to inspect the report without requesting a file.
Download signed exports before expiry. Rerunning a report generates a new result, which may differ from the original. Treat export links and downloaded Analytics data as sensitive.
Get Billing Status
This shared utility takes no parameters and reads the current HireOtto plan, billing status, period or trial dates, credits used and remaining, unlimited-credit status, and enabled features. It does not change a subscription and does not require a GA4 property ID.Show my current HireOtto plan, remaining credits, and whether GA4 and multiple connected profiles are enabled.
Failures and interpretation limits
Practical review workflow
List the properties I can access and wait for me to choose one. For that property, inspect measurement configuration and flag failed sections. Find the relevant reporting fields, check Core compatibility, then retrieve a small 28-complete-day acquisition report. Keep raw metrics and coverage counts visible. If the report is correct, prepare a larger CSV with explicit collection and export limits. Do not change Analytics or any advertising account.