Project Management
Project Management API provides endpoints to manage projects and retrieve ranking-related data.
It allows you to:
- create, update, and delete projects
- configure search engines for a project
- add, update, and delete project keywords
- retrieve keyword rankings and historical data
- access project-level summary statistics
- trigger manual ranking checks
- manage manual ranking positions
- retrieve advertising and SERP feature statistics
List projects
GET https://api4.seranking.com/sites
Returns a list of all projects available in the user account.
Request format
GET https://api4.seranking.com/sitesResponse parameters
| Parameter | Type | Description |
|---|---|---|
| id | Integer | Unique project (site) ID. |
| title | String | Project name. |
| name | String | Website URL associated with the project. |
| group_id | Integer | Project group ID. |
| is_active | Integer | Project status: • 1 – active• 0 – delayed |
| exact_url | Integer | If 1, ranking positions are checked only for the specified URL, excluding subfolders and subdomains. |
| subdomain_match | Integer | If 1, SERP subdomains are taken into account. |
| depth | Integer | Ranking position collection depth. |
| check_freq | String | Frequency of ranking checks. |
| check_day | Integer | • If check_freq is check_weekly, represents the day of the week (1 – Monday to 7 – Sunday). • If check_freq is check_monthly, represents the day of the month (1 – 31). |
| guest_link | String | Guest link to view project statistics without authorization. |
| keyword_count | Integer | Number of keywords added to the project. |
Response example
[
{
"id": 1,
"title": "zniqpf tfallp mykqeg",
"name": "Cronin.info",
"group_id": 0,
"is_active": 1,
"exact_url": 0,
"subdomain_match": 0,
"depth": 100,
"check_freq": "check_daily",
"check_day": null,
"guest_link": "https://seranking.com/guest.html?site_id=1&hv=0&hash=432&tab=detailed"
}
]List project search engines
GET https://api4.seranking.com/sites/{site_id}/search-engines
Returns a list of search engines configured for the specified project.
Request format
GET https://api4.seranking.com/sites/{site_id}/search-enginesResponse parameters
If successful, the server returns the 200 HTTP code and a JSON array of search engines associated with the project. If an error occurs (e.g., unknown search_engine_id or site_engine_id), the API returns the corresponding HTTP status code and error message. See Error handling for possible error codes.
| Parameter | Type | Description |
|---|---|---|
| site_engine_id | Integer | Unique ID of the search engine configuration within the project. |
| search_engine_id | Integer | Search engine ID (refer to /system/search-engines). |
| region_id | Integer | Region ID. |
| region_name | String | Region name. Only applicable to Google. |
| lang_code | String | Language code (refer to /system/google-langs). |
| merge_map | Integer | Google Maps SERPs handling mode: • 0 – don’t include • 1 – include • 2 – include and display separately |
| business_name | String | Business name used for Google Maps SERPs. |
| phone | String | Company phone number used for Google Maps SERPs. |
| paid_results | Integer | Track rankings in Google Ads: 1 – yes, 0 – no. |
| featured_snippet | Integer | Track Featured Snippet results: • 1 – include • 0 – exclude |
| keyword_count | Integer | Number of keywords assigned to this search engine configuration. |
Response example
[
{
"site_engine_id": 1,
"search_engine_id": 339,
"region_id": 0,
"region_name": null,
"lang_code": "ru",
"merge_map": 0,
"business_name": null,
"phone": null,
"paid_results": 0,
"featured_snippet": 0,
"keyword_count": 10
}
]Add search engine to project
POST https://api4.seranking.com/sites/{site_id}/search-engines
Adds a new search engine configuration to the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
| search_engine_id | Integer | Yes | Search engine ID (refer to /system/search-engines). |
| region_id | Integer | No | Region ID. |
| region_name | String | No | Geographical name (region or city) in English. Only applicable to Google. |
| lang_code | String | No | Language code (refer to /system/google-langs). |
| merge_map | Integer | No | Google Maps SERPs handling mode: • 0 – don’t include • 1 – include • 2 – include and display separately |
| business_name | String | No | Business name for Google Maps SERPs. |
| phone | String | No | Company phone number for Google Maps SERPs. |
| paid_results | Integer | No | Track rankings in Google Ads: 1 – yes, 0 – no. |
| featured_snippet | Integer | No | Track Featured Snippet results: • 1 – include • 0 – exclude |
Request example
POST https://api4.seranking.com/sites/{site_id}/search-engines
{
"search_engine_id": 339,
"region_id": 0,
"region_name": null,
"lang_code": "ru",
"merge_map": 0,
"business_name": null,
"phone": null,
"paid_results": 0,
"featured_snippet": 0
}
Response parameters
If successful, the server returns the 201 HTTP code and the site_engine_id of the newly added search engine configuration. If an error occurs (e.g., unknown search_engine_id), the API returns the corresponding HTTP status code and error message (for more information, see Error handling).
Change search engine in project
PUT https://api4.seranking.com/sites/{site_id}/search-engines/{site_engine_id}
Updates an existing search engine configuration for the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
| site_engine_id | Integer | Yes | Unique ID of the search engine configuration within the project. |
| region_id | Integer | No | Region ID. |
| region_name | String | No | Geographical name (region or city) in English. Only applicable to Google. |
| lang_code | String | No | Language code (refer to /system/google-langs). |
| merge_map | Integer | No | Google Maps SERPs handling mode: • 0 – don’t include • 1 – include • 2 – include and display separately |
| business_name | String | No | Business name for Google Maps SERPs. |
| phone | String | No | Company phone number for Google Maps SERPs. |
| paid_results | Integer | No | Track rankings in Google Ads: 1 – yes, 0 – no. |
| featured_snippet | Integer | No | Track Featured Snippet results: • 1 – include • 0 – exclude |
Request example
PUT https://api4.seranking.com/sites/{site_id}/search-engines/{site_engine_id}
{
"region_id": 0,
"region_name": null,
"lang_code": "ru",
"merge_map": 0,
"business_name": null,
"phone": null,
"paid_results": 0,
"featured_snippet": 0
}Response parameters
If successful, the server returns the 200 HTTP code. If an error occurs (e.g., unknown site_engine_id), the API returns the corresponding HTTP status code and error message (for more information, see Error handling).
Delete search engine from project
DELETE https://api4.seranking.com/sites/{site_id}/search-engines/{site_engine_id}
Removes a search engine configuration from the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
| site_engine_id | Integer | Yes | Unique ID of the search engine configuration within the project. |
Request example
DELETE https://api4.seranking.com/sites/{site_id}/search-engines/{site_engine_id}Response parameters
If successful, the server returns the 204 HTTP code. If an error occurs, the API returns the corresponding HTTP status code and error message (for more information, see Error handling).
List website keywords
GET https://api4.seranking.com/sites/{site_id}/keywords
Returns a list of keywords for the specified project, including their assigned target URLs and basic statistics.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
| site_engine_id | Integer | No | Unique ID of the search engine configuration within the project. If provided, first_check_date is returned. |
Request example
GET https://api4.seranking.com/sites/{site_id}/keywords?site_engine_id=NNNResponse parameters
If successful, the server returns the 200 HTTP code and a JSON array of project keywords. If an error occurs, the API returns the corresponding HTTP status code and error message (for more information, see Error handling).
| Parameter | Type | Description |
|---|---|---|
| id | String | Unique keyword ID. |
| name | String | Keyword text. |
| group_id | String | Keyword group ID. |
| link | String | Target URL assigned to the keyword. |
| first_check_date | String | Date of the first ranking check (YYYY-MM-DD). |
| tags | Array | List of tag IDs assigned to the keyword. |
| site_engine_ids | Array | List of associated search engine configuration IDs. |
Response example
[
{
"id": "1",
"name": "key1",
"group_id": "2",
"link": null,
"first_check_date": "2015-02-17"
},
{
"id": "2",
"name": "key2",
"group_id": "2",
"link": "http://mysite.com/",
"first_check_date": null,
"tags": []
},
...
]Get project summary statistics
GET https://api4.seranking.com/sites/{site_id}/stat
Returns summary statistics for the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
Request example
GET https://api4.seranking.com/sites/{site_id}/statResponse parameters
If successful, the server returns HTTP 200 and a JSON object containing summary metrics.
| Parameter | Type | Description |
|---|---|---|
| site_id | Integer | Unique website ID. |
| name | String | Website domain. |
| group_id | Integer | Project group ID. |
| title | String | Project title. |
| today_avg | Number | Average position for the latest ranking check date. |
| yesterday_avg | Number | Average position for the previous ranking check date. |
| total_up | Integer | Total number of positions that improved in SERPs. |
| total_down | Integer | Total number of positions that declined in SERPs. |
| process | String | Percentage of processed website positions. |
| top5 | Integer | Number of keywords ranking in the top 5. |
| top10 | Integer | Number of keywords ranking in the top 10. |
| top30 | Integer | Number of keywords ranking in the top 30. |
| visibility | Number | Traffic forecast value. |
| visibility_percent | Number | Visibility percentage. |
| da | Number | Moz Domain Authority. |
| index_google | Integer | Number of pages indexed in Google. |
Response example
{
"site_id": 123,
"name": "site1.com",
"group_id": null,
"title": "my site",
"today_avg": 123,
"yesterday_avg": 111,
"total_up": 0,
"total_down": 5,
"process": "99.9",
"top5" : 1,
"top10" : 2,
"top30" : 3,
"visibility" : 2,
"visibility_percent" : 30.0,
"da" : 4,
"index_google" : 200,
"index_x" : null
}Get keyword statistics
GET https://api4.seranking.com/sites/{site_id}/positions
Returns keyword ranking statistics for the specified project within a selected time period.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
| date_from | String | No | Start date of the time period (YYYY-MM-DD). The default is today minus one week. |
| date_to | String | No | End date of the time period (YYYY-MM-DD). The default is today. |
| site_engine_id | Integer | No | Search engine configuration ID. If not specified, data for all search engines is returned. |
| in_top | Integer | No | Filter by ranking position. Example: in_top=10 returns keywords ranking in the TOP 10 at the last check date within the selected period. |
| with_landing_pages | Integer | No | Landing page URLs found in SERPs (1 – include). |
| with_serp_features | Integer | No | Detected Google SERP features (1 – include). |
Request example
GET https://api4.seranking.com/sites/{site_id}/positions?date_from=2018-01-01&date_to=2018-01-07&site_engine_id=1&with_landing_pages=1&with_serp_features=1Response parameters
If successful, the server returns a JSON array grouped by site_engine_id, containing keyword statistics for the specified period. If an error occurs (e.g., invalid site_engine_id), the API returns the corresponding HTTP status code and error message (for more information, see Error handling).
| Parameter | Type | Description |
|---|---|---|
| site_engine_id | Integer | Search engine configuration ID. |
| keywords | Array | List of keywords with statistics. |
Each object in the keywords array has the following structure:
| Parameter | Type | Description |
|---|---|---|
| id | String | Unique keyword ID. |
| positions | Array | Ranking positions by date. |
| volume | Integer | Search volume. |
| competition | Number | Competition level. |
| suggested_bid | Number | Estimated cost per click. |
| kei | Number | Keyword Efficiency Index. |
| results | Integer | Number of search results in Google. |
| total_sum | Number | Price per keyword (based on financial report settings). |
| landing_pages | Array | Landing page data:date – ranking check date (YYYY-MM-DD)url – page URL in SERPs for the keyword |
| features | Object | Detected SERP features. Each field is true if the feature links to the project’s website; otherwise false. |
Each object in the positions array has the following structure:
| Parameter | Type | Description |
|---|---|---|
| date | String | Date (YYYY-MM-DD). |
| pos | Integer | Current ranking position. |
| change | Integer | Change in position compared to the previous date (could be negative). |
| price | Number | Price calculated from financial report settings. |
| is_map | Integer | Results where the position was found: • 0 – organic search results• 1 – maps block |
| map_position | Number | Position in the maps block when merge_map is 2 (i.e., “Display organic and maps results separately” is enabled). |
| paid_position | Number | Position in paid Google SERPs. |
Response example
[
{
"site_engine_id": 1,
"keywords": [
{
"id": "12",
"positions": [
{
"date": "2017-12-19",
"pos": 18,
"change": 0,
"price": 0,
"is_map": 0,
"map_position": 0,
"paid_position": 0
}
],
"volume": 390,
"competition": 3,
"suggested_bid": 1,
"kei": 1,
"results": 100,
"total_sum": 0,
"landing_pages": [
{
"url": "https://domain.com/page.html",
"date": "2017-12-14"
}
],
"features": {
"tads": true,
"knowledge_graph": true,
"images": true,
"sitelinks": true,
"reviews": false
}
},
...
]Get total number of ads chart
GET https://api4.seranking.com/sites/{site_id}/ads
Returns the total number of top and bottom advertisements in search results by date for the specified project. Data can be filtered by search engines, keywords, and date range.
Request parameters
All parameters are query parameters.
| Parameter | Type | Required | Description |
|---|---|---|---|
| date_from | String | No | Start date of the period (YYYY-MM-DD format). Defaults to today minus one week. |
| date_to | String | No | End date of the period (YYYY-MM-DD format). Defaults to today. |
| site_engine_ids | Array | No | Search engine ID filter. If not specified, data for all search engines is returned. |
| keywords_ids | Array | No | Keyword ID filter. If not specified, data for all keywords is returned. |
Request example
GET https://api4.seranking.com/sites/{site_id}/ads?date_from=2020-05-20&date_to=2020-05-21&site_engine_ids[]=1&site_engine_ids[]=2&keywords_ids[]=1&keywords_ids[]=1Response parameters
If successful, the server returns the HTTP 200 code and an array grouped by site_engine_id. A maximum of 100,000 records is returned.
| Parameter | Type | Description |
|---|---|---|
| site_engine_id | Integer | Search engine configuration ID. |
| keywords | Array | Array of keywords with advertisement statistics. |
Each keywords object has the following structure:
| Parameter | Type | Description |
|---|---|---|
| id | Integer | Keyword ID. |
| ads | Array | Daily advertisement statistics. |
Each ads object has the following structure:
| Parameter | Type | Description |
|---|---|---|
| date | String | Date (in YYYY-MM-DD). |
| tads | Integer | Total number of top ads. |
| bads | Integer | Total number of bottom ads. |
Response example
[
{
"site_engine_id": 1,
"keywords": [
{
"id": 1,
"ads": [
{
"date": "2020-05-20",
"tads": 2,
"bads": 3
},
{
"date": "2020-05-21",
"tads": 3,
"bads": 2
}
]
},
{
"id": 2,
"ads": [
{
"date": "2020-05-20",
"tads": 0,
"bads": 0
},
{
"date": "2020-05-21",
"tads": 0,
"bads": 1
}
]
}
]
},
{
"site_engine_id": 2,
"keywords": [
{
"id": 1,
"ads": [
{
"date": "2020-05-20",
"tads": 1,
"bads": 1
},
{
"date": "2020-05-21",
"tads": 2,
"bads": 2
}
]
},
{
"id": 2,
"ads": [
{
"date": "2020-05-20",
"tads": 0,
"bads": 2
},
{
"date": "2020-05-21",
"tads": 5,
"bads": 1
}
]
}
]
}
]Get historical dates
GET https://api4.seranking.com/sites/{site_id}/historicalDates
Returns a list of historical dates used to build ranking position comparison charts for the specified project.
The following logical periods are supported:
- current
- day_ago
- 7days
- 30days
- 90days
- 180days
- first
If no ranking check occurred on a specific date, the closest available check date is returned.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_engine_id | Integer | No | Search engine configuration ID. If omitted, dates are returned for all search engines. |
Request example
GET https://api4.seranking.com/sites/{site_id}/historicalDatesResponse parameters
If successful, the server returns the HTTP 200 code and an object containing date mappings.
| Parameter | Type | Description |
|---|---|---|
| current | String | Current check date (in YYYY-MM-DD). |
| day_ago | String | Closest date to one day ago. |
| 7days | String | Closest date to seven days ago. |
| 30days | String | Closest date to thirty days ago. |
| 90days | String | Closest date to ninety days ago. |
| 180days | String | Closest date to one hundred eighty days ago. |
| first | String | First available ranking check date. |
Response example
{ "current" : "2019-02-20", "day_ago" : "2019-02-19", "7days" : "2019-02-14"}Add keywords to project
POST https://api4.seranking.com/sites/{site_id}/keywords
Adds new keywords to the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| keyword | String | Yes | Keyword text. |
| group_id | Integer | No | Keyword group ID. If omitted, the default group is used. |
| target_url | String | No | Target URL assigned to the keyword. |
| is_strict | Integer | No | Check positions only for the specified target URL (1 – yes, 0 – no). Defaults to 0. |
| comment | String | No | Comment for the keyword. |
| site_engine_ids | Array | No | Array of search engine IDs where the keyword should be tracked. |
Request example
POST https://api4.seranking.com/sites/{site_id}/keywords
[
{
"keyword":"text",
"group_id":1,
"target_url": "http://site.com/",
"is_strict": 0,
"comment":"text",
"site_engine_ids": [20,21]
}
]Response parameters
If successful, the server returns an object containing the number of added keywords. Returns HTTP 400 if no keywords are specified (for more information, see Error handling).
| Parameter | Type | Description |
|---|---|---|
| added | Integer | Number of successfully added queries to the project. |
| ids | Array | Array of IDs of added keywords. |
Response example
{
"added": 3,
"ids": [123, 456, 789]
}Add project
POST https://api4.seranking.com/sites
Creates a new project in the user account.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | String | Yes | Website URL. |
| title | String | Yes | Project name. |
| depth | Integer | No | Ranking collection depth (100, 200). Defaults to 100. |
| subdomain_match | Integer | No | Include subdomains in SERPs (1 – yes, 0 – no). Defaults to 0. |
| exact_url | Integer | No | Track only the specified URL (1 – yes, 0 – no). Defaults to 0. |
| check_freq | String | No | Check frequency (check_daily, check_1in3, check_weekly, check_monthly, manual). Defaults to check_daily. |
| auto_reports | Integer | No | Enable weekly reports (1 – yes, 0 – no). Defaults to 1. |
| disable_audit | Integer | No | Disable website audit (1 – yes, 0 – no). Defaults to 0. |
| site_group_id | Integer | No | Project group ID. |
| check_day | Integer | No | Day of week (1–7) for weekly checks or day of month (1–31) for monthly checks. |
| is_active | Integer | No | Project status (1 – active, 0 – delayed). |
Request example
POST https://api4.seranking.com/sites
[{"url": "http://test.site/","title": "seo site"}]Response parameters
If successful, the server returns the 201 HTTP code and the ID of the project added to the account.
| Parameter | Type | Description |
|---|---|---|
| site_id | Integer | ID of the created project. |
Response example
{ "site_id": 507052 }Change project settings
PUT https://api4.seranking.com/sites/{site_id}
Updates the settings of the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| url | String | No | Website URL. |
| title | String | No | Project name. |
| depth | Integer | No | Ranking collection depth (100, 200). Defaults to 100. |
| subdomain_match | Integer | No | Include subdomains in SERPs (1 – yes, 0 – no). Defaults to 0. |
| exact_url | Integer | No | Track only the specified URL (1 – yes, 0 – no). Defaults to 0. |
| check_freq | String | No | Check frequency (check_daily, check_1in3, check_weekly, check_monthly, manual). Defaults to check_daily. |
| site_group_id | Integer | No | Project group ID. |
| check_day | Integer | No | Day of week (1–7) for weekly checks or day of month (1–31) for monthly checks. |
| is_active | Integer | No | Project status (1 – active, 0 – delayed). |
Request example
PUT https://api4.seranking.com/sites/{site_id}
{
"title": "new site title"
}Response parameters
If successful, the server returns the 200 HTTP code.
Response example
No response body.
Delete project
DELETE https://api4.seranking.com/sites/{site_id}
Deletes the specified project from the user account.
Request parameters
Path parameter:
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_id | Integer | Yes | Unique project (site) ID. |
Request example
DELETE https://api4.seranking.com/sites/{site_id}Response parameters
If successful, the server returns the 204 HTTP code.
Response example
No response body.
Delete keywords
DELETE https://api4.seranking.com/sites/{site_id}/keywords
Deletes keywords from the specified project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| keywords_ids | Array | Yes | Array of keyword IDs to delete. |
Request example
DELETE https://api4.seranking.com/sites/{site_id}/keywords?keywords_ids[]=1&keywords_ids[]=2&keywords_ids[]=3Response parameters
If successful, the server returns the 204 HTTP code. Returns HTTP 400 if no keyword IDs are specified (for more information, see Error handling).
Response example
No response body.
Set manual keyword position
PUT https://api4.seranking.com/sites/{site_id}/position
Sets a ranking position for a project keyword on a specified date.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| keyword_id | Integer | Yes | Unique keyword ID (refer to https://api4.seranking.com/sites/{site_id}/keywords). |
| date | String | Yes | Date of the ranking record. |
| site_engine_id | Integer | Yes | Search engine configuration ID (refer to https://api4.seranking.com/sites/{site_id}/search-engines). |
| position | Integer | Yes | Position (0 – 200). 0 – means “not found”. |
Request example
PUT https://api4.seranking.com/sites/{site_id}/position/
{"keyword_id": 1,"date": "2018-01-01","position":100,"site_engine_id": 1}Response parameters
If successful, the server returns the 200 HTTP code.
Returns HTTP 400 for:
- invalid date
- invalid
keyword_id - unknown
site_engine_id
Response example
No response body.
Run position check
POST https://api4.seranking.com/api/sites/{site_id}/recheck
Triggers a ranking position check for selected keywords or for an entire project.
Request parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_engine_id | Integer | No | Search engine configuration ID. If provided without keywords, runs a check for all keywords within that search engine. |
| keywords | Array | Yes* | List of keyword objects to recheck. If provided, site_engine_id is ignored. |
Each keywords object has the following structure:
| Parameter | Type | Required | Description |
|---|---|---|---|
| site_engine_id | Integer | Yes | Search engine configuration ID. |
| keyword_id | Integer | Yes | Keyword ID. |
* Required unless site_engine_id alone is used to recheck all keywords for that search engine.
Request example
POST https://api4.seranking.com/api/sites/{site_id}/recheck/
{ "keywords":[ {"site_engine_id":1, "keyword_id":2} ]}Response parameters
If successful, the server returns the number of keywords scheduled for recheck. Returns HTTP 400 if an unknown site_engine_id is provided (for more information, see Error handling).
| Parameter | Type | Required | Description |
|---|---|---|---|
| total | Integer | Yes | Number of keywords for which the position check was launched. |
Response example
{ "total": 5 }