curl --request GET \
--url https://api.snowseo.com/v3/seo-audit/crawled-pages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/seo-audit/crawled-pages"
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/seo-audit/crawled-pages', 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/seo-audit/crawled-pages",
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/seo-audit/crawled-pages"
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/seo-audit/crawled-pages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/seo-audit/crawled-pages")
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{
"summary": {
"total": 123,
"auditable": 123,
"excluded": 123,
"audited": 123,
"lastAuditedAt": "<string>",
"pageSpeedTested": 123,
"pageSpeedLastTestedAt": "<string>"
},
"pages": [
{
"id": "<string>",
"url": "<string>",
"title": "<string>",
"overallScore": 123,
"techScore": 123,
"contentScore": 123,
"geoScore": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"excluded": true,
"lastIndexNowSubmittedAt": "<string>",
"pageSpeedScore": 123,
"linkDistribution": {},
"metadata": {}
}
]
}List Crawled Pages
A paginated inventory of pages discovered or crawled for a brand, with scores and status.
curl --request GET \
--url https://api.snowseo.com/v3/seo-audit/crawled-pages \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/seo-audit/crawled-pages"
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/seo-audit/crawled-pages', 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/seo-audit/crawled-pages",
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/seo-audit/crawled-pages"
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/seo-audit/crawled-pages")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/seo-audit/crawled-pages")
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{
"summary": {
"total": 123,
"auditable": 123,
"excluded": 123,
"audited": 123,
"lastAuditedAt": "<string>",
"pageSpeedTested": 123,
"pageSpeedLastTestedAt": "<string>"
},
"pages": [
{
"id": "<string>",
"url": "<string>",
"title": "<string>",
"overallScore": 123,
"techScore": 123,
"contentScore": 123,
"geoScore": 123,
"createdAt": "<string>",
"updatedAt": "<string>",
"excluded": true,
"lastIndexNowSubmittedAt": "<string>",
"pageSpeedScore": 123,
"linkDistribution": {},
"metadata": {}
}
]
}analyticsProvider (ga, posthog, plausible or snow) to add each page’s visitor count, over startDate and endDate or days (see Date Windows). Sorting by visitors without it returns 400.
With fields=summary the response carries counts only: summary includes pageSpeedTested, the number of pages with a PageSpeed result, and pageSpeedLastTestedAt, the most recent PageSpeed test time across them.Authorizations
Your SnowSEO API key (sk_...).
Query Parameters
SnowSEO team ID, as returned by list_teams.
1-based page. Default 1.
Rows per page (max 1000), or 'all'. Every response reports total and totalPages.
Matches the page URL or title.
page, url, visitors, indexingVerdict, technical, content, geo, pageSpeed, lastAuditedAt, performance, accessibility, bestPractices, seo, fetchedAt, lastIndexNowSubmittedAt Pages to leave out. Repeat for several URLs.
Only pages where any of these catalogue issues is unresolved in the latest audit.
Connected analytics integration to read page visitors from: ga (Google Analytics), posthog, plausible or snow (Snow Analytics). Without it, rows carry no visitor counts, and sorting by visitors returns 400.
ga, posthog, plausible, snow Start of the visitor-count window, YYYY-MM-DD.
End of the visitor-count window, YYYY-MM-DD.
Days back from today on the team's calendar, converted to startDate/endDate. Ignored when startDate or endDate is set. Defaults to 30.
x >= 1Which PageSpeed scores to return. Defaults to both, the average of mobile and desktop.
mobile, desktop, both asc, desc Pages excluded by crawl rules. Defaults to all, with excluded pages flagged.
all, included, excluded 'full' adds each page's link distribution and crawl metadata. Omitted by default: 'summary' returns only the counts, the last-audited date, and the PageSpeed tested-page count and last test time, without page rows.
list, full, summary Was this page helpful?

