All API requests must have the following base URL: /api/v2/{API_KEY}/
All standard API responses are formatted as either XML or JSON. XML responses are the default. For JSON responses, add format=json
to the request URL query string.
In most cases, the object(s) returned by a particular endpoint will not contain any sub-collections for that object type. Rather, each object will include a RequestUrl
value, which is a reference to another endpoint where any sub-data contained within that result can be retrieved in full. For example, each project returned by the /projects/list endpoint will contain a pre-generated RequestUrl
where you can retrieve the sites within that project; each site returned by /sites/list will contain a RequestUrl
value to retrieve that site’s keywords; and so on.
The default daily limit for API calls is 1,000 calls per day. The daily count resets every night at midnight UTC. If you would like to exceed the daily limit, just talk to us.
API calls
- Response codes The API will return an HTTP response code of 200 for all correct requests. These other response codes will indicate errors.
- Projects: List This request returns all projects saved under your account.
- Projects: Create This request creates a new project under your account.
- Projects: Update This request updates a project’s name.
- Projects: Delete This request deletes a project.
- Sites: All This request returns all sites saved under your account.
- Sites: List This request returns all sites saved under the specified project id.
- Sites: Ranking Distributions This request returns all ranking distribution records for Google for a site with the specified id.
- Sites: Create This request creates a new site under the specified project id. When a site is created, it is automatically placed within a folder called “api” within your chosen project.
- Sites: Update This request updates a site under the specified id.
- Sites: Delete This request deletes a site under the specified id.
- Tags: List This request returns all tags saved under the specified site.
- Tags: Ranking Distributions This request returns all ranking distribution records for Google for a tag with the specified id.
- Keywords: List This request returns all keywords saved under the specified site.
- Keywords: Create This request creates new keyword(s).
- Keywords: Delete This request deletes a keyword or multiple keywords with the specified id(s).
- Rankings: List This request returns all rankings archived for specified keyword and date range. Each response contains a maximum of 30 days.
- SERPs: Show This request returns the archived SERP for the specified search engine and date for a specified keyword.
- SoV: Sites This request returns the SoV score for each competitor domain that appears on the SERP for a specified site.
- SoV: Tags This request returns the SoV score for each competitor domain that appears on the SERP for a specified tag.
- Most Frequent Domains: Sites This request returns the competitor domains most frequently in the top 10 for the site specified for the engine specified.
- Most Frequent Domains: Tags This request returns the competitor domains most frequently in the top 10 for the tag specified for the engine specified.
- Subaccounts: List This request displays the user and API key information for all subaccounts for a given admin user.
- Billing These requests provide data as seen within your billing summary.
Note that some bulk job types are included as a part of STAT’s standard API, while others are part of our optional paid specialty API services. See Overview: STAT API for more info.
- Bulk Export Jobs: List This request returns all bulk jobs currently stored in the system.
- Bulk Export Jobs: Ranks This request creates a new bulk ranking job.
- Bulk Export Jobs: Status This request returns the status of the specified bulk job id.
- Bulk Export Jobs: Delete This request deletes the bulk job with the specified ID.
- Bulk Export Jobs: Site Ranking Distributions This request creates a new bulk site ranking distributions job.
- Bulk Export Jobs: Tag Ranking Distributions This request creates a new bulk tag ranking distributions job.
- Bulk: Google HTML SERP, SERP, Google Ads (Optional specialized service) This Bulk:List request returns bulk API archives currently stored in the system in XML and JSON formats.
Response codes
The following are other possible response codes that may be returned. Your API wrapper should anticipate these response codes and deal with them gracefully.
RESPONSE CODE | INDICATES | NOTES |
400 | Bad Request | Request URL is malformed or required request parameters are not included or malformed. Also returned when Ranking from_date is lower than keyword created_at date, or to_date >= today’s date. |
401 | Unauthorized API Key | Unable to verify API Key |
403 | Usage Limit Exceeded | API usage exceeds daily limit |
404 | Not Found | Project/Site/Keyword/SERP was not found |
414 | Request URI Too Large | Reduce the number of characters in your request. |
403 | Too Many Requests | You are currently making more than 1 request per second to the STAT API. Please reduce your request per second and re-try this request. |
500 | Internal Server Error | Bad request. Service does not know how to route this request. See specific requests for possible 500 error messages and meanings. |
503 | Service unavailable | We are currently unable to handle this request, please attempt again at a later time. |
Projects: List
HTTP Method: GET
XML request URL:
/projects/list
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response resultsreturned="11" responsecode="200"> <Result> <Id>1</Id> <Name>celebrity</Name> <TotalSites>3</TotalSites> <CreatedAt>2009-12-18</CreatedAt> <UpdatedAt>2009-12-18</UpdatedAt> <RequestUrl>/sites/list?project_id=1</RequestUrl> </Result> ... </Response>
JSON request URL:
/projects/list?format=json
JSON typical response:
{ "Response":{ "resultsreturned":"11", "responsecode":"200", "Result":[ { "Id":"1", "Name":"celebrity", "TotalSites":"3", "CreatedAt":"2009-12-18", "UpdatedAt":"2009-12-18", "RequestUrl":"/sites/list?project_id=1&format=json" }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
NONE | NONE | NONE |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Project ID |
Name | STRING | Project Name |
TotalSites | INTEGER | Number of sites in project |
CreatedAt | YYYY-MM-DD | Project creation date |
UpdatedAt | YYYY-MM-DD | Project updated at date |
RequestUrl | STRING | Request URL for project sites |
Projects: Create
HTTP Method: GET
XML request URL:
/projects/create?name={projectId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>17</Id> <Name>ABC</Name> <CreatedAt>2011-05-14</CreatedAt> <UpdatedAt>2011-05-14</UpdatedAt> </Result> </Response>
JSON request URL:
/projects/create?name={projectId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"17", "Name":"ABC", "CreatedAt":"2011-05-14", "UpdatedAt":"2011-05-14" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
name | STRING | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Project ID |
Name | STRING | Project Name |
CreatedAt | YYYY-MM-DD | Project creation date |
UpdatedAt | YYYY-MM-DD | Project updated at date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Create project failed | <Errors on the project request> | Project validation errors |
500 | Create project failed | Could not create your project. | Server error |
Projects: Update
HTTP Method: GET
XML request URL:
/projects/update?id={projectId}&name={name}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>17</Id> <Name>DEF</Name> <CreatedAt>2011-05-14</CreatedAt> <UpdatedAt>2011-05-14</UpdatedAt> </Result> </Response>
JSON request URL:
/projects/update?id={projectId}&name={name}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"17", "Name":"DEF", "CreatedAt":"2011-05-14", "UpdatedAt":"2011-05-14" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES | |
name | STRING | YES |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
---|---|---|---|
500 | Project update failed | <Project validation / failure error messages> | Project validation errors (as listed) |
500 | Project update not authorized | You do not have write permission to this project. | |
500 | Project not found | Could not find a project with this id. |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Project ID |
Name | STRING | Project Name |
CreatedAt | YYYY-MM-DD | Project creation date |
UpdatedAt | YYYY-MM-DD | Project updated at date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Project update failed | <Project validation / failure error messages> | Project validation errors (as listed) |
500 | Project update not authorized | You do not have write permission to this project. | |
500 | Project not found | Could not find a project with this id. |
Projects: Delete
HTTP Method: GET
XML request URL:
/projects/delete?id={projectId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>17</Id> </Result> </Response>
JSON request URL:
/projects/delete?id={projectId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"17" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Project ID |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Project not authorized | You do not have write permission to this project. | |
500 | Project not found | Could not find a project with this id. |
Sites: All
HTTP Method: GET
The nextpage value only appears if there is an additional page of results to show. Use the results parameter to control how many results are returned per page (max 5,000).
XML request URL:
/sites/all[?start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" totalresults=”100” resultsreturned="50" nextpage=”/sites/all?start=50”> <Result> <Id>1</Id> <ProjectId>13</ProjectId> <FolderId>22</FolderId> <FolderName>Blog</FolderName> <Title>tourismvancouver.com</Title> <Url>tourismvancouver.com</Url> <Synced>N/A</Synced> <TotalKeywords>63</TotalKeywords> <CreatedAt>2011-01-25</CreatedAt> <UpdatedAt>2011-01-25</UpdatedAt> <RequestUrl>/keywords/list?site_id=1</RequestUrl> </Result> <Result> <Id>2</Id> <ProjectId>13</ProjectId> <FolderId>N/A</FolderId> <FolderName>N/A</FolderName> <Title>perezhilton.com</Title> <Url>perezhilton.com</Url> <Synced>1</Synced> <TotalKeywords>63</TotalKeywords> <CreatedAt>2011-01-25</CreatedAt> <UpdatedAt>2011-01-25</UpdatedAt> <RequestUrl>/keywords/list?site_id=2</RequestUrl> </Result> ... </Response>
JSON request URL:
/sites/all?[start={start}][&results={results}&]format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "totalresults":"100", "resultsreturned":"50", "nextpage":"/sites/all?start=50&format=json", "Result":[ { "Id":"1", "ProjectId":"13", "FolderId":"22", "FolderName":"Blog", "Title":"tourismvancouver.com", "Url":"tourismvancouver.com", "Synced":"N/A", "TotalKeywords":"63", "CreatedAt":"2011-01-25", "UpdatedAt":"2011-01-25", "RequestUrl":"/keywords/list?site_id=1&format=json" }, { "Id":"2", "ProjectId":"13", "FolderId":"N/A", "FolderName":"N/A", "Title":"perezhilton.com", "Url":"perezhilton.com", "Synced":"1", "TotalKeywords":"63", "CreatedAt":"2011-01-25", "UpdatedAt":"2011-01-25", "RequestUrl":"/keywords/list?site_id=2&format=json" }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
start | INTEGER | NO | Default is 0 (zero indexed) |
results | INTEGER | NO | Default is 100 |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Site ID |
ProjectId | INTEGER | ID of the project that contains this site |
FolderId | INTEGER | ID of folder that contains this site |
FolderName | STRING | Name of folder that contains this site |
Title | STRING | Site Title |
Url | STRING | Site URL |
Synced | INTEGER | ID of site that this site is synced with; returns N/A if this is not a synced site |
TotalKeywords | INTEGER | Total number of keywords |
CreatedAt | YYYY-MM-DD | Site creation date |
UpdatedAt | YYYY-MM-DD | Site updated date |
RequestUrl | STRING | Request URL for site’s keywords |
Sites: List
HTTP Method: GET
XML request URL:
/sites/list?project_id={projectId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>1</Id> <FolderId>22</FolderId> <FolderName>Blog</FolderName> <Title>tourismvancouver.com</Title> <Url>tourismvancouver.com</Url> <Synced>N/A</Synced> <TotalKeywords>63</TotalKeywords> <CreatedAt>2011-01-25</CreatedAt> <UpdatedAt>2011-01-25</UpdatedAt> <RequestUrl>/keywords/list?site_id=1</RequestUrl> </Result> <Result> <Id>2</Id> <FolderId>N/A</FolderId> <FolderName>N/A</FolderName> <Title>perezhilton.com</Title> <Url>perezhilton.com</Url> <Synced>1</Synced> <TotalKeywords>63</TotalKeywords> <CreatedAt>2011-01-25</CreatedAt> <UpdatedAt>2011-01-25</UpdatedAt> <RequestUrl>/keywords/list?site_id=2</RequestUrl> </Result> ... </Response>
JSON request URL:
/sites/list?project_id={projectId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":[ { "Id":"1", "FolderId":"22", "FolderName":"Blog", "Title":"tourismvancouver.com", "Url":"tourismvancouver.com", "Synced":"N/A", "TotalKeywords":"63", "CreatedAt":"2011-01-25", "UpdatedAt":"2011-01-25", "RequestUrl":"/keywords/list?site_id=1&format=json" }, { "Id":"2", "FolderId":"N/A", "FolderName":"N/A", "Title":"perezhilton.com", "Url":"perezhilton.com", "Synced":"1", "TotalKeywords":"63", "CreatedAt":"2011-01-25", "UpdatedAt":"2011-01-25", "RequestUrl":"/keywords/list?site_id=2&format=json" }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
project_id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Site ID |
FolderId | INTEGER | ID of folder that contains this site |
FolderName | STRING | Name of folder that contains this site |
Title | STRING | Site Title |
Url | STRING | Site Url |
Synced | INTEGER | ID of site that this site is synced with; returns N/A if this is not a synced site |
TotalKeywords | INTEGER | Total number of keywords |
CreatedAt | YYYY-MM-DD | Site creation date |
UpdatedAt | YYYY-MM-DD | Site updated date |
RequestUrl | STRING | Request URL for site’s keywords |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Project not authorized | You do not have read permission to this project. | |
500 | Project not found | Could not find a project with this id. |
Sites: Ranking Distributions
HTTP Method: GET
The maximum date range can be no greater than 31 days.
XML request URL:
/sites/ranking_distributions?id={siteId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <RankDistribution date="2015-03-15"> <Google> <One>3386</One> <Two>748</Two> <Three>721</Three> <Four>481</Four> <Five>313</Five> <SixToTen>705</SixToTen> <ElevenToTwenty>301</ElevenToTwenty> <TwentyOneToThirty>104</TwentyOneToThirty> <ThirtyOneToForty>57</ThirtyOneToForty> <FortyOneToFifty>37</FortyOneToFifty> <FiftyOneToHundred>124</FiftyOneToHundred> <NonRanking>247</NonRanking> </Google> <GoogleBaseRank> <One>3409</One> <Two>765</Two> <Three>717</Three> <Four>475</Four> <Five>321</Five> <SixToTen>676</SixToTen> <ElevenToTwenty>290</ElevenToTwenty> <TwentyOneToThirty>102</TwentyOneToThirty> <ThirtyOneToForty>53</ThirtyOneToForty> <FortyOneToFifty>36</FortyOneToFifty> <FiftyOneToHundred>125</FiftyOneToHundred> <NonRanking>255</NonRanking> </GoogleBaseRank> </RankDistribution> <RankDistribution date="2013-08-09"> ... </RankDistribution> ... </Response>
JSON request URL:
/sites/ranking_distributions?id={siteId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "RankDistribution":[ { "date":"2015-03-15", "Google":{ "One":"3386", "Two":"748", "Three":"721", "Four":"481", "Five":"313", "SixToTen":"705", "ElevenToTwenty":"301", "TwentyOneToThirty":"104", "ThirtyOneToForty":"57", "FortyOneToFifty":"37", "FiftyOneToHundred":"124", "NonRanking":"247" }, "GoogleBaseRank":{ "One":"3409", "Two":"765", "Three":"717", "Four":"475", "Five":"321", "SixToTen":"676", "ElevenToTwenty":"290", "TwentyOneToThirty":"102", "ThirtyOneToForty":"53", "FortyOneToFifty":"36", "FiftyOneToHundred":"125", "NonRanking":"255" } }, { "date":"2013-08-09", ... }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES | |
from_date | YYYY-MM-DD | YES | |
to_date | YYYY-MM-DD | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
<Result date=” “> | YYYY-MM-DD | Date of ranking result. XML only. |
Date | YYYY-MM-DD | Date of ranking result. JSON only. |
One | INTEGER | # of keywords ranked 1 |
Two | INTEGER | # of keywords ranked 2 |
Three | INTEGER | # of keywords ranked 3 |
Four | INTEGER | # of keywords ranked 4 |
Five | INTEGER | # of keywords ranked 5 |
SixToTen | INTEGER | # of keywords ranked 6-10 |
ElevenToTwenty | INTEGER | # of keywords ranked 11-20 |
TwentyOneToThirty | INTEGER | # of keywords ranked 21-30 |
ThirtyOneToForty | INTEGER | # of keywords ranked 31-40 |
FortyOneToFifty | INTEGER | # of keywords ranked 41-50 |
FiftyOneToHundred | INTEGER | # of keywords ranked 51-100 |
NonRanking | INTEGER | # of non-ranking keywords |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Missing Date | The parameter <date parameter> must be provided. | |
500 | Malformed Date | The parameter <date parameter> must be in the format YYYY-MM-DD. | |
500 | Unavailable date | The requested parameter <date parameter> is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | Data unavailable for some dates | Complete data is not available for the following dates: <affected date list>. Please check the System Status section on help.getstat.com for more information. | |
500 | Bad date | <Date parameter> predates availability of data for this user. | |
500 | Bad dates | The from_date value must be earlier than or equal to the to_date value for this operation. | |
500 | Bad dates | The maximum date range between from_date and to_date is 31 days. | |
500 | Site not authorized | You do not have read permission to this site’s project. | |
500 | Site not found | Could not find a site with this id. |
Sites: Create
HTTP Method: GET
For more information on how the DropWWWPrefix and DropDirectories values work, go to Creating your first project and site.
XML request URL:
/sites/create?project_id={projectId}&url={url}[&drop_www_prefix={boolean}][&drop_directories={boolean}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>146</Id> <ProjectId>13</ProjectId> <Title>google.com</Title> <Url>google.com</Url> <DropWWWPrefix>true</DropWWWPrefix> <DropDirectories>true</DropDirectories> <CreatedAt>2011-05-14</CreatedAt> </Result> </Response>
JSON request URL:
/sites/create?project_id={projectId}&url={url}[&drop_www_prefix={boolean}][&drop_directories={boolean}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"146", "ProjectId":"13", "Title":"google.com", "Url":"google.com", "DropWWWPrefix":"true", "DropDirectories":"true", "CreatedAt":"2011-05-14" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
project_id | INTEGER | YES | |
url | STRING | YES (must start with ‘http://’) | |
drop_www_prefix | BOOLEAN | NO | Default is true |
drop_directories | BOOLEAN | NO | Default is false |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Site ID |
ProjectId | INTEGER | Project ID |
Url | STRING | Site URL |
Title | STRING | Site Title |
DropWWWPrefix | BOOLEAN | Setting for URL matching in SERPs |
DropDirectories | BOOLEAN | Setting for URL matching in SERPs |
CreatedAt | YYYY-MM-DD | Site creation date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Site not created | Could not create the site. | Site creation failed on server side |
500 | Project not authorized | You do not have write permission to this project. | |
500 | Project not found | Could not find a project with this id. |
Sites: Update
HTTP Method: GET
XML request URL:
/sites/update?id={siteId}[&url={url}][&title={title}][&drop_www_prefix={boolean}][&drop_directories={boolean}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>146</Id> <ProjectId>13</ProjectId> <Title>my site</Title> <Url>google.com</Url> <DropWWWPrefix>true</DropWWWPrefix> <DropDirectories>true</DropDirectories> <CreatedAt>2011-05-14</CreatedAt> <UpdatedAt>2011-05-14</UpdatedAt> </Result> </Response>
JSON request URL:
/sites/update?id={siteId}[&url={url}][&title={title}][&drop_www_prefix={boolean}][&drop_directories={boolean}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"146", "ProjectId":"13", "Title":"my site", "Url":"google.com", "DropWWWPrefix":"true", "DropDirectories":"true", "CreatedAt":"2011-05-14", "UpdatedAt":"2011-05-14" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES | |
url | STRING | NO (must start with http://) | |
title | STRING | NO | |
drop_www_prefix | BOOLEAN | NO | |
drop_directories | BOOLEAN | NO |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Site ID |
ProjectId | INTEGER | Project ID |
Url | STRING | Site URL |
Title | STRING | Site Title |
DropWWWPrefix | BOOLEAN | Setting for URL matching in SERPs |
DropDirectories | BOOLEAN | Setting for URL matching in SERPs |
CreatedAt | YYYY-MM-DD | Site creation date |
UpdatedAt | YYYY-MM-DD | Site updated date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Expected more parameters | Expected more parameters. | No parameters passed in |
500 | Site not updated | Could not update the site. | Site update failed on server side |
500 | Site not authorized | You do not have write permission to this site. | |
500 | Site not found | Could not find a site with this id. |
Sites: Delete
HTTP Method: GET
XML request URL:
/sites/delete?id={siteId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>146</Id> </Result> </Response>
JSON request URL:
/sites/delete?id={siteId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"146" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Site ID |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Site not authorized | You do not have write permission to this site’s project. | |
500 | Site not found | Could not find a site with this id. |
Tags: List
Use the results parameter to control how many results are returned per-page (max 5,000).
HTTP Method: GET
XML request URL:
/tags/list?site_id={siteId}[&start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="100" totalresults="223" nextpage="/tags/list?site_id=1&start=100"> <Result> <Id>16900</Id> <Tag>abc</Tag> <Type>Standard</Type> <Keywords> <Id>4525</Id> <Id>4526</Id> </Keywords> </Result> <Result> <Id>16902</Id> <Tag>abcd</Tag> <Type>Dynamic</Type> <Keywords>none</Keywords> </Result> ... </Response>
JSON request URL:
/tags/list?site_id={siteId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"100", "totalresults":"223", "nextpage":"/tags/list?site_id=1&start=100&format=json", "Result":[ { "Id":"16900", "Tag":"abc", "Type":"Standard", "Keywords":{ "Id":[ "4525", "4526" ] } }, { "Id":"16902", "Tag":"abcd", "Type":"Dynamic", "Keywords":"none" } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
site_id | INTEGER | YES | |
start | INTEGER | NO | Default is 0 (zero indexed) |
results | INTEGER | NO | Default is 100 |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Tag ID |
Tag | STRING | Tag Text |
Type | STRING | Value can be either “Standard” or “Dynamic” |
Keywords:Id | STRING | IDs of keywords belonging to the tag |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Site not authorized | You do not have read permission to this site’s project. | |
500 | Site not found | Could not find a site with this id. |
Tags: Ranking Distributions
The maximum date range can be no greater than 31 days.
XML request URL:
/tags/ranking_distributions?id={tagId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <RankDistribution date="2015-03-15"> <Google> <One>3386</One> <Two>748</Two> <Three>721</Three> <Four>481</Four> <Five>313</Five> <SixToTen>705</SixToTen> <ElevenToTwenty>301</ElevenToTwenty> <TwentyOneToThirty>104</TwentyOneToThirty> <ThirtyOneToForty>57</ThirtyOneToForty> <FortyOneToFifty>37</FortyOneToFifty> <FiftyOneToHundred>124</FiftyOneToHundred> <NonRanking>247</NonRanking> </Google> <GoogleBaseRank> <One>3409</One> <Two>765</Two> <Three>717</Three> <Four>475</Four> <Five>321</Five> <SixToTen>676</SixToTen> <ElevenToTwenty>290</ElevenToTwenty> <TwentyOneToThirty>102</TwentyOneToThirty> <ThirtyOneToForty>53</ThirtyOneToForty> <FortyOneToFifty>36</FortyOneToFifty> <FiftyOneToHundred>125</FiftyOneToHundred> <NonRanking>255</NonRanking> </GoogleBaseRank> </RankDistribution>
JSON request URL:
/tags/ranking_distributions?id={tagId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "RankDistribution":[ { "date":"2015-03-15", "Google":{ "One":"3386", "Two":"748", "Three":"721", "Four":"481", "Five":"313", "SixToTen":"705", "ElevenToTwenty":"301", "TwentyOneToThirty":"104", "ThirtyOneToForty":"57", "FortyOneToFifty":"37", "FiftyOneToHundred":"124", "NonRanking":"247" }, "GoogleBaseRank":{ "One":"3409", "Two":"765", "Three":"717", "Four":"475", "Five":"321", "SixToTen":"676", "ElevenToTwenty":"290", "TwentyOneToThirty":"102", "ThirtyOneToForty":"53", "FortyOneToFifty":"36", "FiftyOneToHundred":"125", "NonRanking":"255" } }, { "date":"2013-08-09", ... }, ... ] }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES | |
from_date | YYYY-MM-DD | YES | |
to_date | YYYY-MM-DD | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
<Result date=” “> | YYYY-MM-DD | Date of ranking result. XML only. |
Date | YYYY-MM-DD | Date of ranking result. JSON only. |
One | INTEGER | # of keywords ranked 1 |
Two | INTEGER | # of keywords ranked 2 |
Three | INTEGER | # of keywords ranked 3 |
Four | INTEGER | # of keywords ranked 4 |
Five | INTEGER | # of keywords ranked 5 |
SixToTen | INTEGER | # of keywords ranked 6-10 |
ElevenToTwenty | INTEGER | # of keywords ranked 11-20 |
TwentyOneToThirty | INTEGER | # of keywords ranked 21-30 |
ThirtyOneToForty | INTEGER | # of keywords ranked 31-40 |
FortyOneToFifty | INTEGER | # of keywords ranked 41-50 |
FiftyOneToHundred | INTEGER | # of keywords ranked 51-100 |
NonRanking | INTEGER | # of non-ranking keywords |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Missing Site ID | You must include the site_id parameter to request ranking distribution data for the ‘untagged keywords’ tag. | |
500 | Site not authorized | You do not have read permission to this site’s project. | |
500 | Site not found | Could not find a site with this id. | |
500 | Tag not authorized | You do not have read permission to this tag’s project. | |
500 | Tag not found | Could not find a tag with this id. | |
500 | Missing Date | The parameter <date parameter> must be provided. | |
500 | Malformed Date | The parameter <date parameter> must be in the format YYYY-MM-DD. | |
500 | Unavailable date | The requested parameter <date parameter> is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | Data unavailable for some dates | Complete data is not available for the following dates: <affected date list>. Please check the System Status section on help.getstat.com for more information. | |
500 | Bad date | <Date parameter> predates availability of data for this user. | |
500 | Bad dates | The from_date value must be earlier than or equal to the to_date value for this operation. | |
500 | Bad dates | The maximum date range between from_date and to_date is 31 days. |
Keywords: List
HTTP Method: GET
The nextpage= value contains the URL to retrieve the next page of results. Use the results parameter to control how many results are returned per-page (max 5,000).
XML request URL:
/keywords/list?site_id={siteId}[&start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="63" totalresults=”150” nextpage="/keywords/list?site_id=1&start=1000"> <Result> <Id>11</Id> <Keyword>black celebrity gossip</Keyword> <KeywordMarket>US-en</KeywordMarket> <KeywordLocation>Boston</KeywordLocation> <KeywordDevice>Smartphone</KeywordDevice> <KeywordTranslation>potins de célébrités noires</KeywordTranslation> <KeywordTags>gossip</KeywordTags> <KeywordStats> <AdvertiserCompetition>0.86748</AdvertiserCompetition> <GlobalSearchVolume>80000</GlobalSearchVolume> <RegionalSearchVolume>54000</RegionalSearchVolume> <LocalSearchTrendsByMonth> <Oct>-</Oct> <Sep>49500</Sep> <Aug>60500</Aug> <Jul>49500</Jul> <Jun>49500</Jun> <May>49500</May> <Apr>49500</Apr> <Mar>49500</Mar> <Feb>49500</Feb> <Jan>49500</Jan> <Dec>40500</Dec> <Nov>49500</Nov> </LocalSearchTrendsByMonth> <CPC>1.42</CPC> </KeywordStats> <KeywordRanking date="2014-07-09"> <Google> <Rank>1</Rank> <BaseRank>1</BaseRank> <Url>www.zillow.com/mortgage-rates/ca/</Url> </Google> </KeywordRanking> <CreatedAt>2011-01-25</CreatedAt> <RequestUrl>/rankings?keyword_id=11&from_date=2011-01-25&to_date=</RequestUrl> </Result> ... </Response>
JSON request URL:
/keywords/list?site_id={siteId}[&start={start}][&results={results}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"63", "totalresults":"150", "nextpage":"/keywords/list?site_id=1&start=1000&format=json", "Result":[ { "Id":"11", "Keyword":"black celebrity gossip", "KeywordMarket":"US-en", "KeywordLocation":"Boston", "KeywordDevice":"Smartphone", "KeywordTranslation":"potins de célébrités noires", "KeywordTags":"gossip", "KeywordStats":{ "AdvertiserCompetition":"0.86748", "GlobalSearchVolume":"80000", "RegionalSearchVolume":"54000", "LocalSearchTrendsByMonth":{ "Oct":"-", "Sep":"49500", "Aug":"60500", "Jul":"49500", "Jun":"49500", "May":"49500", "Apr":"49500", "Mar":"49500", "Feb":"49500", "Jan":"49500", "Dec":"40500", "Nov":"49500" }, "CPC":"1.42" }, "KeywordRanking":{ "date":"2014-07-09", "Google":{ "Rank":"1", "BaseRank":"1", "Url":"www.zillow.com/mortgage-rates/ca/" }, }, "CreatedAt":"2011-01-25", "RequestUrl":"/rankings?keyword_id=11&format=json&from_date=2011-01-25&to_date=" }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
site_id | INTEGER | YES | |
start | INTEGER | NO | Default is 0 (zero indexed) |
results | INTEGER | NO | Default is 100 |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Keyword ID |
Keyword | STRING | Keyword Text |
KeywordMarket | STRING | Global market where keyword is tracked. Formatted at US-en, CA-en, DE-de, etc. |
KeywordLocation | STRING | Location where keyword is tracked. Can be a city name, a state, or a postal code. IE: Boston, 90210, California, etc. When a keyword is not tracked at a local level, the value is blank. |
KeywordDevice | STRING | Default is Desktop. Only other option is Smartphone. |
KeywordTags | STRING (comma separated) | Tags applied to keyword. When tags are unavailable, value will be “none”. |
AdvertiserCompetition | DECIMAL | Value between 0 and 1 (inclusive). When unavailable, value will be -1.0 |
GlobalSearchVolume | INTEGER | When unavailable, value will be -1 |
RegionalSearchVolume | INTEGER | Targeted to KeywordMarket. When unavailable, value will be -1 |
LocalSearchTrends |
INTEGERS | Regional Search Volume numbers for previous 12 months |
CPC | DECIMAL | The cost-per-click for this keyword. |
CreatedAt | YYYY-MM-DD | Keyword creation date |
RequestUrl | STRING | Request URL for keyword’s rankings |
Translation | STRING | The translation of the keyword |
Keywords: Create
Multiple keywords can be separated by commas. You can create keywords that include commas by using a backslash to escape them. For example:
/keywords/create?site_id={siteId}&market=US-en&location=Boston&device=smartphone&keyword=shirt\,shoes
Without the backslash, the code creates two keyword search terms (“shirt” and “shoes”):
/keywords/create?site_id={siteId}&market=US-en&location=Boston&device=smartphone&keyword=shirt,shoes
Tags are optional.
HTTP Method: GET
XML request URL:
/keywords/create?site_id={siteId}&market={market}&keyword={keywords}[&location={location}][&device={device}][&tag={tags}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned=”2”> <Result> <Id>3008</Id> <Keyword>shirt</Keyword> <KeywordMarket>US-en</KeywordMarket> <KeywordLocation>Boston</KeywordLocation> <KeywordDevice>Smartphone</KeywordDevice> <CreatedAt>2011-01-25</CreatedAt> </Result> <Result> <Id>3009</Id> <Keyword>shoes</Keyword> <KeywordMarket>US-en</KeywordMarket> <KeywordLocation>Boston</KeywordLocation> <KeywordDevice>Smartphone</KeywordDevice> <CreatedAt>2011-01-25</CreatedAt> </Result> </Response>
JSON request URL:
/keywords/create?site_id={siteId}&market={market}&keyword={keywords}[&location={location}][&device={device}][&tag={tags}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"2", "Result":[ { "Id":"3008", "Keyword":"shirt", "KeywordMarket":"US-en", "KeywordLocation":"Boston", "KeywordDevice":"Smartphone", "CreatedAt":"2011-01-25" }, { "Id":"3009", "Keyword":"shoes", "KeywordMarket":"US-en", "KeywordLocation":"Boston", "CreatedAt":"2011-01-25" } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
site_id | INTEGER | YES | |
market | STRING | YES | COUNTRY-lang i.e. ‘US-en’ |
keyword | STRING | YES | comma separated |
location | STRING | NO | Any location string i.e. ‘los angeles’ |
device | STRING | NO | ‘desktop’ or ‘smartphone’ |
tag | STRING | NO |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Keyword ID |
Keyword | STRING | Keyword Text |
KeywordMarket | STRING | Global market where keyword is tracked. Formatted at US-en, CA-en, DE-de, etc. |
KeywordLocation | STRING | Location where keyword is tracked. Can be a city name, a state, or a postal code. IE: Boston, 90210, California, etc. When a keyword is not tracked at a local level, the value is blank. |
KeywordDevice | STRING | Default is Desktop. Only other option is Smartphone. |
CreatedAt | YYYY-MM-DD | Keyword creation date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
403 | Keyword limit exceeded | Oops. You have crossed the <keyword limit> keywords trial limit. Please remove the additional <keywords over limit> keyword(s) to proceed. STAT clients are able to track unlimited keywords. If you would like to become a client, write us at support@getSTAT.com |
|
500 | Bad market | The market: <market> is not supported | |
500 | Keyword not created | No new keywords and/or no new tags for existing keywords found in params. | |
500 | Site not authorized | You do not have write permission to this site’s project. | |
500 | Site not found | Could not find a site with this id. | |
500 | Keyword not created | Could not create the keyword. | Keyword creation failed on server side |
Keywords: Delete
When you delete a keyword, all of the historical ranking data for that keyword is permanently erased from your account. If you want to keep the data, you can turn tracking off for a keyword instead. You can delete multiple keywords using comma separated values for id.
HTTP Method: GET
XML request URL:
/keywords/delete?id={keywordId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>3008</Id> </Result> </Response>
JSON request URL:
/keywords/delete?id={keywordId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"3008" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Keyword ID |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Keyword not found | Could not find a keyword with this id. | |
500 | Keyword delete not authorized | You do not have write permission to this keyword’s project. |
Rankings: List
HTTP Method: GET
The nextpage=
value contains the URL to retrieve the next page of results. Each result is separated into three sub-results, one for each search engine.
XML request URL:
/rankings/list?keyword_id={keywordId}[&from_date={YYYY-MM-DD}][&to_date={YYYY-MM-DD}][&start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="30" totalresults=”1000” nextpage="/rankings/list?keyword_id=14&from_date=2011-01-25&to_date=2011-03-13&start=60"> <Result date="2011-01-25"> <Google> <Rank>55</Rank> <Url>http://tourismvancouver.com/5014342/nobody-cares-about-perez-hilton</Url> <BaseRank>50</BaseRank> <RequestUrl>/serps/show?keyword_id=14&engine=google&date=2011-01-25</RequestUrl> </Google> </Result> ... </Response>
JSON request URL:
/rankings/list?keyword_id={keywordId}[&from_date={YYYY-MM-DD}][&to_date={YYYY-MM-DD}][&start={start}][&results={results}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"30", "totalresults":"1000", "nextpage":"/rankings/list?keyword_id=14&from_date=2011-01-25&to_date=2011-03-13&start=60&format=json", "Result":[ { "date":"2011-01-25", "Google":{ "Rank":"55", "Url":"http://tourismvancouver.com/5014342/nobody-cares-about-perez-hilton", "BaseRank":"50", "RequestUrl":"/serps/show?keyword_id=14&engine=google&date=2011-01-25&format=json" } }, { "date":"2011-01-26", ... } ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
keyword_id | INTEGER | YES | |
from_date | YYYY-MM-DD | NO | Default is 100 most recent results |
to_date | YYYY-MM-DD | NO | Default is most recent ranking day |
start | INTEGER | NO | Default is 0 (zero indexedThe starting result for paginated reques |
results | INTEGER | NO | Default is 100 |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
<Result date=” “> | YYYY-MM-DD | Date of ranking result. XML only. |
Date | YYYY-MM-DD | Date of ranking result. JSON only. |
Rank | INTEGER | SERP Result Number (between 0 – 100 inclusive). Rank 0 indicates that site is not ranking in SERP. |
BaseRank | INTEGER | Value defaults to 0 unless engine request parameter = “google”. |
RequestUrl | STRING | Request URL for archived SERP |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Bad From Date | The From Date is earlier than the Keywords Creation Date. | |
500 | Bad To Date | The To Date is in the future. | |
500 | Data unavailable for some dates | Complete data is not available for the following dates: <affected date list>. Please check the System Status section on help.getstat.com for more information. | |
500 | Keyword not found | Could not find a keyword with this id. | |
500 | List rankings not authorized | You do not have read permission to this keyword’s project. |
SERPs: Show
HTTP Method: GET
XML request URL:
/serps/show?keyword_id={keywordId}&engine={engine}&date={YYYY-MM-DD}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <ResultTypes> <ResultType>news</ResultType> <ResultType>amp</ResultType> <ResultType>carousel</ResultType> </ResultTypes> <Rank>2</Rank> <BaseRank></BaseRank> <Url> www.slashgear.com </Url> <Title>Cat Backpacks</Title> <Protocol>https</Protocol> </Result> <Result> <ResultTypes> <ResultType>news</ResultType> <ResultType>amp</ResultType> <ResultType>carousel</ResultType> </ResultTypes> <Rank>2</Rank> <BaseRank></BaseRank> <Url> www.space.com </Url> <Title>Hamster Wheel</Title> <Protocol>https</Protocol> </Result> ... </Response>
JSON request URL:
/serps/show?keyword_id={keywordId}&engine={engine}&date={YYYY-MM-DD}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":[ { "ResultTypes": { "ResultType":[ "amp", "carousel", "news" ] }, "Rank":"2", "BaseRank":"", "Url":"www.slashgear.com", "Title": "Cat Backpacks", "Protocol":"https" }, { "ResultTypes": { "ResultType":[ "amp", "carousel", "news" ] }, "Rank":"2", "BaseRank":"", "Url":"www.space.com", "Title": "Hamster Wheel", "Protocol":"https" } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
keyword_id | INTEGER | YES | |
engine | STRING | YES | ‘google’ |
date | YYYY-MM-DD | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
ResultTypes | OBJECT | Contains an object of type ResultType |
ResultType | STRING or ARRAY | Contains an array of strings or single string value of the type(s) or attribute(s) for a SERP result. The default is ‘regular’, which means the result type is organic. Possible values are: amp, answers, app download, books, carousel, explore, flights, home services, images, jobs, knowledge graph, list, map, news, paragraph, people also ask, places, placesV3, recipes, refine by, related searches, shopping, table, twitter box, unknown, videos |
Rank | INTEGER | SERP Result Number (between Note: All sub-results in a carousel will have the same rank. |
BaseRank | INTEGER | Value defaults to 0 unless engine |
Url | STRING | URL of SERP Result |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Bad Date | The requested date is in the future. | |
500 | Unavailable date | Your requested data is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | SERP not found | Could not find a SERP for this date. | |
500 | Keyword not found | Could not find a keyword with this id. | |
500 | Show SERPs not authorized | You do not have read permission to this keyword’s project. | |
500 | SERP not found | Could not find SERP for the specified date <date>. | Server encountered an error retrieving the SERP |
500 | Server error | An unspecified error occurred on the server. |
SoV: Sites
HTTP Method: GET
The score is calculated on each domain for all the keywords in the site specified. The response contains a date-wise breakdown of each competitor domain, the score, and whether or not it is a pinned site.
XML request URL:
/sites/sov?id={siteId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}[&start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="XX" totalresults="XXXX" nextpage="/[sites/tags]/sov?id=XX&from_date=XXXX-XX-XX&to_date=YYYY-YY-YY&start=XX"> <ShareOfVoice date="XXXX-XX-XX"> <Site> <Domain>xxx.com</Domain> <Share>13.0</Share> <Pinned>false</Pinned> </Site> <Site> <Domain>yyy.com</Domain> <Share>9.0</Share> <Pinned>true</Pinned> </Site> ... </ShareOfVoice> <ShareOfVoice date="YYYY-YY-YY"> <Site> <Domain>xxx.com</Domain> <Share>11.0</Share> <Pinned>false</Pinned> </Site> <Site> <Domain>yyy.com</Domain> <Share>10.0</Share> <Pinned>true</Pinned> </Site> ... </ShareOfVoice> ...
JSON request URL:
/sites/sov?id={siteId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}[&start={start}][&results={results}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"XX", "totalresults":"XXXX", "nextpage":"/[sites/tags]/sov?id=XX&from_date=XXXX-XX-XX&to_date=YYYY-YY-YY&start=XX", "ShareOfVoice":[ { "date":"XXXX-XX-XX", "Site":[ { "Domain":"xxx.com", "Share":"13.0", "Pinned":"false" }, { "Domain":"yyy.com", "Share":"9.0", "Pinned":"true" } ] }, { "date":"YYYY-YY-YY", "Site":[ { "Domain":"xxx.com", "Share":"11.0", "Pinned":"false" }, { "Domain":"yyy.com", "Share":"10.0", "Pinned":"true" } ] } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
id | INTEGER | YES | The ID number of the site |
from_date | STRING | YES | The start date of the reporting period |
to_date | STRING | YES | The end date of the reporting period |
results | INTEGER | NO | The number of results per page. Default is 100; the maximum is 5000. |
start | INTEGER | NO | The starting result for paginated requests (default is 0) |
RESPONSE CODE | ERROR MESSAGE | ERROR STATEMENT |
---|---|---|
400 | Bad request | Expected a ‘<required parameter>’ parameter in your request |
500 | Wrong date format | The <date parameter> must be in the format YYYY-MM-DD. |
500 | Invalid dates | The from_date must be before or the same as the to_date. |
500 | Max date range exceeded | The maximum date range between the from_date and the to_date is 365 days. |
500 | Invalid future date | The to_date is in the future. Use a current or past date instead. |
500 | No SOV data | Share of voice data is not available for the selected to_date. The last date with data is <latest_date>. |
500 | SOV not yet available | Share of voice data is not yet available for this site. |
500 | Not authorized | You don’t have read permissions for this site. |
500 | Site not found | There is no site with this ID number. |
RESPONSE PARAMETER | FORMAT | NOTES |
<ShareOfVoice date=> | STRING | The date for this share of voice percentage |
Domain | STRING | The site with this share of voice percentage |
Share | FLOAT | The share of voice percentage for this site |
Pinned | BOOLEAN | Whether or not the site is pinned |
SoV: Tags
The SoV score is calculated on each domain for all the keywords in the tag specified. The response con-tains a date-wise breakdown of each competitor domain, the score, and whether or not it a pinned site.
HTTP Method: GET
XML request URL:
/tags/sov?id={tagId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}[&start={start}][&results={results}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="XX" totalresults="XXXX" nextpage="/tags/sov?id=XX&from_date=XXXX-XX-XX&to_date=YYYY-YY-YY&start=XX"> <ShareOfVoice date="XXXX-XX-XX"> <Site> <Domain>xxx.com</Domain> <Share>13.0</Share> <Pinned>false</Pinned> </Site> <Site> <Domain>yyy.com</Domain> <Share>9.0</Share> <Pinned>true</Pinned> </Site> ... </ShareOfVoice> <ShareOfVoice date="YYYY-YY-YY"> <Site> <Domain>xxx.com</Domain> <Share>11.0</Share> <Pinned>false</Pinned> </Site> <Site> <Domain>yyy.com</Domain> <Share>10.0</Share> <Pinned>true</Pinned> </Site> ... </ShareOfVoice> ... </Response>
JSON request URL:
/tags/sov?id={tagId}&from_date={YYYY-MM-DD}&to_date={YYYY-MM-DD}[&start={start}][&results={results}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "resultsreturned":"XX", "totalresults":"XXXX", "nextpage":"/tags/sov?id=XX&from_date=XXXX-XX-XX&to_date=YYYY-YY-YY&start=XX", "ShareOfVoice":[ { "date":"XXXX-XX-XX", "Site":[ { "Domain":"xxx.com", "Share":"13.0", "Pinned":"false" }, { "Domain":"yyy.com", "Share":"9.0", "Pinned":"true" } ] }, { "date":"YYYY-YY-YY", "Site":[ { "Domain":"xxx.com", "Share":"11.0", "Pinned":"false" }, { "Domain":"yyy.com", "Share":"10.0", "Pinned":"true" } ] } ]
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
---|---|---|---|
id | INTEGER | YES | The ID number of the tag |
from_date | STRING | YES | The start date of the reporting period |
to_date | STRING | YES | The end date of the reporting period |
results | INTEGER | NO | The number of results per page. Default is 100; the maximum is 5000. |
start | INTEGER | NO | The starting result for paginated requests (default is 0) |
RESPONSE CODE | ERROR MESSAGE | ERROR STATEMENT |
---|---|---|
400 | Bad request | Expected a ‘<required parameter>’ parameter in your request |
500 | Wrong date format | The <date parameter> must be in the format YYYY-MM-DD. |
500 | Invalid dates | The from_date must be before or the same as the to_date. |
500 | Max date range exceeded | The maximum date range between the from_date and the to_date is 365 days. |
500 | Invalid future date | The to_date is in the future. Use a current or past date instead. |
500 | No SOV data | Share of voice data is not available for the selected to_date. The last date with data is <latest_date>. |
500 | SOV not yet available | Share of voice data is not yet available for this tag. |
500 | Not authorized | You do not have read permissions for this tag. |
500 | Tag not found | There is no tag with this ID number. |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
<ShareOfVoice date=> | STRING | The date for this share of voice percentage |
Domain | STRING | The site with this share of voice percentage |
Share | FLOAT | The share of voice percentage for this site |
Pinned | BOOLEAN | Whether or not the site is pinned |
Most Frequent Domains: Sites
STAT tallies which competitors are most frequently in the top 10 for the keyword set by engine and the percentage coverage for this set.
HTTP Method: GET
XML request URL:
/sites/most_frequent_domains?id={siteId}&engine={engine}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Site> <Domain>xxx.com</Domain> <TopTenResults>800</TopTenResults> <ResultsAnalyzed>16800</ResultsAnalyzed> <Coverage>4.76%</Coverage> <AnalyzedOn>XXXX-XX-XX</AnalyzedOn> </Site> <Site> <Domain>yyy.com</Domain> <TopTenResults>686</TopTenResults> <ResultsAnalyzed>16800</ResultsAnalyzed> <Coverage>4.08</Coverage> <AnalyzedOn>XXXX-XX-XX</AnalyzedOn> </Site> ... </Response>
JSON request URL:
/sites/most_frequent_domains?id={siteId}&engine={engine}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Site":[ { "Domain":"xxx.com", "TopTenResults":"800", "ResultsAnalyzed":"16800", "Coverage":"4.76%", "AnalyzedOn":"XXXX-XX-XX" }, { "Domain":"yyy.com", "TopTenResults":"686", "ResultsAnalyzed":"16800", "Coverage":"4.08", "AnalyzedOn":"XXXX-XX-XX" } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
---|---|---|---|
id | INTEGER | YES | The site ID to get data for |
engine | STRING | YES | ‘google’ |
RESPONSE CODE | ERROR MESSAGE | ERROR STATEMENT |
---|---|---|
400 | Bad request | Expected a ‘<required parameter>’ parameter in your request |
500 | Not yet available | Your requested data is not yet available. |
500 | Invalid engine | The engine ‘<engine>’ is invalid. It must be google. |
500 | Not authorized | You do not have read permission for this site. |
500 | Site not found | There is no site with this ID number. |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Domain | STRING | The URL for a site most frequently seen in top-10 results |
TopTenResults | INTEGER | Number of times this site ranked in the top 10 |
ResultsAnalyzed | INTEGER | Number of top-10 SERPs included in analysis |
Coverage | FLOAT | Percent of top-10 SERPs in which this site ranked |
AnalyzedOn | STRING | Date of analysis |
Most Frequent Domains: Tags
STAT tallies which competitors are most frequently in the top 10 for the keyword set by engine and the percentage coverage for this set.
HTTP Method: GET
XML request URL:
/tags/most_frequent_domains?id={tagId}&engine={engine}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Site> <Domain>xxx.com</Domain> <TopTenResults>800</TopTenResults> <ResultsAnalyzed>16800</ResultsAnalyzed> <Coverage>4.76%</Coverage> <AnalyzedOn>XXXX-XX-XX</AnalyzedOn> </Site> <Site> <Domain>yyy.com</Domain> <TopTenResults>686</TopTenResults> <ResultsAnalyzed>16800</ResultsAnalyzed> <Coverage>4.08</Coverage> <AnalyzedOn>XXXX-XX-XX</AnalyzedOn> </Site> ... </Response>
JSON request URL:
/tags/most_frequent_domains?id={tagId}&engine={engine}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Site":[ { "Domain":"xxx.com", "TopTenResults":"800", "ResultsAnalyzed":"16800", "Coverage":"4.76%", "AnalyzedOn":"XXXX-XX-XX" }, { "Domain":"yyy.com", "TopTenResults":"686", "ResultsAnalyzed":"16800", "Coverage":"4.08", "AnalyzedOn":"XXXX-XX-XX" } ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
---|---|---|---|
id | INTEGER | YES | The tag ID to get data for |
engine | STRING | YES | ‘google’ |
RESPONSE CODE | ERROR MESSAGE | ERROR STATEMENT |
---|---|---|
400 | Bad request | Expected a ‘<required parameter>’ parameter in your request |
500 | Not yet available | Your requested data is not yet available. |
500 | Invalid engine | The engine ‘<engine>’ is invalid. It must be one google. |
500 | Not authorized | You do not have read permissions for this tag. |
500 | Tag not found | There is no tag with this ID number. |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Domain | STRING | The URL for a site most frequently seen in top-10 results |
TopTenResults | INTEGER | Number of times this site ranked in the top 10 |
ResultsAnalyzed | INTEGER | Number of top-10 SERPs included in analysis |
Coverage | FLOAT | Percent of top-10 SERPs in which this site ranked |
AnalyzedOn | STRING | Date of analysis |
Subaccounts: List
HTTP Method: GET
XML request URL:
/subaccounts/list
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <User> <Id>3008</Id> <Login>user3008</Login> <ApiKey>540D245230F1638E3F6542F465232534</ApiKey> <CreatedAt>2011-01-25</CreatedAt> </User> ... <User> <Id>3009</Id> <Login>user3009</Login> <ApiKey>697D211110F1611A3F7657F460987222</ApiKey> <CreatedAt>2011-01-26</CreatedAt> <User> <Response>
JSON request URL:
/subaccounts/list?format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "User":[ { "Id":"3008", "Login":"user3008", "ApiKey":"540D245230F1638E3F6542F465232534", "CreatedAt":"2011-01-25" }, { "Id":"3009", "Login":"user3009", "ApiKey":"697D211110F1611A3F7657F460987222", "CreatedAt":"2011-01-26" } ] } }
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | User ID |
Login | STRING | User login name |
ApiKey | STRING | User API key |
CreatedAt | YYYY-MM-DD | User creation date |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
---|---|---|---|
500 | List subaccounts not authorized | You do not have permission to access this data. |
Billing
There are three Billing API requests available:
- Billing: Bill This request provides the data seen on the Bill tab of the billing summary. It includes keyword tracking, optional services and totals.
- Billing: User breakdown This request provides the data seen on the User Breakdown tab of the billing summary. It includes tracked keywords by user, percentage of bill by user and total by user.
- Billing: Site breakdown This request provides the data seen on the Site Breakdown tab of the billing summary. It includes tracked keywords, percentage of bill and site total with site info.
For the most up-to-date Billing API information, please contact our support team: support@getSTAT.com
Bulk Export Jobs: List
The Bulk List API returns data in a paginated format. It always returns the first hundred results when no page is specified. To navigate to subsequent pages, the start parameter can be passed with values at increments of 100. For example, to get to page 2, pass start=100. For page 3, start=200, etc
XML request URL:
/bulk/list
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode=”200”> <Result> <Id>100</Id> <JobType>ranks</JobType> <Format>xml</Format> <Date>2011-02-05</Date> <Status>NotStarted</Status> <Url></Url> <StreamUrl></StreamUrl> <CreatedAt>2011-02-06</CreatedAt> </Result> <Result> <Id>99</Id> <JobType>ranks</JobType> <Format>json</Format> <Date>2014-02-04</Date> <Status>Completed</Status> <Url></Url> <StreamUrl></StreamUrl> <CreatedAt>2014-02-05</CreatedAt> </Result> ... </Response>
JSON request URL:
/bulk/list?format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":[ { "Id":"100", "JobType":"ranks", "Format":"xml", "Date":"2011-02-05", "Status":"NotStarted", "Url":null, "StreamUrl":null, "CreatedAt":"2011-02-06" }, { "Id":"99", "JobType":"ranks", "Format":"json", "Date":"2014-02-04", "Status":"Completed", "Url":null, "StreamUrl":null, "CreatedAt":"2014-02-05" }, ... ] } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
---|---|---|---|
results | INTEGER | NO | The number of results per page. The default is 100; the maximum is 5000. |
start | INTEGER | NO | The starting result for paginated requests (default is 0) |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Id of the Bulk Job |
JobType | STRING | The type of job (ranks,serps, |
Format | STRING | Format of bulk output file. |
Status | STRING | Current Job Status (NotStarted, |
Url | STRING | URL for downloading gzipped job |
StreamUrl | STRING | URL for streaming uncompressed |
CreatedAt | YYYY-MM-DD | Date bulk job was created |
Bulk Export Jobs: Ranks
If no site_id
is passed in, ranks are reported for all sites in the system on the given date. (Note that you cannot create bulk jobs for the current date or dates in the future.) Optionally, pass in one or more site_id
values (comma separated) to report on specific sites.
rank_type
: This parameter changes the call between getting the highest ranks for the keywords for the date with the value highest
, or getting all the ranks for each engine for a keyword for a date with the value all
. Defaults to highest
if not provided.
engines
: This parameter lets you choose which search engines to include in the export, defaulting to Google. Engines can be passed in comma separated to get multiple.
currently_tracked_only
: This parameter will cause the API to output only keywords which currently have tracking on at the time the API request is generated.
crawled_keywords_only
: This parameter causes the API to only include output for keywords that were crawled on the date parameter provided.
HTTP Method: GET
XML request URL:
/bulk/ranks?date={YYYY-MM-DD}[&site_id={siteIds}][&rank_type={ranktype}][&engines={engines}][¤tly_tracked_only={boolean}][&crawled_keywords_only={boolean}]
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode=”200”> <Result> <Id>1</Id> </Result> </Response>
JSON request URL:
/bulk/ranks?date={YYYY-MM-DD}[&site_id={siteIds}][&rank_type={ranktype}][&engines={engines}][¤tly_tracked_only={boolean}][&crawled_keywords_only={boolean}]&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"1" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
date | YYYY-MM-DD | YES | |
site_id | INTEGER | NO | Comma separated list of specific site IDs, default is all sites. |
rank_type | STRING | NO | ‘highest’ or ‘all’. Default is ‘highest’ |
engines | STRING | NO | Default is ‘google’ |
currently_tracked_only | BOOLEAN | NO | Default is false |
crawled_keywords_only | BOOLEAN | NO | Default is false |
RESPONSE PARAMETER | FORMAT | NOTES |
Id | INTEGER | Id of the Bulk Job |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
---|---|---|---|
500 | Missing Date | The parameter date must be provided. | |
500 | Malformed Date | The parameter date must be in the format YYYY-MM-DD. | |
500 | Unavailable date | The requested parameter date is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | Bad Date | <Date parameter> predates availability of data for this user. | |
500 | Invalid Engine | The engine <engine> is invalid. It must be one google. | One or more engines can be passed in comma separated. |
500 | Invalid Rank Type | The rank type is invalid. It must be one or more of the following: highest, all. | |
500 | ParamsFile Error | There was an error in saving the params file. | Server error saving params file |
Depending on the rank_type
parameter provided, the output file’s Ranking
node will change.
- For
rank_type=highest
theRanking
node will always contain all the engines that have been requested (default to all: google, bing).Rank
,BaseRank
, andUrl
will show either numerical values or blanks (<Rank></Rank> for XML orRank: null
for JSON) - For
rank_type=all
theRanking
node will always contain all the engines that have been requested, but there are different cases depending on whether or not ranks exist. In the case of a ranking result for a particular engine in XML, there will be one or more <Result></Result> nodes that wrapRank
,BaseRank
, andUrl
. The same case for JSON has two possibilities. If there is one ranking there will be a single object within theResult
key, likeengine: { Result: {Rank, BaseRank, Url} }
. If there are multiple rankings theResult
key becomes an array of results likeengine: { Result: [{Rank,BaseRank,Url}, {Rank,BaseRank,Url}, ...] }
- For a non-ranking value (where a custom non-ranking value has not been set for the site), the XML output will simply self-close the engine node (e.g. <Google/>) and the JSON output will make the engine key null (e.g.
Google: null
).
XML output file format when rank_type=highest
:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Project> <Id>9</Id> <Name>STAT Search Analytics</Name> <TotalSites>4</TotalSites> <CreatedAt>2014-11-13</CreatedAt> <Site> <Id>19</Id> <Url>getstat.com</Url> <TotalKeywords>1203</TotalKeywords> <CreatedAt>2014-11-13</CreatedAt> <Keyword> <Id>154010</Id> <Keyword>unlimited tracking</Keyword> <KeywordMarket>US-en</KeywordMarket> <KeywordLocation /> <KeywordDevice>desktop</KeywordDevice> <KeywordTranslation>hello</KeywordTranslation> <KeywordCategories /> <KeywordTags /> <KeywordStats> <AdvertiserCompetition>0.04</AdvertiserCompetition> <GlobalSearchVolume>40500</GlobalSearchVolume> <TargetedSearchVolume>27100</TargetedSearchVolume> <LocalSearchTrendsByMonth> <Apr>40500</Apr> <Mar>33100</Mar> <Feb>27100</Feb> <Jan>27100</Jan> <Dec>27100</Dec> <Nov>27100</Nov> <Oct>27100</Oct> <Sep>27100</Sep> <Aug>27100</Aug> <Jul>27100</Jul> <Jun>27100</Jun> <May>27100</May> </LocalSearchTrendsByMonth> <CPC>0.24</CPC> </KeywordStats> <CreatedAt>2014-11-13</CreatedAt> <Ranking date="2015-05-12" type=“highest”> <Google> <Rank>6</Rank> <BaseRank>6</BaseRank> <Url>getstat.com/take-the-tour</Url> </Google> <Bing> <Rank>29</Rank> <Url>getstat.com/take-the-tour</Url> </Bing> </Ranking> </Keyword> <Keyword> ... </Keyword> ... </Site> </Project> </Response>
JSON output file format when rank_type=highest
:
{ "Response":{ "responsecode":"200", "Project":{ "Id":"9", "Name":"STAT Search Analytics", "TotalSites":"4", "CreatedAt":"2014-11-13", "Site":{ "Id":"19", "Url":"getstat.com", "TotalKeywords":"1203", "CreatedAt":"2014-11-13", "Keyword":[ { "Id":"154010", "Keyword":"unlimited tracking", "KeywordMarket":"US-en", "KeywordLocation":null, "KeywordDevice":"desktop", "KeywordTranslation":"hello", "KeywordCategories":null, "KeywordTags":null, "KeywordStats":{ "AdvertiserCompetition":"0.04", "GlobalSearchVolume":"40500", "TargetedSearchVolume":"27100", "LocalSearchTrendsByMonth":{ "Apr":"40500", "Mar":"33100", "Feb":"27100", "Jan":"27100", "Dec":"27100", "Nov":"27100", "Oct":"27100", "Sep":"27100", "Aug":"27100", "Jul":"27100", "Jun":"27100", "May":"27100" }, "CPC":"0.24" }, "CreatedAt":"2014-11-13", "Ranking":{ "date":"2015-05-12", “type”:”highest”, "Google":{ "Rank":"6", "BaseRank":"6", "Url":"getstat.com/take-the-tour" }, "Bing":{ "Rank":"29", "Url":"getstat.com/take-the-tour" } } } ... ] } } }
XML output example when rank_type=all
:
(Note different search engines returning single ranks, multiple ranks, and non-ranking results.)
<Ranking date="2015-05-12" type="all"> <Google> <Result> <Rank>6</Rank> <BaseRank>6</BaseRank> <Url>getstat.com/take-the-tour</Url> </Result> <Result> <Rank>10</Rank> <BaseRank>10</BaseRank> <Url>getstat.com/our-clients</Url> </Result> </Google> <Bing/> </Ranking>
JSON output example when rank_type=all
:
(Note different search engines returning single ranks, multiple ranks, and non-ranking results.)
"Ranking":{ "date":"2015-05-12", “type”:”all”, "Google": { "Result": [ { "Rank":"6", "BaseRank":"6", "Url":"getstat.com/take-the-tour" }, { "Rank":"10", "BaseRank":"10", "Url":"getstat.com/our-clients" } ] }, “Bing”:null }
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Project/Id | INTEGER | ID of the project |
Name | STRING | Name of the project |
TotalSites | INTEGER | Number of sites in the project |
Project/CreatedAt | YYYY-MM-DD | Project creation date |
Site/Id | INTEGER | ID of the site |
Site/Url | STRING | Site URL |
TotalKeywords | INTEGER | Number of keywords on the site (includes untracked) |
Site/CreatedAt | YYYY-MM-DD | Site creation date |
Keyword/Id | INTEGER | ID of the keyword |
Keyword | STRING | Keyword text |
KeywordMarket | STRING | Global market where keyword is tracked. Formatted as US-en, CA-en, DE-de, etc. |
KeywordLocation | STRING | Location where keyword is tracked. Can be a city name, a state, or a postal code. IE: Boston, 90210, California, etc. When a keyword is not tracked at a local level, the value is blank. |
KeywordDevice | STRING | Default is Desktop. Only other option is Smartphone. |
KeywordCategories | STRING | Deprecated (always empty) |
KeywordTags | STRING (comma separated) | Tags applied to keyword. When tags are unavailable, value will be “none”. |
AdvertiserCompetition | DECIMAL | Value between 0 and 1 (inclusive). When unavailable, value will be -1.0 |
GlobalSearchVolume | INTEGER | When unavailable, value will be -1 |
TargetedSearchVolume | INTEGER | Targeted to KeywordMarket. When unavailable, value will be -1 |
Translation | STRING | The translation of the keyword |
LocalSearchTrends |
INTEGERS | Targeted Search Volume numbers for previous 12 months |
CPC | DECIMAL | The cost-per-click for this keyword. |
Keyword/CreatedAt | YYYY-MM-DD | Keyword creation date |
Rank | INTEGER | SERP Result Number (between 1 – 120 inclusive, or custom value set in site settings). A blank value indicates that the site is not ranking in the SERP. |
BaseRank | INTEGER | Value only shows up when looking at Google results. Defaults to blank when non-ranking. It is what the rank would be if Google Universal results were not in the SERP. |
Ranking/Url | INTEGER | Request URL for ranking |
Bulk Export Jobs: Status
HTTP Method: GET
XML request URL:
/bulk/status?id={bulkjobId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <Result> <Id>5</Id> <JobType>ranks</JobType> <Format>json</Format> <Date>2011-04-15</Date> <SiteId>1,5,10</SiteId> <Status>InProgress</Status> <Url></Url> <CreatedAt>2011-05-03</CreatedAt> </Result> </Response>
JSON request URL:
/bulk/status?id={bulkjobId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"5", "JobType":"ranks", "Format":"json", "Date":"2011-04-15", "SiteId":"1,5,10", "Status":"InProgress", "Url":null, "CreatedAt":"2011-05-03" } } }
REQUEST PARAMETER | FORMAT | REQUIRED |
---|---|---|
Id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Id of the Bulk Job |
JobType | STRING | The type of job (ranks,serps, |
Format | STRING | Format of bulk output file. |
Date | YYYY-MM-DD | The date parameter passed in |
SiteId | INTEGER (comma separated) | The site_id parameter passed |
Status | STRING | Current Job Status (NotStarted,InProgress, |
Url | STRING | URL for downloading gzipped |
StreamUrl | STRING | URL for streaming |
CreatedAt | YYYY-MM-DD | Date bulk job was created |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
---|---|---|---|
500 | Job not found | Could not find a Bulk Job with this id. |
Bulk Export Jobs: Delete
HTTP Method: GET
XML request URL:
/bulk/delete?id={bulkjobId}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode=”200”> <Result> <Id>1</Id> </Result> </Response>
JSON request URL:
/bulk/delete?id={bulkjobId}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"1" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
Id | INTEGER | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Id of the Bulk Job deleted |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Job not found | Could not find a Bulk Job with this id. | |
500 | Job already deleted | This job has already been deleted. |
Bulk Export Jobs: Site Ranking Distributions
Ranking distribution records are reported for all sites in system on the given date. (Note that you cannot create bulk jobs for the current date or dates in the future.)
HTTP Method: GET
XML request URL:
/bulk/site_ranking_distributions?date={YYYY-MM-DD}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode=”200”> <Result> <Id>1</Id> </Result> </Response>
JSON request URL:
/bulk/site_ranking_distributions?date={YYYY-MM-DD}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"1" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
date | YYYY-MM-DD | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Id of the Bulk Job |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Missing Date | The parameter date must be provided. | |
500 | Malformed Date | The parameter date must be in the format YYYY-MM-DD. | |
500 | Unavailable Date | The requested parameter date is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | Bad Date | <Date parameter> predates availability of data for this user. | |
500 | ParamsFile Error | There was an error in saving the params file. | Server error saving params file |
Bulk Export Jobs: Tag Ranking Distributions
HTTP Method: GET
XML request URL:
/bulk/tag_ranking_distributions?date={YYYY-MM-DD}
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode=”200”> <Result> <Id>1</Id> </Result> </Response>
JSON request URL:
/bulk/tag_ranking_distributions?date={YYYY-MM-DD}&format=json
JSON typical response:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"1" } } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
date | YYYY-MM-DD | YES |
RESPONSE PARAMETER | FORMAT | NOTES |
---|---|---|
Id | INTEGER | Id of the Bulk Job |
ERROR CODE | ERROR MESSAGE | ERROR STATEMENT | NOTES |
500 | Missing Date | The parameter date must be provided. | |
500 | Malformed Date | The parameter date must be in the format YYYY-MM-DD. | |
500 | Unavailable Date | The requested parameter date is not yet available. Please check the System Status section on help.getstat.com for more information. | |
500 | Bad Date | <Date parameter> predates availability of data for this user. | |
500 | ParamsFile Error | There was an error in saving the params file. | Server error saving params file |
Bulk: Google HTML SERP, SERP, Google Ads (Optional specialized service)
These are part of our optional specialty paid API services which can be turned on for individual sites via Site Tools > Settings.
To receive the most accurate Google Ads data from this service, it’s important to set a precise Location (city, state, province, ZIP code and/or postal code) for all of your keywords when adding them to STAT. If your keywords don’t have locations set, learn more about your options for editing your keywords.
HTTP Method: GET
XML request URL:
/bulk/list
XML typical response for an HTML SERP archive:
<?xml version="1.0" encoding="UTF-8"?>
<Response responsecode=”200”>
<Result>
<Id>8</Id>
<JobType>html-serps</JobType>
<Format>xml</Format>
<Project>Cats R Us</Project>
<Folder>Kitten Kaboodle</Folder>
<SiteTitle>Fancy Feast</SiteTitle>
<SiteUrl>www.holyanchovy.com</SiteUrl>
<SiteId>123</SiteId>
<Date>2014-12-14</Date>
<Status>Completed</Status>
<Url>http://stat.getstat.com/bulk_reports/download_report/99?key=xyz123</Url>
<CreatedAt>2014-12-15</CreatedAt>
</Result>
...
</Response>
XML typical response for a SERP archive:
<?xml version="1.0" encoding="UTF-8"?>
<Response responsecode=”200”>
<Result>
<Id>13</Id>
<JobType>serps</JobType>
<Format>xml</Format>
<Project>News</Project>
<Folder>other sites</Folder>
<SiteTitle>abcnews.go.com</SiteTitle>
<SiteUrl>abcnews.go.com</SiteUrl>
<SiteId>118</SiteId>
<Date>2014-11-05</Date>
<Status>Completed</Status>
<Url>http://stat.getstat.com/bulk_reports/download_report/13?key=xyz123</Url>
<StreamUrl>http://stat.getstat.com/bulk_reports/stream_report/13?key=xyz123</StreamUrl>
<CreatedAt>2014-11-06</CreatedAt>
</Result>
...
</Response>
XML typical response for a Google Ads archive:
<?xml version="1.0" encoding="UTF-8"?>
<Response responsecode=”200”>
<Result>
<Id>19</Id>
<JobType>serps</JobType>
<Format>xml</Format>
<Project>QA PROJECT</Project>
<Folder/>
<SiteTitle>Samplesite.com</SiteTitle>
<SiteUrl>www.samplesite.com</SiteUrl>
<SiteId>641</SiteId>
<Date>2014-11-05</Date>
<Status>Completed</Status>
<Url>http://stat.getstat.com/bulk_reports/download_report/19?key=xyz123</Url>
<StreamUrl>http://stat.getstat.com/bulk_reports/stream_report/19?key=xyz123</StreamUrl>
<CreatedAt>2014-11-06</CreatedAt>
</Result>
...
</Response>
JSON request URL:
/bulk/list?format=json
JSON typical response for an HTML SERP archive:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"8", "JobType":"html-serps", "Format":"json", "Project":"Cats R Us", "Folder":"Kitten Kaboodle", "SiteTitle":"Fancy Feast", "SiteUrl":"www.holyanchovy.com", "SiteId":"123", "Date":"2014-12-14", "Status":"Completed", "Url":"http://stat.getstat.com/bulk_reports/download_report/99?key=xyz123", "CreatedAt":"2014-12-15" } ... } }
JSON typical response for a SERP archive:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"13", "JobType":"serps", "Format":"json", "Project":"News", "Folder":"other sites", "SiteTitle":"abcnews.go.com", "SiteUrl":"abcnews.go.com", "SiteId":"118", "Date":"2014-11-05", "Status":"Completed", "Url":"http://stat.getstat.com/bulk_reports/download_report/13?key=xyz123", "StreamUrl":"http://stat.getstat.com/bulk_reports/stream_report/13?key=xyz123", "CreatedAt":"2014-11-06" } ... } }
JSON typical response for a Google Ads archive:
{ "Response":{ "responsecode":"200", "Result":{ "Id":"19", "JobType":"serps", "Format":"json", "Project":"QA PROJECT", "Folder":null, "SiteTitle":"Samplesite.com", "SiteUrl":"www.samplesite.com", "SiteId":"641", "Date":"2014-11-05", "Status":"Completed", "Url":"http://stat.getstat.com/bulk_reports/download_report/19?key=xyz123", "StreamUrl":"http://stat.getstat.com/bulk_reports/stream_report/19?key=xyz123", "CreatedAt":"2014-11-06" } ... } }
XML typical response for a SERP archive in CSV format:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="100" totalresults="5883" nextpage="/bulk/list?start=100"> <Result> <Id>23456</Id> <JobType>serps</JobType> <Format>csv</Format> <Project>Cats R Us</Project> <Folder/> <SiteTitle>Fancy Feast</SiteTitle> <SiteUrl>www.holyanchovy.com</SiteUrl> <SiteId>123</SiteId> <Date>2023-06-13</Date> <Status>Completed</Status> <Url>https://s3.us-east-1.amazonaws.com/stat.getstat.com/84d64577-a173-4ed2-9163-f27286fd8244.csv.gz</Url> <StreamUrl>https://stat.getstat.com/bulk_reports/stream_report/82959?key=041e73fd2f97b613959e6a4fdb055b1f5122b0b6</StreamUrl> <CreatedAt>2023-06-14</CreatedAt> </Result> ... </Response>
JSON typical response for a SERP archive in CSV format:
{ "Response": { "responsecode": "200", "resultsreturned": "100", "totalresults": "5883", "nextpage": "/bulk/list?start=100&format=json", "Result": [ { "Id": "42959", "JobType": "serps", "Format": "csv", "Project": "News", "Folder": other sites, "SiteTitle": "abcnews.go.com", "SiteUrl": "abcnews.co.com", "SiteId": "118", "Date": "2023-06-13", "Status": "Completed", "Url": "https://s3.us-east-1.amazonaws.com/stat.getstat.com/84d64577-a173-4ed2-9163-f27286fd8244.csv.gz", "StreamUrl": "https://stat.rc.getstat.com/bulk_reports/stream_report/82959?key=041e73fd2f97b613959e6a4fdb055b1f5122b0b6", "CreatedAt": "2023-06-14" }, ... } }
XML typical response for a Google Ads archive in CSV format:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200" resultsreturned="100" totalresults="5883" nextpage="/bulk/list?start=100"> <Result> <Id>80539</Id> <JobType>adwords</JobType> <Format>csv </Format> <Project>QA PROJECT</Project> <Folder/> <SiteTitle>www.samplesite.com</SiteTitle> <SiteUrl>www.samplesite.com</SiteUrl> <SiteId>94</SiteId> <Date>2023-06-13</Date> <Status>Completed</Status> <Url>https://s3.us-east-1.amazonaws.com/stat.com/fe9d8033-d122-4694-bfaa-2db2952c9873.xml.gz </Url> <StreamUrl>https://stat.getstat.com/bulk_reports/stream_report/40539?key=960d852ca5265d6ba233c0a477c47d44ae320a42 </StreamUrl> <CreatedAt>2023-06-13 </CreatedAt> ... </Response>
JSON typical response for a Google Ads archive in CSV format:
{ "Response": { "responsecode": "200", "resultsreturned": "100", "totalresults": "5883", "nextpage": "/bulk/list?start=100&format=json", "Result": [ { "Id": "80539", "JobType": "adwords", "Format": "csv", "Project": "QA PROJECT", "Folder": null, "SiteTitle": "Samplesite", "SiteUrl": "www.samplesite.com", "SiteId": "83", "Date": "2023-06-13", "Status": "Completed", "Url": "https://s3.us-east-1.amazonaws.com/stat.getstat.com/fe9d8033-d122-4694-bfaa-2db2952c9873.xml.gz", "StreamUrl": "https://stat.getstat.com/bulk_reports/stream_report/40539?key=960d852ca5265d6ba233c0a477c47d44ae320a42", "CreatedAt": "2023-06-13" }, ... } }
REQUEST PARAMETER | FORMAT | REQUIRED | NOTES |
NONE | NONE | NONE |
RESPONSE PARAMETERS | FORMAT | NOTES |
Id | INTEGER | Id of the bulk job |
JobType | STRING | The type of bulk job. Could be ranks, serps, adwords, site_ranking_distributions, tag_ranking_distributions. |
Project | STRING | The name of the project that contains the site this bulk job belongs to |
Folder | STRING | The name of the folder this site is contained in (could be empty) |
SiteTitle | STRING | The title of the site this bulk job belongs to |
SiteUrl | STRING | Url of the site this bulk job belongs to |
SiteId | INTEGER | Id of the site this bulk job belongs to |
Date | STRING | Date this archive was compiled |
Status | STRING | Current Job Status. Could be waiting, completed, failed. |
Url | STRING | URL for downloading gzipped job result. Only displays when Status == Completed. |
StreamUrl | STRING | URL for streaming uncompressed archive. Only displays when Status == Completed. |
CreatedAt | YYYY-MM-DD | Date this bulk job was created |
HTML SERP archives are compiled into gzip (.GZ) archives for download. The gzip archive decompresses into a folder with the same name as the original archive filename. This folder contains each HTML SERP within the site on the given date.
HTML SERPs are named with the following convention:
<engine>-<date>-<keyword>-<market>-<location>-<device>.html
So, the following file indicates that it is the Google SERP on May 12, 2015 for the keyword [mens shoes] tracked in the GB-en market, with no location, against a desktop device:
google-2015-05-12-mens shoes-GB-en--desktop.html
This file indicates that it is the Google SERP on May 12, 2015 for the keyword [mens shoes] tracked in the GB-en market, within the location of London, against a mobile device:
google-2015-05-12-mens shoes-GB-en-London-mobile.html
google-2015-05-12-p_slash_e ratio-GB-en--desktop.html
.Your parsed SERP archive returns Google SERPs in XML, JSON, and CSV formats for all keywords in a site.
- XML archive filename format: <bulk-job-id>.xml.gz
- XML filename format: <bulk-job-id>.xml
- JSON archive filename format: <bulk-job-id>.json.gz
- JSON filename format: <bulk-job-id>.json
- CSV archive filename format: <bulk-job-id>.csv.gz
- CSV filename format: <bulk-job-id>.csv
XML typical response:
<?xml version="1.0" encoding="UTF-8"? > <Response responsecode="200"> <DateRequested>2014-12-14</DateRequested> <SitesRequested>Feline Fancy</SitesRequested> <Site id="123"> <KeywordSerps keyword_id="2345" keyword="cat" market="US-en" location="" device="mobile"> <Google> <Result> <ResultTypes> <ResultType>amp</ResultType> <ResultType>carousel</ResultType> <ResultType>news</ResultType> </ResultTypes> <Rank>2</Rank> <BaseRank></BaseRank> <Protocol>http</Protocol> <Url> www.slashgear.com </Url> <Title>Cat Backpacks</Title> </Result> <Result> <ResultTypes> <ResultType>news</ResultType> <ResultType>amp</ResultType> <ResultType>carousel</ResultType> </ResultTypes> <Rank>2</Rank> <BaseRank></BaseRank> <Protocol>http</Protocol> <Url> www.space.com </Url> <Title>Hamster Wheel</Title> </Result> </Google> ... </Response>
JSON typical response:
{ "Response":{ "responsecode":"200", "DateRequested":"2014-12-14", "SitesRequested":"Feline Fancy", "Sites": [ { "id":"123", "KeywordSerps":{ "keyword_id":"2345", "keyword":"cat", "market":"US-en", "location":"", "device":"mobile", "Google":{ "Result":[ { "ResultTypes": { "ResultType":[ "amp", "carousel", "news" ] }, "Rank":"2", "BaseRank":"", "Protocol": "http", "Url":"www.slashgear.com", "Title": "Cat Backpacks" }, { "ResultTypes": { "ResultType":[ "amp", "carousel", "news" ] }, "Rank":"2", "BaseRank":"", "Protocol": "http", "Url":"www.space.com", "Title": "Hamster Wheel" } ... ] }, }
CSV typical response:
Site ID,Keyword ID,Keyword,Market,Location,Device,Result Type,Rank,Base Rank,Protocol,URL,Title,Translation 975,3398912,cat,US-en,,mobile,"""amp,carousel,news""",1,1,www.slashgear.com,"""Cat Backpacks""", 975,3398912,hamster,US-en,,mobile,"""regular""",2,2,www.space.com,"""Hamster Wheell""", 975,3398912,Dog,US-en,,mobile,"""regular,carousel,Image""",3,3,www.dogbehaviour.com,"""Dog Behaviour""",
RESPONSE PARAMETERS | FORMAT | NOTES |
DateRequested | DATE (YYYY-MM-DD) | Date API call was made |
SitesRequested | STRING | Title of requested site |
ResultTypes | STRING | Contains an array of different SERP feature types |
ResultType | STRING | The type of SERP feature for the keyword. The default is ‘regular’, which means the result type is organic. Possible values are: amp, answers, app download, books, carousel, explore, flights, home services, images, jobs, knowledge graph, list, map, news, paragraph, people also ask, places, placesV3, recipes, refine by, related searches, shopping, table, twitter box, unknown, videos |
Rank | INTEGER | SERP Result Number (between 0 – 100 inclusive) Note: All sub-results within a carousel will have the same rank. |
BaseRank | INTEGER | Value defaults to 0 unless engine parameter = “google”. |
Protocol | STRING | Protocol of the SERP Result. Possible values for google: http, https. Possible values for bing: ‘ ’ or ‘null’ |
Url | STRING | URL of SERP Result |
Your Google Ads archive returns Google Ads data in XML and JSON formats for all keywords in a site.
- Archive filename format: <bulk-job-id>.xml.gz
- XML filename format: <bulk-job-id>.xml
- CSV archive filename format: <bulk-job-id>.csv.gz
- CSV filename format: <bulk-job-id>.csv
XML typical response:
<?xml version="1.0" encoding="UTF-8"?> <Response responsecode="200"> <DateRequested>2014-12-14</DateRequested> <SitesRequested>Feline Fancy</SitesRequested> <Site id="123"> <KeywordAdwords keyword_id="2345" keyword="cat" market="US-en" location="" device="desktop"> <KeywordTags> <Tag>yarn</Tag> <Tag>wool</Tag> </KeywordTags> <KeywordStats> <AdvertiserCompetition>0.01</AdvertiserCompetition> <GlobalSearchVolume>1500000</GlobalSearchVolume> <RegionalSearchVolume>450000</RegionalSearchVolume> <CPC>2.11</CPC> </KeywordStats> <Ads> <Ad> <Rank>1</Rank> <Title/> <Copy> Save up to 25% on Knitting and Crochet Yarns Online at Yarn.com </Copy> <DisplayUrl>www.yarn.com/</DisplayUrl> <DestinationUrl>http://www.yarn.com/</DestinationUrl> <CrawledAt>2014-12-14 00:04:17 UTC</CrawledAt> </Ad> ... </Ads> </KeywordAdwords> ... </Site>
JSON typical response:
{ "Response":{ "responsecode":"200", "DateRequested":"2014-12-14", "SitesRequested":"Feline Fancy", "Sites": [ { "id":"123", "KeywordAdwords": [ { "keyword_id":"2345", "keyword":"cat", "market":"US-en", "location":"", "device":"desktop", "KeywordTags": [ "yarn", "wool" ], "KeywordStats":{ "AdvertiserCompetition":"0.01", "GlobalSearchVolume":"1500000", "RegionalSearchVolume":"450000", "CPC":"2.11" }, "Ads": [ { "Rank":"1", "Title":null, "Copy":"Save up to 25% on Knitting and Crochet Yarns Online at Yarn.com", "DisplayUrl":"www.yarn.com/", "DestinationUrl":"http://www.yarn.com/", "CrawledAt":"2014-12-14 00:04:17 UTC" } ... ] } ... ] } ] } }
CSV typical response:
SiteID,KeywordID,Keyword,Market,Location,Device,Translation,AdvertiserCompetition,GlobalSearchVolume,RegionalSearchVolume,CPC,Rank,Title,Copy,DisplayUrl,DestinationUrl,CrawledAt 963,3225328,yarn,US-en,"""seattle, wa""",desktop,,0.2,9900,2400,18.44,1,""Crochet & Knitting Wool & Yarn""","""Find a full range of the finest yarns and knitting wool from all your favourite brands",,https://www.lovecrafts.com/ 02:33:46 UTC 963,3225328,wool,US-en,"""seattle, wa""",desktop,,0.2,9900,2400,18.44,2,"""Knitting Yarns - Shop Now - Up To 50% June Summer Sale""","""Get Your 15% Welcome Discount and Free Delivery on Orders over £30.""",,https://https://www.woolwarehouse.co.uk 02:33:46 UTC 963,3225328,cotton reels,US-en,"""seattle, wa""",desktop,,0.2,9900,2400,18.44,3,"""Cotton cords - Reels, rolls & cut lengths""","""Trade And Wholesale Supplies Of fine cotton cords and tapes.""",,https://www.supplydivision.com/ 02:33:46 UTC
RESPONSE PARAMETERS | FORMAT | NOTES |
DateRequested | DATE (YYYY-MM-DD) | Date API call was made |
SitesRequested | STRING | Title of requested site |
KeywordTags | ARRAY | Tags applied to keyword. When tags are unavailable, value will be an empty array. |
AdvertiserCompetition | DECIMAL | Supplied by Google Ads API. Value between 0 and 1 (inclusive). When unavailable, value will be -1.0. |
GlobalSearchVolume | INTEGER | Supplied by Google Ads API. When unavailable, value will be -1. |
RegionalSearchVolume | INTEGER | Supplied by Google Ads API. Targeted to KeywordMarket. When unavailable, value will be -1. |
CPC | DECIMAL | Cost-per-click for this keyword |
Rank | INTEGER | SERP Result Number (between 0 – 100 inclusive) |
Title | STRING | Ad title |
Copy | STRING | Ad copy |
DisplayUrl | STRING | Displayed URL |
DestinationUrl | STRING | URL user is directed to from SERP |
CrawledAt | DATE (YYYY-MM-DD HH:MM:SS UTC) | Date and time keyword was crawled |