Skip to content

Rank Tracker Competitor Domains

GET
/api/v1/competitor_domains
curl --request GET \
--url 'https://sitechecker.pro/api/v1/competitor_domains?project_id=12345&date_from=2026-02-22&date_to=2026-05-22&search_engine=google&device=desktop&location_id=loc_TmV3IFlvcmssVW5pdGVkIFN0YXRlcw&language_code=en&group_id=SG9tZSBQYWdlcw&rankings=all&movement_window=1d&serp_feature=ads&limit=50&offset=0' \
--header 'Authorization: Bearer <token>'

Returns competitor domains with visibility, average position, ranking distribution, and comparison metrics for the selected date range.

project_id
required
integer
Example
12345

Project ID.

date_from
required
string format: date
Example
2026-02-22

Start of the Rank Tracker date range (inclusive, Y-m-d). Clamped to the project’s available indicator dates.

date_to
required
string format: date
Example
2026-05-22

End of the Rank Tracker date range (inclusive, Y-m-d). Visibility-style fields are snapshots for the latest available check within this range (as_of_date).

search_engine
string
Example
google

Search engine machine value from rank_tracker_filter_values (e.g. google).

device
string
Allowed values: desktop mobile tablet

Device filter.

location_id
string
Example
loc_TmV3IFlvcmssVW5pdGVkIFN0YXRlcw

Opaque location id from rank_tracker_filter_values tracking_profiles (loc_… value).

language_code
string
Example
en

Language code (ISO alpha-2) from rank_tracker_filter_values.

group_id
string
Example
SG9tZSBQYWdlcw

Keyword group id from the groups endpoint (opaque value).

rankings
string
default: all
Allowed values: all top_1 top_3 top_10 top_30 top_50 top_100 no_position moved_up moved_down not_changed

Ranking filter. Bucket filters are cumulative (top_10 = positions 1-10); response distribution buckets are exclusive. Movement filters (moved_up/moved_down/not_changed) compare against the movement_window snapshot.

movement_window
string
default: 7d
Allowed values: 1d 7d 30d 90d all_time

Comparison window for movement rankings filters. Only valid with rankings=moved_up, moved_down or not_changed. Default: 7d.

serp_feature
string
Allowed values: ads featured_snippet people_also_ask shopping top_carousel video

Filter keywords whose SERP contains the feature.

volume_from
integer

Minimum search volume.

volume_to
integer

Maximum search volume.

limit
integer
default: 50 >= 1 <= 50

Page size. Rank Tracker list endpoints cap at 50 rows per request.

offset
integer
0

Pagination offset.

Competitor domain rows (main domain first)

Media typeapplication/json
object
data
Array<object>

Competitor/domain aggregate: visibility snapshot and exclusive ranking-distribution buckets with changes computed against the earliest check in the selected range. The main domain row comes first with is_main_domain=true.

object
domain

Competitor domain.

string
is_main_domain

True on the project row, so it can be told apart from the competitors.

boolean
competitor_id

Tracked competitor id. Null on the project row.

integer
nullable
visibility

Visibility of this domain across the tracked keywords, as a percentage.

number format: float
visibility_change

Visibility change against the comparison period, in percentage points.

number format: float
top_1_count

Keywords where this domain ranks at position 1.

integer
top_1_change

Change in that count against the comparison period.

integer
top_2_3_count

Keywords where this domain ranks at positions 2-3.

integer
top_2_3_change

Change in that count against the comparison period.

integer
top_4_10_count

Keywords where this domain ranks at positions 4-10.

integer
top_4_10_change

Change in that count against the comparison period.

integer
top_11_30_count

Keywords where this domain ranks at positions 11-30.

integer
top_11_30_change

Change in that count against the comparison period.

integer
top_31_50_count

Keywords where this domain ranks at positions 31-50.

integer
top_31_50_change

Change in that count against the comparison period.

integer
top_51_100_count

Keywords where this domain ranks at positions 51-100.

integer
top_51_100_change

Change in that count against the comparison period.

integer
no_position_count

Keywords where this domain does not rank in the top 100.

integer
no_position_change

Change in that count against the comparison period.

integer
meta

Pagination meta plus the snapshot date used for visibility-style fields.

object
total

Rows matching the request, before pagination.

integer
limit

Page size that was applied.

integer
offset

Pagination offset that was applied.

integer
as_of_date

Date the visibility-style fields were snapshotted on.

string format: date
nullable
Example
{
"data": [
{
"domain": "semrush.com",
"is_main_domain": false,
"competitor_id": 456,
"visibility": 15.22,
"visibility_change": -1.3,
"top_1_count": 11,
"top_1_change": -17,
"top_2_3_count": 43,
"top_2_3_change": -15,
"top_4_10_count": 126,
"top_4_10_change": 15,
"top_11_30_count": 118,
"top_11_30_change": -10,
"top_31_50_count": 49,
"top_31_50_change": -17,
"top_51_100_count": 42,
"top_51_100_change": -3,
"no_position_count": 705,
"no_position_change": 9
}
],
"meta": {
"total": 137,
"limit": 50,
"offset": 0,
"as_of_date": "2026-05-22"
}
}

Missing or invalid API key

Media typeapplication/json

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
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
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

Media typeapplication/json

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
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
Example
{
"error": {
"code": "MISSING_PUBLIC_API_ACCESS",
"message": "API access is not available: the account has no active API entitlement."
}
}

Project not found

Media typeapplication/json

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
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
Example
{
"error": {
"code": "PROJECT_NOT_FOUND",
"message": "Project not found."
}
}

Validation error

Media typeapplication/json

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
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
Example
{
"error": {
"code": "VALIDATION_ERROR",
"message": "project_id is required."
}
}

Rate limit exceeded — retry after the interval in the Retry-After header

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
Example
{
"error": {
"code": "RATE_LIMIT_EXCEEDED",
"message": "Rate limit exceeded. Try again later."
}
}

Internal server error

Media typeapplication/json
object
error
required
object
code
required
string
Allowed values: VALIDATION_ERROR BAD_REQUEST PROJECT_NOT_FOUND SEGMENT_NOT_FOUND ACCESS_DENIED CRAWL_IN_PROGRESS NOT_FOUND UPSTREAM_ERROR INVALID_API_KEY REVOKED_API_KEY RATE_LIMIT_EXCEEDED MISSING_PUBLIC_API_ACCESS INTERNAL_ERROR CRAWL_NOT_FOUND INVALID_DATE_RANGE INVALID_FILTER INVALID_EVENT_TYPE KEYWORD_NOT_FOUND OPPORTUNITY_NOT_FOUND SNAPSHOT_UNAVAILABLE GSC_NOT_CONNECTED GA4_NOT_CONNECTED SITE_AUDIT_DATA_UNAVAILABLE GA4_DATA_UNAVAILABLE UNSUPPORTED_FILTER UNSUPPORTED_DIMENSION UNSUPPORTED_METRIC SEGMENT_FILTER_UNSUPPORTED UNSUPPORTED_SCOPE AI_OVERVIEW_DATA_UNAVAILABLE PROMPT_DATA_UNAVAILABLE
message
required
string
Example
{
"error": {
"code": "INTERNAL_ERROR",
"message": "Internal server error."
}
}