curl --request GET \
--url https://api.snowseo.com/v3/pages/folders \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/pages/folders"
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/pages/folders', 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/pages/folders",
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/pages/folders"
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/pages/folders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/pages/folders")
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{
"path": "<string>",
"folders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"childFolders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"childFolders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
]
}
]
}
]
}
],
"pages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"pagination": {
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
},
"groupOrder": [
"<string>"
],
"analyticsPaths": [
"<string>"
],
"analyticsPageviews": 123,
"analyticsPageviewsChange": 123,
"breadcrumb": [
{
"path": "<string>",
"name": "<string>"
}
],
"pagesTotals": {
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123
},
"totals": {
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123
},
"series": [
{
"date": "<string>",
"clicks": 123,
"impressions": 123,
"position": 123
}
],
"connected": true,
"startDate": "<string>",
"endDate": "<string>"
}List Page Folders
List URL folders with aggregated metrics, health scores, and server-side pagination.
curl --request GET \
--url https://api.snowseo.com/v3/pages/folders \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.snowseo.com/v3/pages/folders"
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/pages/folders', 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/pages/folders",
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/pages/folders"
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/pages/folders")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/pages/folders")
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{
"path": "<string>",
"folders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"childFolders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"childFolders": [
{
"path": "<string>",
"name": "<string>",
"url": "<string>",
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123,
"subfolders": 123,
"visitors": 123,
"visitorsChange": 123,
"topPages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
]
}
]
}
]
}
],
"pages": [
{
"url": "<string>",
"path": "<string>",
"title": "<string>",
"statusCode": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"auditScore": 123,
"indexVerdict": "<string>",
"aiCitations": 123,
"visitors": 123,
"visitorsChange": 123
}
],
"pagination": {
"page": 123,
"pageSize": 123,
"total": 123,
"totalPages": 123
},
"groupOrder": [
"<string>"
],
"analyticsPaths": [
"<string>"
],
"analyticsPageviews": 123,
"analyticsPageviewsChange": 123,
"breadcrumb": [
{
"path": "<string>",
"name": "<string>"
}
],
"pagesTotals": {
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123
},
"totals": {
"pages": 123,
"clicks": 123,
"impressions": 123,
"ctr": 123,
"position": 123,
"keywords": 123,
"keywordsChange": 123,
"auditScore": 123,
"auditedPages": 123,
"clicksChange": 123,
"impressionsChange": 123,
"ctrChange": 123,
"positionChange": 123,
"aiCitations": 123
},
"series": [
{
"date": "<string>",
"clicks": 123,
"impressions": 123,
"position": 123
}
],
"connected": true,
"startDate": "<string>",
"endDate": "<string>"
}page or pageSize it returns every folder. Send either to get one page of rows with the pagination totals.
Visitor counts need analyticsProvider set to the brand’s connected analytics integration (ga, posthog, plausible or snow). Sorting by visitors or visitorsChange without it returns 400.Authorizations
Your SnowSEO API key (sk_...).
Query Parameters
Team ID
Start date (YYYY-MM-DD on the team's calendar).
End date (YYYY-MM-DD on the team's calendar). A start with no end runs to today; an end with no start means All Time.
Days back from today on the team's calendar, converted to startDate/endDate. Ignored when startDate or endDate is set. Defaults to 30.
x >= 1ISO-3 country code to filter Search Console rows by.
Device filter: desktop, mobile or tablet.
Search type: web, image, video or news.
1-based page of rows. Omit page and pageSize for every row, unpaginated.
x >= 1Rows per page, or 'all'.
Matches folder and page names, page URLs and top pages.
name, visitors, position, keywords, auditScore, aiCitations, clicks, impressions, ctr, visitorsChange, positionChange, keywordsChange, clicksChange, impressionsChange, ctrChange asc, desc 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 Folder to list, e.g. /blog. Defaults to / (the site root).
Response
Default Response
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Was this page helpful?

