Keyword-level Keyword Gap drilldown for a selected page.
const url = 'https://sitechecker.pro/api/v1/gsc-insights/keyword-gap-page-keywords?project_id=12345&page_url=https%3A%2F%2Fexample.com%2Fwebsite-safety%2F&order_by=clicks_desc&limit=50&offset=0';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/keyword-gap-page-keywords?project_id=12345&page_url=https%3A%2F%2Fexample.com%2Fwebsite-safety%2F&order_by=clicks_desc&limit=50&offset=0' \ --header 'Authorization: Bearer <token>'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 returned by keyword-gap-pages).
Start of the GSC window (inclusive). Default: last 30 days of final GSC data (UI parity).
End of the GSC window (inclusive).
Keyword text search.
Example
clicks_descSort as
Page size.
Pagination offset.
Responses
Section titled “Responses”Keyword rows with gap metrics and usage flags
object
Keyword Gap drilldown row for a selected page (same formulas and null semantics as the page rows).
object
Keyword/query.
GSC clicks.
GSC impressions.
Average position.
CTR.
Estimated lost clicks: max(keyword_impressions * 0.2 - keyword_clicks, 0).
Keyword occurrences in the page text (crawler).
Keyword occurrence percentage in the page text (crawler).
Whether the keyword is used in the title.
Whether used in the meta description.
Whether used in H1.
Whether used in H2-H6.
Whether used in image alt tags.
GSC Insights meta block for list endpoints: scope echo + pagination (total/limit/offset).
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
Reusable OpenAPI response schemas for the Public REST API: the error/meta envelope and one item schema per resource. Property names come from the Field registry so the documented contract and the runtime response shapes stay in lock-step.
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" }, "total": 137, "limit": 50, "offset": 0 }}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." }}GSC not connected or Site Audit content data unavailable
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 or invalid date range
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." }}