Rank Tracker
Read ranking visibility and stored results, then manage tracked keywords and URL-based segments with the Screpy REST API.
Keep ranking work project-scoped
Start with the overview, then filter the keyword collection by device, search text, or segment. Numeric keyword, analysis, and segment IDs are scoped to the project UID in the request path. Use the Rank Tracker guide to interpret movement before changing a page.
Adding keywords consumes the project's Rank Tracker allowance and starts the normal first-analysis workflow. Scheduled analyses continue at the configured frequency. The REST API reads stored results and manages keywords or segments; it does not provide export, live search, or manual reanalysis endpoints.
/projects/{project_uid}/rank-tracker/optionsReturns public country, language, device, frequency, and segment rule options. Internal provider identifiers are omitted.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Response Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/options"{ "data": { "countries": [ { "code": "string", "language_code": "string", "display": "string" } ], "languages": [ { "code": "string", "country_code": "string", "display": "string", "label": "string" } ], "devices": [ "mobile" ], "frequencies": [ "daily" ], "segment_rules": { "fields": [ "path" ], "operators": [ "starts_with" ], "maximum_rules": 5, "rule_join": "and", "case_sensitive": false } }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/overviewReturns summary metrics, a 30-day visibility series, position distribution, plan usage, and update frequency.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Query Parameters
"mobile"Value in
- "mobile"
- "desktop"
Project-scoped numeric segment ID. Cannot be combined with unmatched=true.
1 <= valueReturn only keywords not matched by any saved segment. Cannot be combined with segment_id.
falseResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/overview"{ "data": { "summary": { "tracked_keywords": 0, "ranking_keywords": 0, "avg_position": 0, "visibility_score": 0, "top_three": 0, "top_ten": 0, "improved": 0, "declined": 0, "pending": 0, "failed": 0 }, "visibility": { "rows": [ { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 }, { "date": "2019-08-24", "score": 0, "delta": 0 } ], "seven_day_change": 0 }, "position_distribution": [ { "label": "string", "keywords": 0 } ], "usage": { "used": 0, "limit": 0 }, "frequency": { "value": "daily", "interval_days": 0 }, "device": "mobile" }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywordsReturns a lightweight cursor-paginated list. Use the analysis endpoints for history and stored organic results.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Query Parameters
"mobile"Value in
- "mobile"
- "desktop"
length <= 255Project-scoped numeric segment ID. Cannot be combined with unmatched=true.
1 <= valueReturn only keywords not matched by any saved segment. Cannot be combined with segment_id.
false"position"Value in
- "keyword"
- "market"
- "position"
- "last_analyzed"
"asc"Value in
- "asc"
- "desc"
Maximum records to return. Defaults to 50.
1 <= value <= 10050Opaque cursor returned by the prior response. Do not construct or alter it.
length <= 512Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/keywords"{ "data": [ { "id": 1, "keyword": "string", "device": "mobile", "country_code": "string", "language_code": "string", "location": "string", "last_position": 0, "best_position": 0, "last_result_url": "http://example.com", "last_analyzed_at": "2019-08-24T14:15:22Z", "next_analyze_at": "2019-08-24T14:15:22Z", "status": "pending", "change_position": 0, "owned_results_count": 0, "serp_features": { "property1": true, "property2": true }, "message": "string", "competitors": [ { "id": 0, "name": "string", "domain": "string", "position": 0 } ] } ], "links": { "next": "http://example.com" }, "meta": { "per_page": 0, "next_cursor": "string", "previous_cursor": "string", "has_more": true }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywordsAdds at most 100 unique keywords. both creates two tracked records per keyword and consumes two units. Initial analysis is scheduled automatically; manual reanalysis is not available.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/projects/string/rank-tracker/keywords" \ -H "Content-Type: application/json" \ -d '{ "keywords": [ "string" ], "country_code": "string", "language_code": "string" }'{ "data": { "keywords": [ { "id": 0, "keyword": "string", "device": "mobile", "country_code": "string", "language_code": "string", "status": "pending" } ], "initial_analysis_scheduled": true }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywords/bulk-deleteDeletes up to 100 project-scoped keyword IDs. Set delete_all_devices to remove matching mobile and desktop variants.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/projects/string/rank-tracker/keywords/bulk-delete" \ -H "Content-Type: application/json" \ -d '{ "keyword_ids": [ 1 ] }'{ "data": { "deleted_count": 0 }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywords/{keyword_id}Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric keyword ID returned by the keyword list.
1 <= valueResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/keywords/1"{ "data": { "id": 1, "keyword": "string", "device": "mobile", "country_code": "string", "language_code": "string", "location": "string", "last_position": 0, "best_position": 0, "last_result_url": "http://example.com", "last_analyzed_at": "2019-08-24T14:15:22Z", "next_analyze_at": "2019-08-24T14:15:22Z", "status": "pending", "change_position": 0, "owned_results_count": 0, "serp_features": { "property1": true, "property2": true }, "message": "string", "competitors": [ { "id": 0, "name": "string", "domain": "string", "position": 0 } ] }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywords/{keyword_id}Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric keyword ID returned by the keyword list.
1 <= valueQuery Parameters
When true, also delete the matching mobile or desktop entry in the same market.
falseResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/projects/string/rank-tracker/keywords/1"{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywords/{keyword_id}/analysesAuthorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric keyword ID returned by the keyword list.
1 <= valueQuery Parameters
Maximum records to return. Defaults to 50.
1 <= value <= 10050Opaque cursor returned by the prior response. Do not construct or alter it.
length <= 512Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/keywords/1/analyses"{ "data": [ { "id": 0, "keyword_id": 0, "device": "mobile", "status": "pending", "position": 0, "previous_position": 0, "change_position": 0, "owned_results_count": 0, "matched_url": "http://example.com", "serp_features": { "property1": true, "property2": true }, "is_simulated": true, "started_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" } ], "links": { "next": "http://example.com" }, "meta": { "per_page": 0, "next_cursor": "string", "previous_cursor": "string", "has_more": true }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/keywords/{keyword_id}/analyses/{analysis_id}/resultsReturns stored organic rows and explicit scan coverage. This does not run a live search.
Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric keyword ID returned by the keyword list.
1 <= valueProject-scoped numeric analysis ID returned by the analysis list.
1 <= valueResponse Body
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/keywords/1/analyses/1/results"{ "data": { "analysis": { "id": 0, "keyword_id": 0, "device": "mobile", "status": "pending", "position": 0, "previous_position": 0, "change_position": 0, "owned_results_count": 0, "matched_url": "http://example.com", "serp_features": { "property1": true, "property2": true }, "is_simulated": true, "started_at": "2019-08-24T14:15:22Z", "finished_at": "2019-08-24T14:15:22Z" }, "coverage": { "pages_scanned": 0, "organic_results_scanned": 0, "scan_complete": true, "stored_results": 0 }, "results": [ { "id": 0, "rank": 0, "result_type": "organic", "title": "string", "url": "http://example.com", "display_url": "string", "description": "string", "is_owned_result": true, "features": [ "string" ] } ] }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/segmentsAuthorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Query Parameters
"mobile"Value in
- "mobile"
- "desktop"
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X GET "https://example.com/projects/string/rank-tracker/segments"{ "data": { "segments": [ { "id": 0, "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ], "matched_count": 0, "avg_position": 0 } ], "suggestions": [ { "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ], "matched_count": 0, "avg_position": 0, "examples": [ "http://example.com" ] } ], "unmatched_count": 0 }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/segmentsAuthorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/projects/string/rank-tracker/segments" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ] }'{ "data": { "id": 0, "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ], "matched_count": 0, "avg_position": 0 }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/segments/previewAuthorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/projects/string/rank-tracker/segments/preview" \ -H "Content-Type: application/json" \ -d '{ "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ] }'{ "data": { "matched_count": 0, "avg_position": 0, "overlap_count": 0, "examples": [ "http://example.com" ] }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/segments/{segment_id}Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric segment ID returned by the segment list.
1 <= valueRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
application/json
application/json
application/json
curl -X PATCH "https://example.com/projects/string/rank-tracker/segments/1" \ -H "Content-Type: application/json" \ -d '{ "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ] }'{ "data": { "id": 0, "name": "string", "rules": [ { "field": "path", "operator": "starts_with", "value": "string" } ], "matched_count": 0, "avg_position": 0 }}{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string", "errors": { "property1": [ "string" ], "property2": [ "string" ] }}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}/projects/{project_uid}/rank-tracker/segments/{segment_id}Authorization
bearerApiKey Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.
In: header
Path Parameters
Accessible project UID. Discover it with GET /projects; do not guess it.
^[a-z0-9]{10}$Project-scoped numeric segment ID returned by the segment list.
1 <= valueResponse Body
application/json
application/json
application/json
application/json
application/json
curl -X DELETE "https://example.com/projects/string/rank-tracker/segments/1"{ "message": "Unauthenticated."}{ "message": "string", "code": "string"}{ "message": "Project not found or not accessible."}{ "message": "string", "code": "string"}{ "message": "string", "code": "string"}