List tracked keywords
curl --request GET \
--url https://api.snowseo.com/v3/rank-tracking/keywords \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/rank-tracking/keywords"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/rank-tracking/keywords', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snowseo.com/v3/rank-tracking/keywords",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/rank-tracking/keywords"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/rank-tracking/keywords")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/rank-tracking/keywords")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"keywordId": "<string>",
"keyword": "<string>",
"countryId": "<string>",
"languageId": "<string>",
"locationCriteriaId": 123,
"locationCanonicalName": "<string>",
"position": 123,
"active": true,
"status": "completed",
"refreshedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"isTracked": true,
"trackingId": "<string>",
"monthlyVolume": 123,
"difficulty": "<string>",
"competitionScore": 123,
"cpc": 123,
"intent": "<string>"
}
],
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Rank Tracking
Tracked Keywords
List all keywords you’re tracking, with targeting, current position and keyword metrics.
GET
/
v3
/
rank-tracking
/
keywords
List tracked keywords
curl --request GET \
--url https://api.snowseo.com/v3/rank-tracking/keywords \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/rank-tracking/keywords"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.snowseo.com/v3/rank-tracking/keywords', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://api.snowseo.com/v3/rank-tracking/keywords",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/rank-tracking/keywords"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.snowseo.com/v3/rank-tracking/keywords")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/rank-tracking/keywords")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"items": [
{
"id": "<string>",
"keywordId": "<string>",
"keyword": "<string>",
"countryId": "<string>",
"languageId": "<string>",
"locationCriteriaId": 123,
"locationCanonicalName": "<string>",
"position": 123,
"active": true,
"status": "completed",
"refreshedAt": "<string>",
"createdAt": "<string>",
"updatedAt": "<string>",
"isTracked": true,
"trackingId": "<string>",
"monthlyVolume": 123,
"difficulty": "<string>",
"competitionScore": 123,
"cpc": 123,
"intent": "<string>"
}
],
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}{
"success": true,
"error": "<string>",
"code": "<string>",
"message": "<string>",
"reference": "<string>"
}Get the keywords you’re tracking for a team (25 per page; send
pageSize=all for every keyword, page to move through them, and search to match text anywhere in the keyword), with its country, language, location, current average position, tracking status and keyword metrics (volume, difficulty, CPC, intent). Inactive (untracked) keywords are included only with includeInactive=true.
This is the lightweight list. For daily position history and trends use Tracked Keywords Summary; for the paginated, filterable table use Tracked Keywords Table.Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Query Parameters
Team ID
When true, also returns soft-untracked (active=false) keywords so the UI can offer re-tracking. Defaults to false (active only).
Case-insensitive text to match anywhere in the keyword.
1-based page. Default 1.
Rows per page (max 1000), or 'all'. Every response reports total and totalPages.
Was this page helpful?

