GSC Page History
const url = 'https://sitechecker.pro/api/v1/gsc-insights/page-history?project_id=12345&page_url=https%3A%2F%2Fexample.com%2Fwebsite-safety%2F&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&device=desktop&country=usa';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/page-history?project_id=12345&page_url=https%3A%2F%2Fexample.com%2Fwebsite-safety%2F&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&device=desktop&country=usa' \ --header 'Authorization: Bearer <token>'Returns time-series points for a specific page or a small capped page list. The number of pages per request is capped, so ask for one at a time unless you need a handful side by side.
Authorizations
Section titled “Authorizations”Parameters
Section titled “Parameters”Query Parameters
Section titled “Query Parameters”Example
12345Project ID.
Example
https://example.com/website-safety/Exact page URL (as stored in GSC data). Either page_url or page_urls[] is required.
Repeated param for up to 10 exact page URLs.
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.
Keyword text search narrowing each page series.
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.
Responses
Section titled “Responses”Per-page series with history points (+ previous_points when compare params are used)
object
Per-entity history series (page-history / keyword-history).
object
One series per requested page or keyword.
object
Page URL for this series.
Keyword/query for this series.
Time-series points (date + requested metrics) for this entity.
object
Previous period overlay; present when compare params are used.
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
{ "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
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 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 (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." }}