GA Analytics Report Guide
View your organization's combined GA4 + Search Console AI analysis report (the main content), plus the latest metrics and history for a selected property/site (supporting detail).
๐ Overview
This page has two layers:
- Combined report (main) โ an AI analysis that looks at GA4 and Search Console data together. Click a past date in the history list on the right to view that day's report, and click "File this as an issue" to send any suggestion you like straight into a giip issue. Below it, turn on the "Auto-file an issue when a report is created" toggle and every newly created combined report is filed as a giip issue automatically (turning it on also files the latest report currently shown, if it has not been filed yet). While the toggle is off, the manual filing button stays available as before.
- Individual GA4 / GSC panels (supporting) โ below the combined report, separate panels show per-property KPI cards, recent daily history tables, and GSC top queries. These panels no longer generate their own AI analysis (the combined report above is the sole final analysis) โ they're for checking the raw numbers directly.
โ Prerequisites
- The GA4 property and (optionally) the Search Console site must be registered for your organization โ see GA Property Management and GSC Sites. If either source is missing, the combined report shows a "setup needed" link for it.
- Collection is running so there is data (see "Setting up collection" below).
๐ View a report
- The combined report loads automatically when you open the page. Click a date in the history list on the right to switch to that day's report, or click "Back to latest" to return to the current one.
- To see individual metrics, pick a registered property/site from the dropdown (or enter one manually) in the GA4/GSC panels below.
๐ Metrics
| Metric | Meaning |
|---|---|
| Active Users | Distinct active users |
| Sessions | Number of sessions |
| Page Views | Screen/page views |
| Bounce Rate | Share of single-interaction sessions (shown as %) |
| Conversions | Conversion events |
| Avg. Session (s) | Average session duration, seconds |
| Clicks / Impressions (GSC) | Search Console search-result clicks/impressions |
| CTR / Avg. Position (GSC) | Click-through rate (%) / average search position |
๐ค How the AI tells pages apart
The AI behind the combined report looks at each URL path and automatically classifies it as either a marketing/public page (a landing page, blog post, etc. visitors see without logging in) or a login-gated product/admin screen (e.g. a dashboard, an admin-only page). The latter is automatically excluded from being flagged as a conversion-funnel page.
If the automatic classification doesn't match your setup (e.g. you deliberately run some public pages without a login wall), or you want the AI to better reflect your service's own direction and target customers, you can add organization-specific (csn-scoped) guidance in Admin > Gareport AI Custom Prompt. It's appended after the global rules, not a replacement for them.
โ๏ธ Setting up collection (admin)
Metrics are collected by GIIP agents/servers and analyzed together by AI on a regular schedule. One-time setup:
- Register the GA4 property (GA Property Management) and the GSC site (GSC Sites) โ both sources need to be registered for the combined report to be complete.
- Service account key โ create a Google service account with GA4 read access and share the property with it. Place the key JSON at the path specified in giipdb
mgmt/ga-collector.config.json.sample'sserviceAccountKeyFilefield (actual path:giipdb/.secrets/ga-service-account.json, gitignored). GIIP'sProcessGaCollect(giipfaw timer function) reads this file and calls the Google Data API directly. - Collection job โ
ProcessGaCollect(a giipfaw timer function) automatically collects registered active properties by reading from DB (tGaConfig). No separate PC/agent deployment is needed. The CQE guide and giipdbdocs/30_Specs/CQE_SPECIFICATION.mdapply only to the legacy agent-based collection method. - AI analysis (combined) โ giipfaw's
ProcessComboReportreads GA4 and GSC data together and produces the combined report. If the sample size is too small (e.g. too few visitors), the report notes that limitation.
Once collection runs, this page fills in automatically.
Troubleshooting
| Symptom | Cause | Solution |
|---|---|---|
| "No report yet" | The combined-report batch hasn't run yet | Verify collection/setup and wait for the next run. |
| A "setup needed" link appears | Either the GA4 property or the GSC site isn't registered | Register it via the linked page (GA Property Management / GSC Sites). |
| Property/site dropdown is empty | No properties/sites registered for this organization | Register one in the corresponding management page. |
| 403 / Access denied | You lack permission for the property's organization | Use an organization you belong to. |
| The AI misunderstands our service structure | Automatic page classification doesn't fit our organization's exceptions | Add guidance in the Gareport AI Custom Prompt page. |
๐ Latest-data query API for AI
A read-only API that lets an external AI read the latest GA4/GSC snapshot and combined report GIIP has already collected โ all in one call โ using only the organization identifier (csn) and that organization's secret key (SK), without interpreting the screen or signing in to a Google account. It does not include any re-collection, re-analysis, or configuration-change capability.
โ ๏ธ Scope limit: This API provides only the single latest snapshot โ it does not include the on-screen history list (past dated reports) or the full daily history table. Only the most recently collected/generated data is queryable.
Request
| Item | Value |
|---|---|
| Method | GET |
| URL | https://giipfaw.azurewebsites.net/api/giipGareportSnapshot?csn={CSN} |
| Header | x-api-key: {SK} |
| Parameter | a single positive integer csn |
Success response (HTTP 200)
{
"csn": 47,
"retrievedAt": "2026-09-01T00:00:00Z",
"sources": {
"gsc": { "status": "READY", "siteCount": 1 },
"ga4": { "status": "READY", "propertyCount": 1 },
"combinedReport": { "status": "READY" }
},
"gscSites": [ { "siteUrl": "...", "label": "...", "collectedAt": "...", "data": { } } ],
"ga4Properties": [ { "propertyId": "...", "label": "...", "collectedAt": "...", "data": { } } ],
"combinedReport": { "reportId": 0, "generatedAt": "...", "dataSources": "ga+gsc", "missingConfig": null, "language": "en", "content": "## 1. Current Situation\nActive users are up 12% over the previous 28 days...\n\n## 2. Today's Core Bottleneck\nLanding page A has a 78% bounce rate, blocking conversion from incoming traffic...\n\n## 3. Evidence\n[MEASURED] ...\n\n## 4. Actions To Execute Now\nTarget: /pricing ...\n\n## 5. Judgments On Hold\n..." }
}
gscSites[].datacontains that site's latest raw GSC JSON (totals,topQueries,topPageQueries,date,range,collectedAt,source) verbatim.ga4Properties[].datais that property's latest raw GA4 JSON object, containing the following fields (per giipfawProcessGaCollect's collection schema):propertyId,range(the collected date),collectedAt,sourcemetrics:activeUsers,sessions,screenPageViews,bounceRate,conversions,averageSessionDurationtopPages: top 10 pages by views โ each item haspagePath,screenPageViews,bounceRate,averageSessionDurationlandingPages: top 10 landing pages by sessions โ each item haslandingPage,sessions,bounceRateevents: top 20 events by count โ each item haseventName,eventCountcoreWebVitals: populated only when both a site URL and the organization's own PageSpeed API key are configured, otherwisenull. When present, each ofmobile/desktophasperformanceScore,lcpMs,clsScore,inpMs,fcpMs,ttfbMsperiods: per comparison window (current_3d,current_7d,current_28d,previous_28d,current_90d)startDate/endDate/metrics(nullif that collection failed)
combinedReportis the single latest combined report (nullif none).contentis a markdown string made of the same 5 sections shown above (Current Situation / Today's Core Bottleneck / Evidence / Actions To Execute Now / Judgments On Hold) โ the example above is only illustrative; actual values vary by organization and period.gscKeyJson,gaKeyJson, the Google service account key, SK, AK, and DB connection details are never included in any response.
Error response
The error body is always in the form { "error": { "code": "...", "message": "..." } }.
| Condition | HTTP | error.code |
|---|---|---|
| SK missing or invalid | 401 | UNAUTHENTICATED |
| SK cannot access the requested csn | 403 | FORBIDDEN_CSN |
csn missing, non-numeric, or โค 0 | 400 | INVALID_CSN |
| Server or DB error | 500 | INTERNAL_ERROR |
Call example (with environment variables, no real secrets)
export GIIP_API_BASE_URL="https://giipfaw.azurewebsites.net"
export GIIP_CSN="47"
export GIIP_SK="set_at_runtime_only"
curl --fail-with-body \
-H "x-api-key: ${GIIP_SK}" \
"${GIIP_API_BASE_URL}/api/giipGareportSnapshot?csn=${GIIP_CSN}"
โ ๏ธ Security: Never put the SK in a URL, an issue, a repository, a prompt body, or logs. Pass it only from a runtime environment variable or a secret store.
Status values and the action the AI should take
GSC data is usually delayed by two to three days (Google finalization lag).
| Status | Meaning | Action the AI should take |
|---|---|---|
READY | An active property exists and has the latest collected raw data | Summarize that data as fact |
NOT_CONFIGURED | No active property exists for this csn | Don't guess โ report it as "not configured" as-is |
NO_DATA | An active property exists but has no latest collected data | Don't guess โ report it as "no data" as-is |
Fixed AI call procedure
- Query the snapshot exactly once.
- Check each status in
sourcesfirst. - Summarize only
READYdata as fact; reportNOT_CONFIGURED/NO_DATAas-is without guessing. - Treat the combined report's
contentas suggestions and the numbers in the GSC/GA4dataas factual data, keeping the two distinct. - Past reports or daily history cannot be retrieved through this API even if requested โ treat only the latest snapshot as fact, and if asked for historical data, explicitly say "this API only provides the latest data."
Version: 1.5
Last Updated: 2026-09-18
Changelog: giip 2709 โ added the "auto-file an issue when a report is created" toggle to the combined report (the manual button remains while the toggle is off). / giip #2068 โ documented that the API returns only the single latest snapshot, added the real ga4Properties[].data field schema, and expanded the combinedReport.content example.
Source File: giipv3/public/help/gareport.en.md