Keyword Research App

Develop a cutting-edge keyword research tool from scratch

Discover how DataForSEO APIs can be harnessed to build a powerful keyword research app. Take this comprehensive guide as your roadmap to unlocking the potential of our APIs. It provides important insights, strategies, and resources for building cutting-edge solutions for keyword research.

Dive in and transform your approach to developing keyword research apps.

TRY OUR DATA See docs
Keyword Research App img

Ranking Keywords

Ranking Keywords

Google Keyword Tool

Google Keyword Planner

Keyword Research

Keyword Research 1

Ranking Keywords

The Ranking Keywords dashboard provides users with an in-detail overview of keywords that a target website is ranking for, its estimated online performance, and search engine visibility.

This tool provides insights into the keywords driving traffic to a website and their respective rankings across various search engines. Whether you’re tracking the success of your SEO campaigns, monitoring competitor activity, or optimizing your content strategy, this dashboard is your go-to resource for data-driven decision-making.

Leveraging DataForSEO APIs, you will be able to get all the data you need to build an effective Ranking Keywords dashboard displaying a variety of useful information, including:

  • Ranking keywords table: information about the keywords that are being tracked, their current ranking positions in SERPs, and other related information.
  • New keywords table: displays all keywords a target website ranks for that haven’t been added to the rank tracking dashboard yet.
  • Keyword retention graph: illustrates the dynamics of ranking changes.
  • New keywords over time graph: provides information on how many new keywords were discovered monthly.

To obtain the data you’d need to build the Ranking Keywords dashboard, DataForSEO offers several APIs:

Ranking Keywords

Ranking Keywords Table

The "Ranking Keywords" table provides a detailed list of keywords that a target website is ranking for across search engine results pages. This table consists of five distinct columns, a pop-up graph representing the keyword position timeline, and a snapshot of the relevant SERP. In addition to that, users get 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, users can optimize its content further or explore strategies to improve its ranking position.

6. SERP snapshot: this feature allows the user to view the snapshot of the SERP relevant to a particular ranking keyword.

Overall, the "Ranking Keywords" table is a valuable resource for SEO experts 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.

Ranking Keywords Table - List of keywords

In order to obtain the list of ranking keywords for the target domain ad hoc, refer to the Ranked Keywords endpoint of DataForSEO Labs API.

Specify the domain in the target field of the request alongside the desired location and language parameters. By default, the response will contain keywords and related data sorted by the ranking of the relevant SERP item among the items of the same type. You can implement various sorting and filtering algorithms by using the corresponding order_by and filters parameters. You can access all the values available for filtering and sorting in this endpoint.

For example, to obtain a list of ranking keywords with a search volume over 499 and sorted by the highest position in SERP, specify the following values in the corresponding fields of your 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": "forbes.com",
    "language_name": "English",
    "location_name": "United States",
    "order_by": [
      "ranked_serp_element.serp_item.rank_group,asc"
    ],
    "filters": [
      "keyword_data.keyword_info.search_volume",
      ">",
      "499"
    ],
    "limit": 10
  }
]"

The response will contain ranked keywords alongside the SERP elements related to the keyword position, as well as impressions, monthly searches, and other data - pretty much everything you’ll need for the Ranked Keywords table.

The current position of the target website for the keyword is indicated in the ranked_serp_element object of the response, while the dynamics of ranking changes can be found in the rank_changes object:


 "ranked_serp_element": {
     "se_type": "google",
     "serp_item": {
         "se_type": "google",
         "type": "organic",
         "rank_group": 1,
         "rank_absolute": 1,
         "position": "left",
         "xpath": "/html[1]/body[1]/div[5]/div[1]/div[11]/div[1]/div[2]/div[2]/div[1]/div[1]/div[1]/div[1]/div[1]",
         "domain": "www.forbes.com",
         "title": "Best No Balance Transfer Fee Credit Cards Of February 2024",
         "url": "https://www.forbes.com/advisor/credit-cards/best/no-fee-balance-transfer-credit-cards/",
         "breadcrumb": "https://www.forbes.com › advisor › no-fee-balance-tr...",
         "website_name": "Forbes",
         "is_image": false,
         "is_video": false,
         "is_featured_snippet": false,
         "is_malicious": false,
         "description": "Some no-balance-transfer-fee cards offer introductory 0% APR on balance transfers for an extended period. You won't pay interest charges…",
         "pre_snippet": "6 days ago",
         "extended_snippet": null,
         "amp_version": false,
         "rating": null,
         "highlighted": [...],
         "links": null,
         "about_this_result": null,
         "main_domain": "forbes.com",
         "relative_url": "/advisor/credit-cards/best/no-fee-balance-transfer-credit-cards/",
         "etv": 267.5199890136719,
         "impressions_etv": null,
         "estimated_paid_traffic_cost": 8103.1806640625,
         "rank_changes": {
             "previous_rank_absolute": 5,
             "is_new": false,
             "is_up": true,
             "is_down": false
         }

The search volume for the keyword is indicated in the keyword_info object.


"keyword_info": {
    "se_type": "google",
    "last_updated_time": "2024-03-14 11:42:22 +00:00",
    "competition": 0.3700000047683716,
    "competition_level": "MEDIUM",
    "cpc": 30.290000915527344,
    "search_volume": 880,
    "low_top_of_page_bid": 9,
    "high_top_of_page_bid": 30.709999084472656,
    "categories": [... ],
    "monthly_searches": [...]
}

To sum up, the Ranked Keywords endpoint provides a well-rounded and affordable way of obtaining ranking keywords and related data. However, you should note that the data may be a bit outdated due to the update cycle of our SERP and Keyword Databases.

Ranking Keywords Table - SERP data and Google Ads metrics

You can obtain live SERP data using SERP API, while required keyword data is available at the Google Ads API.

SERP API is designed to provide real-time search engine results based on a keyword, location, and language, among other parameters. Note that a POST request doesn’t have the target parameter, but you can use the following script to obtain up-to-date search engine data for a certain domain and keyword:


<?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);
}
?>

On the other hand, you can easily get a full spectrum of data from Google Ads by using DataForSEO Keywords Data API. The Search Volume endpoint allows you to obtain search volume, monthly searches, competition, and other related data for up to 1000 keywords in a single request.

Check our best practices for handling Keywords Data API requests.

In your request to the Search Volume endpoint, specify the list of keywords, as well as the date_from parameter to define a time range.


# 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 'https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/task_post' \
--header 'Content-Type: application/json' \
--header 'Authorization: Basic c3VwcG9ydEBkYXRhZm9yc2VvLmNvbTpTUnJYVHp2UGtFSjgzdXlz' \
--data '[
    {
        "language_code": "en",
        "location_code": 2840,
        "keywords": [
            "buy laptop",
            "cheap laptops for sale",
            "purchase laptop"
        ],
        "date_from": "2023-12-01"
    }
]'

In the API response, look for the search_volume filed and monthly_searches array to get the latest data you need for the Ranking Keywords table:

https://api.dataforseo.com/v3/keywords_data/google_ads/search_volume/task_get/$id


{
  "version": "0.1.20240313",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "04081732-1535-0110-0000-490833210e6a",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0 sec.",
      "cost": 0,
      "result_count": 1,
      "path": [
        "v3",
        "keywords_data",
        "google_ads",
        "search_volume",
        "task_get",
        "04081732-1535-0110-0000-490833210e6a"
      ],
      "data": {
        "api": "keywords_data",
        "function": "search_volume",
        "se": "google_ads",
        "language_code": "en",
        "location_code": 2840,
        "keywords": [
          "buy laptop"
        ],
        "date_from": "2024-01-01"
      },
      "result": [
        {
          "keyword": "buy laptop",
          "spell": null,
          "location_code": 2840,
          "language_code": "en",
          "search_partners": false,
          "competition": "HIGH",
          "competition_index": 100,
          "search_volume": 2900,
          "low_top_of_page_bid": 1.89,
          "high_top_of_page_bid": 22.75,
          "cpc": 8.71,
          "monthly_searches": [
            {
              "year": 2024,
              "month": 2,
              "search_volume": 2900
            },
            {
              "year": 2024,
              "month": 1,
              "search_volume": 3600
            }
          ]
        }
      ]
    }
  ]

New Keywords to Track

The “New keywords to track” table is designed to provide users with a short list of top ranking keywords for a target website and further suggest adding these keywords to the rank tracker - thus prompting users to upgrade a subscription.

This feature is, in fact, a scaled-down version of the Ranked Keywords table, which we already reviewed in this guide. By highlighting relevant top-ranking keywords, the New Keywords to Track table empowers users to stay ahead of the curve and adapt their content and marketing strategies accordingly.

Moreover, its integration with the rank tracker streamlines the process of monitoring and optimizing website performance, fostering a seamless user experience. This feature not only enhances the value proposition of the subscription but also underscores the platform's commitment to facilitating continuous growth and success for its users in the dynamic realm of digital marketing.

Along the lines of the Ranked Keywords table, this feature relies on DataForSEO Labs API and its Ranked Keywords endpoint in particular.

Keyword retention

The Keyword retention graph is designed to visualize the performance and longevity of the keywords’ positions over time. This dynamic graph displays what keywords retained their positions and increased or decreased in SERPs within a specific time period.

Despite its small size, the Keyword Retention graph can provide valuable insights to a user, including the historical trajectory of rankings and pinpointing the effectiveness of SEO strategies in a simple and comprehensive form.

To get the number of retained, won, and lost keywords for a certain target website within a specific timeframe, you can use the Domain Rank Overview or Historical Rank Overview endpoints of DataForSEO Labs API.

To set a task, specify a target website, location, and language parameters. If you’re using the Domain Rank Overview endpoint, it’d be enough to specify the target alone - because the only available location and language is US and English.

In the API response, look out for the is_new, is_up, is_down, and is_lost integers in the metrics.organic object.

New Keywords Over Time

The New Keyword Over Time is a complementary chart that intends to provide a clear historical perspective of the dynamics of new ranking keyword changes.

This bar chart visualizes the numbers of new ranking keywords that were found each month across all selected locations.

In order to obtain this data, you can use the Domain Rank Overview or Historical Rank Overview endpoints of DataForSEO Labs API.

If you decide to use the Historical Rank Overview, note that separate requests should be made for each location and the corresponding is_new values summed up.

Google Keyword Tool

Google Keyword Planner is probably the most popular keyword research tool in the SEO community. However, it doesn’t come without its own limitations. For example, you can’t access exact search volume values or use any metrics-based filtering methods unless your account runs active advertising campaigns on Google Ads. Needless to say, Google Ads API has even more restrictions.

By employing DataForSEO API, you can develop a proprietary keyword research tool based on real-time Google Ads data and provide real value to users.

In this guide, we’ll demonstrate how to get and process data for the most important features of your tool, including:

  • Seed parameters: a set of input parameters for keyword research, including location, language, target keyword or domain parameters.
  • Google Ads Keyword Research table: provides the results of keyword research and related metrics.
  • Keyword monthly searches graph: illustrates the dynamics of monthly search volume changes.

To build the features listed above, you can use the following DataForSEO APIs:

Google Keyword Planner

Seed parameters

The Seed Parameters feature is the main control panel for specifying the input parameters in Google Ads keyword research. In this example, we included country, state, language, and keyword/domain, but you can surely include more parameters available in the Keywords for Keywords and Keywords for Site endpoints of DataForSEO Google Ads API.

For example, you can also use date_from and date_to fields to specify a timeframe, search_partners to include data from syndicated networks that host Google search, and include_adult_keywords boolean for obtaining keywords associated with adult content.

Pay attention to the “Seed Keyword or Domain” input box. Its value defines whether the Keywords for Keywords or Keywords for Site endpoint is applied. Note that you can specify up to 20 seed keywords in the request to Keywords for Keywords.

The example request to the Keywords for Keywords is structured as follows:


# 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/keywords_data/google_ads/keywords_for_keywords/task_post" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "location_name": 21173,
        "language_code": “en”,
        "keywords": ["SEO tool", "keyword research tool"]
    }
]"

Google Ads Keyword Research

The Google Ads Keyword Research table is the central piece of the dashboard and provides a list of essential metrics in addition to the full list of keyword ideas.

You can also sort and filter the results in the table either upon receiving the results, or when making a POST request to a relevant API endpoint.

The table itself consists of four columns:

  • Keywords: a list of keywords that were found for the target seed query or domain, sorting and filtering fields, as well as other input parameters.
  • Search volume: indicates the number of Google searches per month for a specific keyword.
  • Competition: it is a metric that reflects the competition level associated with ad placement for a particular keyword. You can learn more about this metric in this Help Center article.
  • Add to Rank Tracker: contains buttons with a call-to-action to add keywords to the Rank Tracking dashboard and start tracking their positions in search results using SERP API.

To obtain the necessary data for this table, we will be using the Google Ads endpoints of DataForSEO Keyword Data API, and Keywords for Keywords or Keywords for Site endpoints in particular. The list of keywords, search volume, and competition values are all available in the API response. Note that there are two methods of data retrieval: Standard and Live.

In the response, the data needed for the keywords, search volume, and competition values can be found in the corresponding fields: keyword, search_volume, competition_index.


{
  "version": "0.1.20231117",
  "status_code": 20000,
  "status_message": "Ok.",
  "time": "0 sec.",
  "cost": 0,
  "tasks_count": 1,
  "tasks_error": 0,
  "tasks": [
    {
      "id": "11302012-1535-0107-0000-3c8c2d83f361",
      "status_code": 20000,
      "status_message": "Ok.",
      "time": "0 sec.",
      "cost": 0,
      "result_count": 105,
      "path": [
        "v3",
        "keywords_data",
        "google_ads",
        "keywords_for_keywords",
        "task_get",
        "11302012-1535-0107-0000-3c8c2d83f361"
      ],
      "data": {
        "api": "keywords_data",
        "function": "keywords_for_keywords",
        "se": "google_ads",
        "location_code": 2840,
        "keywords": [
          "leads and prospects"
        ],
        "include_adult_keywords": "true"
      },
      "result": [
        {
          "keyword": "leads and prospects",
          "location_code": 2840,
          "language_code": null,
          "search_partners": false,
          "competition": "LOW",
          "competition_index": 7,
          "search_volume": 260,
          "low_top_of_page_bid": 4.89,
          "high_top_of_page_bid": 23.04,
          "cpc": null,
          "monthly_searches": [
            {
              "year": 2023,
              "month": 10,
              "search_volume": 210
            },
            {
              "year": 2023,
              "month": 9,
              "search_volume": 210
            },
            {
              "year": 2023,
              "month": 8,
              "search_volume": 260
            },
            {
              "year": 2023,
              "month": 7,
              "search_volume": 210
            },
            {
              "year": 2023,
              "month": 6,
              "search_volume": 170
            },
            {
              "year": 2023,
              "month": 5,
              "search_volume": 260
            },
            {
              "year": 2023,
              "month": 4,
              "search_volume": 320
            },
            {
              "year": 2023,
              "month": 3,
              "search_volume": 320
            },
            {
              "year": 2023,
              "month": 2,
              "search_volume": 260
            },
            {
              "year": 2023,
              "month": 1,
              "search_volume": 320
            },
            {
              "year": 2022,
              "month": 12,
              "search_volume": 320
            },
            {
              "year": 2022,
              "month": 11,
              "search_volume": 320
            }
          ],
          "keyword_annotations": {
            "concepts": null
          }
        },...
        }
      ]
    }
  ]
}


Keyword Monthly Searches

The “Keyword Monthly Searches” graph on the Google Ads Keyword Research table illustrates the month-over-month development of search volume for a particular keyword on the table.

Building this chart is actually pretty easy - just use the exact same Keywords for Keywords or Keywords for Site endpoint we’ve used in all other parts of this Dashboard.

You will find the necessary data for each keyword in the monthly_searches array of the endpoint’s response.


{
  "monthly_searches": [
    {
      "year": 2020,
      "month": 10,
      "search_volume": 4400
    },
    {
      "year": 2020,
      "month": 11,
      "search_volume": 3600
    },
    {
      "year": 2020,
      "month": 12,
      "search_volume": 2900
    },
    {
      "year": 2021,
      "month": 1,
      "search_volume": 3600
    },
    {
      "year": 2021,
      "month": 2,
      "search_volume": 90500
    },
    {
      "year": 2021,
      "month": 3,
      "search_volume": 3600
    },
    {
      "year": 2021,
      "month": 4,
      "search_volume": 4400
    },
    {
      "year": 2021,
      "month": 5,
      "search_volume": 2900
    },
    {
      "year": 2021,
      "month": 6,
      "search_volume": 2900
    },
    {
      "year": 2021,
      "month": 7,
      "search_volume": 2900
    },
    {
      "year": 2021,
      "month": 8,
      "search_volume": 2900
    },
    {
      "year": 2021,
      "month": 9,
      "search_volume": 2400
    }
  ]
}

Keyword Research

The Keyword Research dashboard is the primary tool for finding the right keywords. Combined with the Google Keyword Tool, it will provide you and your users with the necessary keyword research capabilities to run an effective and resultative SEO campaign.

This dashboard consists of several must-have features, but you can always add more keyword research algorithms from DataForSEO Labs API and enrich your application with even more options.

  • Seed parameters: a set of input criteria utilized for sending a POST request to the API and, therefore, conducting keyword research. These parameters encompass various elements, such as location, language, as well as seed keyword or domain.
  • Keyword Ideas Table: provides a list of keywords that fall within the same product or service categories as the seed keyword or website specified in the input.
  • Keyword Suggestions Table: includes keyword ideas that contain a seed query with additional words included before, after, or within the query.
  • New Keywords Over Time Graph: illustrates the dynamics of growth of new keywords detected for the target website.

DataForSEO will supply you with all the data you need to build the features above, and more. For this particular configuration of the Keyword Research dashboard, we will be using the following APIs:

Keyword Research 1

Keyword Ideas

The Keyword Ideas table is designed to help users get a list of relevant and actionable keywords based on the seed keyword, target location and language, among other parameters.

This entire table can be built on top of the Keyword Ideas endpoint of DataForSEO Labs API. The principal feature of this endpoint is the algorithm: a relevance-based search for terms that fall into the same product or service category as a seed keyword you specified in a POST request.

The product and service categories are based on Google Ads with each keyword and domain in the database having a list of relevant categories. You can download a full list of available categories here.

To set a task to the Keyword Ideas endpoint, you’d have to specify the seed keyword, location, and language parameters in the POST request. The filtration and sorting parameters can be specified in the corresponding filters and order_by fields. Also, note that to offer your users a URL to relevant search results, you should use the include_serp_info parameter.

Here’s an example of the request to the Keyword Ideas endpoint to retrieve ten keyword ideas and relevant data for the queries “seo” and “keyword research”, “US” and “English” location and language parameters, with results sorted by descending search volume, and filtered by competition.


login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_ideas/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "keywords": [
            "seo",
            "keyword research"
        ],
        "location_code": 2840,
        "language_code": "en",
        "include_serp_info": true,
        "order_by": ["keyword_info.search_volume,desc"],
        "filters": ["keyword_info.competition","<","0.5"],

        "limit": 10
    }
]

The endpoint’s response contains keyword, search_volume, competition, and check_url, and other values that you can add to the Keyword Ideas table.


{
    "version": "0.1.20240514",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.2738 sec.",
    "cost": 0.011,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "06172014-1535-0400-0000-07bb76cb0f29",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.2167 sec.",
            "cost": 0.011,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "keyword_ideas",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "keyword_ideas",
                "se_type": "google",
                "keywords": [
                    "seo",
                    "keyword research"
                ],
                "location_code": 2840,
                "language_code": "en",
                "include_serp_info": true,
                "order_by": [
                    "keyword_info.search_volume,desc"
                ],
                "filters": [
                    "keyword_info.competition",
                    "<",
                    "0.5"
                ],
                "limit": 10
            },
            "result": [
                {
                    "se_type": "google",
                    "seed_keywords": [
                        "seo",
                        "keyword research"
                    ],
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 46916,
                    "items_count": 10,
                    "offset": 0,
                    "offset_token": "eyJDdXJyZW50T2Zmc2V0IjoxMCwiUmVxdWVzdERhdGEiOnsia2V5d29yZHMiOlsic2VvIiwia2V5d29yZCByZXNlYXJjaCJdLCJsb2NhdGlvbiI6Mjg0MCwibGFuZ3VhZ2UiOiJlbiIsImNsb3NlbHlfdmFyaWFudHMiOmZhbHNlLCJuZXdlc3QiOmZhbHNlLCJleHRlbmRlZCI6ZmFsc2UsImxvYWRfc2VycF9pbmZvIjp0cnVlLCJhdXRvY29ycmVjdCI6dHJ1ZSwiSXNPbGQiOmZhbHNlLCJzZWFyY2hfYWZ0ZXJfdG9rZW4iOm51bGwsImlnbm9yZV9zeW5vbnltcyI6ZmFsc2UsInNlYXJjaF9lbmdpbmUiOiJnb29nbGUiLCJ1c2VfbmV3X2NhdGVnb3JpZXMiOnRydWUsIm9yZGVyX2J5Ijp7Im9yZGVyX2ZpZWxkIjoia2V5d29yZF9pbmZvLnNlYXJjaF92b2x1bWUiLCJvcmRlcl90eXBlIjoiRGVzYyIsIm5leHQiOm51bGx9LCJsaW1pdCI6MTAsIm9mZnNldCI6MCwiYWlkIjoxNTM1fSwiUmF3UXVlcnkiOnsiZmllbGQiOiJrZXl3b3JkX2luZm8uY29tcGV0aXRpb24iLCJ0eXBlIjoibHQiLCJ2YWx1ZSI6MC41fSwiSWQiOiI5NDAyODQ1Zi1lNjA0LTQyYjUtOWNjNC00ZDk1MDBjZTVhNDciLCJTZWFyY2hBZnRlckRhdGEiOls5MDUwMCwiZDBiYWJlNGUtZWU5My04MGY3LWMzNDMtYzZkMGUyMzZlYmU3Il19",
                    "items": [
                        {
                            "se_type": "google",
                            "keyword": "google analytics:",
                            "location_code": 2840,
                            "language_code": "en",
                            "keyword_info": {
                                "se_type": "google",
                                "last_updated_time": "2024-05-15 04:43:22 +00:00",
                                "competition": 0.02,
                                "competition_level": "LOW",
                                "cpc": 7.46,
                                "search_volume": 550000,
                                "low_top_of_page_bid": 1.94,
                                "high_top_of_page_bid": 39.03,
                                "categories": [
                                    10004,
                                    10007,
                                    10276,
                                    11088,
                                    11498,
                                    12376,
                                    13152,
                                    13316,
                                    13418
                                ],
                                "monthly_searches": [
                                    {
                                        "year": 2024,
                                        "month": 4,
                                        "search_volume": 450000
                                    },
                                    {
                                        "year": 2024,
                                        "month": 3,
                                        "search_volume": 368000
                                    },
                                    {
                                        "year": 2024,
                                        "month": 2,
                                        "search_volume": 368000
                                    },
                                    {
                                        "year": 2024,
                                        "month": 1,
                                        "search_volume": 450000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 12,
                                        "search_volume": 368000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 11,
                                        "search_volume": 450000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 10,
                                        "search_volume": 550000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 9,
                                        "search_volume": 550000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 8,
                                        "search_volume": 673000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 7,
                                        "search_volume": 550000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 6,
                                        "search_volume": 673000
                                    },
                                    {
                                        "year": 2023,
                                        "month": 5,
                                        "search_volume": 673000
                                    }
                                ]
                            },
                            "keyword_properties": {
                                "se_type": "google",
                                "core_keyword": "analytics google analytics",
                                "synonym_clustering_algorithm": "text_processing",
                                "keyword_difficulty": 100,
                                "detected_language": null,
                                "is_another_language": true
                            },
                            "impressions_info": {
                                "se_type": "google",
                                "last_updated_time": null,
                                "bid": null,
                                "match_type": null,
                                "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=google%20analytics%3A&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&glp=1&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                "serp_item_types": [
                                    "organic",
                                    "people_also_ask",
                                    "related_searches"
                                ],
                                "se_results_count": 2900000000,
                                "last_updated_time": "2024-05-29 00:26:45 +00:00",
                                "previous_updated_time": "2024-04-15 13:23:45 +00:00"
                            },
                            "avg_backlinks_info": {
                                "se_type": "google",
                                "backlinks": 1133322.3,
                                "dofollow": 1050865.1,
                                "referring_pages": 1073877.9,
                                "referring_domains": 70937.9,
                                "referring_main_domains": 55133.1,
                                "rank": 571.1,
                                "main_domain_rank": 887.6,
                                "last_updated_time": "2024-05-29 00:26:46 +00:00"
                            },
                            "search_intent_info": {
                                "se_type": "google",
                                "main_intent": "commercial",
                                "foreign_intent": [
                                    "navigational"
                                ],
                                "last_updated_time": "2023-11-17 15:31:07 +00:00"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

Keyword Suggestions

Apart from category-based search, DataForSEO Labs API offers multiple other algorithms for building up keyword research capabilities.

The more conventional approach to keyword research is represented by the Keyword Suggestions table. Its underlying algorithm is based on full-text search for terms that contain a specified seed keyword.

The Keyword Suggestions endpoint of DataForSEO Labs API provides all the data you’d need for this table, including a list of keyword ideas, search volume, competition, SERP check URL and other points that you might want to implement in your application.

The POST parameters for Keyword Research are rather straightforward: seed keyword, location and language, as well as sorting and filtering parameters. Here’s an example of the request to return a list of ten keyword suggestions with data for US/English, sorted by descending order and filtered by search volume greater than 100. Note that in order to obtain SERP data like Google search URL, you’d need to specify the include_serp_info parameter

            
login="login" 
password="password" 
cred="$(printf ${login}:${password} | base64)" 
curl --location --request POST "https://api.dataforseo.com/v3/dataforseo_labs/google/keyword_suggestions/live" 
--header "Authorization: Basic ${cred}"  
--header "Content-Type: application/json" 
--data-raw "[
    {
        "keyword": “seo tool”,
        "location_code": 2840,
        "language_code": "en",
        "include_serp_info": true,
        "order_by": ["keyword_info.search_volume,desc"],
        "filters": ["keyword_info.search_volume",">","100"],

        "limit": 10
    }
]
"

    

In the API response, you will be able to find a list of items, each of which represents a keyword suggestion and relevant data, including keyword, search_volume, competition, and check_url.

            
{
    "version": "0.1.20240514",
    "status_code": 20000,
    "status_message": "Ok.",
    "time": "0.2889 sec.",
    "cost": 0.0101,
    "tasks_count": 1,
    "tasks_error": 0,
    "tasks": [
        {
            "id": "06181754-1535-0399-0000-bf9e71d2d861",
            "status_code": 20000,
            "status_message": "Ok.",
            "time": "0.2362 sec.",
            "cost": 0.0101,
            "result_count": 1,
            "path": [
                "v3",
                "dataforseo_labs",
                "google",
                "keyword_suggestions",
                "live"
            ],
            "data": {
                "api": "dataforseo_labs",
                "function": "keyword_suggestions",
                "se_type": "google",
                "keyword": "seo tool",
                "location_code": 2840,
                "language_code": "en",
                "filters": [
                    "keyword_info.search_volume",
                    ">",
                    "100"
                ],
                "order_by": [
                    "keyword_info.search_volume,desc"
                ],
                "include_serp_info": true,
                "limit": 1
            },
            "result": [
                {
                    "se_type": "google",
                    "seed_keyword": "seo tool",
                    "seed_keyword_data": null,
                    "location_code": 2840,
                    "language_code": "en",
                    "total_count": 412,
                    "items_count": 1,
                    "offset": 0,
                    "offset_token": "eyJDdXJyZW50T2Zmc2V0IjoxLCJSZXF1ZXN0RGF0YSI6eyJrZXl3b3JkIjoic2VvIHRvb2wiLCJpbmNsdWRlX3NlZWRfa2V5d29yZCI6ZmFsc2UsImZ1bGxfbWF0Y2giOmZhbHNlLCJsb2FkX3NlcnBfaW5mbyI6dHJ1ZSwic2VhcmNoX2FmdGVyX3Rva2VuIjpudWxsLCJpZ25vcmVfc3lub255bXMiOmZhbHNlLCJsYW5ndWFnZSI6ImVuIiwic2VhcmNoX2VuZ2luZSI6Imdvb2dsZSIsImxvY2F0aW9uIjoyODQwLCJ1c2VfbmV3X2NhdGVnb3JpZXMiOnRydWUsIm9yZGVyX2J5Ijp7Im9yZGVyX2ZpZWxkIjoia2V5d29yZF9pbmZvLnNlYXJjaF92b2x1bWUiLCJvcmRlcl90eXBlIjoiRGVzYyIsIm5leHQiOm51bGx9LCJsaW1pdCI6MSwib2Zmc2V0IjowLCJhaWQiOjE1MzV9LCJSYXdRdWVyeSI6eyJmaWVsZCI6ImtleXdvcmRfaW5mby5zZWFyY2hfdm9sdW1lIiwidHlwZSI6Imd0IiwidmFsdWUiOjEwMH0sIklkIjoiZmUxZDJkMjktNWZmYS00YjM0LWE4ZTMtMjg0MjI1ODI0NWM1IiwiU2VhcmNoQWZ0ZXJEYXRhIjpbMTIxMDAsIjA0NzEyY2I1LTczNmYtZDMzYS05MWU4LTc3NjFkNTEyNWE1YiJdfQ==",
                    "items": [
                        {
                            "se_type": "google",
                            "keyword": "seo marketing tool",
                            "location_code": 2840,
                            "language_code": "en",
                            "keyword_info": {
                                "se_type": "google",
                                "last_updated_time": "2024-06-15 16:07:33 +00:00",
                                "competition": 0.14,
                                "competition_level": "LOW",
                                "cpc": 11.33,
                                "search_volume": 12100,
                                "low_top_of_page_bid": 2.7,
                                "high_top_of_page_bid": 10.75,
                                "categories": [
                                    10004,
                                    10276,
                                    11088,
                                    12376,
                                    13152,
                                    13316
                                ],
                                "monthly_searches": [
                                    {
                                        "year": 2024,
                                        "month": 5,
                                        "search_volume": 18100
                                    },
                                    {
                                        "year": 2024,
                                        "month": 4,
                                        "search_volume": 14800
                                    },
                                    {
                                        "year": 2024,
                                        "month": 3,
                                        "search_volume": 14800
                                    },
                                    {
                                        "year": 2024,
                                        "month": 2,
                                        "search_volume": 12100
                                    },
                                    {
                                        "year": 2024,
                                        "month": 1,
                                        "search_volume": 14800
                                    },
                                    {
                                        "year": 2023,
                                        "month": 12,
                                        "search_volume": 9900
                                    },
                                    {
                                        "year": 2023,
                                        "month": 11,
                                        "search_volume": 12100
                                    },
                                    {
                                        "year": 2023,
                                        "month": 10,
                                        "search_volume": 12100
                                    },
                                    {
                                        "year": 2023,
                                        "month": 9,
                                        "search_volume": 12100
                                    },
                                    {
                                        "year": 2023,
                                        "month": 8,
                                        "search_volume": 9900
                                    },
                                    {
                                        "year": 2023,
                                        "month": 7,
                                        "search_volume": 9900
                                    },
                                    {
                                        "year": 2023,
                                        "month": 6,
                                        "search_volume": 9900
                                    }
                                ]
                            },
                            "keyword_properties": {
                                "se_type": "google",
                                "core_keyword": null,
                                "synonym_clustering_algorithm": "text_processing",
                                "keyword_difficulty": 100,
                                "detected_language": null,
                                "is_another_language": true
                            },
                            "impressions_info": {
                                "se_type": "google",
                                "last_updated_time": "2022-04-20 18:17:14 +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=seo%20marketing%20tool&num=100&hl=en&gl=US&gws_rd=cr&ie=UTF-8&oe=UTF-8&glp=1&uule=w+CAIQIFISCQs2MuSEtepUEUK33kOSuTsc",
                                "serp_item_types": [
                                    "organic",
                                    "people_also_ask",
                                    "video",
                                    "related_searches",
                                    "product_considerations"
                                ],
                                "se_results_count": 89300000,
                                "last_updated_time": "2024-05-13 00:14:06 +00:00",
                                "previous_updated_time": "2024-04-01 23:08:29 +00:00"
                            },
                            "avg_backlinks_info": {
                                "se_type": "google",
                                "backlinks": 301629.3,
                                "dofollow": 140344.4,
                                "referring_pages": 286324.1,
                                "referring_domains": 13759.7,
                                "referring_main_domains": 12513.5,
                                "rank": 367.2,
                                "main_domain_rank": 593.4,
                                "last_updated_time": "2024-05-13 00:14:06 +00:00"
                            },
                            "search_intent_info": {
                                "se_type": "google",
                                "main_intent": "commercial",
                                "foreign_intent": null,
                                "last_updated_time": "2023-03-02 01:43:39 +00:00"
                            }
                        }
                    ]
                }
            ]
        }
    ]
}

    

New Keywords Over time

The New Keyword Overtime is a complementary chart that intends to provide a clear historical perspective of the dynamics of new ranking keyword changes.

This bar chart visualizes the numbers of new ranking keywords that were found each month across all selected locations.

In order to obtain this data, you can use the Domain Rank Overview or Historical Rank Overview endpoints of DataForSEO Labs API.

If you decide to use the Historical Rank Overview, note that separate requests should be made for each location and the corresponding is_new values summed up.

Didn’t find the feature you were looking for?

Want to discuss your use case?

Embed DataForSeo widget on your website


Embed code:
Preview: