ScrepyDocs

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.

GET/projects/{project_uid}/rank-tracker/options

Returns public country, language, device, frequency, and segment rule options. Internal provider identifiers are omitted.

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[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    }  }}
GET/projects/{project_uid}/rank-tracker/overview

Returns summary metrics, a 30-day visibility series, position distribution, plan usage, and update frequency.

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$

Query Parameters

device?string
Default"mobile"

Value in

  • "mobile"
  • "desktop"
segment_id?integer

Project-scoped numeric segment ID. Cannot be combined with unmatched=true.

Range1 <= value
unmatched?boolean

Return only keywords not matched by any saved segment. Cannot be combined with segment_id.

Defaultfalse

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/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"  }}
GET/projects/{project_uid}/rank-tracker/keywords

Returns a lightweight cursor-paginated list. Use the analysis endpoints for history and stored organic results.

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$

Query Parameters

device?string
Default"mobile"

Value in

  • "mobile"
  • "desktop"
search?string
Lengthlength <= 255
segment_id?integer

Project-scoped numeric segment ID. Cannot be combined with unmatched=true.

Range1 <= value
unmatched?boolean

Return only keywords not matched by any saved segment. Cannot be combined with segment_id.

Defaultfalse
sort?string
Default"position"

Value in

  • "keyword"
  • "market"
  • "position"
  • "last_analyzed"
direction?string
Default"asc"

Value in

  • "asc"
  • "desc"
limit?integer

Maximum records to return. Defaults to 50.

Range1 <= value <= 100
Default50
cursor?string

Opaque cursor returned by the prior response. Do not construct or alter it.

Lengthlength <= 512

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/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  }}
POST/projects/{project_uid}/rank-tracker/keywords

Adds 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
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[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  }}
POST/projects/{project_uid}/rank-tracker/keywords/bulk-delete

Deletes up to 100 project-scoped keyword IDs. Set delete_all_devices to remove matching mobile and desktop variants.

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[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  }}
GET/projects/{project_uid}/rank-tracker/keywords/{keyword_id}

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
keyword_id*integer

Project-scoped numeric keyword ID returned by the keyword list.

Range1 <= value

Response 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      }    ]  }}
DELETE/projects/{project_uid}/rank-tracker/keywords/{keyword_id}

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
keyword_id*integer

Project-scoped numeric keyword ID returned by the keyword list.

Range1 <= value

Query Parameters

delete_all_devices?boolean

When true, also delete the matching mobile or desktop entry in the same market.

Defaultfalse

Response 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"
Empty
GET/projects/{project_uid}/rank-tracker/keywords/{keyword_id}/analyses

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
keyword_id*integer

Project-scoped numeric keyword ID returned by the keyword list.

Range1 <= value

Query Parameters

limit?integer

Maximum records to return. Defaults to 50.

Range1 <= value <= 100
Default50
cursor?string

Opaque cursor returned by the prior response. Do not construct or alter it.

Lengthlength <= 512

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/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  }}
GET/projects/{project_uid}/rank-tracker/keywords/{keyword_id}/analyses/{analysis_id}/results

Returns stored organic rows and explicit scan coverage. This does not run a live search.

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
keyword_id*integer

Project-scoped numeric keyword ID returned by the keyword list.

Range1 <= value
analysis_id*integer

Project-scoped numeric analysis ID returned by the analysis list.

Range1 <= value

Response 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"        ]      }    ]  }}
GET/projects/{project_uid}/rank-tracker/segments

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$

Query Parameters

device?string
Default"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  }}
POST/projects/{project_uid}/rank-tracker/segments

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[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  }}
POST/projects/{project_uid}/rank-tracker/segments/preview

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[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"    ]  }}
PATCH/projects/{project_uid}/rank-tracker/segments/{segment_id}

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
segment_id*integer

Project-scoped numeric segment ID returned by the segment list.

Range1 <= value

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 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  }}
DELETE/projects/{project_uid}/rank-tracker/segments/{segment_id}

Authorization

bearerApiKey
AuthorizationBearer <token>

Create a REST API key in Settings > Connected Apps. MCP credentials do not authenticate this API.

In: header

Path Parameters

project_uid*string

Accessible project UID. Discover it with GET /projects; do not guess it.

Match^[a-z0-9]{10}$
segment_id*integer

Project-scoped numeric segment ID returned by the segment list.

Range1 <= value

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X DELETE "https://example.com/projects/string/rank-tracker/segments/1"
Empty