giip
SES Proposal
8 min read

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).

๐Ÿ”— Open GA Analytics Report โ†’

๐Ÿ“‹ 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

  1. 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.
  2. Collection is running so there is data (see "Setting up collection" below).

๐Ÿ”Ž View a report

  1. 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.
  2. To see individual metrics, pick a registered property/site from the dropdown (or enter one manually) in the GA4/GSC panels below.

๐Ÿ“Š Metrics

MetricMeaning
Active UsersDistinct active users
SessionsNumber of sessions
Page ViewsScreen/page views
Bounce RateShare of single-interaction sessions (shown as %)
ConversionsConversion 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:

  1. 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.
  2. 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's serviceAccountKeyFile field (actual path: giipdb/.secrets/ga-service-account.json, gitignored). GIIP's ProcessGaCollect (giipfaw timer function) reads this file and calls the Google Data API directly.
  3. 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 giipdb docs/30_Specs/CQE_SPECIFICATION.md apply only to the legacy agent-based collection method.
  4. AI analysis (combined) โ€” giipfaw's ProcessComboReport reads 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

SymptomCauseSolution
"No report yet"The combined-report batch hasn't run yetVerify collection/setup and wait for the next run.
A "setup needed" link appearsEither the GA4 property or the GSC site isn't registeredRegister it via the linked page (GA Property Management / GSC Sites).
Property/site dropdown is emptyNo properties/sites registered for this organizationRegister one in the corresponding management page.
403 / Access deniedYou lack permission for the property's organizationUse an organization you belong to.
The AI misunderstands our service structureAutomatic page classification doesn't fit our organization's exceptionsAdd 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

ItemValue
MethodGET
URLhttps://giipfaw.azurewebsites.net/api/giipGareportSnapshot?csn={CSN}
Headerx-api-key: {SK}
Parametera 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[].data contains that site's latest raw GSC JSON (totals, topQueries, topPageQueries, date, range, collectedAt, source) verbatim.
  • ga4Properties[].data is that property's latest raw GA4 JSON object, containing the following fields (per giipfaw ProcessGaCollect's collection schema):
    • propertyId, range (the collected date), collectedAt, source
    • metrics: activeUsers, sessions, screenPageViews, bounceRate, conversions, averageSessionDuration
    • topPages: top 10 pages by views โ€” each item has pagePath, screenPageViews, bounceRate, averageSessionDuration
    • landingPages: top 10 landing pages by sessions โ€” each item has landingPage, sessions, bounceRate
    • events: top 20 events by count โ€” each item has eventName, eventCount
    • coreWebVitals: populated only when both a site URL and the organization's own PageSpeed API key are configured, otherwise null. When present, each of mobile/desktop has performanceScore, lcpMs, clsScore, inpMs, fcpMs, ttfbMs
    • periods: per comparison window (current_3d, current_7d, current_28d, previous_28d, current_90d) startDate/endDate/metrics (null if that collection failed)
  • combinedReport is the single latest combined report (null if none). content is 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": "..." } }.

ConditionHTTPerror.code
SK missing or invalid401UNAUTHENTICATED
SK cannot access the requested csn403FORBIDDEN_CSN
csn missing, non-numeric, or โ‰ค 0400INVALID_CSN
Server or DB error500INTERNAL_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).

StatusMeaningAction the AI should take
READYAn active property exists and has the latest collected raw dataSummarize that data as fact
NOT_CONFIGUREDNo active property exists for this csnDon't guess โ€” report it as "not configured" as-is
NO_DATAAn active property exists but has no latest collected dataDon't guess โ€” report it as "no data" as-is

Fixed AI call procedure

  1. Query the snapshot exactly once.
  2. Check each status in sources first.
  3. Summarize only READY data as fact; report NOT_CONFIGURED/NO_DATA as-is without guessing.
  4. Treat the combined report's content as suggestions and the numbers in the GSC/GA4 data as factual data, keeping the two distinct.
  5. 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