Tracked pages
The watchlist: add a URL, list what is watched, stop watching one.
Tracked pages are the watchlist: the URLs this workspace cares about, analysed on a schedule and compared over time. Adding one through the API is the same as adding it in the dashboard.
GET /tracked-pages
List tracked pages
Every page this workspace watches, with its latest score.
Query parameters
| Name | Type | Notes | |
|---|---|---|---|
limit | integer | optional | 1 to 100. Defaults to 25. |
offset | integer | optional | How many to skip. |
Request
curl "https://webrankpage.com/api/v1/tracked-pages" \
-H "Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c"<?php
$ch = curl_init('https://webrankpage.com/api/v1/tracked-pages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c',
],
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);// Node 18+, or any server-side runtime. Never in browser code:
// an API key in a page is readable by anyone who opens it.
const response = await fetch('https://webrankpage.com/api/v1/tracked-pages', {
headers: {
Authorization: `Bearer ${process.env.WEBRANKPAGE_KEY}`,
},
});
const data = await response.json();
console.log(data);import requests
response = requests.get(
'https://webrankpage.com/api/v1/tracked-pages',
headers={'Authorization': 'Bearer wrp_live_8fKp2mQx9tR4vN7c'},
)
print(response.json())require 'net/http'
require 'json'
uri = URI('https://webrankpage.com/api/v1/tracked-pages')
request = Net::HTTP::Get.new(uri)
request['Authorization'] = 'Bearer wrp_live_8fKp2mQx9tR4vN7c'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.parse(response.body)package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
req, _ := http.NewRequest("GET", "https://webrankpage.com/api/v1/tracked-pages", nil)
req.Header.Set("Authorization", "Bearer wrp_live_8fKp2mQx9tR4vN7c")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]interface{}
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}Response
{
"tracked_pages": [
{
"id": "aZ9x2Kq",
"url": "https://onbixo.com/pricing",
"label": "Pricing",
"score": 84,
"grade": "A-",
"last_run_at": "2026-09-24T09:14:02+00:00"
}
],
"total": 1
}POST /tracked-pages
Track a page
Adds a URL to the watchlist. Tracking a page already tracked updates its label rather than creating a duplicate.
Body fields
| Name | Type | Notes | |
|---|---|---|---|
url | string | required | The page to watch. |
label | string | optional | A name for your own use. Defaults to the page title. |
Request
curl -X POST "https://webrankpage.com/api/v1/tracked-pages" \
-H "Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c" \
-H "Content-Type: application/json" \
-d '{"url": "https://onbixo.com/pricing"}'<?php
$ch = curl_init('https://webrankpage.com/api/v1/tracked-pages');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c',
'Content-Type: application/json',
],
CURLOPT_CUSTOMREQUEST => 'POST',
CURLOPT_POSTFIELDS => json_encode([
'url' => 'https://onbixo.com/pricing',
]),
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);// Node 18+, or any server-side runtime. Never in browser code:
// an API key in a page is readable by anyone who opens it.
const response = await fetch('https://webrankpage.com/api/v1/tracked-pages', {
method: 'POST',
headers: {
Authorization: `Bearer ${process.env.WEBRANKPAGE_KEY}`,
'Content-Type': 'application/json',
},
body: JSON.stringify({"url": "https://onbixo.com/pricing"}),
});
const data = await response.json();
console.log(data);import requests
response = requests.post(
'https://webrankpage.com/api/v1/tracked-pages',
headers={'Authorization': 'Bearer wrp_live_8fKp2mQx9tR4vN7c'},
json={'url': 'https://onbixo.com/pricing'},
)
print(response.json())require 'net/http'
require 'json'
uri = URI('https://webrankpage.com/api/v1/tracked-pages')
request = Net::HTTP::Post.new(uri)
request['Authorization'] = 'Bearer wrp_live_8fKp2mQx9tR4vN7c'
request['Content-Type'] = 'application/json'
request.body = { 'url' => 'https://onbixo.com/pricing' }.to_json
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.parse(response.body)package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body := bytes.NewBufferString(`{"url": "https://onbixo.com/pricing"}`)
req, _ := http.NewRequest("POST", "https://webrankpage.com/api/v1/tracked-pages", body)
req.Header.Set("Authorization", "Bearer wrp_live_8fKp2mQx9tR4vN7c")
req.Header.Set("Content-Type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]interface{}
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}Response
{
"tracked_page": {
"id": "aZ9x2Kq",
"url": "https://onbixo.com/pricing",
"label": "Pricing"
}
}DELETE /tracked-pages/{id}
Stop tracking a page
Removes it from the watchlist. The analyses already run are kept: this stops future ones rather than erasing history.
Request
curl -X DELETE "https://webrankpage.com/api/v1/tracked-pages/594" \
-H "Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c"<?php
$ch = curl_init('https://webrankpage.com/api/v1/tracked-pages/594');
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer wrp_live_8fKp2mQx9tR4vN7c',
],
CURLOPT_CUSTOMREQUEST => 'DELETE',
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($response);// Node 18+, or any server-side runtime. Never in browser code:
// an API key in a page is readable by anyone who opens it.
const response = await fetch('https://webrankpage.com/api/v1/tracked-pages/594', {
method: 'DELETE',
headers: {
Authorization: `Bearer ${process.env.WEBRANKPAGE_KEY}`,
},
});
const data = await response.json();
console.log(data);import requests
response = requests.delete(
'https://webrankpage.com/api/v1/tracked-pages/594',
headers={'Authorization': 'Bearer wrp_live_8fKp2mQx9tR4vN7c'},
)
print(response.json())require 'net/http'
require 'json'
uri = URI('https://webrankpage.com/api/v1/tracked-pages/594')
request = Net::HTTP::Delete.new(uri)
request['Authorization'] = 'Bearer wrp_live_8fKp2mQx9tR4vN7c'
response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
http.request(request)
end
puts JSON.parse(response.body)package main
import (
"encoding/json"
"fmt"
"net/http"
)
func main() {
req, _ := http.NewRequest("DELETE", "https://webrankpage.com/api/v1/tracked-pages/594", nil)
req.Header.Set("Authorization", "Bearer wrp_live_8fKp2mQx9tR4vN7c")
res, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer res.Body.Close()
var data map[string]interface{}
json.NewDecoder(res.Body).Decode(&data)
fmt.Println(data)
}Response
{
"deleted": true
}