Export complete datasets for selected source sections
curl --request POST \
--url https://api.snowseo.com/v3/exports/data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"teamId": "<string>",
"sections": [
"<string>"
],
"endDate": "2023-12-25",
"startDate": "2023-12-25",
"filters": {
"search": "<string>",
"keywords": [
"<string>"
],
"groups": {},
"country": "<string>",
"device": "<string>",
"type": "<string>",
"sortBy": "<string>",
"intent": "<string>",
"promptTypes": []
},
"selection": {
"mode": "ids",
"ids": [
"<string>"
],
"section": "<string>"
}
}
'import requests
url = "https://api.snowseo.com/v3/exports/data"
payload = {
"teamId": "<string>",
"sections": ["<string>"],
"endDate": "2023-12-25",
"startDate": "2023-12-25",
"filters": {
"search": "<string>",
"keywords": ["<string>"],
"groups": {},
"country": "<string>",
"device": "<string>",
"type": "<string>",
"sortBy": "<string>",
"intent": "<string>",
"promptTypes": []
},
"selection": {
"mode": "ids",
"ids": ["<string>"],
"section": "<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({
teamId: '<string>',
sections: ['<string>'],
endDate: '2023-12-25',
startDate: '2023-12-25',
filters: {
search: '<string>',
keywords: ['<string>'],
groups: {},
country: '<string>',
device: '<string>',
type: '<string>',
sortBy: '<string>',
intent: '<string>',
promptTypes: []
},
selection: {mode: 'ids', ids: ['<string>'], section: '<string>'}
})
};
fetch('https://api.snowseo.com/v3/exports/data', 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/exports/data",
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([
'teamId' => '<string>',
'sections' => [
'<string>'
],
'endDate' => '2023-12-25',
'startDate' => '2023-12-25',
'filters' => [
'search' => '<string>',
'keywords' => [
'<string>'
],
'groups' => [
],
'country' => '<string>',
'device' => '<string>',
'type' => '<string>',
'sortBy' => '<string>',
'intent' => '<string>',
'promptTypes' => [
]
],
'selection' => [
'mode' => 'ids',
'ids' => [
'<string>'
],
'section' => '<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/exports/data"
payload := strings.NewReader("{\n \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<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/exports/data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/exports/data")
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 \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_bodyExports
Export Data
Stream dataset exports across rank tracking, GSC, Bing, analytics, AI visibility, on-page SEO, and outreach.
POST
/
v3
/
exports
/
data
Export complete datasets for selected source sections
curl --request POST \
--url https://api.snowseo.com/v3/exports/data \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"teamId": "<string>",
"sections": [
"<string>"
],
"endDate": "2023-12-25",
"startDate": "2023-12-25",
"filters": {
"search": "<string>",
"keywords": [
"<string>"
],
"groups": {},
"country": "<string>",
"device": "<string>",
"type": "<string>",
"sortBy": "<string>",
"intent": "<string>",
"promptTypes": []
},
"selection": {
"mode": "ids",
"ids": [
"<string>"
],
"section": "<string>"
}
}
'import requests
url = "https://api.snowseo.com/v3/exports/data"
payload = {
"teamId": "<string>",
"sections": ["<string>"],
"endDate": "2023-12-25",
"startDate": "2023-12-25",
"filters": {
"search": "<string>",
"keywords": ["<string>"],
"groups": {},
"country": "<string>",
"device": "<string>",
"type": "<string>",
"sortBy": "<string>",
"intent": "<string>",
"promptTypes": []
},
"selection": {
"mode": "ids",
"ids": ["<string>"],
"section": "<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({
teamId: '<string>',
sections: ['<string>'],
endDate: '2023-12-25',
startDate: '2023-12-25',
filters: {
search: '<string>',
keywords: ['<string>'],
groups: {},
country: '<string>',
device: '<string>',
type: '<string>',
sortBy: '<string>',
intent: '<string>',
promptTypes: []
},
selection: {mode: 'ids', ids: ['<string>'], section: '<string>'}
})
};
fetch('https://api.snowseo.com/v3/exports/data', 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/exports/data",
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([
'teamId' => '<string>',
'sections' => [
'<string>'
],
'endDate' => '2023-12-25',
'startDate' => '2023-12-25',
'filters' => [
'search' => '<string>',
'keywords' => [
'<string>'
],
'groups' => [
],
'country' => '<string>',
'device' => '<string>',
'type' => '<string>',
'sortBy' => '<string>',
'intent' => '<string>',
'promptTypes' => [
]
],
'selection' => [
'mode' => 'ids',
'ids' => [
'<string>'
],
'section' => '<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/exports/data"
payload := strings.NewReader("{\n \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<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/exports/data")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<string>\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.snowseo.com/v3/exports/data")
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 \"teamId\": \"<string>\",\n \"sections\": [\n \"<string>\"\n ],\n \"endDate\": \"2023-12-25\",\n \"startDate\": \"2023-12-25\",\n \"filters\": {\n \"search\": \"<string>\",\n \"keywords\": [\n \"<string>\"\n ],\n \"groups\": {},\n \"country\": \"<string>\",\n \"device\": \"<string>\",\n \"type\": \"<string>\",\n \"sortBy\": \"<string>\",\n \"intent\": \"<string>\",\n \"promptTypes\": []\n },\n \"selection\": {\n \"mode\": \"ids\",\n \"ids\": [\n \"<string>\"\n ],\n \"section\": \"<string>\"\n }\n}"
response = http.request(request)
puts response.read_bodyStreams complete datasets for selected source sections using newline-delimited JSON (
Other sections use their own name as the key.
If a source returns truncated data, the stream ends with an
application/x-ndjson).
Periodic heartbeat events { "type": "heartbeat" } are sent while the export prepares, followed by a { "type": "complete", "data": ... } or { "type": "error", "message": string } event.
Supported Sources and Sections
| Source | Allowed Sections |
|---|---|
gsc | overview, summary, topPages, searchQueries, devices, countries |
bing | overview, summary, topPages, searchQueries |
analytics | trend, pages, sources, devices, countries |
rank-tracking | trackedKeywords, topKeywords, keywordChanges, distributionTrend |
ai-visibility | promptResponses, sources, brandMentions, promptsSummary |
outreach | prospects, contacts, people, pages, emails |
on-page-seo | seoPages, pageSpeed, geoPages, linkPages |
provider applies to the analytics source only and defaults to ga.
Validation Errors
Requests are validated before streaming starts, so these failures return a plain JSON400, not an NDJSON event:
Invalid export sections or date range.- a section is not allowed for the source,startDateis afterendDate,selection.sectionis not allowed for the source, or aselectionhas nosection(onlyai-visibilityandoutreachmay omit it).This export section does not support row selection.
Row Selection
selection limits the export to chosen rows. These sections accept it:
| Source | Selectable Sections |
|---|---|
gsc | topPages, searchQueries, devices, countries |
bing | topPages, searchQueries |
analytics | pages, sources, countries |
rank-tracking | trackedKeywords, topKeywords, keywordChanges |
ai-visibility, outreach | Selection without a section |
Response Keys
The keys insidecomplete.data are not always the section names.
| Source | Section | Key in data |
|---|---|---|
gsc, bing | overview, summary | stats |
analytics | trend | chart |
analytics | devices | devices, browsers, os |
on-page-seo | seoPages | crawledPages |
on-page-seo | pageSpeed | crawledPages, crawledPagesDesktop |
on-page-seo | geoPages | geoPages |
on-page-seo | linkPages | linkGraph |
ai-visibility | all sections | prompts, plus details for promptResponses, sources, and brandMentions |
outreach | emails | emails, messages |
outreach | contacts | No key of its own (rows come from prospects) |
error event instead of partial data.Authorizations
bearerAuthapiKey
Your SnowSEO API key (sk_...).
Body
application/json
Team ID.
Minimum string length:
1Which product's data to export.
Available options:
gsc, bing, analytics, rank-tracking, ai-visibility, outreach, on-page-seo Sections of the source to include. Each source allows its own set.
Minimum array length:
1End of the period.
Start of the period. Omit for All Time (from the first data). on-page-seo ignores it and exports the current audit.
Analytics provider for the analytics source.
Available options:
ga, posthog, plausible, snow Source-specific filters, the same ones the matching table applies.
Show child attributes
Show child attributes
Export only these row IDs, or every row except these.
- Option 1
- Option 2
Show child attributes
Show child attributes
Response
200
Default Response
Was this page helpful?

