Before you start
You need:- HireOtto’s GA4 server connected at
https://ga4.hireotto.com/mcp - A Google login with access to the GA4 property
- The property ID you intend to query
- A reporting question with a date range, breakdown, measures, and output requirement
List the GA4 accounts and properties available to my connected Google login. Return each property name and property ID. Do not run a report yet.
Use this reporting workflow
1. Write the reporting brief
Define the question before selecting fields. Include:- Property: property ID and, for Agency users, the named profile
- Period: complete start and end dates
- Breakdown: the dimensions that define each row
- Measures: the metrics that answer the question
- Filters: the traffic, events, pages, countries, or campaigns to include or exclude
- Comparison: the previous period, previous year, or another explicit range
- Sort and row cap: how results should be ranked and how much detail to return
- Output: inline review, CSV export, or both
yesterday avoids mixing a partial current day with completed days. GA4 interprets relative dates in the property’s time zone.
2. Find the property’s current fields
Use metadata before asking for a custom report. Metadata returns the dimensions and metrics available to that property, including registered custom definitions.For GA4 property 123456789, find dimensions and metrics related to landing pages, sessions, engagement, key events, source, medium, and campaign. Return the API name, UI name, category, and description. Exclude deprecated aliases.
3. Check field compatibility
Dimensions and metrics can exist in GA4 but still be incompatible in the same Core report. Check the exact set before running the report:Check whether landingPagePlusQueryString can be reported with sessions, engagedSessions, engagementRate, and keyEvents for property 123456789. Return only compatible fields. Do not run the report.
4. Run a small review report
Ask for a modest row cap andsummary output first. This makes it easier to verify the property, date range, field names, filters, and ordering before creating a larger export.
For property 123456789, report sessions, engaged sessions, engagement rate, and key events by landing page for the previous 28 complete days. Exclude blank landing pages, order by sessions descending, return the first 50 rows inline, and do not change GA4.
RunReportRequest in request_json. Common request fields are:
request_json. The outer property_id selects the property; a property field inside the request is ignored.
5. Review coverage before interpreting the result
Check these fields in the response:row_count: rows available from GA4 for the requestreturned_rows: rows HireOtto collectedinline_row_count: rows shown directly in the AI clienttruncated: whether the collection stopped before all available rows were retrievedmetadata: report time zone, currency, thresholding, sampling, schema restrictions, and high-cardinality signals when GA4 returns themproperty_quota: remaining GA4 Data API quota information
inline_limit only controls how many collected rows appear in the conversation. It does not increase collection.
6. Export after the report is correct
When the review report is correct, rerun it with the required collection and export limits:Rerun the approved landing-page report for property 123456789. Collect up to 25,000 rows, return a 100-row inline summary, and include a CSV export. Tell me if GA4 has more rows than were collected.
Standard report parameters and defaults
request_json.limit is lower than max_rows, the request limit becomes the effective collection cap. Each GA4 page contains at most 10,000 rows, and HireOtto continues paging until it reaches the effective cap or the available result ends.
No CSV is created when GA4 returns no rows. In csv_only mode, an empty inline row list is expected even when the CSV contains data.
Practical report patterns
Compare acquisition periods
Use separate, equal, complete date ranges and label them clearly:For property 123456789, compare sessions, engaged sessions, key events, and session key-event rate by session source, medium, and campaign for 28daysAgo through yesterday versus 56daysAgo through 29daysAgo. Check metadata and compatibility first. Order each result by sessions descending and return the top 100 rows plus CSV.
Review landing-page quality
Find the exact property-supported API names for landing page, sessions, engagement rate, and key events. Check compatibility. Then report the previous 28 complete days by landing page, exclude blank values, order by sessions descending, and flag pages with meaningful traffic but weak downstream outcomes. Show evidence separately from recommendations.
Investigate an event
For property 123456789, report event count, total users, and key events by event name for the previous 30 complete days. Filter to events containing lead, order by event count descending, and include totals. Return the first 100 rows inline.
Build a campaign export
For property 123456789, find and verify the session campaign, source, and medium dimensions and compatible session, key-event, and revenue metrics. Report the previous calendar month, order by sessions descending, collect up to 50,000 rows, export CSV, and state whether the result is truncated or subject to thresholding.
Filters and ordering
UsedimensionFilter for dimensions and metricFilter for metrics. Do not place a metric in a dimension filter or a dimension in a metric filter.
For a single exact dimension value, a request can use:
Read and write scope
This workflow can read:- Reporting metadata for the selected property
- Core report rows, totals, minimums, maximums, response metadata, and quota status
- Property configuration needed to orient the report, including streams, key events, Ads links, and custom definitions
- Create or edit GA4 events, key events, custom definitions, audiences, data streams, links, or property settings
- Install or validate website tags
- Change attribution or data-retention settings
- Repair missing historical data
- Confirm CRM lead quality or business impact without data you provide
Limits and interpretation guardrails
- Collection, inline display, and export are separate limits. Review all three before assuming you have a complete result.
- High-cardinality dimensions can produce an
(other)row. Check report metadata before treating the visible rows as a complete distribution. - Thresholding or schema restrictions can hide detail. Treat metadata warnings as part of the result, not as technical noise.
- GA4 can sample some reports. If sampling metadata is returned, disclose it with the analysis.
- Long ranges, many columns, complex filters, and high-cardinality fields use more GA4 quota. Start small, then expand deliberately.
- Current-day data is incomplete. Prefer complete periods for comparisons unless the job is explicitly intraday monitoring.
- GA4 and ad-platform conversions are not interchangeable. Attribution, identity, consent, processing, and import settings can produce legitimate differences.
- Rates need denominators. Show the underlying sessions, users, or events alongside conversion and engagement rates.
- Do not average row-level rates to create a total. Use report totals or recompute the rate from the relevant summed numerator and denominator.
Failure cases
A reusable approval-gated prompt
Build a custom GA4 report for property 123456789 that answers: Which landing pages gained qualified traffic but lost key-event efficiency? Use the previous 28 complete days and the preceding equal period. First find the property's exact landing-page, session, engagement, and key-event fields. Check Core compatibility. Show me the proposed fields, filters, date ranges, ordering, and effective row limits before running anything. After I approve, run a 50-row summary. Report row coverage, truncation, thresholding, sampling, and (other)-row signals. Do not change GA4. Create a CSV only after I approve the reviewed report.