API

Domain analysis

You are reading the Data API docs

Base URL: api.seranking.com

Data API and Project API keys are not interchangeable — use the correct one to avoid authentication errors.

Data apikey example:
80cfee7d-xxxx-xxxx-xxxx-fc8500816bb3
(UUID format)
Project apikey example:
253a73adxxxxxxxxxxxxxx340aa0a939
(40-char hex)

API keys are available in your account. For any questions or 401 errors, email [email protected] for support.

The Domain Analysis API allows you to get competitor and keyword statistics from organic and paid search results in a convenient form.

Regional database

GET
https://api.seranking.com/v1/domain/overview/db

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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/ADomain for which to retrieve the keyword statistics (e.g., seranking.com).
with_subdomainsIntegerNo1Flag to determine whether data for subdomains should be included in the analysis:
1 – include subdomains
0 – exclude subdomains

Request example

Copy
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.

ParameterTypeDescription
organic.countIntegerTotal number of organic keywords for which the domain ranks in this database.
organic.trafficIntegerEstimated monthly organic search traffic from these keywords.
organic.costFloatEstimated monetary value of the organic traffic (e.g., PPC cost equivalent).
organic.keywords_new_countIntegerNumber of keywords for which the domain has newly started ranking.
organic.keywords_up_countIntegerNumber of keywords for which the domain’s ranking has improved.
organic.keywords_down_countIntegerNumber of keywords for which the domain’s ranking has declined.
organic.keywords_equal_countIntegerNumber of keywords for which the domain’s ranking has remained unchanged.
organic.keywords_lost_countIntegerNumber of keywords for which the domain has dropped out of the SERPs.
organic.top1_5IntegerTotal number of organic keywords ranked in positions 1-5.
organic.top6_10IntegerTotal number of organic keywords ranked in positions 6-10.
organic.top11_20IntegerTotal number of organic keywords ranked in positions 11-20.
organic.top21_50IntegerTotal number of organic keywords ranked in positions 21-50.
organic.top51_100IntegerTotal number of organic keywords ranked in positions 51-100.
adv.countIntegerTotal number of keywords for which the domain has paid ads in this database.
adv.trafficIntegerEstimated monthly traffic from these paid keywords.
adv.costFloatEstimated monthly cost for these paid keywords.
adv.keywords_new_countIntegerNumber of new keywords targeted by paid ads.
adv.keywords_up_countIntegerNumber of paid keywords where ad position has improved.
adv.keywords_down_countIntegerNumber of paid keywords where ad position has declined.
adv.keywords_equal_countIntegerNumber of paid keywords where ad position has remained unchanged.
adv.keywords_lost_countIntegerNumber of keywords for which paid ads are no longer running or ranking.
adv.top1_2IntegerTotal number of paid keywords with ads appearing in positions 1-2.
adv.top3_5IntegerTotal number of paid keywords with ads appearing in positions 3-5.
adv.top6_8IntegerTotal number of paid keywords with ads appearing in positions 6-8.
adv.top9_11IntegerTotal number of paid keywords with ads appearing in positions 9-11.
adv.top1_5IntegerTotal number of paid keywords with ads appearing in positions 1-5.
adv.top6_10IntegerTotal number of paid keywords with ads appearing in positions 6-10.
adv.top11_20IntegerTotal number of paid keywords with ads appearing in positions 11-20 (typically less granular for ads).
adv.top21_50IntegerTotal number of paid keywords with ads appearing in positions 21-50.
adv.top51_100IntegerTotal number of paid keywords with ads appearing in positions 51-100.

Response example

Copy
{
"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

GET
https://api.seranking.com/v1/domain/overview/worldwide

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

ParameterTypeRequiredDefaultDescription
domainStringYesN/ADomain name for which to retrieve worldwide statistics (e.g., seranking.com).
currencyStringNoUSDISO 4217 currency code to be used for any monetary values (like traffic cost) returned in the response (e.g., USD, EUR, GBP).
fieldsStringNoprice, traffic, keywordsComma-separated list specifying which data fields or categories to include in the response. This allows for tailoring the response to only the needed information:

price – shows traffic price/cost value
traffic – shows traffic volume value
keywords – shows keyword count statistics
positions_diff – shows statistics on position changes
positions_tops – shows statistics on top-ranking positions

show_zones_listStringNo0Boolean-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:

1 – include stats for each zone
0 – only show worldwide stats

Request example

Copy
curl -X GET 'https://api.seranking.com/v1/domain/overview/worldwide?domain=seranking.com&currency=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_list is 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):

ParameterTypeDescription
sourceStringIdentifier 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.
countryStringDescriptive 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_countIntegerTotal number of keywords (organic or paid, depending on the parent object) for this scope.
traffic_sumIntegerSum of estimated traffic (organic or paid) for this scope.
price_sumFloatSum of the estimated monetary value or cost of the traffic (organic or paid) for this scope, in the specified currency.
positions_new_countIntegerNumber of keywords newly appearing in rankings for this scope (if positions_diff requested in fields).
positions_up_countIntegerNumber of keywords with improved rankings for this scope (if positions_diff requested in fields).
positions_down_countIntegerNumber of keywords with declined rankings for this scope (if positions_diff requested in fields).
positions_lost_countIntegerNumber of keywords that dropped out of rankings for this scope (if positions_diff requested in fields).
positions_equal_countIntegerNumber of keywords with unchanged rankings for this scope (if positions_diff requested in fields).
positions_tops.top1_5IntegerOrganic: keywords in positions 1-5.
positions_tops.top6_10IntegerOrganic: keywords in positions 6-10.
positions_tops.top11_20IntegerOrganic: keywords in positions 11-20.
positions_tops.top21_50IntegerOrganic: keywords in positions 21-50.
positions_tops.top51_100IntegerOrganic: keywords in positions 51-100.
positions_tops.top1_2IntegerPaid (adv): keywords with ads in positions 1-2.
positions_tops.top3_5IntegerPaid (adv): keywords with ads in positions 3-5.
positions_tops.top6_8IntegerPaid (adv): keywords with ads in positions 6-8.
positions_tops.top9_11IntegerPaid (adv): keywords with ads in positions 9-11.

Response example

Copy
{
"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
}
}
]
}

GET
https://api.seranking.com/v1/domain/overview/history

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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/ADomain name for which to retrieve historical performance data (e.g., seranking.com).
typeStringNoorganicSpecifies whether to retrieve historical data for organic search traffic or paid search traffic:
organic – for organic traffic data
adv – for paid traffic data

Request examples

To retrieve organic historical data:

Copy
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:

Copy
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.

ParameterTypeDescription
keywords_countIntegerTotal 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_sumIntegerEstimation of the total search traffic (clicks) the domain received from these keywords during that period.
price_sumFloatEstimation 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).
yearIntegerYear of the historical data point.
monthIntegerMonth of the historical data point (1-12).
top1_5IntegerIf type is organic: total number of occurrences of organic keywords ranked in positions 1-5 during that period.
top6_10IntegerIf type is organic: total number of occurrences of organic keywords ranked in positions 6-10 during that period.
top11_20IntegerIf type is organic: total number of occurrences of organic keywords ranked in positions 11-20 during that period.
top21_50IntegerIf type is organic: total number of occurrences of organic keywords ranked in positions 21-50 during that period.
top51_100IntegerIf type is organic: total number of occurrences of organic keywords ranked in positions 51-100 during that period.
top1_2IntegerIf type is adv: total number of occurrences of paid keywords with ads appearing in positions 1-2 during that period.
top3_5IntegerIf type is adv: total number of occurrences of paid keywords with ads appearing in positions 3-5 during that period.
top6_8IntegerIf type is adv: total number of occurrences of paid keywords with ads appearing in positions 6-8 during that period.
top9_11IntegerIf 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:

Copy
[
{
"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:

Copy
[
{
"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

GET
https://api.seranking.com/v1/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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/ADomain name for which to retrieve keywords (e.g., seranking.com).
typeStringNoorganicSpecifies whether to retrieve keywords for organic search traffic or paid search (advertising) traffic.
order_fieldStringNotrafficField by which the returned keyword list should be sorted:
traffic, volume, position, cpc, competition, kei.
order_typeStringNodescSorting order:
asc – ascending
desc – descending
pageIntegerNo1Page number for paginated results. Positive integer.
limitIntegerNo100Maximum number of keywords to return per page (1 to 1000).
colsStringNoAll relevant by defaultComma-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_changeStringNoN/AKeywords filtered based on changes in their ranking positions compared to the previous period:
up – position growth
down – position drop
new – new in SERP
lost – dropped from SERP
diff – positions have changed up or down
same – positions have not changed
filter[volume][from]IntegerNoN/AMinimum monthly search volume for keywords to be included. Non-negative integer.
filter[volume][to]IntegerNoN/AMaximum monthly search volume for keywords to be included. Non-negative integer.
filter[difficulty][from]IntegerNoN/AMinimum keyword difficulty score (typically 0-100) for keywords to be included.
filter[difficulty][to]IntegerNoN/AMaximum keyword difficulty score for keywords to be included (e.g., 50).
filter[keyword_count][from]IntegerNoN/AMinimum number of words in a keyword phrase (e.g., 2). Positive integer.
filter[keyword_count][to]IntegerNoN/AMaximum number of words in a keyword phrase (e.g., 4). Positive integer.
filter[multi_keyword_included]StringNoN/AJSON 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]StringNoN/AJSON string specifying keyword text that must be excluded. See Text search JSON structure -> section for formatting details.
For example:
[
[
{ "type": "contains", "value": "seo" },
{ "type": "contains", "value": "tools" }
],
[
{ "type": "begins", "value": "find" },
{ "type": "contains", "value": "link" }
],
[
{ "type": "contains", "value": "backlink" },
{ "type": "ends", "value": "checker" }
],
[
{ "type": "exact", "value": "serankings" }
]
]
filter[url]StringNoN/AJSON 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:
[
[
{
"type": "contains",
"value": "seo"
}
]
]
filter[intents]StringNoN/AComma-separated list of search intent codes to filter keywords:
I – informational
N – navigational
T – transactional
C – commercial
L – local
filter[competition][from]FloatNoN/AMinimum competition score (typically 0-1 or 0-100, depending on the metric scale) for keywords (e.g., 0.5).
filter[competition][to]FloatNoN/AMaximum competition score for keywords (e.g., 0.8).
filter[cpc][from]FloatNoN/AMinimum CPC (Cost Per Click) value for keywords (e.g., 0.1). Non-negative float.
filter[cpc][to]FloatNoN/AMaximum CPC (Cost Per Click) value for keywords (e.g., 2.5). Non-negative float.
filter[traffic][from]IntegerNoN/AMinimum estimated monthly traffic for keywords (e.g., 50). Non-negative integer.
filter[traffic][to]integerNoN/AMaximum estimated monthly traffic for keywords (e.g., 1000). Non-negative integer.
filter[position][from]IntegerNoN/AMinimum ranking position for keywords (e.g., 1). Positive integer.
filter[position][to]IntegerNoN/AMaximum ranking position for keywords (e.g., 10). Positive integer.
filter[characters_count][from]IntegerNoN/AMinimum character length for keyword phrases (e.g., 5). Positive integer.
filter[characters_count][to]IntegerNoN/AMaximum character length for keyword phrases (e.g., 50). Positive integer.

Request examples

Organic keywords:

Copy
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:

Copy
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.

ParameterTypeDescription
keywordStringKeyword phrase. For example:
seranking.com (organic)
nyc hotels (adv)
positionIntegerDomain’s current ranking position for this keyword (organic search or ad position for paid).
prev_posIntegerDomain’s ranking position for this keyword in the previous month/update period. Can be null for new keywords.
volumeIntegerAverage monthly search volume for this keyword (e.g., 6600).
cpcString/FloatAverage CPC (Cost Per Click) for this keyword (e.g., 1.08).
competitionString/FloatScore representing the level of competition for this keyword. Float from 0.00 (very low competition) to 1.00 (very high).
urlStringURL 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).
keiFloatKeyword Effectiveness Index, a metric combining search volume and competition (e.g., 1.136 for organic).
total_sitesIntegerTotal number of websites appearing in the search results for this query (e.g., 851000000 for paid).
trafficIntegerEstimated monthly traffic this keyword drives to the domain’s ranking URL (e.g., 3 for organic).
traffic_percentStringPercentage share of the total estimated traffic for this keyword that the domain captures (e.g., 11.11% for organic).
priceInteger/FloatEstimated monetary value/cost associated with the traffic from this keyword (e.g., 41250).
blockStringAd block position on the SERP (e.g., top).
snippet_numIntegerNumerical identifier or position of the ad snippet (e.g., 579).
snippets_countIntegerNumber of ad snippets found for this keyword by the domain (e.g., 1).
snippet_titleStringTitle text of the advertisement. For example: Hotels in New York, NY
snippet_descriptionStringDescriptive text body of the advertisement. For example: Book your Hotel in New York NY online…
snippet_display_urlStringURL displayed in the advertisement (often a shortened or vanity URL). For example: www.booking.com/city/us/new-york.html

Response examples

Organic keyword:

Copy
[
{
"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:

Copy
[
{
"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"
}
]

GET
https://api.seranking.com/v1/domain/ads

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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
keywordStringYesN/ASpecific keyword for which to retrieve paid ad data. Accepts any valid keyword string (e.g., new york hotels).
fromStringNoN/A (implies current/all available data)Starting year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2017-01).
toStringNoN/A (implies current/all available data)Ending year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2023-12).
pageIntegerNo1Page number for paginated results when retrieving domains advertising on the specified keyword (e.g., 1). Positive integer.
limitIntegerNo100Maximum number of domains advertising on the specified keyword to return per page. Accepts values from 1 to 100 (e.g., 20).

Request example

Copy
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.

ParameterTypeDescription
domainStringDomain name that ran ads for the target keyword (e.g., hotels.com).
ads_countIntegerTotal number of unique ad creatives or instances observed from this domain for the target keyword within the specified period (e.g., 19).
keywords_countIntegerTotal number of other keywords the domain was also seen advertising on, providing context on the advertiser’s breadth (e.g., 78972).
traffic_sumIntegerEstimation of the total traffic this domain received from its ads for all its keywords, not just the target one (e.g., 3565364).
price_sumFloatEstimation of the total budget this domain spent on ads for all its keywords (e.g., 10411189).
snippets.positionIntegerObserved position of the ad snippet on the SERP (e.g., 2).
snippets.snippet_titleStringTitle text of the specific advertisement (e.g., Booking).
snippets.snippet_descriptionStringDescriptive text body of the specific advertisement (e.g., Stay 10 nights & get 1 free!...).
snippets.snippet_display_urlStringURL displayed in the specific advertisement (e.g., www.hotels.com/).
snippets.snippet_countString/IntegerCount or frequency of this specific snippet being observed (e.g., 1). (Example shows string, confirm type).
snippets.urlStringActual destination URL (landing page) of the specific advertisement (e.g., https://www.hotels.com/).

Response example

Copy
[
{
"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"
}
}
}
]

GET
https://api.seranking.com/v1/domain/ads

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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/ASpecific domain for which to retrieve its paid ad data (e.g., booking.com).
fromStringNoN/A (implies current/all available data)Starting year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2017-01).
toStringNoN/A (implies current/all available data)Ending year and month for the data retrieval period, formatted as YYYY-MM (e.g., 2018-12).
pageIntegerNo1Page number for paginated results when retrieving keywords the domain is advertising on (e.g., 1). Positive integer.
limitIntegerNo100Maximum number of keywords the domain is advertising on to return per page. Accepts values from 1 to 100 (e.g., 100).

Request example

Copy
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.

ParameterTypeDescription
keywordStringKeyword phrase that the specified domain was advertising on (e.g., locanda vivaldi venice).
ads_countIntegerTotal number of unique ad creatives or instances observed from the specified domain for this keyword within the given period (e.g., 24).
competitionFloatScore representing the level of competition for this keyword (e.g., 0.39). (The example shows a string.)
cpcFloatAverage CPC (Cost Per Click) for the keyword (e.g., 5.64). (The example shows a string.)
volumeIntegerAverage monthly search volume for this keyword (e.g., 100). (The example shows a string.)
snippets.positionIntegerObserved position of the ad snippet on the SERP (e.g., 2).
snippets.snippet_titleStringTitle text of the specific advertisement. For example: Locanda Vivaldi, Venice - Booking.com
snippets.snippet_descriptionStringDescriptive text body of the specific advertisement. For example:
Book at Locanda Vivaldi, Venice. No reservation costs...
snippets.snippet_display_urlStringURL displayed in the specific advertisement. For example: www.booking.com/hotel/it/locanda-vivaldi.en.html?a
snippets.snippet_countIntegerCount or frequency of the specific snippet being observed (e.g., 1). (The example shows a string.)
snippets.snippet_numIntegerNumerical identifier for the specific ad snippet (e.g., 125).
snippets.urlStringActual destination URL (landing page) of the specific advertisement. For example: http://www.booking.com/hotel/it/locanda-vivaldi.en.html?aid=311088

Response example

Copy
[
{
"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

GET
https://api.seranking.com/v1/domain/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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/APrimary domain for which to find competitors (e.g., seranking.com).
typeStringNoorganicSpecifies whether to find competitors in organic search results (organic) or paid search (adv).
statsString/IntegerNo0Flag to control the level of detail in the response:
0 – include basic info: domain & common keywords only
1 – include additional statistical parameters

Request example

Copy
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):

ParameterTypeDescription
domainStringDomain name of the competitor (e.g., tripadvisor.com).
common_keywordsIntegerNumber 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):

ParameterTypeDescription
domainStringDomain name of the competitor (e.g., tripadvisor.com).
common_keywordsIntegerNumber of keywords for which both the analyzed domain and the competitor rank (e.g., 1076).
total_keywordsIntegerTotal number of keywords for which the competitor domain ranks within Google’s top 100 results in the specified database (e.g., 2084).
traffic_sumIntegerEstimated 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_sumFloatEstimated 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):

Copy
[
{
"domain": "competitorA.com",
"common_keywords": 1076
},
{
"domain": "competitorB.net",
"common_keywords": 850
}
]

Overview/history (with extra status – stats=1):

Copy
[
{
"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

GET
https://api.seranking.com/v1/domain/keywords/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

ParameterTypeRequiredDefaultDescription
sourceStringYesN/AAlpha-2 country code of the regional keyword database (e.g., us). For acceptable values, see Regional database codes.
domainStringYesN/APrimary domain for the comparison (e.g., booking.com). Think of this as Domain A.
compareStringYesN/ACompetitor domain to compare against the primary domain (e.g., hotels.com). Think of this as Domain B.
typeStringNoorganicSpecifies whether to compare keywords based on organic search traffic (organic) or paid search traffic (adv).
pageIntegerNo1Page number for paginated results when retrieving keywords (e.g., 1). Positive integer.
limitIntegerNo100Maximum number of keywords to return per page (e.g., 50). Accepts values from 1 to 1000.
colsStringNoAll relevant by defaultComma-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
diffStringNo0Controls the comparison mode. Accepts values: 0, 1. See the section below for a detailed explanation.
order_fieldStringNokeywordSpecifies the field by which to sort the results:
keyword, volume, cpc, competition, difficulty, position, price, traffic.
order_typeStringNoascSpecifies 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

Copy
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).

ParameterTypeDescription
keywordStringAnalyzed keyword phrase, for example: haworth hotel holland mi.
volumeInteger/StringAverage monthly number of Google searches for the specified keyword (e.g., 10). (The example shows an integer.)
cpcFloatCPC (Cost Per Click) for the keyword (e.g., 3.01). (The example shows a string.)
competitionFloatScore representing the level of competition for the keyword (e.g., 0.38). (The example shows a string.)
keiFloatKeyword Effectiveness Index, a metric often combining search volume and competition (e.g., 1.064).
total_sitesIntegerTotal number of websites appearing in the search results for the query (e.g., 94).
positionIntegerRanking 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.
urlStringURL 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.
priceFloatEstimated cost/value of the traffic the primary domain receives from this keyword (e.g., 2.44). Can be null or absent if diff=1.
trafficFloatEstimated traffic the primary domain receives from this keyword (e.g., 0.81). Can be null or absent if diff=1.
compare_positionIntegerRanking position of the compare domain for this keyword (e.g., 5).
compare_urlStringURL of the compare domain’s page that ranks for this keyword (e.g., https://www.hotels.com/ho576868/haworth/).
compare_priceFloatEstimated cost/value of the traffic the compare domain receives from this keyword (e.g., 1.84).
compare_trafficFloatEstimated 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.

Copy
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:

Copy
[
{
"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.

Copy
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:

Copy
[
{
"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:

Copy
{
"type": "begins",
"value": "google"
}

Object properties

NameDescription
object.valueContains the text value to be searched.
object.typeSpecifies the type of search to be performed.

List of possible object.type variants

NameDescription
beginsSearched text should start with the specified value.
containsSearched text should contain the specified value anywhere within the text.
endsSearched text should end with the specified value.
exactSearched 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:

Copy
[
[
{
"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"}]].

Learn how SE Ranking’s API can boost your SEO!

Hi! Meet our product expert, Alex.

He’ll walk you through the API and show you how to get the most out of it.

  • Enjoy a tailored demo on integrating rich, structured SEO data into your stack.
  • Pin down every tech detail live—auth, endpoints, rate limits, data formats.
  • Compare usage tiers and pricing so you can unlock maximum data value.

Request a free demo to see our tools and integrations in action

By clicking this button, you agree to SE Ranking’s Terms of Services and Privacy Policy.