Perform a comprehensive SEO audit on a website
curl --request POST \
--url https://api.snowseo.com/v3/seo-audit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"teamId": "<string>",
"auditType": "single",
"async": "true",
"includeTags": "<string>",
"excludeTags": "<string>",
"urls": [
"<string>"
]
}
'import requests
url = "https://api.snowseo.com/v3/seo-audit"
payload = {
"url": "<string>",
"teamId": "<string>",
"auditType": "single",
"async": "true",
"includeTags": "<string>",
"excludeTags": "<string>",
"urls": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
teamId: '<string>',
auditType: 'single',
async: 'true',
includeTags: '<string>',
excludeTags: '<string>',
urls: ['<string>']
})
};
fetch('https://api.snowseo.com/v3/seo-audit', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>',
'teamId' => '<string>',
'auditType' => 'single',
'async' => 'true',
'includeTags' => '<string>',
'excludeTags' => '<string>',
'urls' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/seo-audit"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snowseo.com/v3/seo-audit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/seo-audit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>",
"title": "<string>",
"suggestedBrand": "<string>",
"seoAudit": {
"overallScore": 123,
"totalTests": 123,
"passedTests": 123,
"timestamp": "2023-11-07T05:31:56Z",
"brandName": "<string>",
"categoryScores": {
"commonSeoIssues": 123,
"serverAndSecurity": 123,
"mobileUsability": 123,
"advancedSeo": 123,
"content": 123,
"socialTags": 123,
"localization": 123,
"performance": 123,
"links": 123
},
"results": {
"commonSeoIssues": {},
"serverAndSecurity": {},
"mobileUsability": {},
"advancedSeo": {},
"content": {},
"socialTags": {},
"localization": {},
"performance": {},
"links": {}
},
"auditSummary": {
"score": 123,
"grade": "<string>",
"status": "<string>",
"categories": {
"commonSeo": {
"score": 123,
"status": "<string>"
},
"security": {
"score": 123,
"status": "<string>"
},
"mobile": {
"score": 123,
"status": "<string>"
},
"advanced": {
"score": 123,
"status": "<string>"
},
"content": {
"score": 123,
"status": "<string>"
},
"socialTags": {
"score": 123,
"status": "<string>"
},
"localization": {
"score": 123,
"status": "<string>"
},
"performance": {
"score": 123,
"status": "<string>"
},
"links": {
"score": 123,
"status": "<string>"
}
}
},
"linkDistribution": {
"total": 123,
"external": 123,
"internal": 123,
"nofollow": 123,
"noreferrer": 123,
"dofollow": 123,
"noopener": 123,
"anchor": 123
},
"metadata": {
"metadataFoundCount": 123,
"chart": {},
"detectedCms": "<string>",
"images": {
"totalImages": 123,
"imageTypeDistribution": {},
"imageIssues": {
"brokenImages": 123,
"bigImages": 123,
"slowImages": 123,
"missingAltTags": 123
}
}
}
},
"screenshot": "<string>",
"success": true,
"message": "<string>",
"totalPages": 123,
"jobId": "<string>",
"results": [
{
"url": "<string>",
"score": 123,
"data": {}
}
]
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Website Analysis
SEO Audit
Run an SEO audit for a page or a website.
POST
/
v3
/
seo-audit
Perform a comprehensive SEO audit on a website
curl --request POST \
--url https://api.snowseo.com/v3/seo-audit \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"url": "<string>",
"teamId": "<string>",
"auditType": "single",
"async": "true",
"includeTags": "<string>",
"excludeTags": "<string>",
"urls": [
"<string>"
]
}
'import requests
url = "https://api.snowseo.com/v3/seo-audit"
payload = {
"url": "<string>",
"teamId": "<string>",
"auditType": "single",
"async": "true",
"includeTags": "<string>",
"excludeTags": "<string>",
"urls": ["<string>"]
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
url: '<string>',
teamId: '<string>',
auditType: 'single',
async: 'true',
includeTags: '<string>',
excludeTags: '<string>',
urls: ['<string>']
})
};
fetch('https://api.snowseo.com/v3/seo-audit', 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",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'url' => '<string>',
'teamId' => '<string>',
'auditType' => 'single',
'async' => 'true',
'includeTags' => '<string>',
'excludeTags' => '<string>',
'urls' => [
'<string>'
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://api.snowseo.com/v3/seo-audit"
payload := strings.NewReader("{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.post("https://api.snowseo.com/v3/seo-audit")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/seo-audit")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"url\": \"<string>\",\n \"teamId\": \"<string>\",\n \"auditType\": \"single\",\n \"async\": \"true\",\n \"includeTags\": \"<string>\",\n \"excludeTags\": \"<string>\",\n \"urls\": [\n \"<string>\"\n ]\n}"
response = http.request(request)
puts response.read_body{
"url": "<string>",
"title": "<string>",
"suggestedBrand": "<string>",
"seoAudit": {
"overallScore": 123,
"totalTests": 123,
"passedTests": 123,
"timestamp": "2023-11-07T05:31:56Z",
"brandName": "<string>",
"categoryScores": {
"commonSeoIssues": 123,
"serverAndSecurity": 123,
"mobileUsability": 123,
"advancedSeo": 123,
"content": 123,
"socialTags": 123,
"localization": 123,
"performance": 123,
"links": 123
},
"results": {
"commonSeoIssues": {},
"serverAndSecurity": {},
"mobileUsability": {},
"advancedSeo": {},
"content": {},
"socialTags": {},
"localization": {},
"performance": {},
"links": {}
},
"auditSummary": {
"score": 123,
"grade": "<string>",
"status": "<string>",
"categories": {
"commonSeo": {
"score": 123,
"status": "<string>"
},
"security": {
"score": 123,
"status": "<string>"
},
"mobile": {
"score": 123,
"status": "<string>"
},
"advanced": {
"score": 123,
"status": "<string>"
},
"content": {
"score": 123,
"status": "<string>"
},
"socialTags": {
"score": 123,
"status": "<string>"
},
"localization": {
"score": 123,
"status": "<string>"
},
"performance": {
"score": 123,
"status": "<string>"
},
"links": {
"score": 123,
"status": "<string>"
}
}
},
"linkDistribution": {
"total": 123,
"external": 123,
"internal": 123,
"nofollow": 123,
"noreferrer": 123,
"dofollow": 123,
"noopener": 123,
"anchor": 123
},
"metadata": {
"metadataFoundCount": 123,
"chart": {},
"detectedCms": "<string>",
"images": {
"totalImages": 123,
"imageTypeDistribution": {},
"imageIssues": {
"brokenImages": 123,
"bigImages": 123,
"slowImages": 123,
"missingAltTags": 123
}
}
}
},
"screenshot": "<string>",
"success": true,
"message": "<string>",
"totalPages": 123,
"jobId": "<string>",
"results": [
{
"url": "<string>",
"score": 123,
"data": {}
}
]
}{
"error": "<string>"
}{
"error": "<string>",
"message": "<string>"
}Run SEO checks for one page or crawl a site for a broader audit. Send the options in the JSON body.
GET /v3/seo-audit supports the same audit with query parameters.
Single-page audits stream newline-delimited JSON (application/x-ndjson). Progress lines contain status; the final line contains url, seoAudit, and screenshot. The seoAudit object includes overall and category scores, individual checks, and an audit summary. Read the final line to get the completed result. If an error occurs after streaming begins, it arrives as an error line while the HTTP status remains 200.
Preview and multiple-page modes return ordinary JSON. Their shape depends on the selected options: a preview includes a suggested brand, a queued audit includes a jobId, and a synchronous multiple-page audit includes results.
A website-wide audit can take time and may continue in the background. Check the audit status endpoints before starting another run for the same site.
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Body
application/json
URL to audit (https:// prefixed automatically)
Team ID (required for async multiple mode)
Audit mode: single page or deep multi-page crawl
Available options:
single, multiple Enable async background processing (multiple mode only)
Available options:
true, false HTML tags to include during crawl
HTML tags to exclude during crawl
Batch of URLs to audit (alternative to url for Audit Selected). Requires teamId.
Minimum array length:
1Response
Preview and multi-page requests return JSON. Single-page audits stream status updates followed by the final result as NDJSON.
Was this page helpful?

