Domain analysis
The Domain Analysis API allows you to get competitor and keyword statistics from organic and paid search results in a convenient form.
Regional database
Cost: 100 credits per request
Returns detailed keyword statistics for a specified domain within a single, selected regional database. It breaks down performance for both organic and paid traffic, offering insights into keyword rankings, traffic estimates, and position changes.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Domain for which to retrieve the keyword statistics (e.g., seranking.com). |
| with_subdomains | Integer | No | 1 | Flag to determine whether data for subdomains should be included in the analysis:1 – include subdomains0 – exclude subdomains |
Request example
curl -X GET 'https://api.seranking.com/v1/domain/overview/db?source=xx&domain=yourdomain.com&with_subdomains=1'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If the request is successful, the server returns a JSON object containing two main keys: organic and adv, each detailing various keyword statistics for the selected database.
| Parameter | Type | Description |
|---|---|---|
| organic.count | Integer | Total number of organic keywords for which the domain ranks in this database. |
| organic.traffic | Integer | Estimated monthly organic search traffic from these keywords. |
| organic.cost | Float | Estimated monetary value of the organic traffic (e.g., PPC cost equivalent). |
| organic.keywords_new_count | Integer | Number of keywords for which the domain has newly started ranking. |
| organic.keywords_up_count | Integer | Number of keywords for which the domain’s ranking has improved. |
| organic.keywords_down_count | Integer | Number of keywords for which the domain’s ranking has declined. |
| organic.keywords_equal_count | Integer | Number of keywords for which the domain’s ranking has remained unchanged. |
| organic.keywords_lost_count | Integer | Number of keywords for which the domain has dropped out of the SERPs. |
| organic.top1_5 | Integer | Total number of organic keywords ranked in positions 1-5. |
| organic.top6_10 | Integer | Total number of organic keywords ranked in positions 6-10. |
| organic.top11_20 | Integer | Total number of organic keywords ranked in positions 11-20. |
| organic.top21_50 | Integer | Total number of organic keywords ranked in positions 21-50. |
| organic.top51_100 | Integer | Total number of organic keywords ranked in positions 51-100. |
| adv.count | Integer | Total number of keywords for which the domain has paid ads in this database. |
| adv.traffic | Integer | Estimated monthly traffic from these paid keywords. |
| adv.cost | Float | Estimated monthly cost for these paid keywords. |
| adv.keywords_new_count | Integer | Number of new keywords targeted by paid ads. |
| adv.keywords_up_count | Integer | Number of paid keywords where ad position has improved. |
| adv.keywords_down_count | Integer | Number of paid keywords where ad position has declined. |
| adv.keywords_equal_count | Integer | Number of paid keywords where ad position has remained unchanged. |
| adv.keywords_lost_count | Integer | Number of keywords for which paid ads are no longer running or ranking. |
| adv.top1_2 | Integer | Total number of paid keywords with ads appearing in positions 1-2. |
| adv.top3_5 | Integer | Total number of paid keywords with ads appearing in positions 3-5. |
| adv.top6_8 | Integer | Total number of paid keywords with ads appearing in positions 6-8. |
| adv.top9_11 | Integer | Total number of paid keywords with ads appearing in positions 9-11. |
| adv.top1_5 | Integer | Total number of paid keywords with ads appearing in positions 1-5. |
| adv.top6_10 | Integer | Total number of paid keywords with ads appearing in positions 6-10. |
| adv.top11_20 | Integer | Total number of paid keywords with ads appearing in positions 11-20 (typically less granular for ads). |
| adv.top21_50 | Integer | Total number of paid keywords with ads appearing in positions 21-50. |
| adv.top51_100 | Integer | Total number of paid keywords with ads appearing in positions 51-100. |
Response example
{
"organic": {
"keywords_new_count": 182,
"keywords_up_count": 292,
"keywords_equal_count": 55,
"keywords_lost_count": 282,
"top11_20": 127,
"top51_100": 331,
"keywords_down_count": 558,
"top1_5": 25,
"top21_50": 270,
"top6_10": 52,
"count": 790,
"traffic": 3149,
"cost": 23167.97
},
"adv": {
"keywords_new_count": 91,
"keywords_up_count": 17,
"keywords_equal_count": 18,
"keywords_lost_count": 62,
"top11_20": 0,
"top1_2": 53,
"top51_100": 0,
"keywords_down_count": 76,
"top1_5": 121,
"top21_50": 0,
"top3_5": 68,
"top6_8": 19,
"top9_11": 0,
"top6_10": 19,
"count": 140,
"traffic": 2968,
"cost": 17795.26
}
}
Worldwide aggregate
Cost: 100 credits per request
Aggregates and returns domain search performance statistics globally for the current month. The method provides a comprehensive view of worldwide organic and paid traffic metrics, with options to customize the returned data, including currency and specific fields.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| domain | String | Yes | N/A | Domain name for which to retrieve worldwide statistics (e.g., seranking.com). |
| currency | String | No | USD | ISO 4217 currency code to be used for any monetary values (like traffic cost) returned in the response (e.g., USD, EUR, GBP). |
| fields | String | No | price, traffic, keywords | Comma-separated list specifying which data fields or categories to include in the response. This allows for tailoring the response to only the needed information:
|
| show_zones_list | String | No | 0 | Boolean-like value (“1” for true, “0” for false) to determine if the response should include a detailed breakdown of statistics for each individual regional zone (country) in addition to the aggregated worldwide statistics:
|
Request example
curl -X GET 'https://api.seranking.com/v1/domain/overview/worldwide?domain=seranking.com¤cy=USD&fields=price,traffic,keywords,positions_diff,positions_tops&show_zones_list=0'-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If the request is successful, the server returns a JSON object with two primary keys: organic and adv. Each of these keys holds an array of objects.
- The first object in each array will always represent the aggregated “worldwide” statistics.
- If
show_zones_listis set to “1” (or true), subsequent objects in the arrays will represent statistics for individual regional zones (countries).
Each object within the organic and adv arrays can contain the following parameters (depending on the fields requested):
| Parameter | Type | Description |
|---|---|---|
| source | String | Identifier for the data scope. This will be worldwide for the global summary, or an Alpha-2 country code (e.g., us, gb) for zone-specific data if show_zones_list is enabled. |
| country | String | Descriptive name for the source. This will be worldwide for the global summary, or the country name (e.g., United States) for zone-specific data. |
| keywords_count | Integer | Total number of keywords (organic or paid, depending on the parent object) for this scope. |
| traffic_sum | Integer | Sum of estimated traffic (organic or paid) for this scope. |
| price_sum | Float | Sum of the estimated monetary value or cost of the traffic (organic or paid) for this scope, in the specified currency. |
| positions_new_count | Integer | Number of keywords newly appearing in rankings for this scope (if positions_diff requested in fields). |
| positions_up_count | Integer | Number of keywords with improved rankings for this scope (if positions_diff requested in fields). |
| positions_down_count | Integer | Number of keywords with declined rankings for this scope (if positions_diff requested in fields). |
| positions_lost_count | Integer | Number of keywords that dropped out of rankings for this scope (if positions_diff requested in fields). |
| positions_equal_count | Integer | Number of keywords with unchanged rankings for this scope (if positions_diff requested in fields). |
| positions_tops.top1_5 | Integer | Organic: keywords in positions 1-5. |
| positions_tops.top6_10 | Integer | Organic: keywords in positions 6-10. |
| positions_tops.top11_20 | Integer | Organic: keywords in positions 11-20. |
| positions_tops.top21_50 | Integer | Organic: keywords in positions 21-50. |
| positions_tops.top51_100 | Integer | Organic: keywords in positions 51-100. |
| positions_tops.top1_2 | Integer | Paid (adv): keywords with ads in positions 1-2. |
| positions_tops.top3_5 | Integer | Paid (adv): keywords with ads in positions 3-5. |
| positions_tops.top6_8 | Integer | Paid (adv): keywords with ads in positions 6-8. |
| positions_tops.top9_11 | Integer | Paid (adv): keywords with ads in positions 9-11. |
Response example
{
"organic": [
{
"source": "worldwide",
"country": "Worldwide",
"keywords_count": 823967,
"traffic_sum": 273150,
"price_sum": 241482.11,
"positions_new_count": 56042,
"positions_up_count": 56326,
"positions_down_count": 49834,
"positions_lost_count": 47169,
"positions_equal_count": 876005,
"positions_tops": {
"top1_5": 91520,
"top6_10": 95652,
"top11_20": 165641,
"top21_50": 332015,
"top51_100": 353061
}
}
],
"adv": [
{
"source": "worldwide",
"country": "Worldwide",
"keywords_count": 4947,
"traffic_sum": 4369,
"price_sum": 6509.45,
"positions_new_count": 333,
"positions_up_count": 7,
"positions_down_count": 4,
"positions_lost_count": 1742,
"positions_equal_count": 5645,
"positions_tops": {
"top1_2": 4905,
"top3_5": 1046,
"top6_8": 38,
"top9_11": 0
}
}
]
}
History trends
Cost: 100 credits per request
Retrieves historical data for a specified domain from a specific regional database. It tracks changes over time for key metrics, including the number of keywords, estimated traffic (clicks), and traffic cost estimates, for either organic or paid search.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Domain name for which to retrieve historical performance data (e.g., seranking.com). |
| type | String | No | organic | Specifies whether to retrieve historical data for organic search traffic or paid search traffic:organic – for organic traffic dataadv – for paid traffic data |
Request examples
To retrieve organic historical data:
curl -X GET 'https://api.seranking.com/v1/domain/overview/history?source=us&domain=seranking.com&type=organic'
-H 'Authorization: Token YOUR_API_KEY'
To retrieve paid (advertising) historical data:
curl -X GET 'https://api.seranking.com/v1/domain/overview/history?source=us&domain=seranking.com&type=adv'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If the request is successful, the server returns a JSON array. Each object in this array represents a historical data point (typically for a specific month and year) and contains the following parameters:
Note: The topX_Y fields for ranking distribution correspond to the type of traffic requested—organic ranking ranges or paid ad position ranges.
| Parameter | Type | Description |
|---|---|---|
| keywords_count | Integer | Total number of unique keywords (organic or paid, depending on the request type) for which the domain had at least one result during the period. Note: The topX_Y fields below count position occurrences, not unique keywords. If a domain has multiple links for a single keyword, each link is counted separately in the relevant position range(s). As a result, the sum of top1_5 + top6_10 + … + top51_100 may exceed keywords_count. |
| traffic_sum | Integer | Estimation of the total search traffic (clicks) the domain received from these keywords during that period. |
| price_sum | Float | Estimation of the monetary value or cost of the traffic during that period, in the default currency of the database (e.g., USD for the US database). |
| year | Integer | Year of the historical data point. |
| month | Integer | Month of the historical data point (1-12). |
| top1_5 | Integer | If type is organic: total number of occurrences of organic keywords ranked in positions 1-5 during that period. |
| top6_10 | Integer | If type is organic: total number of occurrences of organic keywords ranked in positions 6-10 during that period. |
| top11_20 | Integer | If type is organic: total number of occurrences of organic keywords ranked in positions 11-20 during that period. |
| top21_50 | Integer | If type is organic: total number of occurrences of organic keywords ranked in positions 21-50 during that period. |
| top51_100 | Integer | If type is organic: total number of occurrences of organic keywords ranked in positions 51-100 during that period. |
| top1_2 | Integer | If type is adv: total number of occurrences of paid keywords with ads appearing in positions 1-2 during that period. |
| top3_5 | Integer | If type is adv: total number of occurrences of paid keywords with ads appearing in positions 3-5 during that period. |
| top6_8 | Integer | If type is adv: total number of occurrences of paid keywords with ads appearing in positions 6-8 during that period. |
| top9_11 | Integer | If type is adv: total number of occurrences of paid keywords with ads appearing in positions 9-11 during that period. |
Response examples
Pro tip: topX_Y fields reflect total result occurrences, not unique keywords. This is why their sum can exceed keywords_count.
If type=organic:
[
{
"keywords_count": 104199,
"traffic_sum": 35838,
"top1_5": 12629,
"top6_10": 11401,
"top11_20": 19134,
"top21_50": 39725,
"top51_100": 46089,
"year": 2025,
"month": 4,
"price_sum": 85424.78
},
{
"keywords_count": 103538,
"traffic_sum": 34402,
"top1_5": 9107,
"top6_10": 11517,
"top11_20": 19029,
"top21_50": 39617,
"top51_100": 45963,
"year": 2025,
"month": 5,
"price_sum": 85721.73
}
]If type=adv:
[
{
"keywords_count": 7,
"traffic_sum": 0,
"top1_2": 7,
"top3_5": 0,
"top6_8": 0,
"top9_11": 0,
"year": 2025,
"month": 4,
"price_sum": 0
},
{
"keywords_count": 8,
"traffic_sum": 0,
"top1_2": 8,
"top3_5": 0,
"top6_8": 0,
"top9_11": 0,
"year": 2025,
"month": 5,
"price_sum": 0
}
]
Domain keywords
Cost: 100 credits per request
Retrieves keywords for a specified domain from a regional database. Supports both organic search results and paid advertisements. Provides filtering and sorting options to refine the keyword list by various metrics.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Domain name for which to retrieve keywords (e.g., seranking.com). |
| type | String | No | organic | Specifies whether to retrieve keywords for organic search traffic or paid search (advertising) traffic. |
| order_field | String | No | traffic | Field by which the returned keyword list should be sorted:traffic, volume, position, cpc, competition, kei. |
| order_type | String | No | desc | Sorting order:asc – ascendingdesc – descending |
| page | Integer | No | 1 | Page number for paginated results. Positive integer. |
| limit | Integer | No | 100 | Maximum number of keywords to return per page (1 to 1000). |
| cols | String | No | All relevant by default | Comma-separated list of specific response parameter names to include in the output. If omitted, a default set of relevant columns is returned. For example: keyword, position, volume ,url, difficulty |
| pos_change | String | No | N/A | Keywords filtered based on changes in their ranking positions compared to the previous period:up – position growthdown – position dropnew – new in SERPlost – dropped from SERPdiff – positions have changed up or downsame – positions have not changed |
| filter[volume][from] | Integer | No | N/A | Minimum monthly search volume for keywords to be included. Non-negative integer. |
| filter[volume][to] | Integer | No | N/A | Maximum monthly search volume for keywords to be included. Non-negative integer. |
| filter[difficulty][from] | Integer | No | N/A | Minimum keyword difficulty score (typically 0-100) for keywords to be included. |
| filter[difficulty][to] | Integer | No | N/A | Maximum keyword difficulty score for keywords to be included (e.g., 50). |
| filter[keyword_count][from] | Integer | No | N/A | Minimum number of words in a keyword phrase (e.g., 2). Positive integer. |
| filter[keyword_count][to] | Integer | No | N/A | Maximum number of words in a keyword phrase (e.g., 4). Positive integer. |
| filter[multi_keyword_included] | String | No | N/A | JSON string specifying keyword text that must be included. See Text search JSON structure -> section for formatting details. For example: [[{"type":"contains", "value":"seo"}]] |
| filter[multi_keyword_excluded] | String | No | N/A | JSON string specifying keyword text that must be excluded. See Text search JSON structure -> section for formatting details. For example: [ |
| filter[url] | String | No | N/A | JSON string to filter keywords based on their ranking URL. Must contain only one element in the base array (no OR logic). See Text search JSON structure. For example: [ |
| filter[intents] | String | No | N/A | Comma-separated list of search intent codes to filter keywords:I – informational N – navigationalT – transactionalC – commercialL – local |
| filter[competition][from] | Float | No | N/A | Minimum competition score (typically 0-1 or 0-100, depending on the metric scale) for keywords (e.g., 0.5). |
| filter[competition][to] | Float | No | N/A | Maximum competition score for keywords (e.g., 0.8). |
| filter[cpc][from] | Float | No | N/A | Minimum CPC (Cost Per Click) value for keywords (e.g., 0.1). Non-negative float. |
| filter[cpc][to] | Float | No | N/A | Maximum CPC (Cost Per Click) value for keywords (e.g., 2.5). Non-negative float. |
| filter[traffic][from] | Integer | No | N/A | Minimum estimated monthly traffic for keywords (e.g., 50). Non-negative integer. |
| filter[traffic][to] | integer | No | N/A | Maximum estimated monthly traffic for keywords (e.g., 1000). Non-negative integer. |
| filter[position][from] | Integer | No | N/A | Minimum ranking position for keywords (e.g., 1). Positive integer. |
| filter[position][to] | Integer | No | N/A | Maximum ranking position for keywords (e.g., 10). Positive integer. |
| filter[characters_count][from] | Integer | No | N/A | Minimum character length for keyword phrases (e.g., 5). Positive integer. |
| filter[characters_count][to] | Integer | No | N/A | Maximum character length for keyword phrases (e.g., 50). Positive integer. |
Request examples
Organic keywords:
curl -X GET 'https://api.seranking.com/v1/domain/keywords?source=us&domain=seranking.com&type=organic&limit=2&filter[volume][from]=500&filter[volume][to]=2000'
-H 'Authorization: Token YOUR_API_KEY'
Paid keywords with specific columns and ordering:
curl -X GET 'https://api.seranking.com/v1/domain/keywords?domain=booking.com&type=adv&limit=2&cols=keyword,cpc,volume,block,snippet_title&order_field=cpc&order_type=desc'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If successful, the server returns a JSON array of keyword objects. The fields within each object depend on the type specified and the columns requested.
| Parameter | Type | Description |
|---|---|---|
| keyword | String | Keyword phrase. For example:seranking.com (organic)nyc hotels (adv) |
| position | Integer | Domain’s current ranking position for this keyword (organic search or ad position for paid). |
| prev_pos | Integer | Domain’s ranking position for this keyword in the previous month/update period. Can be null for new keywords. |
| volume | Integer | Average monthly search volume for this keyword (e.g., 6600). |
| cpc | String/Float | Average CPC (Cost Per Click) for this keyword (e.g., 1.08). |
| competition | String/Float | Score representing the level of competition for this keyword. Float from 0.00 (very low competition) to 1.00 (very high). |
| url | String | URL of the domain’s page that ranks for this keyword or is used in the ad (e.g., https://www.booking.com/city/us/new-york.html). |
| kei | Float | Keyword Effectiveness Index, a metric combining search volume and competition (e.g., 1.136 for organic). |
| total_sites | Integer | Total number of websites appearing in the search results for this query (e.g., 851000000 for paid). |
| traffic | Integer | Estimated monthly traffic this keyword drives to the domain’s ranking URL (e.g., 3 for organic). |
| traffic_percent | String | Percentage share of the total estimated traffic for this keyword that the domain captures (e.g., 11.11% for organic). |
| price | Integer/Float | Estimated monetary value/cost associated with the traffic from this keyword (e.g., 41250). |
| block | String | Ad block position on the SERP (e.g., top). |
| snippet_num | Integer | Numerical identifier or position of the ad snippet (e.g., 579). |
| snippets_count | Integer | Number of ad snippets found for this keyword by the domain (e.g., 1). |
| snippet_title | String | Title text of the advertisement. For example: Hotels in New York, NY |
| snippet_description | String | Descriptive text body of the advertisement. For example: Book your Hotel in New York NY online… |
| snippet_display_url | String | URL displayed in the advertisement (often a shortened or vanity URL). For example: www.booking.com/city/us/new-york.html |
Response examples
Organic keyword:
[
{
"keyword": "seranking.com",
"position": 1,
"prev_pos": 1,
"volume": "10",
"cpc": "0.00",
"competition": "0.00",
"url": "https://seranking.com/",
"kei": 1.136,
"total_sites": 88,
"traffic": 3,
"traffic_percent": "11.11%",
"price": 0
}
]
Paid keyword:
[
{
"keyword": "nyc hotels",
"position": 4,
"prev_pos": 4,
"volume": "550000",
"cpc": "3.75",
"competition": "0.16",
"url": "https://www.booking.com/city/us/new-york.html",
"kei": 355.464,
"total_sites": 851000000,
"traffic": 11000,
"traffic_percent": "0.96%",
"price": 41250,
"block": "top",
"snippet_num": 579,
"snippets_count": 1,
"snippet_title": "Hotels in New York, NY | Lowest Price Guarantee.",
"snippet_description": "Book your Hotel in New York NY online. No reservation costs. Great rates. 24/7 Customer Service. Hotels. Secure Booking. Villas. Hostels. No Booking Fees. Best Price Guarantee.",
"snippet_display_url": "www.booking.com/city/us/new-york.html"
}
]
Paid ads for keyword
Cost: 100 credits per request
Retrieves an overview of paid advertisements (PPC ads) run by various domains for a specific target keyword. The method shows which domains are advertising on that keyword, the extent of their advertising efforts over a period, and details of their ad creatives.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| keyword | String | Yes | N/A | Specific keyword for which to retrieve paid ad data. Accepts any valid keyword string (e.g., new york hotels). |
| from | String | No | N/A (implies current/all available data) | Starting year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2017-01). |
| to | String | No | N/A (implies current/all available data) | Ending year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2023-12). |
| page | Integer | No | 1 | Page number for paginated results when retrieving domains advertising on the specified keyword (e.g., 1). Positive integer. |
| limit | Integer | No | 100 | Maximum number of domains advertising on the specified keyword to return per page. Accepts values from 1 to 100 (e.g., 20). |
Request example
curl -X GET 'https://api.seranking.com/v1/domain/ads?source=us&keyword=nyc+hotels&from=2023-01&to=2023-12&limit=10'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If successful, the server returns a JSON array. Each object in the array represents a unique domain that has run paid ads for the specified keyword and contains an overview of that domain’s advertising activity for that keyword.
| Parameter | Type | Description |
|---|---|---|
| domain | String | Domain name that ran ads for the target keyword (e.g., hotels.com). |
| ads_count | Integer | Total number of unique ad creatives or instances observed from this domain for the target keyword within the specified period (e.g., 19). |
| keywords_count | Integer | Total number of other keywords the domain was also seen advertising on, providing context on the advertiser’s breadth (e.g., 78972). |
| traffic_sum | Integer | Estimation of the total traffic this domain received from its ads for all its keywords, not just the target one (e.g., 3565364). |
| price_sum | Float | Estimation of the total budget this domain spent on ads for all its keywords (e.g., 10411189). |
| snippets.position | Integer | Observed position of the ad snippet on the SERP (e.g., 2). |
| snippets.snippet_title | String | Title text of the specific advertisement (e.g., Booking). |
| snippets.snippet_description | String | Descriptive text body of the specific advertisement (e.g., Stay 10 nights & get 1 free!...). |
| snippets.snippet_display_url | String | URL displayed in the specific advertisement (e.g., www.hotels.com/). |
| snippets.snippet_count | String/Integer | Count or frequency of this specific snippet being observed (e.g., 1). (Example shows string, confirm type). |
| snippets.url | String | Actual destination URL (landing page) of the specific advertisement (e.g., https://www.hotels.com/). |
Response example
[
{
"domain": "examplehotelchain.com",
"ads_count": 5,
"keywords_count": 250,
"traffic_sum": 150000,
"price_sum": 75000.5,
"snippets": {
"2023-05": {
"position": 1,
"snippet_title": "Luxury London Stays | Example Hotels",
"snippet_description": "Experience unparalleled luxury. Book your 5-star hotel in London today. Exclusive offers available for a limited time.",
"snippet_display_url": "www.examplehotelchain.com/london",
"snippet_count": "1",
"url": "https://www.examplehotelchain.com/offers/london-luxury"
}
}
}
]
Paid ads for domain
Cost: 100 credits per request
Retrieves an overview of keywords a specific target domain is bidding on in paid search auctions. It details the ads run by this domain for those keywords, including ad copy, landing pages, and observed performance metrics over a specified period.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Specific domain for which to retrieve its paid ad data (e.g., booking.com). |
| from | String | No | N/A (implies current/all available data) | Starting year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2017-01). |
| to | String | No | N/A (implies current/all available data) | Ending year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2018-12). |
| page | Integer | No | 1 | Page number for paginated results when retrieving keywords the domain is advertising on (e.g., 1). Positive integer. |
| limit | Integer | No | 100 | Maximum number of keywords the domain is advertising on to return per page. Accepts values from 1 to 100 (e.g., 100). |
Request example
curl -X GET 'https://api.seranking.com/v1/domain/ads?source=us&domain=booking.com&from=2023-01&to=2023-12&limit=10'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If successful, the server returns a JSON array. Each object in the array represents a unique keyword that the specified domain has targeted with paid ads. It includes performance metrics for that keyword and details of the ad snippets run by the domain for that keyword.
| Parameter | Type | Description |
|---|---|---|
| keyword | String | Keyword phrase that the specified domain was advertising on (e.g., locanda vivaldi venice). |
| ads_count | Integer | Total number of unique ad creatives or instances observed from the specified domain for this keyword within the given period (e.g., 24). |
| competition | Float | Score representing the level of competition for this keyword (e.g., 0.39). (The example shows a string.) |
| cpc | Float | Average CPC (Cost Per Click) for the keyword (e.g., 5.64). (The example shows a string.) |
| volume | Integer | Average monthly search volume for this keyword (e.g., 100). (The example shows a string.) |
| snippets.position | Integer | Observed position of the ad snippet on the SERP (e.g., 2). |
| snippets.snippet_title | String | Title text of the specific advertisement. For example: Locanda Vivaldi, Venice - Booking.com |
| snippets.snippet_description | String | Descriptive text body of the specific advertisement. For example: Book at Locanda Vivaldi, Venice. No reservation costs... |
| snippets.snippet_display_url | String | URL displayed in the specific advertisement. For example: www.booking.com/hotel/it/locanda-vivaldi.en.html?a |
| snippets.snippet_count | Integer | Count or frequency of the specific snippet being observed (e.g., 1). (The example shows a string.) |
| snippets.snippet_num | Integer | Numerical identifier for the specific ad snippet (e.g., 125). |
| snippets.url | String | Actual destination URL (landing page) of the specific advertisement. For example: http://www.booking.com/hotel/it/locanda-vivaldi.en.html?aid=311088 |
Response example
[
{
"keyword": "locanda vivaldi venice",
"ads_count": 24,
"competition": "0.39",
"cpc": "5.64",
"volume": "100",
"snippets": {
"2017-01": {
"position": "2",
"snippet_title": "Locanda Vivaldi, Venice - Booking.com",
"snippet_description": "Book at Locanda Vivaldi, Venice. No reservation costs. Great rates Amenities: Free Wifi, Non Smoking Rooms, 24 Hour Front Desk, Air Conditioning",
"snippet_display_url": "www.booking.com/hotel/it/locanda-vivaldi.en.html?a",
"snippet_count": "1",
"snippet_num": 125,
"url": "http://www.booking.com/hotel/it/locanda-vivaldi.en.html?aid=311088"
}
}
}
]
Competitors
Cost: 100 credits per request
Retrieves a list of competitor domains for a specified target domain. The list can be tailored to show organic or paid competitors, and can optionally include or exclude major industry players. Furthermore, the level of detail in the response can be adjusted to include basic information or more extensive statistics for each competitor. The maximum number of competitors returned is 500.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Primary domain for which to find competitors (e.g., seranking.com). |
| type | String | No | organic | Specifies whether to find competitors in organic search results (organic) or paid search (adv). |
| stats | String/Integer | No | 0 | Flag to control the level of detail in the response:0 – include basic info: domain & common keywords only1 – include additional statistical parameters |
Request example
curl -X GET 'https://api.seranking.com/v1/domain/competitors?source=us&domain=yourtargetdomain.com&type=organic&stats=1'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If the request is successful, the server returns a JSON array. Each object in this array represents a competitor domain. The fields included in each object depend on the value of the stats request parameter.
Core response parameters (when stats=0 is specified in the request):
| Parameter | Type | Description |
|---|---|---|
| domain | String | Domain name of the competitor (e.g., tripadvisor.com). |
| common_keywords | Integer | Number of keywords for which both the analyzed domain and the competitor rank (e.g., 1076). |
Additional response parameters (when stats=1 is specified in the request):
| Parameter | Type | Description |
|---|---|---|
| domain | String | Domain name of the competitor (e.g., tripadvisor.com). |
| common_keywords | Integer | Number of keywords for which both the analyzed domain and the competitor rank (e.g., 1076). |
| total_keywords | Integer | Total number of keywords for which the competitor domain ranks within Google’s top 100 results in the specified database (e.g., 2084). |
| traffic_sum | Integer | Estimated monthly traffic volume the competitor receives from its ranking keywords (e.g., 291). This is typically calculated based on expected CTR, search volume, and positions. |
| price_sum | Float | Estimated monthly cost or value of the competitor’s traffic (e.g., 40.12), often based on what the traffic from their ranking keywords would cost via PPC (paid ads). |
Response examples
Overview/history (basic – stats=0):
[
{
"domain": "competitorA.com",
"common_keywords": 1076
},
{
"domain": "competitorB.net",
"common_keywords": 850
}
]
Overview/history (with extra status – stats=1):
[
{
"domain": "competitorA.com",
"common_keywords": 1076,
"total_keywords": 2084,
"traffic_sum": 291,
"price_sum": 40.12
},
{
"domain": "competitorB.net",
"common_keywords": 850,
"total_keywords": 1500,
"traffic_sum": 200,
"price_sum": 30.5
}
]
Domain comparison
Cost: 100 credits per request
Analyzes and compares the keyword rankings of two websites: domain and compare. It can find keywords they have in common or identify a ‘keyword gap’—keywords for which one domain ranks, but the other does not. This is useful for competitive analysis and identifying ranking opportunities.
Request parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| source | String | Yes | N/A | Alpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes. |
| domain | String | Yes | N/A | Primary domain for the comparison (e.g., booking.com). Think of this as Domain A. |
| compare | String | Yes | N/A | Competitor domain to compare against the primary domain (e.g., hotels.com). Think of this as Domain B. |
| type | String | No | organic | Specifies whether to compare keywords based on organic search traffic (organic) or paid search traffic (adv). |
| page | Integer | No | 1 | Page number for paginated results when retrieving keywords (e.g., 1). Positive integer. |
| limit | Integer | No | 100 | Maximum number of keywords to return per page (e.g., 50). Accepts values from 1 to 1000. |
| cols | String | No | All relevant by default | Comma-separated list of specific response parameter names to include in the output. If omitted, a default set of relevant columns is returned for the comparison:keyword, volume, position, compare_position |
| diff | String | No | 0 | Controls the comparison mode. Accepts values: 0, 1. See the section below for a detailed explanation. |
| order_field | String | No | keyword | Specifies the field by which to sort the results:keyword, volume, cpc, competition, difficulty, position, price, traffic. |
| order_type | String | No | asc | Specifies the sort order for the results: asc, desc. |
Understanding the diff parameter
The diff parameter controls the comparison mode by defining which set of keywords to return. For these examples, let A be the primary domain and B be the compare domain.
diff=0: common keywords (A ∩ B)
Returns keywords for which both the primary domain (A) and the compare domain (B) rank.

diff=1: keyword gap (A – B)
Returns keywords for which the primary domain (A) ranks, but the compare domain (B) does not.

💡 Pro tip: How to find your competitor’s unique keywords (B – A)
To find the keywords for which the compare domain ranks but your primary domain does not, simply swap the domains in your request. Set the competitor’s domain as the primary domain and your domain as the compare domain, while keeping diff=1.
For example, to see keywords hotels.com has that booking.com lacks, request: ...&domain=hotels.com&compare=booking.com&diff=1...
Request example
curl -X GET 'https://api.seranking.com/v1/domain/keywords/comparison?source=us&domain=booking.com&compare=hotels.com&type=organic&diff=0&order_field=volume&order_type=desc'
-H 'Authorization: Token YOUR_API_KEY'
Response parameters
If the request is successful, the server returns a JSON array. Each object in this array represents a keyword and includes metrics for both the primary domain and the compare domain (where applicable, depending on the diff mode).
| Parameter | Type | Description |
|---|---|---|
| keyword | String | Analyzed keyword phrase, for example: haworth hotel holland mi. |
| volume | Integer/String | Average monthly number of Google searches for the specified keyword (e.g., 10). (The example shows an integer.) |
| cpc | Float | CPC (Cost Per Click) for the keyword (e.g., 3.01). (The example shows a string.) |
| competition | Float | Score representing the level of competition for the keyword (e.g., 0.38). (The example shows a string.) |
| kei | Float | Keyword Effectiveness Index, a metric often combining search volume and competition (e.g., 1.064). |
| total_sites | Integer | Total number of websites appearing in the search results for the query (e.g., 94). |
| position | Integer | Ranking position of the primary domain for the keyword (e.g., 4). Can be null or absent if diff=1 and primary domain doesn’t rank. |
| url | String | URL of the primary domain’s page that ranks for this keyword. For example: https://www.booking.com/hotel/us/haworth-inn-center.html.Can be null or absent if diff=1. |
| price | Float | Estimated cost/value of the traffic the primary domain receives from this keyword (e.g., 2.44). Can be null or absent if diff=1. |
| traffic | Float | Estimated traffic the primary domain receives from this keyword (e.g., 0.81). Can be null or absent if diff=1. |
| compare_position | Integer | Ranking position of the compare domain for this keyword (e.g., 5). |
| compare_url | String | URL of the compare domain’s page that ranks for this keyword (e.g., https://www.hotels.com/ho576868/haworth/). |
| compare_price | Float | Estimated cost/value of the traffic the compare domain receives from this keyword (e.g., 1.84). |
| compare_traffic | Float | Estimated traffic the compare domain receives from this keyword (e.g., 0.61). |
Response examples
The examples below show how the output differs depending on the diff parameter value.
Common keywords (diff=0)
This request finds keywords that booking.com and hotels.com have in common.
curl -X GET 'https://api.seranking.com/v1/domain/keywords/comparison?domain=booking.com&compare=hotels.com&type=organic&diff=0&limit=1'
-H 'Authorization: Token YOUR_API_KEY'
Response example:
[
{
"keyword": "haworth hotel holland mi",
"volume": 10,
"cpc": "3.01",
"competition": "0.38",
"kei": 1.064,
"total_sites": 94,
"position": 4,
"url": "https://www.booking.com/hotel/us/haworth-inn-center.html",
"price": 2.44,
"traffic": 0.81,
"compare_position": 5,
"compare_url": "https://www.hotels.com/ho576868/haworth/",
"compare_price": 1.84,
"compare_traffic": 0.61
}
]
Keyword gap (diff=1)
This request finds keywords for which the primary domain (booking.com) ranks, but the compare domain (hotels.com) does not.
curl -X GET 'https://api.seranking.com/v1/domain/keywords/comparison?domain=booking.com&compare=hotels.com&type=organic&diff=1&limit=1'
-H 'Authorization: Token YOUR_API_KEY'
Response example:
[
{
"keyword": "unique hotel keyword only for hotels.com",
"volume": 150,
"cpc": "2.50",
"competition": "0.45",
"kei": 2.532,
"total_sites": 120,
"position": null,
"url": null,
"price": null,
"traffic": null,
"compare_position": 3,
"compare_url": "https://www.hotels.com/some-unique-offering/",
"compare_price": 3.5,
"compare_traffic": 1.5
}
]
Text search JSON structure
The text search structure allows for the creation of complex text searches by providing a JSON string in the format array<array<object>>.
- The first (outer) layer of the array corresponds to elements separated by logical OR.
- The second (inner) layer of the array corresponds to elements with logical AND.
Each object within the inner array has the following structure:
{
"type": "begins",
"value": "google"
}
Object properties
| Name | Description |
|---|---|
| object.value | Contains the text value to be searched. |
| object.type | Specifies the type of search to be performed. |
List of possible object.type variants
| Name | Description |
|---|---|
| begins | Searched text should start with the specified value. |
| contains | Searched text should contain the specified value anywhere within the text. |
| ends | Searched text should end with the specified value. |
| exact | Searched text should exactly match the specified value. |
Example of a complex JSON filter structure
To find keywords that contain “seo tools” AND (begin with “free” OR begin with “best”), the JSON for filter[multi_keyword_included] would be:
[
[
{
"type": "contains",
"value": "seo tools"
},
{
"type": "begins",
"value": "free"
}
],
[
{
"type": "contains",
"value": "seo tools"
},
{
"type": "begins",
"value": "best"
}
]
]This example illustrates the OR (outer array) and AND (inner array) logic. The filter[url] parameter is simpler as it doesn’t use the OR logic and only accepts a single inner array, e.g., [[{"type":"contains","value":"/blog"}]].

