Monthly SERP opportunity URL list.
const url = 'https://sitechecker.pro/api/v1/serp_opportunities?project_id=12345&content_type=listings&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/serp_opportunities?project_id=12345&content_type=listings&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.
Substring search in title or URL.
Filter by content type (lowercase machine value).
Return URLs ranking for keywords containing this text. Aggregates are recomputed over the matching keywords only.
Substring filter on the opportunity URL.
Sort as “
Page size. Rank Tracker list endpoints cap at 50 rows per request.
Pagination offset.
Responses
Section titled “Responses”Paginated SERP opportunity URLs
object
Monthly SERP opportunity URL aggregate. Use opportunity_id for the serp_opportunity_keywords drilldown; ids may expire after the monthly snapshot regeneration.
object
Pagination meta plus monthly snapshot dates.
object
Example
{ "data": [ { "opportunity_id": "opp_aHR0cHM6Ly9leGFtcGxlLmNvbS8", "page_url": "https://www.seoptimer.com/", "domain": "seoptimer.com", "title": "SEOptimer: Analyze Websites", "content_type": "competitors", "content_types": [ "competitors", "info" ], "average_position": 22.6, "keywords_count": 131, "snapshot_date": "2026-04-25", "next_snapshot_date": "2026-05-25" } ], "meta": { "total": 131, "limit": 50, "offset": 0, "snapshot_date": "2026-04-25", "next_snapshot_date": "2026-05-25" }}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." }}Validation error (including date_from/date_to, which this snapshot endpoint rejects)
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." }}