Rank Tracking App

Future-proof your rank tracking capabilities

Rank tracking has long been an integral process of any digital marketing enterprise. However, as search engines improved their algorithms throughout the years, tracking keyword rankings has become increasingly more difficult. Seeking to find a sustainable solution that would provide operational resilience and cost efficiency, digital marketers and Marketing Tech developers turn to DataForSEO APIs.

Keep scrolling to discover how to leverage our data to build a sustainable rank tracking solution.

TRY OUR DATA See docs
general-img-Rank-Tracking-Dashboard

Rank Tracking Dashboard

Rank Tracker is the primary tool used by website owners and SEO professionals to monitor search engine rankings of website pages for specific keywords. The Rank Tracker’s dashboard, on the other hand, is the starting point for puzzling out all the nuances involved in search engine optimization.

DataForSEO will help you build a comprehensive dashboard displaying a variety of useful SEO data, including:

  • Keywords rankings: information about keywords being tracked and their current ranking positions in SERPs.
  • Search engine visibility: an overall measure of how visible a website is across the search engine results pages, based on keyword rankings.
  • Ranked pages: data on pages that are ranked and the dynamics of their growth relative to all pages.
  • Keywords: answers questions about new keywords, ranking changes, as well as the global list of the project’s keywords.

To help you build the Rank Tracking dashboard, DataForSEO offers several APIs:

general img Rank Tracking Dashboard

Visibility

dashboard img 1

Average Ranking

dashboard img 2

Ranked Pages

dashboard img 3

New Keywords

dashboard img 4

Visibility

The primary purpose of the Visibility dashboard is to provide information on how visible a website is across the SERPs. To properly present all this information to the end user, the rank tracking dashboard should include visibility dynamics time series and a graph illustrating visibility in different target locations.

DataForSEO Labs API can supply you with all the data needed to develop these and other search visibility features.

dashboard img 1

Components

Visibility Dynamics

The Visibility Dynamics graph illustrates changes in website visibility on search engine results pages throughout the defined period of time. The visibility scale is calibrated relative to the minimum and maximum values, whereas the horizontal scale corresponds to the timeframe selected in the calendar feature. What’s more, this graph can display visibility data for different locations.

Once a user selects a time range using the calendar feature, the Visibility Dynamics graph shows them how a website’s visibility has changed over time.  To get data for this feature, request the Historical Rank Overview endpoint of DataForSEO Labs API, specifying your target domain, location, and timeframe. Then, use the estimated traffic volume (or “ETV”) values for each result with the target domain. Note that separate requests should be made for every tracked keyword and location. Note that DataForSEO uses the “etv” (estimated traffic volume) parameter to define visibility. You can learn more about this metric and how it is calculated in our Help Center.

To obtain visibility (or estimated traffic volume) data for a certain location, use the location_name or location_code parameters. The timeframe can be defined with date_from and date_to parameters.
        

        login="login" 
        password="password" 
        cred="$(printf ${login}:${password} | base64)" 
        curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/historical_rank_overview/live" 
        --header "Authorization: Basic ${cred}"  
        --header "Content-Type: application/json" 
        --data-raw "[
            {
                "target": "u24.gov.ua",
                "language_name": "English",
                "location_code": 2840,
                "date_from": "2023-01-01",
                "date_to": "2023-03-01"
            }
        ]"
        
    

The etv value is returned in the eponymous field for each month of the specified time range denoted with year and month values:

    
        
{
    "version": "0.1.20221214",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.4049 sec.",
    "cost": 0.102,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "03071934-1535-0406-0000-81ea4df500b6",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.3457 sec.",
            "cost": 0.102,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "historical_rank_overview",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "historical_rank_overview",
                "se_type": "google",
                "target": "u24.gov.ua",
                "language_name": "English",
                "location_code": 2840,
                "date_from": "2023-01-01",
                "date_to": "2023-03-01"
            },
            "result": [
                {
                    "se_type": "google",
                    "target": "u24.gov.ua",
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 2,
                    "items_count": 2,
                    "items": [
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 2,
                            "metrics": {
                                "organic": {
                                    "pos_1": 41,
                                    "pos_2_3": 40,
                                    "pos_4_10": 160,
                                    "pos_11_20": 224,
                                    "pos_21_30": 250,
                                    "pos_31_40": 260,
                                    "pos_41_50": 267,
                                    "pos_51_60": 308,
                                    "pos_61_70": 370,
                                    "pos_71_80": 364,
                                    "pos_81_90": 371,
                                    "pos_91_100": 281,
                                    "etv": 44071.621012251824,
                                    "impressions_etv": 6257.466067256406,
                                    "count": 2937,
                                    "estimated_paid_traffic_cost": 770458.9549901653,
                                    "is_new": 1698,
                                    "is_up": 754,
                                    "is_down": 390,
                                    "is_lost": 670
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        },
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 1,
                            "metrics": {
                                "organic": {
                                    "pos_1": 39,
                                    "pos_2_3": 36,
                                    "pos_4_10": 139,
                                    "pos_11_20": 217,
                                    "pos_21_30": 243,
                                    "pos_31_40": 237,
                                    "pos_41_50": 252,
                                    "pos_51_60": 294,
                                    "pos_61_70": 350,
                                    "pos_71_80": 341,
                                    "pos_81_90": 371,
                                    "pos_91_100": 265,
                                    "etv": 15369.704020386562,
                                    "impressions_etv": 3026.978981963359,
                                    "count": 2785,
                                    "estimated_paid_traffic_cost": 160511.97013520263,
                                    "is_new": 1790,
                                    "is_up": 680,
                                    "is_down": 247,
                                    "is_lost": 514
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

        
    

Historical Visibility Changes

The Historical Visibility Changes chart takes a somewhat complementary place and, as such, intends to provide a user with a deeper historical perspective of search visibility.

This bar chart visualizes estimates of how the website’s aggregated visibility progressed over the broader time range across all selected locations.

To obtain this data you can use the Historical Rank Overview endpoint of DataForSEO Labs API. Separate requests should be made for every location and corresponding ETV (estimated traffic volume) values summed up.

To obtain visibility (or estimated traffic volume) data for a certain location, use the location_name or location_code parameters. The timeframe can be defined with date_from and date_to parameters.

Average Position

There is no denying that online visibility is closely tied to search engine rankings. Therefore, it makes perfect sense to place a graph illustrating the average position of the website on the visibility dashboard. Furthermore, this move can also prompt users to explore the Rank Tracking app’s next section - which we will thoroughly describe in the following parts of this guide.

In a nutshell, the average position for a defined time period can be retrieved using the Historical Rank Overview. To calculate a website's average position: 1. Find midpoints for each position range - e.g., pos_2_3 is 2.5, pos_4_10 is 7. 2. Multiply each midpoint by its occurrence - the number of organic SERPs where the domain ranks at the corresponding positions. 3. Sum these products. 4. Sum all occurrences. 5. Divide the total product sum by the total occurrences. 6. Repeat for each date on the timeline. That gives the weighted average position. Depending on your requirements, DataForSEO can also offer the SERP API, which is designed specifically for rank tracking. By taking advantage of its real-time tracking capabilities and allocating storage for SERP data, you can implement any time scale for the average position graph.

Visibility in target locations

Knowing the exact online visibility in each target country is important, but it is oftentimes difficult to compare these values using stand-alone datasets for every location.

To facilitate the process of comparing online visibility dynamics across locations over time, you can build a simple chart with two bars representing the current and previous periods of time.

The data for this graph can be easily obtained using the same Historical Rank Overview endpoint, noting that consecutive requests are to be made for every selected location ( location_name or location_code parameters) and the sum value of two specified time ranges (previous and selected time ranges in the corresponding date_from and date_to fields of your API request.

Average Rankings

The rankings overview dashboard provides a comprehensive view of your website’s search engine performance. The dashboard includes four key charts that help you understand how your website is performing in search engine rankings.

To help your users obtain all the valuable insights into the website’s search engine performance, DataForSEO offers a variety of API endpoints.

dashboard img 2

Components

Average Position

The Average Position graph illustrates how the average position of the website’s keywords changes over time

The graph has two axis: the x-axis represents time and is displayed in days, whereas the y-axis represents the average position of a website in SERPs and is displayed on a scale from 1 to 100.

You can get website rankings through the Google Organic endpoints of DataForSEO SERP API and store daily positions in your database. Just like many other APIs, it offers two methods of task execution: standard and live. While the former provides for the separate POST and GET requests, the latter allows obtaining data with a single API call. However, because the Average Position dashboard doesn’t require instant results, so you can save money with the Standard method.

To retrieve a complete overview of the necessary SERP element related to the required domain, use a simple script provided below.

            
?php
// You can download this file from here https://cdn.dataforseo.com/v3/examples/php/php_RestClient.zip
require('RestClient.php');
//you can use the '$id' string as a $id variable and '$tag' as $tag variable. we will set the necessary values before sending the request.
//http://your-server.com/pingscript?id=$id
if ((isset($_GET["id"])) and (!empty($_GET["id"]))) {
	// Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard
	$client = new RestClient('https://api.dataforseo.com/', null, 'login', 'password');
	try {
		$result = array();
		$api_result = $client->get('/v3/serp/google/organic/task_get/regular/' . $_GET["id"]);
		if (((int)$api_result['status_code'] > 0) and ((int)$api_result['status_code'] < 30000)) { //see https://docs.dataforseo.com/v3/appendix/errors/
			foreach($api_result['tasks'] as $task) {
				if (((int)$task['status_code'] > 0) and ((int)$task['status_code'] < 30000)) { //see https://docs.dataforseo.com/v3/appendix/errors/
					//we set 'site' value when setting the task
					if ((isset($task['data']['tag'])) and (!empty($task['data']['tag']))) {
						$site = $task['data']['tag'];
						foreach($task['result']['items'] as $serp) {
							//looking only for organics
							if (($serp['type'] == 'organic') and (parse_url($serp['url'], PHP_URL_HOST) == $site)) {
								$result[] = $serp;
							}
						}
					}
				} else {
					http_response_code(204);
				}
			}
		} else {
			http_response_code(204);
		}
		print_r($result);
		// do something with result
	} catch (RestClientException $e) {
		echo "\n";
		print "HTTP code: {$e->getHttpCode()}\n";
		print "Error code: {$e->getCode()}\n";
		print "Message: {$e->getMessage()}\n";
		print  $e->getTraceAsString();
		echo "\n";
	}
	$client = null;
} else {
	http_response_code(204);
}
?>
"        
    

When you will be setting a task, you should add the “tag” and “pingback_url” fields to the body of the POST request. The first field should be used for defining the domain, URL, or web page you need data on, while in the second one, you should provide the URL path to our script stored on your server, e.g.:

http://your-server.com/pingscript?id=$id

http://your-server.com/pingscript?id=$id&tag=$tag

Your POST request to SERP API should be structured like this:

    
POST https://api.dataforseo.com/v3/serp/google/organic/task_post 

[
   {
       "language_name": "English",
       "location_name": "United States",
       "keyword": "albert einstein",
       "tag": "wikipedia.org",
       "pingback_url": "https://your-server.com/pingback.php?id=$id"
   }
]
    

In this way, once the task is completed, you will receive the pingback.php file with the required results to your server.

Now let’s get back to understanding the script and adjusting it to fit your needs. To begin with, you need to download the RestClient.php for running it. The login and password here should be replaced with your credentials from the account dashboard.

$client = new RestClient('https://api.dataforseo.com/', null, 'login', 'password');

In the second line of the try block, you should specify the type of SERP that will be retrieved without appending the id at the end of it, e.g.:

/v3/serp/google/organic/task_get/regular/ – if you need to retrieve the regular results

/v3/serp/google/organic/task_get/advanced/ – for advanced SERP results

The following line of code represents the arrays that will be cycled through to filter out the necessary elements:

foreach($task['result']['items'] as $serp)

Finally, this if statement contains the condition where you should define what type of SERP element will be retrieved for the specified domain:

if (($serp['type'] == 'paid')...

if (($serp['type'] == 'local_pack')...

if (($serp['type'] == 'featured_snippet')...

If you set multiple tasks for several domains in a POST request, remember to specify the domain in “tag” and add the “pingback_url” for each of them. After the script collects the results, you will find them as pingback.php files by the path defined as “pingback_url”.

As an alternative, you can use the Historical Rank Overview endpoint of DataForSEO Labs API. This approach will allow you to get historical data on the website’s monthly distribution of rankings in SERP month over . Consequently, your solution will be capable of displaying the Average Position graph without collecting and storing the necessary data beforehand.

To obtain the domain’s ranking data for a certain location, use the location_name or location_code parameters. The desired time period can be set using the date_from and date_to parameters.

    
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/historical_rank_overview/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "target": "u24.gov.ua",
        "language_name": "English",
        "location_code": 2840,
        "date_from": "2023-01-01",
        "date_to": "2023-03-01"
    }      
    

The API response includes objects, each of which corresponds to the month of the specified time period. Having this data, you can easily calculate the average position of the website at every point of the graph.

    
        
{
  "version": "0.1.20210818",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "3.7830 sec.",
  "cost": 0.103,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "08261200-1535-0294-0000-ed145d1a2e70",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "3.7255 sec.",
      "cost": 0.103,
      "result_count": 1,
      "path": [
        "v3",
        "dataforseo_labs",
        "google",
        "historical_rank_overview",
        "live"
      ],
      "data": {
        "api": "dataforseo_labs",
        "function": "historical_rank_overview",
        "se_type": "google",
        "target": "dataforseo.com",
        "location_code": 2840,
        "language_code": "en",
        "date_from": "2021-01-01",
        "date_to": "2021-02-01"
      },
      "result": [
        {
          "se_type": "google",
          "target": "dataforseo.com",
          "location_code": 2840,
          "language_code": "en",
          "total_count": 2,
          "items_count": 2,
          "items": [
            {
              "se_type": "google",
              "year": 2021,
              "month": 3,
              "metrics": {
                "organic": {
                  "pos_1": 9,
                  "pos_2_3": 19,
                  "pos_4_10": 80,
                  "pos_11_20": 110,
                  "pos_21_30": 153,
                  "pos_31_40": 184,
                  "pos_41_50": 176,
                  "pos_51_60": 173,
                  "pos_61_70": 164,
                  "pos_71_80": 176,
                  "pos_81_90": 138,
                  "pos_91_100": 117,
                  "etv": 1369.5610451982193,
                  "impressions_etv": 303.37293742540305,
                  "count": 1499,
                  "estimated_paid_traffic_cost": 8596.951706401509,
                  "is_new": 773,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                },
                "paid": {
                  "pos_1": 7,
                  "pos_2_3": 5,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 11.335112532093206,
                  "impressions_etv": 0.6629726170007869,
                  "count": 12,
                  "estimated_paid_traffic_cost": 54.66883224599668,
                  "is_new": 10,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
              }
            },
            {
              "se_type": "google",
              "year": 2021,
              "month": 2,
              "metrics": {
                "organic": {
                  "pos_1": 9,
                  "pos_2_3": 18,
                  "pos_4_10": 77,
                  "pos_11_20": 109,
                  "pos_21_30": 158,
                  "pos_31_40": 175,
                  "pos_41_50": 178,
                  "pos_51_60": 167,
                  "pos_61_70": 170,
                  "pos_71_80": 169,
                  "pos_81_90": 146,
                  "pos_91_100": 102,
                  "etv": 1303.1623692517926,
                  "impressions_etv": 237.4731694256393,
                  "count": 1478,
                  "estimated_paid_traffic_cost": 8113.11213429941,
                  "is_new": 762,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                },
                "paid": {
                  "pos_1": 7,
                  "pos_2_3": 3,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 9.99005524824522,
                  "impressions_etv": 0.6736363357204526,
                  "count": 10,
                  "estimated_paid_traffic_cost": 57.2299567270445,
                  "is_new": 9,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
              }
            },
          ]
        }
      ]
    }
  ]
}     
    

Historical Average Ranking Changes

Build with the same data as the Average Position graph, the Historical Average Ranking Changes graph aims to make the dynamics of ranking changes more illustrative for the end user.

This graph consists of the time scale with months and vertical columns representing average ranking values at a given point in time. This simplicity makes it easier to comprehend and illustrate the progress a website has made over time.

Since this graph is closely interwoven with the Average Position graph discussed above, it only makes sense to use the same APIs for building it. To get SERP positions of a website and calculate average ranking changes, you can either use the Google Organic endpoints of DataForSEO SERP API, or the Historical Rank Overview endpoint of DataForSEO Labs API. Your choice will largely depend on the architecture of your software solution as well as the need for a more in-depth analysis of search engine results pages.
To learn more about how to get website rankings using SERP API, please check the previous part describing the Average Position graph.
If you decide to use the Historical Rank Overview endpoint of DataForSEO Labs API, you can use the dedicated fields in its response: is_up and is_down.
            
   {
              "se_type": "google",
              "year": 2021,
              "month": 3,
              "metrics": {
                "organic": {
                  "pos_1": 9,
                  "pos_2_3": 19,
                  "pos_4_10": 80,
                  "pos_11_20": 110,
                  "pos_21_30": 153,
                  "pos_31_40": 184,
                  "pos_41_50": 176,
                  "pos_51_60": 173,
                  "pos_61_70": 164,
                  "pos_71_80": 176,
                  "pos_81_90": 138,
                  "pos_91_100": 117,
                  "etv": 1369.5610451982193,
                  "impressions_etv": 303.37293742540305,
                  "count": 1499,
                  "estimated_paid_traffic_cost": 8596.951706401509,
                  "is_new": 773,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
        
    

Rankings in Target Locations

A graph that illustrates SERP rankings in target locations is a very important tool for SEOs to track progress, analyze competitors and optimize for localized SEO. The Rankings in Target Locations graph is intended to provide these capabilities to the user in a comprehensive and accessible manner.

This graph includes bars with two ranges (selected and previous) that compare the website’s rankings in selected countries. Thus, the primary purpose is to indicate the changes between the two time periods.

In a nutshell, this type of graph can be used to identify trends, track progress, and subsequently make informed decisions based on data - and it can also be easily implemented using DataForSEO APIs.

DataForSEO Labs API can provide you with all the data you need to build the Rankings in the Target Locations graph. The Historical Rank Overview endpoint includes all the corresponding parameters in the request: location_code and location_name for setting the desired location, date_from and date_to for specifying the time range, as well as target for indicating the website. In order to obtain data for both bars of the graph, you should make two consecutive requests with different time ranges.

In the response of the API, you will notice the object with the distribution of the target’s rankings according to the parameters specified in the request. Having this data, you can easily calculate the average values and display them on the graph.

       
  {
    "se_type": "google",
    "year": 2021,
    "month": 3,
    "metrics": {
      "organic": {
        "pos_1": 9,
        "pos_2_3": 19,
        "pos_4_10": 80,
        "pos_11_20": 110,
        "pos_21_30": 153,
        "pos_31_40": 184,
        "pos_41_50": 176,
        "pos_51_60": 173,
        "pos_61_70": 164,
        "pos_71_80": 176,
        "pos_81_90": 138,
        "pos_91_100": 117,
        "etv": 1369.5610451982193,
        "impressions_etv": 303.37293742540305,
        "count": 1499,
        "estimated_paid_traffic_cost": 8596.951706401509,
        "is_new": 773,
        "is_up": 0,
        "is_down": 0,
        "is_lost": 0
      }
    

Ranked Pages vs All Pages

SEO professionals use a graph that illustrates the number of a website's ranked pages versus all pages to gain insights into how well the website is performing in search engine rankings. This graph is also known as the "Indexation vs. Rankings" graph.

Overall, this graph can provide information in several particular ways, including the identification of indexing issues, demonstrating the effectiveness of SEO efforts, and, last but not least, evaluating the quality of content.

The number of all pages and ranked pages is available through Google’s Search Console, but there are numerous cases when an SEO professional can’t gain access to its data for a particular website. In this case, DataForSEO provides an option for obtaining a number of all pages and pages that are blocked for indexing.

To obtain URLs of all pages of a website, the easiest way would be parsing its sitemap. Its URL is normally identified as /sitemap_index.xml. However, you can get website pages with plenty of useful on-site SEO data by using the OnPage API’s Summary endpoint. You can learn more about the costs associated with this API in this Help Center article.

On the other hand, obtaining pages that are ranked on Google is a much more complicated task that requires SERP data. What’s more, the “Ranked Pages vs All Pages” is a time-series graph, so historical data is also necessary. DataForSEO Labs API includes the Relevant Pages endpoint that can provide you with a total_count value for all ranked pages of the target website. You will find more information about this endpoint in the following part of this guide.

Ranked Pages

The Ranked Pages dashboard in SEO software is an essential tool for SEO professionals because it allows them to monitor the performance of their website’s pages in search engine results pages. This dashboard provides a clear overview of which pages are ranking for which keywords and how they are performing over time.

By having this information readily available, SEO professionals can easily identify which pages are ranking well and which ones need improvement. They can then make informed decisions about which pages to optimize further, which keywords to target, and which pages may need to be restructured or removed entirely.

DataForSEO will provide you with all the data required to build a Ranked Pages dashboard – so that your users can always have comprehensive information about the performance of target websites.
To help your users obtain all the valuable insights into the website’s search engine performance, DataForSEO offers a variety of API endpoints.

dashboard img 3

Components

Ranked Pages vs All Pages

SEO experts often use a graph that compares the number of website pages on a website that are ranked by search engines to its total number of pages. This graph, commonly known as an "Indexation vs. Rankings" graph, provides valuable insights into the website's performance in terms of SEO. We’ve briefly reviewed the simplified version of this graph in the previous part, so let’s examine it in detail.

First of all, the task of building this graph would entail obtaining the number of URLs that are available on a website. To accomplish that, you can use two different approaches:

  • Parse the website’s sitemap that is typically located at /sitemap_index.xml. Here you’ll find a list of URLs that are submitted for indexation and therefore should be ranked by search engines.
  • Use the Summary endpoint of DataForSEO OnPage API. You can request the maximum number of pages that you can realistically expect from a website. First, refer to the Task Post endpoint of OnPage API and specify the domain in the target field and the number of pages in the max_crawl_pages field. Then you can use the Summary, Pages, and all other endpoints of OnPage API.
  • Last but not least, the Relevant Pages endpoint of DataForSEO Labs API can provide you with rankings and traffic data for the web pages of the specified domain. This approach is valuable because the same data can be used across other components of your software solution.

Let’s consider a simple algorithm that will help you obtain all the data required for building the “Ranked Pages vs All Pages” graph using DataForSEO APIs.

To obtain pages that are visible to search engine crawlers, you can try using the capabilities of OnPage API. In the request, let’s set dataforseo.com as target and limit the max_crawl_pages to 1000.

 
 
# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard \
login="login" \
password="password" \
cred="$(printf ${login}:${password} | base64)" \
curl --location --request POST "https://api.dataforseo.com/v3/on_page/task_post" \
--header "Authorization: Basic ${cred}"  \
--header "Content-Type: application/json" \
--data-raw "[
  {
    "target": "dataforseo.com",
    "max_crawl_pages": 1000,
    "tag": "some_string_123",
    "pingback_url": "https://your-server.com/pingscript?id=$id&tag=$tag"
  }
]"

After the task is completed, you can request the Pages endpoint by specifying the id of the task, limit - the number of pages to return, and - since you only need pages that can be potentially ranked - a filter defining the HTML page and plain_text_rate higher than 0.03.

 

# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard \
login="login" \
password="password" \
cred="$(printf ${login}:${password} | base64)" \
curl --location --request POST "https://api.dataforseo.com/v3/on_page/pages" \
--header "Authorization: Basic ${cred}"  \
--header "Content-Type: application/json" \
--data-raw "[
  {
    "id": "07281559-0695-0216-0000-c269be8b7592",
    "filters": [[“resource_type”, “=”, “html”], “and”, [“meta.content.plain_text_rate”, “>”, “0.03”]],
    "limit": 1000
  }
]"        

Here is a shortened version of what you can expect to get in the API’s response:

 
 
{
  "version": "0.1.20221214",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0.5360 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "04061638-1535-0216-0000-4b51bb1fd841",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0.4841 sec.",
      "cost": 0,
      "result_count": 1,
      "path": [
        "v3",
        "on_page",
        "pages"
      ],
      "data": {
        "api": "on_page",
        "function": "pages",
        "limit": 1000,
        "target": "dataforseo.com",
        "max_crawl_pages": 1000
      },
      "result": [
        {
          "crawl_progress": "in_progress",
          "crawl_status": {
            "max_crawl_pages": 1000,
            "pages_in_queue": 142,
            "pages_crawled": 51
          },
          "total_items_count": 51,
          "items_count": 51,
          "items": [
            {
              "resource_type": "html",
              "status_code": 200,
              "location": null,
              "url": "https://dataforseo.com/",
              "meta": {
                "title": "Powerful API Stack For Data-Driven SEO Tools – DataForSEO",
                "charset": 65001,
                "follow": true,
                "generator": "Powered by WPBakery Page Builder - drag and drop page builder for WordPress.",
                "htags": {
                  "h4": [
                    "Products",
                    "By industry",
                    "By company type",
                    "By application",
                    "Docs",
                    "Resources",
                    "Login",
                    "We will assist you during the whole process of implementation. We can make Skype call or group chat. Any communication channel that will satisfy your needs.",
                    "APIs",
                    "Databases",
                    "Solutions",
                    "Knowledge Base",
                    "Resources",
                    "Legal information",
                    "Payment Methods:"
                  ],
                  "h1": [
                    "Powerful API Stack For\nData-Driven Marketers"
                  ],
                  "h2": [
                    "Our APIs",
                    "Need Any Help? Our 5-Star Support Will Help You.",
                    "Benefits",
                    "Insights",
                    "DataForSEO – the best data provider for SEO-software companies and agencies",
                    "Reviews",
                    "DataForSEO in Figures",
                    "Questions & Answers",
                    "Our happy customers"
                  ],
                  "h5": [
                    "Simple pricing",
                    "Tech Support",
                    "Clear stats",
                    "High speed",
                    "Availability",
                    "Accuracy and freshness",
                    "Predictable pricing",
                    "Introduction to APIs for SEO software",
                    "Why You Must Build Your Own SEO Software (If You Haven’t Yet)",
                    "Development of SEO Tools. Where to Start?"
                  ]
                },
                "description": "We provide comprehensive data solutions for SEO and SEM analytics via API. DataForSEO is a trusted partner for 750+ SEO software companies and agencies.",
                "favicon": "https://dataforseo.com/wp-content/uploads/2022/04/cropped-favicon_512-32x32.png",
                "meta_keywords": "eretur",
                "canonical": "https://dataforseo.com/",
                "internal_links_count": 77,
                "external_links_count": 41,
                "inbound_links_count": 46,
                "images_count": 0,
                "images_size": 0,
                "scripts_count": 47,
                "scripts_size": 0,
                "stylesheets_count": 0,
                "stylesheets_size": 0,
                "title_length": 57,
                "description_length": 152,
                "render_blocking_scripts_count": 1,
                "render_blocking_stylesheets_count": 0,
                "cumulative_layout_shift": 0,
                "meta_title": null,
                "content": {
                  "plain_text_size": 9522,
                  "plain_text_rate": 0.021374936865143947,
                  "plain_text_word_count": 1599,
                  "automated_readability_index": 11.421378868121685,
                  "coleman_liau_readability_index": 11.115297060662911,
                  "dale_chall_readability_index": 7.827500095787716,
                  "flesch_kincaid_readability_index": 48.060560001899944,
                  "smog_readability_index": 20.024575302464932,
                  "description_to_content_consistency": 0.8095238208770752,
                  "title_to_content_consistency": 1,
                  "meta_keywords_to_content_consistency": 0
                },
                "deprecated_tags": null,
                "duplicate_meta_tags": [
                  "generator"
                ],
                "spell": null,
                "social_media_tags": {
                  "og:locale": "en_US",
                  "og:type": "website",
                  "og:title": "Powerful API Stack For Data-Driven SEO Tools – DataForSEO",
                  "og:description": "We provide comprehensive data solutions for SEO and SEM analytics via API. DataForSEO is a trusted partner for 750+ SEO software companies and agencies.",
                  "og:url": "https://dataforseo.com",
                  "og:site_name": "DataForSEO",
                  "og:updated_time": "2023-02-17T14:24:27+03:00",
                  "article:published_time": "2016-07-21T16:24:26+03:00",
                  "article:modified_time": "2023-02-17T14:24:27+03:00",
                  "og:video": "https://www.youtube.com/embed/SoZMBkkVv4E",
                  "video:duration": "69",
                  "twitter:card": "summary_large_image",
                  "twitter:title": "Powerful API Stack For Data-Driven SEO Tools – DataForSEO",
                  "twitter:description": "We provide comprehensive data solutions for SEO and SEM analytics via API. DataForSEO is a trusted partner for 750+ SEO software companies and agencies.",
                  "twitter:label1": "Written by",
                  "twitter:data1": "admin",
                  "twitter:label2": "Time to read",
                  "twitter:data2": "24 minutes"
                }
              },
              "page_timing": {
                "time_to_interactive": 35,
                "dom_complete": 35,
                "largest_contentful_paint": 0,
                "first_input_delay": 0,
                "connection_time": 7,
                "time_to_secure_connection": 11,
                "request_sent_time": 0,
                "waiting_time": 0,
                "download_time": 17,
                "duration_time": 35,
                "fetch_start": 0,
                "fetch_end": 35
              },
              "onpage_score": 98.17,
              "total_dom_size": 445553,
              "custom_js_response": null,
              "resource_errors": {
                "errors": null,
                "warnings": [
                  {
                    "line": 4,
                    "column": 1,
                    "message": "Has node with more than 60 childs.",
                    "status_code": 1
                  },
                  {
                    "line": 0,
                    "column": 0,
                    "message": "Has more that 1500 nodes.",
                    "status_code": 2
                  }
                ]
              },
              "broken_resources": false,
              "broken_links": false,
              "duplicate_title": false,
              "duplicate_description": false,
              "duplicate_content": false,
              "click_depth": 0,
              "size": 445553,
              "encoded_size": 0,
              "total_transfer_size": 0,
              "fetch_time": "2023-04-06 16:38:47 +00:00",
              "cache_control": {
                "cachable": false,
                "ttl": 0
              },
              "checks": {
                "no_content_encoding": false,
                "high_loading_time": false,
                "is_redirect": false,
                "is_4xx_code": false,
                "is_5xx_code": false,
                "is_broken": false,
                "is_www": false,
                "is_https": true,
                "is_http": false,
                "high_waiting_time": false,
                "has_micromarkup": false,
                "has_micromarkup_errors": false,
                "no_doctype": false,
                "has_html_doctype": true,
                "canonical": true,
                "no_encoding_meta_tag": false,
                "no_h1_tag": false,
                "https_to_http_links": false,
                "size_greater_than_3mb": false,
                "meta_charset_consistency": true,
                "has_meta_refresh_redirect": false,
                "has_render_blocking_resources": true,
                "redirect_chain": false,
                "low_content_rate": true,
                "high_content_rate": false,
                "low_character_count": false,
                "high_character_count": false,
                "small_page_size": false,
                "large_page_size": false,
                "low_readability_rate": false,
                "irrelevant_description": false,
                "irrelevant_title": false,
                "irrelevant_meta_keywords": true,
                "title_too_long": false,
                "has_meta_title": false,
                "title_too_short": false,
                "deprecated_html_tags": false,
                "duplicate_meta_tags": true,
                "duplicate_title_tag": false,
                "no_image_alt": false,
                "no_image_title": false,
                "no_description": false,
                "no_title": false,
                "no_favicon": false,
                "seo_friendly_url": true,
                "flash": false,
                "frame": false,
                "lorem_ipsum": false,
                "seo_friendly_url_characters_check": true,
                "seo_friendly_url_dynamic_check": true,
                "seo_friendly_url_keywords_check": true,
                "seo_friendly_url_relative_length_check": true,
                "recursive_canonical": false,
                "canonical_chain": false,
                "canonical_to_redirect": false,
                "canonical_to_broken": false,
                "has_links_to_redirects": false,
                "is_orphan_page": false,
                "is_link_relation_conflict": false
              },
              "content_encoding": "br",
              "media_type": "text/html",
              "server": "cloudflare",
              "is_resource": false,
              "url_length": 23,
              "relative_url_length": 1,
              "last_modified": {
                "header": "2023-04-06 13:36:59 +00:00",
                "sitemap": null,
                "meta_tag": "2023-02-17 11:24:27 +00:00"
              }
            }
          ]
        }
      ]
    }
  ]
}        

As you can see, OnPage API can provide detailed information about website pages, including their number and, at the same time, help obtain pages that are blocked from indexing and display the second line of the “Ranked Pages vs All Pages” graph.

In a nutshell, it would be enough to simply count the pages that are blocked from indexing. OnPage API offers a separate endpoint that can help you with that - Non-Indexable Pages.

You can set the limit for the number of returned pages and specify filters. However, in this case, you won’t need any additional parameters except for maybe excluding the pages that have intentionally been made non-indexable. For example, to exclude admin pages, you can specify the following filter:

“filters”: [“url”, “not_like”, “%/wp-admin/%”]

Another approach would be to get historical data on how pages of a certain domain rank on Google. The Relevant Pages endpoint of DataForSEO Labs API lets you find out how webpages rank across different locations. In addition to that, this endpoint can provide data on pages that currently have ranking results, but also pages that lost all ranking results on the last check.

Historical Ranked Pages Changes

Knowing the number of pages ranking on Google and other search engines is important, but putting it into a clear historical perspective can add even more value to the dashboard.

The Historical Ranked Pages Changes graph is designed to provide SEO experts with a clear perspective on the month-over-month changes in ranked pages. The chart consists of bars that illustrate relative quantities of the website’s ranked pages.

The x-axis of the graph represents the timeline in months, allowing for a chronological view of the changes. Each bar on the graph represents a specific month and its corresponding quantity of ranked pages. The length of each bar indicates the number of pages that were ranked during that particular month.

When comparing the bars, SEO experts can easily identify patterns and trends in the website's ranked pages. For example, if the bars consistently show an upward trend, it indicates that the website's visibility and organic traffic are increasing over time. Conversely, a downward trend may suggest a decline in rankings, which can prompt further investigation into potential issues or algorithmic changes affecting the website's performance.

You can use the approaches described in the previous section (Ranked vs All Pages) to obtain data for building this graph. Another approach would be to get historical data on how pages of a certain domain rank on Google. The Relevant Pages endpoint of DataForSEO Labs API lets you determine how webpages rank across different locations. In addition to that, this endpoint can provide data on pages that currently have ranking results, but also pages that lost all ranking results on the last check.

This endpoint offers several fields for requesting data, but the minimum set should include a target domain, location and language parameters, as well as filters for filtering out unnecessary data and saving money. However, you might want to simplify it by using the historical_serp_mode parameter to only return metrics for SERPs in which the target domain had previously had rankings but didn’t have them during the last check.

Here is an example of such a request:

  
[
    {
        "target": "dataforseo.com",
        "language_name": "English",
        "location_code": 2840,
        "historical_serp_mode": "lost",
        "limit": 1000
    }
]        

The API response would contain the information on pages that previously had results in SERPs, but not anymore.

  
{
  "version": "0.1.20221214",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0.1366 sec.",
  "cost": 0.0101,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "05311944-1535-0385-0000-b5b0022922f6",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0.0785 sec.",
      "cost": 0.0101,
      "result_count": 1,
      "path": [
        "v3",
        "dataforseo_labs",
        "google",
        "relevant_pages",
        "live"
      ],
      "data": {
        "api": "dataforseo_labs",
        "function": "relevant_pages",
        "se_type": "google",
        "target": "dataforseo.com",
        "language_name": "English",
        "location_code": 2840,
        "historical_serp_mode": "lost",
        "limit": 1
      },
      "result": [
        {
          "se_type": "google",
          "target": "dataforseo.com",
          "location_code": 2840,
          "language_code": "en",
          "total_count": 305,
          "items_count": 1,
          "items": [
            {
              "se_type": "google",
              "page_address": "https://dataforseo.com/top-1000-websites",
              "metrics": {
                 "organic": {
                   "pos_1": 0,
                   "pos_2_3": 0,
                   "pos_4_10": 3,
                   "pos_11_20": 20,
                   "pos_21_30": 6,
                   "pos_31_40": 4,
                   "pos_41_50": 3,
                   "pos_51_60": 0,
                   "pos_61_70": 3,
                   "pos_71_80": 2,
                   "pos_81_90": 1,
                   "pos_91_100": 2,
                   "etv": 180.99799965694547,
                   "impressions_etv": 53.40537078958005,
                   "count": 44,
                   "estimated_paid_traffic_cost": 1320.756562024355,
                   "is_new": 23,
                   "is_up": 11,
                   "is_down": 8,
                   "is_lost": 0
                 },
                 "paid": {
                   "pos_1": 0,
                   "pos_2_3": 0,
                   "pos_4_10": 0,
                   "pos_11_20": 0,
                   "pos_21_30": 0,
                   "pos_31_40": 0,
                   "pos_41_50": 0,
                   "pos_51_60": 0,
                   "pos_61_70": 0,
                   "pos_71_80": 0,
                   "pos_81_90": 0,
                   "pos_91_100": 0,
                   "etv": 0,
                   "impressions_etv": 0,
                   "count": 0,
                   "estimated_paid_traffic_cost": 0,
                   "is_new": 0,
                   "is_up": 0,
                   "is_down": 0,
                   "is_lost": 0
                },
                "featured_snippet": null,
                "local_pack": null
              }
            }
          ]
        }
      ]
    }
  ]
}

Top Ranking Pages

The "Top Ranking Pages" bar chart in a rank-tracking SEO tool is designed to provide valuable insights into the performance of a website's individual pages in search engine rankings. This chart offers a visual representation of the highest-ranking pages based on their positions in SERPs.The y-axis of the chart represents the URLs of individual pages, while the x-axis represents the number of keywords ranking in the top 3 and top 10.

To get the number of top-ranking pages of the target website, you can use the Relevant Pages endpoint of DataForSEO Labs API. Just specify the domain in the target field, set the historical_serp_mode to live, and use the order_by parameter to obtain pages that have the most keywords ranking in the top 3 range. You can also exclude paid results from the equation by omitting the contributing item type in the item_types array.


# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/relevant_pages/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "target": "u24.gov.ua",
        "order_by":  ["metrics.organic.pos_1,desc", "metrics.organic.pos_2_3,desc"],
        "item_types": ["organic", "featured_snippet", "local_pack"],
        "limit": 3
    }
]"  

The API will return data for three website pages that have the most top-3 rankings in Google SERP.


{
  "version": "0.1.20221214",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0.3974 sec.",
  "cost": 0.0103,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "06061810-1535-0385-0000-225c2591d97c",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0.3259 sec.",
      "cost": 0.0103,
      "result_count": 1,
      "path": [
        "v3",
        "dataforseo_labs",
        "google",
        "relevant_pages",
        "live"
      ],
      "data": {
        "api": "dataforseo_labs",
        "function": "relevant_pages",
        "se_type": "google",
        "target": "u24.gov.ua",
        "order_by": [
          "metrics.organic.pos_1,desc",
          "metrics.organic.pos_2_3,desc"
        ],
        "item_types": [
          "organic",
          "featured_snippet",
          "local_pack"
        ],
        "limit": 3
      },
      "result": [
        {
          "se_type": "google",
          "target": "u24.gov.ua",
          "location_code": null,
          "language_code": null,
          "total_count": 281,
          "items_count": 3,
          "items": [
            {
              "se_type": "google",
              "page_address": "https://u24.gov.ua/",
              "metrics": {
                "organic": {
                  "pos_1": 183,
                  "pos_2_3": 146,
                  "pos_4_10": 828,
                  "pos_11_20": 1150,
                  "pos_21_30": 1232,
                  "pos_31_40": 1572,
                  "pos_41_50": 1781,
                  "pos_51_60": 1839,
                  "pos_61_70": 1891,
                  "pos_71_80": 1916,
                  "pos_81_90": 2074,
                  "pos_91_100": 1423,
                  "etv": 260487.7041325327,
                  "impressions_etv": 105156.91539546847,
                  "count": 16035,
                  "estimated_paid_traffic_cost": 895083.6932041008,
                  "is_new": 8764,
                  "is_up": 3923,
                  "is_down": 2732,
                  "is_lost": 0
                },
                "paid": null,
                "featured_snippet": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                },
                "local_pack": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
              }
            },
            {
              "se_type": "google",
              "page_address": "https://u24.gov.ua/navaldrones",
              "metrics": {
                "organic": {
                  "pos_1": 15,
                  "pos_2_3": 7,
                  "pos_4_10": 46,
                  "pos_11_20": 67,
                  "pos_21_30": 46,
                  "pos_31_40": 25,
                  "pos_41_50": 33,
                  "pos_51_60": 26,
                  "pos_61_70": 15,
                  "pos_71_80": 26,
                  "pos_81_90": 36,
                  "pos_91_100": 12,
                  "etv": 1914.1215817611665,
                  "impressions_etv": 45.38153351750225,
                  "count": 354,
                  "estimated_paid_traffic_cost": 1783.1348541900516,
                  "is_new": 145,
                  "is_up": 95,
                  "is_down": 88,
                  "is_lost": 0
                },
                "paid": null,
                "featured_snippet": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                },
                "local_pack": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
              }
            },
            {
              "se_type": "google",
              "page_address": "https://u24.gov.ua/azovstal",
              "metrics": {
                "organic": {
                  "pos_1": 14,
                  "pos_2_3": 58,
                  "pos_4_10": 80,
                  "pos_11_20": 76,
                  "pos_21_30": 73,
                  "pos_31_40": 51,
                  "pos_41_50": 51,
                  "pos_51_60": 42,
                  "pos_61_70": 42,
                  "pos_71_80": 40,
                  "pos_81_90": 41,
                  "pos_91_100": 19,
                  "etv": 11323.085409387946,
                  "impressions_etv": 7.188314407598227,
                  "count": 587,
                  "estimated_paid_traffic_cost": 2290.614295832813,
                  "is_new": 198,
                  "is_up": 166,
                  "is_down": 160,
                  "is_lost": 0
                },
                "paid": null,
                "featured_snippet": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                },
                "local_pack": {
                  "pos_1": 0,
                  "pos_2_3": 0,
                  "pos_4_10": 0,
                  "pos_11_20": 0,
                  "pos_21_30": 0,
                  "pos_31_40": 0,
                  "pos_41_50": 0,
                  "pos_51_60": 0,
                  "pos_61_70": 0,
                  "pos_71_80": 0,
                  "pos_81_90": 0,
                  "pos_91_100": 0,
                  "etv": 0,
                  "impressions_etv": 0,
                  "count": 0,
                  "estimated_paid_traffic_cost": 0,
                  "is_new": 0,
                  "is_up": 0,
                  "is_down": 0,
                  "is_lost": 0
                }
              }
            }
          ]
        }
      ]
    }
  ]
}

New Keywords

The "New Ranking Keywords" table in an SEO tool displays four columns:

  • Keywords: Shows the newly discovered keywords in the search engine results for a domain.
  • Search Volume: Indicates the estimated number of searches per month for each keyword, obtained from DataForSEO Google Ads API.
  • URL: Provides the relevant webpage URL associated with each keyword, helping identify the page that ranks for that keyword.
  • Ranking: Displays the ranking of a page relevant to the keyword, providing the important capability to prioritize the keywords that rank higher and thus require more attention.

This table helps SEO practitioners analyze keyword opportunities and track a domain's search engine rankings.

In order to obtain relevant data for each column, you can use the Ranked Keywords endpoint of DataForSEO Labs API. By properly defining the target as well as sorting and filtering parameters, you will be able to get new keywords, search volume values, ranking positions, and relevant URLs.

Request example:


# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "target": "dataforseo.com",
        "language_name": "English",
        "location_name": "United States",
        "ignore_synonyms": "true",
        "item_types": ["organic","featured_snippet","local_pack"],
        "historical_sep_mode": "live",
        "order_by": ["ranked_serp_element.serp_item.rank_absolute,asc","keyword_data.keyword_info.search_volume,desc","ranked_serp_element.last_updated_time,desc"],
        "filters": ["ranked_serp_element.serp_item.rank_changes.is_new","=","true"],
        "include_serp_info": true,
        "load_rank_absolute": true,
        "limit": 5

    }
]"

Response example:


{
    "version": "0.1.20221214",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.3267 sec.",
    "cost": 0.0101,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "06071458-1535-0381-0000-fd52937a6fa9",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.2646 sec.",
            "cost": 0.0101,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "ranked_keywords",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "ranked_keywords",
                "se_type": "google",
                "target": "dataforseo.com",
                "language_name": "English",
                "location_name": "United States",
                "ignore_synonyms": "true",
                "item_types": [
                    "organic",
                    "featured_snippet",
                    "local_pack"
                ],
                "order_by": [
                    "ranked_serp_element.serp_item.rank_absolute,asc",
                    "keyword_data.keyword_info.search_volume,desc",
                    "ranked_serp_element.last_updated_time,desc"
                ],
                "filters": [
                    "ranked_serp_element.serp_item.rank_changes.is_new",
                    "=",
                    "true"
                ],
                "load_rank_absolute": true,
                "limit": 1
            },
            "result": [
                {
                    "se_type": "google",
                    "target": "dataforseo.com",
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 427,
                    "items_count": 1,
                    "metrics": {
                        "organic": {
                            "pos_1": 0,
                            "pos_2_3": 1,
                            "pos_4_10": 15,
                            "pos_11_20": 39,
                            "pos_21_30": 38,
                            "pos_31_40": 42,
                            "pos_41_50": 35,
                            "pos_51_60": 38,
                            "pos_61_70": 36,
                            "pos_71_80": 63,
                            "pos_81_90": 63,
                            "pos_91_100": 56,
                            "etv": 417.22028716653585,
                            "impressions_etv": 34.01774660497904,
                            "count": 426,
                            "estimated_paid_traffic_cost": 6788.7312811170705,
                            "is_new": 426,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "paid": null,
                        "featured_snippet": {
                            "pos_1": 1,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "etv": 118.55999755859375,
                            "impressions_etv": 0,
                            "count": 1,
                            "estimated_paid_traffic_cost": 0,
                            "is_new": 1,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "local_pack": {
                            "pos_1": 0,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "etv": 0,
                            "impressions_etv": 0,
                            "count": 0,
                            "estimated_paid_traffic_cost": 0,
                            "is_new": 0,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        }
                    },
                    "metrics_absolute": {
                        "organic": {
                            "pos_1": 0,
                            "pos_2_3": 1,
                            "pos_4_10": 10,
                            "pos_11_20": 39,
                            "pos_21_30": 41,
                            "pos_31_40": 40,
                            "pos_41_50": 31,
                            "pos_51_60": 38,
                            "pos_61_70": 38,
                            "pos_71_80": 58,
                            "pos_81_90": 65,
                            "pos_91_100": 62,
                            "is_new": 426,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "paid": null,
                        "featured_snippet": {
                            "pos_1": 1,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "is_new": 1,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "local_pack": {
                            "pos_1": 0,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "is_new": 0,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        }
                    },
                    "items": [
                        {
                            "se_type": "google",
                            "keyword_data": {
                                "se_type": "google",
                                "keyword": "how to get cid",
                                "location_code": 2840,
                                "language_code": "en",
                                "keyword_info": {
                                    "se_type": "google",
                                    "last_updated_time": "2023-05-14 13:07:41 +00:00",
                                    "competition": null,
                                    "competition_level": "LOW",
                                    "cpc": null,
                                    "search_volume": 390,
                                    "low_top_of_page_bid": null,
                                    "high_top_of_page_bid": null,
                                    "categories": null,
                                    "monthly_searches": [
                                        {
                                            "year": 2023,
                                            "month": 4,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2023,
                                            "month": 3,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2023,
                                            "month": 2,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2023,
                                            "month": 1,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 12,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 11,
                                            "search_volume": 260
                                        },
                                        {
                                            "year": 2022,
                                            "month": 10,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 9,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 8,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 7,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 6,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 5,
                                            "search_volume": 390
                                        }
                                    ]
                                },
                                "impressions_info": {
                                    "se_type": "google",
                                    "last_updated_time": "2022-04-21 15:28:32 +00:00",
                                    "bid": 999,
                                    "match_type": "exact",
                                    "ad_position_min": null,
                                    "ad_position_max": null,
                                    "ad_position_average": null,
                                    "cpc_min": null,
                                    "cpc_max": null,
                                    "cpc_average": null,
                                    "daily_impressions_min": null,
                                    "daily_impressions_max": null,
                                    "daily_impressions_average": null,
                                    "daily_clicks_min": null,
                                    "daily_clicks_max": null,
                                    "daily_clicks_average": null,
                                    "daily_cost_min": null,
                                    "daily_cost_max": null,
                                    "daily_cost_average": null
                                },
                                "serp_info": {
                                    "se_type": "google",
                                    "check_url": "https://www.google.com/search?q=how%20to%20get%20cid&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                    "serp_item_types": [
                                        "featured_snippet",
                                        "people_also_ask",
                                        "organic",
                                        "images",
                                        "related_searches"
                                    ],
                                    "se_results_count": 191000000,
                                    "last_updated_time": "2023-05-22 17:37:03 +00:00",
                                    "previous_updated_time": "2023-04-14 10:24:08 +00:00"
                                },
                                "avg_backlinks_info": {
                                    "se_type": "google",
                                    "backlinks": 12.399999618530273,
                                    "dofollow": 10.100000381469727,
                                    "referring_pages": 12,
                                    "referring_domains": 9.699999809265137,
                                    "referring_main_domains": 9.199999809265137,
                                    "rank": 46.099998474121094,
                                    "main_domain_rank": 493.8999938964844,
                                    "last_updated_time": "2023-05-22 17:37:05 +00:00"
                                },
                                "search_intent_info": {
                                    "se_type": "google",
                                    "main_intent": "informational",
                                    "foreign_intent": null,
                                    "last_updated_time": "2023-03-02 14:13:34 +00:00"
                                }
                            },
                            "ranked_serp_element": {
                                "se_type": "google",
                                "serp_item": {
                                    "se_type": "google",
                                    "type": "featured_snippet",
                                    "rank_group": 1,
                                    "rank_absolute": 1,
                                    "position": "left",
                                    "xpath": "/html[1]/body[1]/div[6]/div[1]/div[13]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/block-component[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]",
                                    "domain": "dataforseo.com",
                                    "title": "What is CID, place ID, feature ID? Where can I get these ...",
                                    "featured_title": "What's CID?",
                                    "description": "There are three ways to obtain a CID. ...\n2 Find a place on Google Maps using your browser. ...\nThe string 28e48b1a90ccf57e is the CID value encoded in hexadecimal. ...\nFor the example above, the obtained decoded CID is 2946633002421908862.\n3 The third way to obtain CID is by looking into the page source.",
                                    "url": "https://dataforseo.com/help-center/what-is-cid-place-id-feature-id",
                                    "table": null,
                                    "main_domain": "dataforseo.com",
                                    "relative_url": "/help-center/what-is-cid-place-id-feature-id",
                                    "etv": 118.55999755859375,
                                    "impressions_etv": null,
                                    "estimated_paid_traffic_cost": null,
                                    "rank_changes": {
                                        "previous_rank_absolute": null,
                                        "is_new": true,
                                        "is_up": false,
                                        "is_down": false
                                    },
                                    "backlinks_info": {
                                        "referring_domains": 1,
                                        "referring_main_domains": 1,
                                        "referring_pages": 2,
                                        "dofollow": 2,
                                        "backlinks": 2,
                                        "time_update": "2023-05-16 15:35:17 +00:00"
                                    },
                                    "rank_info": {
                                        "page_rank": 108,
                                        "main_domain_rank": 445
                                    }
                                },
                                "check_url": "https://www.google.com/search?q=how%20to%20get%20cid&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                "serp_item_types": [
                                    "featured_snippet",
                                    "people_also_ask",
                                    "organic",
                                    "images",
                                    "related_searches"
                                ],
                                "se_results_count": 191000000,
                                "keyword_difficulty": 16,
                                "is_lost": false,
                                "last_updated_time": "2023-05-22 17:37:03 +00:00",
                                "previous_updated_time": "2023-04-14 10:24:08 +00:00"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}


New Keywords

The New Keywords dashboard is a useful feature within the SEO software that empowers SEO professionals to keep an eye on new keywords for their websites. This feature enables users to stay ahead of the competition by identifying new keywords to track.

With the New Keywords dashboard, SEO professionals can conduct in-depth keyword research and exploration to expand their website’s visibility in search engine results pages. By leveraging this tool, users can uncover new keyword ideas, assess their search volume and competitiveness, and prioritize the most promising keywords to target in their SEO strategies.

By continuously monitoring and analyzing new keywords, SEO professionals can adapt their content creation, optimization, and targeting efforts to align with evolving user search behaviors. This proactive approach allows them to stay relevant, capture valuable organic traffic, and achieve better rankings in search engine results.

DataForSEO’s comprehensive API endpoints provide the necessary data to build a robust New Keywords feature. By utilizing these APIs, users can gain access to a wealth of insights and make data-driven decisions to optimize their website’s performance in search engines effectively.

dashboard img 4

Components

New Keywords to Track

The "New Ranking Keywords to Track" is the extended version of the table described in the previous section “Ranked Pages.” The biggest difference is the ability to apply various sorting rules. For example. You can sort the table by search volume of keywords and filter these keywords by certain words or other parameters. Another distinct difference is that this extended table can display data for various locations, providing an opportunity to discover ranking keywords in particular countries and search engines.

Just like its simplified version, the “New Keywords to Track” table displays four columns to provide comprehensive insights and analysis:

  • Keywords: This column showcases the newly discovered keywords in the search engine results for a specific domain. By monitoring these keywords, SEO practitioners can identify relevant terms and phrases that are gaining traction and visibility.
  • Search Volume: The search volume column indicates the estimated number of searches per month for each keyword. This valuable information is obtained from the DataForSEO Google Ads API, enabling users to understand the popularity and demand for specific keywords.
  • URL: The URL column provides the relevant webpage URL associated with each keyword. This feature assists in pinpointing the specific page that ranks for a particular keyword, allowing SEO practitioners to evaluate and optimize the performance of individual pages.
  • Ranking: The ranking column displays the position of a page in relation to the keyword. This information is crucial as it helps prioritize keywords that have higher rankings and require more attention. By focusing on keywords with better rankings, SEO practitioners can allocate resources effectively and enhance their optimization strategies.

This table serves as a valuable tool for SEO practitioners to analyze keyword opportunities and track a domain's search engine rankings. By leveraging the insights provided in each column, they can make data-driven decisions and optimize their website's performance in search engine results.

To obtain the relevant data for each column, you can utilize the Ranked Keywords endpoint of the DataForSEO Labs API. By defining the target, sorting, and filtering parameters appropriately, you will be able to retrieve new keywords, search volume values, ranking positions, and relevant URLs. This powerful API integration empowers SEO professionals with accurate and up-to-date information for effective optimization strategies.

An example of the request to DataForSEO Labs API provided below contains order_by and filters parameters.

The order_by parameters will sort the table by the rank of the relevant result is SERP, search volume of the keyword, and the time when the SERP data was last updated. "order_by": ["ranked_serp_element.serp_item.rank_absolute,asc","keyword_data.keyword_info.search_volume,desc","ranked_serp_element.last_updated_time,desc"

The filters array, on the other hand, is responsible for serving only newly found ranking keywords: "filters": ["ranked_serp_element.serp_item.rank_changes.is_new","=","true"]

Here’s an example of the request:

  
# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/ranked_keywords/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "target": "dataforseo.com",
        "language_name": "English",
        "location_name": "United States",
        "ignore_synonyms": "true",
        "item_types": ["organic","featured_snippet","local_pack"],
        "historical_sep_mode": "live",
        "order_by": ["ranked_serp_element.serp_item.rank_absolute,asc","keyword_data.keyword_info.search_volume,desc","ranked_serp_element.last_updated_time,desc"],
        "filters": ["ranked_serp_element.serp_item.rank_changes.is_new","=","true"],
        "include_serp_info": true,
        "load_rank_absolute": true,
        "limit": 5

    }
]"

The API will return the following response:

  
{
    "version": "0.1.20221214",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.3267 sec.",
    "cost": 0.0101,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "06071458-1535-0381-0000-fd52937a6fa9",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.2646 sec.",
            "cost": 0.0101,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "ranked_keywords",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "ranked_keywords",
                "se_type": "google",
                "target": "dataforseo.com",
                "language_name": "English",
                "location_name": "United States",
                "ignore_synonyms": "true",
                "item_types": [
                    "organic",
                    "featured_snippet",
                    "local_pack"
                ],
                "order_by": [
                    "ranked_serp_element.serp_item.rank_absolute,asc",
                    "keyword_data.keyword_info.search_volume,desc",
                    "ranked_serp_element.last_updated_time,desc"
                ],
                "filters": [
                    "ranked_serp_element.serp_item.rank_changes.is_new",
                    "=",
                    "true"
                ],
                "load_rank_absolute": true,
                "limit": 1
            },
            "result": [
                {
                    "se_type": "google",
                    "target": "dataforseo.com",
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 427,
                    "items_count": 1,
                    "metrics": {
                        "organic": {
                            "pos_1": 0,
                            "pos_2_3": 1,
                            "pos_4_10": 15,
                            "pos_11_20": 39,
                            "pos_21_30": 38,
                            "pos_31_40": 42,
                            "pos_41_50": 35,
                            "pos_51_60": 38,
                            "pos_61_70": 36,
                            "pos_71_80": 63,
                            "pos_81_90": 63,
                            "pos_91_100": 56,
                            "etv": 417.22028716653585,
                            "impressions_etv": 34.01774660497904,
                            "count": 426,
                            "estimated_paid_traffic_cost": 6788.7312811170705,
                            "is_new": 426,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "paid": null,
                        "featured_snippet": {
                            "pos_1": 1,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "etv": 118.55999755859375,
                            "impressions_etv": 0,
                            "count": 1,
                            "estimated_paid_traffic_cost": 0,
                            "is_new": 1,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "local_pack": {
                            "pos_1": 0,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "etv": 0,
                            "impressions_etv": 0,
                            "count": 0,
                            "estimated_paid_traffic_cost": 0,
                            "is_new": 0,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        }
                    },
                    "metrics_absolute": {
                        "organic": {
                            "pos_1": 0,
                            "pos_2_3": 1,
                            "pos_4_10": 10,
                            "pos_11_20": 39,
                            "pos_21_30": 41,
                            "pos_31_40": 40,
                            "pos_41_50": 31,
                            "pos_51_60": 38,
                            "pos_61_70": 38,
                            "pos_71_80": 58,
                            "pos_81_90": 65,
                            "pos_91_100": 62,
                            "is_new": 426,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "paid": null,
                        "featured_snippet": {
                            "pos_1": 1,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "is_new": 1,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        },
                        "local_pack": {
                            "pos_1": 0,
                            "pos_2_3": 0,
                            "pos_4_10": 0,
                            "pos_11_20": 0,
                            "pos_21_30": 0,
                            "pos_31_40": 0,
                            "pos_41_50": 0,
                            "pos_51_60": 0,
                            "pos_61_70": 0,
                            "pos_71_80": 0,
                            "pos_81_90": 0,
                            "pos_91_100": 0,
                            "is_new": 0,
                            "is_up": 0,
                            "is_down": 0,
                            "is_lost": 0
                        }
                    },
                    "items": [
                        {
                            "se_type": "google",
                            "keyword_data": {
                                "se_type": "google",
                                "keyword": "how to get cid",
                                "location_code": 2840,
                                "language_code": "en",
                                "keyword_info": {
                                    "se_type": "google",
                                    "last_updated_time": "2023-05-14 13:07:41 +00:00",
                                    "competition": null,
                                    "competition_level": "LOW",
                                    "cpc": null,
                                    "search_volume": 390,
                                    "low_top_of_page_bid": null,
                                    "high_top_of_page_bid": null,
                                    "categories": null,
                                    "monthly_searches": [
                                        {
                                            "year": 2023,
                                            "month": 4,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2023,
                                            "month": 3,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2023,
                                            "month": 2,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2023,
                                            "month": 1,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 12,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 11,
                                            "search_volume": 260
                                        },
                                        {
                                            "year": 2022,
                                            "month": 10,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 9,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 8,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 7,
                                            "search_volume": 320
                                        },
                                        {
                                            "year": 2022,
                                            "month": 6,
                                            "search_volume": 390
                                        },
                                        {
                                            "year": 2022,
                                            "month": 5,
                                            "search_volume": 390
                                        }
                                    ]
                                },
                                "impressions_info": {
                                    "se_type": "google",
                                    "last_updated_time": "2022-04-21 15:28:32 +00:00",
                                    "bid": 999,
                                    "match_type": "exact",
                                    "ad_position_min": null,
                                    "ad_position_max": null,
                                    "ad_position_average": null,
                                    "cpc_min": null,
                                    "cpc_max": null,
                                    "cpc_average": null,
                                    "daily_impressions_min": null,
                                    "daily_impressions_max": null,
                                    "daily_impressions_average": null,
                                    "daily_clicks_min": null,
                                    "daily_clicks_max": null,
                                    "daily_clicks_average": null,
                                    "daily_cost_min": null,
                                    "daily_cost_max": null,
                                    "daily_cost_average": null
                                },
                                "serp_info": {
                                    "se_type": "google",
                                    "check_url": "https://www.google.com/search?q=how%20to%20get%20cid&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                    "serp_item_types": [
                                        "featured_snippet",
                                        "people_also_ask",
                                        "organic",
                                        "images",
                                        "related_searches"
                                    ],
                                    "se_results_count": 191000000,
                                    "last_updated_time": "2023-05-22 17:37:03 +00:00",
                                    "previous_updated_time": "2023-04-14 10:24:08 +00:00"
                                },
                                "avg_backlinks_info": {
                                    "se_type": "google",
                                    "backlinks": 12.399999618530273,
                                    "dofollow": 10.100000381469727,
                                    "referring_pages": 12,
                                    "referring_domains": 9.699999809265137,
                                    "referring_main_domains": 9.199999809265137,
                                    "rank": 46.099998474121094,
                                    "main_domain_rank": 493.8999938964844,
                                    "last_updated_time": "2023-05-22 17:37:05 +00:00"
                                },
                                "search_intent_info": {
                                    "se_type": "google",
                                    "main_intent": "informational",
                                    "foreign_intent": null,
                                    "last_updated_time": "2023-03-02 14:13:34 +00:00"
                                }
                            },
                            "ranked_serp_element": {
                                "se_type": "google",
                                "serp_item": {
                                    "se_type": "google",
                                    "type": "featured_snippet",
                                    "rank_group": 1,
                                    "rank_absolute": 1,
                                    "position": "left",
                                    "xpath": "/html[1]/body[1]/div[6]/div[1]/div[13]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/block-component[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]/div[1]",
                                    "domain": "dataforseo.com",
                                    "title": "What is CID, place ID, feature ID? Where can I get these ...",
                                    "featured_title": "What's CID?",
                                    "description": "There are three ways to obtain a CID. ...\n2 Find a place on Google Maps using your browser. ...\nThe string 28e48b1a90ccf57e is the CID value encoded in hexadecimal. ...\nFor the example above, the obtained decoded CID is 2946633002421908862.\n3 The third way to obtain CID is by looking into the page source.",
                                    "url": "https://dataforseo.com/help-center/what-is-cid-place-id-feature-id",
                                    "table": null,
                                    "main_domain": "dataforseo.com",
                                    "relative_url": "/help-center/what-is-cid-place-id-feature-id",
                                    "etv": 118.55999755859375,
                                    "impressions_etv": null,
                                    "estimated_paid_traffic_cost": null,
                                    "rank_changes": {
                                        "previous_rank_absolute": null,
                                        "is_new": true,
                                        "is_up": false,
                                        "is_down": false
                                    },
                                    "backlinks_info": {
                                        "referring_domains": 1,
                                        "referring_main_domains": 1,
                                        "referring_pages": 2,
                                        "dofollow": 2,
                                        "backlinks": 2,
                                        "time_update": "2023-05-16 15:35:17 +00:00"
                                    },
                                    "rank_info": {
                                        "page_rank": 108,
                                        "main_domain_rank": 445
                                    }
                                },
                                "check_url": "https://www.google.com/search?q=how%20to%20get%20cid&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                "serp_item_types": [
                                    "featured_snippet",
                                    "people_also_ask",
                                    "organic",
                                    "images",
                                    "related_searches"
                                ],
                                "se_results_count": 191000000,
                                "keyword_difficulty": 16,
                                "is_lost": false,
                                "last_updated_time": "2023-05-22 17:37:03 +00:00",
                                "previous_updated_time": "2023-04-14 10:24:08 +00:00"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

New Keywords Over Time

The "New Keywords Over Time" is a bar chart that provides a visual representation of the keywords newly discovered for a target website over a certain period of time. In a nutshell, it offers SEO experts a valuable insight into the growth of a website’s keyword portfolio.

This chart consists of the x-axis that represents the time period displayed in months, and the y-axis displaying the number of newly discovered keywords during each corresponding month.

Each bar on the chart represents a specific month, while the height of the bar corresponds to the number of keywords discovered during that time range. Thus, a taller bar indicates a higher number of new keywords, whereas a shorter bar represents a shorter number.

To get the number of newly discovered keywords for a target website, you can use the Historical Rank Overview endpoint of DataForSEO Labs API. By specifying the target, location and language parameters, as well as the time range, you will be able to obtain historical ranking data and, what’s even more important, the number of new keywords.

Here’s an example of the request for obtaining ranking data for the u24.gov.ua domain in the United States in the time range from January to June 2023:

  
# Instead of 'login' and 'password' use your credentials from https://app.dataforseo.com/api-dashboard 
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/historical_rank_overview/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "target": "u24.gov.ua",
        "location_code": 2840,
        "language_code": "en",
        "date_from": "2023-01-01",
        "date_to": "2023-05-31"
    }
]"

The API response contains a variety of data, but in the context of the “New Keywords Over Time” chart you should pay attention to the following fields in the items array: “year”, “month”, and “is_new”.

  
{
    "version": "0.1.20221214",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.2953 sec.",
    "cost": 0.105,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "06131640-1535-0406-0000-1d7ce932b455",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.2225 sec.",
            "cost": 0.105,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "historical_rank_overview",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "historical_rank_overview",
                "se_type": "google",
                "target": "u24.gov.ua",
                "language_name": "English",
                "location_code": 2840,
                "date_from": "2023-01-01",
                "date_to": "2023-05-31"
            },
            "result": [
                {
                    "se_type": "google",
                    "target": "u24.gov.ua",
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 5,
                    "items_count": 5,
                    "items": [
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 5,
                            "metrics": {
                                "organic": {
                                    "pos_1": 42,
                                    "pos_2_3": 44,
                                    "pos_4_10": 184,
                                    "pos_11_20": 291,
                                    "pos_21_30": 337,
                                    "pos_31_40": 321,
                                    "pos_41_50": 405,
                                    "pos_51_60": 410,
                                    "pos_61_70": 437,
                                    "pos_71_80": 498,
                                    "pos_81_90": 497,
                                    "pos_91_100": 392,
                                    "etv": 33901.902437774464,
                                    "impressions_etv": 6593.268874633126,
                                    "count": 3858,
                                    "estimated_paid_traffic_cost": 169733.71886933595,
                                    "is_new": 1861,
                                    "is_up": 1071,
                                    "is_down": 789,
                                    "is_lost": 1158
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        },
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 4,
                            "metrics": {
                                "organic": {
                                    "pos_1": 45,
                                    "pos_2_3": 40,
                                    "pos_4_10": 183,
                                    "pos_11_20": 284,
                                    "pos_21_30": 308,
                                    "pos_31_40": 317,
                                    "pos_41_50": 326,
                                    "pos_51_60": 355,
                                    "pos_61_70": 393,
                                    "pos_71_80": 429,
                                    "pos_81_90": 417,
                                    "pos_91_100": 316,
                                    "etv": 36729.142687316984,
                                    "impressions_etv": 6768.442642784677,
                                    "count": 3414,
                                    "estimated_paid_traffic_cost": 343409.5010897778,
                                    "is_new": 1668,
                                    "is_up": 795,
                                    "is_down": 830,
                                    "is_lost": 1129
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        },
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 3,
                            "metrics": {
                                "organic": {
                                    "pos_1": 40,
                                    "pos_2_3": 44,
                                    "pos_4_10": 178,
                                    "pos_11_20": 247,
                                    "pos_21_30": 284,
                                    "pos_31_40": 296,
                                    "pos_41_50": 299,
                                    "pos_51_60": 342,
                                    "pos_61_70": 363,
                                    "pos_71_80": 438,
                                    "pos_81_90": 437,
                                    "pos_91_100": 293,
                                    "etv": 43974.970706304535,
                                    "impressions_etv": 6297.7238014843315,
                                    "count": 3262,
                                    "estimated_paid_traffic_cost": 394533.1599039724,
                                    "is_new": 1771,
                                    "is_up": 746,
                                    "is_down": 645,
                                    "is_lost": 972
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        },
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 2,
                            "metrics": {
                                "organic": {
                                    "pos_1": 41,
                                    "pos_2_3": 40,
                                    "pos_4_10": 160,
                                    "pos_11_20": 224,
                                    "pos_21_30": 250,
                                    "pos_31_40": 260,
                                    "pos_41_50": 267,
                                    "pos_51_60": 308,
                                    "pos_61_70": 370,
                                    "pos_71_80": 364,
                                    "pos_81_90": 371,
                                    "pos_91_100": 281,
                                    "etv": 44071.621012251824,
                                    "impressions_etv": 6257.466067256406,
                                    "count": 2937,
                                    "estimated_paid_traffic_cost": 770458.9549901653,
                                    "is_new": 1698,
                                    "is_up": 754,
                                    "is_down": 390,
                                    "is_lost": 670
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        },
                        {
                            "se_type": "google",
                            "year": 2023,
                            "month": 1,
                            "metrics": {
                                "organic": {
                                    "pos_1": 39,
                                    "pos_2_3": 36,
                                    "pos_4_10": 139,
                                    "pos_11_20": 217,
                                    "pos_21_30": 243,
                                    "pos_31_40": 237,
                                    "pos_41_50": 252,
                                    "pos_51_60": 294,
                                    "pos_61_70": 350,
                                    "pos_71_80": 341,
                                    "pos_81_90": 371,
                                    "pos_91_100": 265,
                                    "etv": 15369.704020386562,
                                    "impressions_etv": 3026.978981963359,
                                    "count": 2785,
                                    "estimated_paid_traffic_cost": 160511.97013520263,
                                    "is_new": 1790,
                                    "is_up": 680,
                                    "is_down": 247,
                                    "is_lost": 514
                                },
                                "paid": {
                                    "pos_1": 0,
                                    "pos_2_3": 0,
                                    "pos_4_10": 0,
                                    "pos_11_20": 0,
                                    "pos_21_30": 0,
                                    "pos_31_40": 0,
                                    "pos_41_50": 0,
                                    "pos_51_60": 0,
                                    "pos_61_70": 0,
                                    "pos_71_80": 0,
                                    "pos_81_90": 0,
                                    "pos_91_100": 0,
                                    "etv": 0,
                                    "impressions_etv": 0,
                                    "count": 0,
                                    "estimated_paid_traffic_cost": 0,
                                    "is_new": 0,
                                    "is_up": 0,
                                    "is_down": 0,
                                    "is_lost": 0
                                }
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

Top Ranking Pages

The "Top Ranking Pages" bar chart in a rank-tracking SEO tool is designed to provide valuable insights into the performance of a website's individual pages in search engine rankings. This chart offers a visual representation of the highest-ranking pages based on their positions in SERPs.The y-axis of the chart represents the URLs of individual pages, while the x-axis represents the number of keywords ranking in the top 3 and top 10.

To get the number of top-ranking pages of the target website, you can use the Relevant Pages endpoint of DataForSEO Labs API. Just specify the domain in the target field, set the historical_serp_mode to live, and use the order_by parameter to obtain pages that have the most keywords ranking in the top 3 range. You can also exclude paid results from the equation by omitting the contributing item type in the item_types array.

Ranking Keywords

The "Ranking Keywords" table provides a brief overview of the keywords that a target domain is ranking for in Google SERPs. The table consists of five columns:

1. Keywords: this column displays the keywords for which the domain is ranking in SERPs.

2. Position in Google SERPs: this column indicates the specific position of the domain for each keyword in Google SERPs.

3. Relevant SERP Item: this column provides information about the relevant item on the SERP that corresponds to the keyword and domain. It could be the title of the webpage, a featured snippet, a knowledge graph entry, or any other relevant item that appears in search results. Check the DataForSEO Visual Guide to SERP Features to learn more.

4. Keyword Search Volume: this column displays the search volume associated with each keyword. The search volume indicates the estimated number of searches performed by users for a specific keyword within a given time period.

5. URL of the Relevant Website Page: this column provides the URL of the specific webpage on the domain that ranks for the corresponding keyword. By analyzing the relevant webpage, practitioners can optimize its content further or explore strategies to improve its ranking position.

Overall, the "Ranking Keywords" table is a valuable resource for SEO practitioners to monitor their website's performance in search engine rankings. It enables them to identify keywords they are ranking for, evaluate their position and visibility in the SERPs, understand search volume data, and assess the specific pages that are driving organic traffic. This information helps guide SEO strategies, content optimization efforts, and overall improvement of website performance.

You can get data for this table by leveraging the combination of SERP API and Keyword Data API. The former will provide you with rankings, SERP items and related info, while the latter will help you obtain search volume and other keyword data. We will take a closer look at how to do that in the upcoming parts of this guide.

Didn’t find the feature you were looking for?

Want to discuss your use case?

Embed DataForSeo widget on your website


Embed code:
Preview: