Time-series points for selected GSC metrics over the filtered dataset.
const url = 'https://sitechecker.pro/api/v1/gsc-insights/performance-history?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&compare_from=2026-01-01&compare_to=2026-01-31&history_grouping=daily&metrics=clicks%2Cimpressions&group_by=none&segment_id=all_pages&device=desktop&country=usa&brand_type=all&filters=%7B%22join%22%3A%22and%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22keyword%22%2C%22operator%22%3A%22regex%22%2C%22value%22%3A%22seo%7Caudit%22%7D%2C%7B%22field%22%3A%22clicks%22%2C%22operator%22%3A%22gte%22%2C%22value%22%3A100%7D%5D%7D';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/gsc-insights/performance-history?project_id=12345&date_from=2026-02-19&date_to=2026-05-19&compare_from=2026-01-01&compare_to=2026-01-31&history_grouping=daily&metrics=clicks%2Cimpressions&group_by=none&segment_id=all_pages&device=desktop&country=usa&brand_type=all&filters=%7B%22join%22%3A%22and%22%2C%22rules%22%3A%5B%7B%22field%22%3A%22keyword%22%2C%22operator%22%3A%22regex%22%2C%22value%22%3A%22seo%7Caudit%22%7D%2C%7B%22field%22%3A%22clicks%22%2C%22operator%22%3A%22gte%22%2C%22value%22%3A100%7D%5D%7D' \ --header 'Authorization: Bearer <token>'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).
Example
2026-01-01Start of the manual comparison period (inclusive). Must be passed together with compare_to; the response switches to nested current/previous/change blocks.
Example
2026-01-31End of the manual comparison period (inclusive). Must be passed together with compare_from.
Time bucket for history points.
Example
clicks,impressionsComma-separated metric list. Default: clicks,impressions,ctr,average_position.
Brand splits the series into brand/non-brand (Brand vs Non-brand history).
Example
all_pagesOptional segment scope filter.
Filter the underlying GSC rows by device before aggregation.
Example
usaFilter the underlying GSC rows by country (ISO-3166-1 alpha-3, lowercase) before aggregation. Use values from gsc_insights_filter_values.
Brand/non-brand keyword filter based on the brand rules configured in Settings. Requires brand_settings_configured=true.
Keyword text search applied to the underlying rows (filtered graph).
Page URL text search applied to the underlying rows (filtered graph).
Example
{"join":"and","rules":[{"field":"keyword","operator":"regex","value":"seo|audit"},{"field":"clicks","operator":"gte","value":100}]}Advanced filter object (URL-encoded JSON): {“join”:“and|or”,“rules”:[{“field”:…,“operator”:…,“value”:…}, {“join”:“or”,“rules”:[…]}]}. Text fields (keyword, page_url, top_ranking_keyword, top_ranking_page): equals, not_equals, contains, not_contains, starts_with, ends_with, regex, not_regex, in, not_in. Numeric fields (clicks, impressions, ctr, average_position): equals, gte, lte, between, plus gt/lt for integer fields. Enum fields (country, device): equals, in. Nested groups are supported one level deep; rules inside one “or” group must target the same text field. Simple query params are AND-joined with this object.
Responses
Section titled “Responses”History points (or per-brand series with group_by=brand)
object
History payload: points (+ previous_points with compare; series[] per brand type with group_by=brand). Point keys follow the requested metrics.
object
object
Point date / period start.
Clicks.
Impressions.
CTR.
Average position.
Comparison overlay points; present when compare params are used.
object
Per-series points when group_by=brand splits the data into brand / non-brand.
object
Standard GSC Insights meta block: request scope echo, source availability and data freshness. Extended per endpoint (history_grouping, resolved_compare_*, ga4_channel_scope…).
object
Project ID.
Selected period start.
Selected period end.
Optional comparison period start.
Optional comparison period end.
Source connection/data availability statuses keyed by source (e.g. gsc, ga4).
object
Latest data date used per source (e.g. gsc_date, ga4_date).
object
Example
{ "data": { "points": [ { "date": "2026-05-01", "clicks": 120, "impressions": 3050, "ctr": 3.93, "average_position": 12.4 } ] }, "meta": { "project_id": 12345, "date_from": "2026-05-01", "date_to": "2026-05-31", "source_status": { "gsc": "connected", "ga4": "not_connected" }, "data_freshness": { "gsc_date": "2026-06-30", "ga4_date": "2026-07-02" } }}Missing or invalid API key
object
object
Example
{ "error": { "code": "unauthorized", "message": "Invalid or missing API key." }}No active API entitlement for the account, or the project belongs to another account
Returned as api_access_denied when the account has no active API entitlement, and as forbidden when the requested project belongs to another account.
object
object
Example
{ "error": { "code": "api_access_denied", "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 Search Console is not connected
Also returned as site_audit_data_unavailable on endpoints that join Site Audit page content.
object
object
Example
{ "error": { "code": "gsc_not_connected", "message": "Google Search Console is not connected for this project." }}Validation error, invalid date range or invalid filter
Rejected query parameters. error.code is validation_error for parameter validation, or invalid_date_range / invalid_filter / invalid_event_type / unsupported_filter / unsupported_dimension / 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." }}