GA4 Site Summary
const url = 'https://sitechecker.pro/api/v1/ga4-insights/site-summary?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&source_channel=organic_search&metrics=sessions%2Cbounce_rate%2Ckey_events&dimension=source_medium&dimension_limit=15&include_other=true&include_comparison=true';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url 'https://sitechecker.pro/api/v1/ga4-insights/site-summary?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&source_channel=organic_search&metrics=sessions%2Cbounce_rate%2Ckey_events&dimension=source_medium&dimension_limit=15&include_other=true&include_comparison=true' \ --header 'Authorization: Bearer <token>'Returns site-level GA4 behavior metrics for the selected period and scope. It needs a connected GA4 property: without one the endpoint answers GA4_NOT_CONNECTED rather than an empty result. Comparison, when included, is the previous period of the same length.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Example
2026-02-19Start of the monitoring period (inclusive), ISO date (UTC).
Example
2026-05-19End of the monitoring period (inclusive), ISO date (UTC).
Traffic scope. GA4 storage only distinguishes organic vs total, so only these values are supported in V1; other channels return UNSUPPORTED_FILTER. Default: organic_search.
Example
sessions,bounce_rate,key_eventsComma-separated GA4 metric keys. Defaults to all V1 metrics. Unknown metrics return UNSUPPORTED_METRIC.
Optional breakdown dimension. V1 supports source_medium on site-summary only, and only with source_channel=all (served from the live GA4 API, top-N by sessions). Unsupported dimensions return UNSUPPORTED_DIMENSION. See ga4-insights/filter-values dimension_support.
Cap for breakdown rows, especially source_medium.
When the dimension is high-cardinality, group remaining rows into other if supported.
Default true for summary/list endpoints. Return previous period same-length values/deltas.
Responses
Section titled “Responses”Site-level GA4 metrics with optional previous-period comparison
object
Site-level GA4 metrics for the selected scope. previous/change appear only when include_comparison=true; change.*_percent is null when the previous value is zero.
object
Applied scope for the returned metrics.
object
Applied source/channel scope.
Sessions for the selected source_channel scope/filters. If source_channel=all, this means all sessions.
Bounce rate for the selected scope/filters.
Average session duration.
Key events count.
Session key event rate.
GA4 metric values. average_session_duration is in seconds.
object
Sessions for the selected source_channel scope/filters.
Bounce rate for the selected scope/filters.
Average session duration.
Key events count.
Session key event rate.
Absolute and percent deltas for the same scope/filters.
object
Example
{ "data": { "scope": { "source_channel": "organic_search" }, "sessions": 49400, "bounce_rate": 16.9, "average_session_duration": 501, "key_events": 0, "session_key_event_rate": 0, "previous": { "sessions": 49400, "bounce_rate": 16.9, "average_session_duration": 501, "key_events": 0, "session_key_event_rate": 0 } }}Missing or invalid API key
Returned as INVALID_API_KEY when the key is missing or unknown, and as REVOKED_API_KEY when the key exists but was revoked — the latter needs a new key.
object
object
Example
{ "error": { "code": "INVALID_API_KEY", "message": "Invalid or missing API key." }}No active API entitlement for the account, or the project belongs to another account
Returned as MISSING_PUBLIC_API_ACCESS when the account has no active API entitlement, and as ACCESS_DENIED when the requested project belongs to another account.
object
object
Example
{ "error": { "code": "MISSING_PUBLIC_API_ACCESS", "message": "API access is not available: the account has no active API entitlement." }}Project not found
The exact missing resource is in error.code: PROJECT_NOT_FOUND, SEGMENT_NOT_FOUND, CRAWL_NOT_FOUND, KEYWORD_NOT_FOUND, OPPORTUNITY_NOT_FOUND, SNAPSHOT_UNAVAILABLE or NOT_FOUND.
object
object
Example
{ "error": { "code": "PROJECT_NOT_FOUND", "message": "Project not found." }}Google Analytics 4 is not connected
object
object
Example
{ "error": { "code": "GA4_NOT_CONNECTED", "message": "Google Analytics 4 is not connected for this project." }}Validation error or unsupported filter/dimension
Rejected query parameters. error.code is VALIDATION_ERROR for parameter validation (including a query parameter the endpoint does not accept), or INVALID_DATE_RANGE / INVALID_FILTER / INVALID_EVENT_TYPE / UNSUPPORTED_FILTER / UNSUPPORTED_DIMENSION / UNSUPPORTED_METRIC / UNSUPPORTED_SCOPE / SEGMENT_FILTER_UNSUPPORTED for module-specific rules.
object
object
Example
{ "error": { "code": "VALIDATION_ERROR", "message": "project_id is required." }}Rate limit exceeded — retry after the interval in the Retry-After header
object
object
Example
{ "error": { "code": "RATE_LIMIT_EXCEEDED", "message": "Rate limit exceeded. Try again later." }}Internal server error
object
object
Example
{ "error": { "code": "INTERNAL_ERROR", "message": "Internal server error." }}Upstream Google Analytics 4 service error (dimension=source_medium)
object
object
Example
{ "error": { "code": "UPSTREAM_ERROR", "message": "The upstream Google Analytics 4 service is temporarily unavailable. Try again later." }}