Domain Analytics
Jump to Get Supported CountriesGet Supported Countries
Returns the complete, unpaginated list of databases the product has data for: one entry per supported country and device type pair. Use it to fill the country and device_type parameters of the other services’ requests.
Jump to EndpointEndpoint
Query parameters
device_type
Filter by device type. When omitted, countries are returned for every device type. Supported values: DESKTOP, MOBILE.
Value/Type: string
Response Parameters
device
Device type the country’s data is available for. Possible values: DESKTOP, MOBILE.
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Filter by device type. When omitted, countries are returned for every device type. Possible values: DESKTOP, MOBILE
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/meta/countries?device_type=DESKTOP"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"device_type": "DESKTOP"
},
"data": [
{
"country": "us",
"device": "DESKTOP"
},
{
"country": "gb",
"device": "DESKTOP"
},
{
"country": "de",
"device": "DESKTOP"
}
]
}Jump to Get Monthly Domain RankingsGet Monthly Domain Rankings
Price: 40 API units per line
Returns a list of monthly domains with their summary metrics.
Jump to EndpointEndpoint
Query parameters
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
filter
Domains filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: traffic_cost > 2.50, and the currency is never part of a filter. Available fields: rank, domain, positions, traffic, traffic_cost, organic_positions, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, adwords_positions, adwords_traffic, adwords_traffic_cost, pla_positions, pla_copies, positions_difference, traffic_difference, traffic_cost_difference, organic_positions_difference, organic_traffic_difference, organic_traffic_cost_difference, serp_features_positions_difference, serp_features_traffic_difference, serp_features_traffic_cost_difference, adwords_positions_difference, adwords_traffic_difference, adwords_traffic_cost_difference.
Example: organic_traffic > 100
Value/Type: string
fields
Field names from the response entity to include in the response. Supported values: rank, domain, month, positions, traffic, traffic_cost, organic_positions, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, adwords_positions, adwords_traffic, adwords_traffic_cost, pla_positions, pla_copies, positions_difference, traffic_difference, traffic_cost_difference, organic_positions_difference, organic_traffic_difference, organic_traffic_cost_difference, serp_features_positions_difference, serp_features_traffic_difference, serp_features_traffic_cost_difference, adwords_positions_difference, adwords_traffic_difference, adwords_traffic_cost_difference.
Value/Type: string[]
limit
Maximum number of domain rankings to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of domain rankings to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: rank. Supported values: rank, domain, positions, traffic, traffic_cost, organic_positions, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, adwords_positions, adwords_traffic, adwords_traffic_cost, pla_positions, pla_copies, positions_difference, traffic_difference, traffic_cost_difference, organic_positions_difference, organic_traffic_difference, organic_traffic_cost_difference, serp_features_positions_difference, serp_features_traffic_difference, serp_features_traffic_cost_difference, adwords_positions_difference, adwords_traffic_difference, adwords_traffic_cost_difference.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: ASC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
rank
Visibility rank of the domain.
Value/Type: integer
domain
Domain name.
Value/Type: string
positions
Total number of keyword positions.
Value/Type: integer
traffic
Total estimated traffic.
Value/Type: integer
traffic_cost
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
organic_positions
Organic search keyword positions.
Value/Type: integer
organic_traffic
Estimated organic traffic.
Value/Type: integer
organic_traffic_cost
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
organic_positions_difference
Organic position change compared to the previous period.
Value/Type: integer
organic_traffic_difference
Organic traffic change compared to the previous period.
Value/Type: integer
organic_traffic_cost_difference
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
adwords_positions
Paid search (AdWords) positions.
Value/Type: integer
adwords_traffic
Estimated traffic from paid search.
Value/Type: integer
adwords_traffic_cost
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
adwords_positions_difference
Paid search position change compared to the previous period.
Value/Type: integer
adwords_traffic_difference
Paid search traffic change compared to the previous period.
Value/Type: integer
adwords_traffic_cost_difference
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
serp_features_positions
Positions with SERP features.
Value/Type: integer
serp_features_traffic
Traffic from SERP features.
Value/Type: integer
serp_features_traffic_cost
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
serp_features_positions_difference
SERP feature position change compared to the previous period.
Value/Type: integer
serp_features_traffic_difference
SERP feature traffic change compared to the previous period.
Value/Type: integer
serp_features_traffic_cost_difference
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
pla_positions
Product Listing Ads (PLA) positions.
Value/Type: integer
pla_copies
Number of unique PLA ad copies.
Value/Type: integer
positions_difference
Position change compared to the previous period.
Value/Type: integer
traffic_difference
Traffic change compared to the previous period.
Value/Type: integer
traffic_cost_difference
Value/Type: object
value
Amount in the specified currency.
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: organic_traffic > 100
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/domain-rankings/monthly?country=US&device_type=DESKTOP&month=2024-12&filter=organic_traffic%20%3E%20100&fields=rank,domain,traffic,organic_traffic,positions&limit=10"{
"data": [
{
"rank": 1,
"domain": "example.com",
"month": "2024-12",
"positions": 45230,
"traffic": 152800,
"traffic_cost": {
"value": 4850.25,
"currency": "USD"
},
"organic_positions": 45230,
"organic_traffic": 152800,
"organic_traffic_cost": {
"value": 4850.25,
"currency": "USD"
},
"organic_positions_difference": 120,
"organic_traffic_difference": 3450,
"organic_traffic_cost_difference": {
"value": 95.50,
"currency": "USD"
},
"adwords_positions": 0,
"adwords_traffic": 0,
"adwords_traffic_cost": {
"value": 0,
"currency": "USD"
},
"adwords_positions_difference": 0,
"adwords_traffic_difference": 0,
"adwords_traffic_cost_difference": {
"value": 0,
"currency": "USD"
},
"serp_features_positions": 8950,
"serp_features_traffic": 21450,
"serp_features_traffic_cost": {
"value": 625.75,
"currency": "USD"
},
"serp_features_positions_difference": 45,
"serp_features_traffic_difference": 890,
"serp_features_traffic_cost_difference": {
"value": 18.30,
"currency": "USD"
},
"pla_positions": 0,
"pla_copies": 0,
"positions_difference": 165,
"traffic_difference": 4340,
"traffic_cost_difference": {
"value": 113.80,
"currency": "USD"
}
},
{
"rank": 2,
"domain": "competitor.com",
"month": "2024-12",
"positions": 38120,
"traffic": 98500,
"traffic_cost": {
"value": 2950.75,
"currency": "USD"
},
"organic_positions": 38120,
"organic_traffic": 98500,
"organic_traffic_cost": {
"value": 2950.75,
"currency": "USD"
},
"organic_positions_difference": -85,
"organic_traffic_difference": -2100,
"organic_traffic_cost_difference": {
"value": -63.00,
"currency": "USD"
},
"adwords_positions": 120,
"adwords_traffic": 5600,
"adwords_traffic_cost": {
"value": 450.00,
"currency": "USD"
},
"adwords_positions_difference": 5,
"adwords_traffic_difference": 280,
"adwords_traffic_cost_difference": {
"value": 22.50,
"currency": "USD"
},
"serp_features_positions": 6200,
"serp_features_traffic": 14850,
"serp_features_traffic_cost": {
"value": 425.20,
"currency": "USD"
},
"serp_features_positions_difference": -30,
"serp_features_traffic_difference": -650,
"serp_features_traffic_cost_difference": {
"value": -15.60,
"currency": "USD"
},
"pla_positions": 0,
"pla_copies": 0,
"positions_difference": -110,
"traffic_difference": -2470,
"traffic_cost_difference": {
"value": -73.10,
"currency": "USD"
}
}
],
"meta": {
"country": "US",
"device_type": "DESKTOP",
"filter": "organic_traffic > 100",
"limit": 10,
"month": "2024-12",
"offset": 0,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
}
}Jump to Get Monthly Domain Rankings TotalGet Monthly Domain Rankings Total
Price: 10 API units per request
Returns the total number of monthly domains matching the request.
Jump to EndpointEndpoint
Query parameters
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
filter
Domains filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: traffic_cost > 2.50, and the currency is never part of a filter. Available fields: rank, domain, positions, traffic, traffic_cost, organic_positions, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, adwords_positions, adwords_traffic, adwords_traffic_cost, pla_positions, pla_copies, positions_difference, traffic_difference, traffic_cost_difference, organic_positions_difference, organic_traffic_difference, organic_traffic_cost_difference, serp_features_positions_difference, serp_features_traffic_difference, serp_features_traffic_cost_difference, adwords_positions_difference, adwords_traffic_difference, adwords_traffic_cost_difference
Example: traffic > 100
Value/Type: string
Response Parameters
total
Total number of matching domains.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 100
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/domain-rankings/monthly/total?country=US&device_type=DESKTOP&month=2024-12&filter=traffic > 100"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"filter": "traffic > 100"
},
"data": {
"total": 2543
}
}Jump to Get Monthly Domain SummariesGet Monthly Domain Summaries
Price: 10 API units per request
Returns the target’s monthly aggregated summary metrics grouped by database.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Part of the URL to include in the analysis. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case. The United Kingdom is gb; uk is rejected. A country must have a database available for the selected device_type.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
fields
Field names from the response to include. If omitted, all fields are returned. Supported values: database, rank, month, organic_positions, organic_positions_branded, organic_positions_1_3, organic_positions_4_10, organic_positions_11_20, organic_positions_21_30, organic_positions_31_40, organic_positions_41_50, organic_positions_51_60, organic_positions_61_70, organic_positions_71_80, organic_positions_81_90, organic_positions_91_inf, organic_positions_new, organic_positions_lost, organic_positions_improved, organic_positions_declined, organic_traffic, organic_traffic_cost, organic_traffic_branded, organic_traffic_cost_branded, adwords_positions, adwords_positions_1, adwords_positions_2, adwords_positions_3, adwords_positions_4, adwords_positions_5, adwords_positions_6, adwords_positions_7, adwords_positions_8, adwords_positions_9, adwords_positions_10, adwords_positions_11_20, adwords_positions_21_inf, adwords_traffic, adwords_traffic_cost, pla_positions, pla_positions_1, pla_positions_2, pla_positions_3, pla_positions_4, pla_positions_5, pla_positions_6, pla_positions_7, pla_positions_8, pla_positions_9, pla_positions_10, pla_positions_11_20, pla_positions_21_30, pla_positions_31_inf, pla_copies, intent_commercial_positions, intent_informational_positions, intent_navigational_positions, intent_transactional_positions, intent_unknown_positions, intent_commercial_traffic, intent_informational_traffic, intent_navigational_traffic, intent_transactional_traffic, intent_unknown_traffic, intent_commercial_traffic_cost, intent_informational_traffic_cost, intent_navigational_traffic_cost, intent_transactional_traffic_cost, intent_unknown_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, serp_features_positions_branded, serp_features_traffic_branded, serp_features_traffic_cost_branded, serp_features_positions_lost, serp_features_positions_new, traffic, traffic_cost, traffic_branded, traffic_cost_branded, keyword_serp_features, position_serp_features.
Value/Type: string[]
Response Parameters
rank
Domain rank.
Value/Type: integer
database
Search database information.
Value/Type: object
device
Device type. Possible values: DESKTOP, MOBILE.
Value/Type: string
metrics
Aggregated metrics for the domain.
Value/Type: object
organic_traffic
Number of organic traffic.
Value/Type: integer
organic_positions
Number of all target positions in the SERP.
Value/Type: integer
organic_traffic_cost
Value/Type: object
Cost of organic traffic.
value
The amount in whole currency units with a decimal fraction.
Value/Type: number
adwords_positions
Number of all positions in the Advertising SERP block.
Value/Type: integer
adwords_traffic
Number of AdWords traffic.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Requested scope. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/domain-summaries/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&fields=rank,month,organic_traffic,organic_positions"{
"data": {
"rank": 1,
"month": "2024-12",
"database": {
"country": "US",
"device": "DESKTOP"
},
"metrics": {
"organic_traffic": 1250000,
"organic_positions": 45000,
"organic_traffic_cost": {
"value": 345000.50,
"currency": "USD"
},
"adwords_positions": 2100,
"adwords_traffic": 89000
}
},
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"scope": "ROOT_DOMAIN",
"url": "example.com",
"effective_url": "https://example.com"
}
}Jump to Get Monthly Domain Summaries TrendGet Monthly Domain Summaries Trend
Price: 10 API units per line
Returns the monthly trend of aggregated summary metrics for the target: one data point per month within the requested range, including months without data.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. Maximum 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
date_fromRequired
Start date of the range. Format: ISO 8601 YYYY-MM.
Example: 2024-01
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). For example, US for the United States, GB for the United Kingdom.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database. MOBILE: mobile search database; not available for all countries.
Example: DESKTOP
Value/Type: string
fields
Metric names to include in the response. If omitted, all metrics are returned. Supported values include position metrics (for example, organic_positions, adwords_positions), traffic metrics (for example, organic_traffic, adwords_traffic), cost metrics (for example, organic_traffic_cost), intent-based metrics (for example, intent_commercial_positions), and SERP feature metrics (for example, serp_features_positions).
Example: organic_positions,organic_traffic,adwords_positions
Value/Type: string[]
Response Parameters
month
Month in ISO 8601 format (YYYY-MM). Always present whether or not requested in fields.
Value/Type: string
rank
Rank of the target in the database for this month. Not set for a month without data.
Value/Type: integer
metrics
Aggregated performance metrics, limited to the requested fields. Not set for a month without data or when no metrics are requested in fields.
Value/Type: object
organic_positions
Number of all target positions in organic search results.
Value/Type: integer
organic_traffic
Number of organic search traffic.
Value/Type: integer
organic_traffic_cost
Estimated cost of organic traffic.
Value/Type: object
value
The amount in whole currency units with decimal fraction (for example, 12.99).
Value/Type: number
adwords_positions
Number of paid search positions.
Value/Type: integer
adwords_traffic
Number of paid search traffic.
Value/Type: integer
adwords_traffic_cost
Estimated cost of paid search traffic.
Value/Type: object
value
The amount in whole currency units with decimal fraction.
Value/Type: number
meta
Response metadata.
Value/Type: object
date_from
Start date of the requested range in YYYY-MM format.
Example: 2024-01
Value/Type: string
date_to
End date of the requested range in YYYY-MM format.
Example: 2024-03
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL analyzed: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, or PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/domain-summaries/trend/monthly?url=example.com&scope=ROOT_DOMAIN&date_from=2024-01&date_to=2024-12&country=US&device_type=DESKTOP&fields=organic_positions,organic_traffic,rank,month"{
"meta": {
"country": "US",
"date_from": "2024-01",
"date_to": "2024-03",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "example.com"
},
"data": [
{
"month": "2024-01",
"rank": 1542,
"metrics": {
"organic_positions": 8234,
"organic_traffic": 25680
}
},
{
"month": "2024-02",
"rank": 1489,
"metrics": {
"organic_positions": 8567,
"organic_traffic": 27150
}
},
{
"month": "2024-03",
"rank": 1451,
"metrics": {
"organic_positions": 8945,
"organic_traffic": 29420
}
}
]
}Jump to Get Monthly Organic PositionsGet Monthly Organic Positions
Price: 10 API units per line
Returns a list of monthly organic positions by keywords that the domain ranks for.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
scopeRequired
scope determines which part of the URL will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM), for example, 2024-12. If omitted, the latest monthly snapshot for the selected country and device_type is returned. A month without a monthly snapshot is rejected; it is never replaced by the latest month.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
position_type
Type of positions to return. If omitted, organic and SERP-feature positions are both returned. Supported values: ORGANIC, SERP_FEATURE. ORGANIC: positions in the regular organic results only. SERP_FEATURE: positions inside SERP features only.
Value/Type: string
filter
Position filter string. For syntax, refer to Advanced filtering. domain is not filterable (it is the resolved target and therefore constant across the list); intents and trends are not filterable either. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: competition_density, cpc, keyword, keyword_difficulty, keyword_serp_features, position, position_difference, position_previous, position_serp_features, results, traffic, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, traffic_percent, url, volume, is_keyword_branded, is_serp_feature, serp_feature. SERP-feature fields (serp_feature, keyword_serp_features, position_serp_features) take SerpFeature value names as quoted strings, never numeric IDs. The flags (is_keyword_branded, is_serp_feature) take true or false, case-insensitive; 1 and 0 are accepted as well. Filter values use the same units as the response fields, without implicit scaling: cpc is in USD (cpc > 2.50 means $2.50) and competition_density is on 0 to 100. position_previous and position_difference compare ranked months only: a keyword with no previous position never matches such a comparison, whatever the operator. Example: keyword = "seo" AND position > 10, serp_feature = "ADS_BOTTOM", keyword_serp_features HAS_ANY ("REVIEWS", "AI_OVERVIEW"), cpc > 2.50 AND volume > 1000, is_keyword_branded = true.
Example: volume > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field such as cpc or a *_traffic_cost selects the whole pair (value and currency), not a bare number. type is not selectable: it is set on every row. Supported values: competition_density, cpc, domain, keyword, keyword_difficulty, keyword_serp_features, position, position_difference, position_previous, position_serp_features, results, traffic, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, traffic_percent, trends, url, volume, intents, is_keyword_branded, is_serp_feature, serp_feature.
Value/Type: string[]
limit
Maximum number of positions to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of positions to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: volume. domain is not sortable: it is the resolved target and therefore constant across the list. The repeated fields (keyword_serp_features, position_serp_features, trends, intents) are not sortable either: a list has no single value to order by. Money fields sort by their numeric value. Sorting by position_previous puts the new rankings, which have none, last in either direction. Supported values: competition_density, cpc, keyword, keyword_difficulty, position, position_difference, position_previous, results, traffic, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, traffic_percent, url, volume, is_keyword_branded, is_serp_feature, serp_feature.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
competition_density
Competition level of advertisers bidding on the keyword in paid search. Range: 0–100, where 100 is most competitive.
Value/Type: number
cpc
Value/Type: object
Cost per click of the keyword, in USD.
value
Amount in whole currency units with decimal fraction (for example, 2.50).
Value/Type: number
domain
Ranking domain.
Value/Type: string
intents
Search intents associated with the keyword. Possible values: COMMERCIAL, INFORMATIONAL, NAVIGATIONAL, TRANSACTIONAL.
Value/Type: string[]
is_keyword_branded
Specifies whether the keyword includes a brand name.
Value/Type: boolean
is_serp_feature
Specifies whether the position is a SERP feature rather than an organic result.
Value/Type: boolean
keyword
Keyword.
Value/Type: string
keyword_difficulty
Keyword difficulty score (0–100).
Value/Type: integer
keyword_serp_features
List of SERP features present for the keyword.
Value/Type: string[]
position
Current organic position.
Value/Type: integer
position_difference
Change in position (previous minus current; positive when ranking improved). Absent when there is no previous position.
Value/Type: integer
position_previous
Previous organic position. Absent when the keyword did not rank in the previous month.
Value/Type: integer
position_serp_features
List of SERP features of the position.
Value/Type: string[]
results
Number of search results for the keyword.
Value/Type: integer
serp_feature
Type of SERP feature if this is a SERP feature position (for example, INSTANT_ANSWER, FEATURED_SNIPPET).
Value/Type: string
traffic
Estimated monthly traffic from the keyword.
Value/Type: integer
traffic_cost
Value/Type: object
Estimated monthly traffic cost, in USD.
value
Amount in whole currency units with decimal fraction (for example, 125.75).
Value/Type: number
traffic_cost_percent
Share of keyword’s cost in total domain traffic cost as a percentage. Range: 0–100.
Value/Type: number
traffic_difference
Change in traffic (can be negative).
Value/Type: integer
traffic_difference_abs
Absolute value of traffic change.
Value/Type: integer
traffic_percent
Share of keyword traffic in total domain traffic as a percentage. Range: 0–100.
Value/Type: number
trends
Monthly search volume trend data. Each value is a relative index on a 0–100 scale.
Value/Type: integer[]
type
Position type: ORGANIC or SERP_FEATURE.
Value/Type: string
url
URL ranking for the keyword.
Value/Type: string
volume
Monthly search volume.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: volume > 100
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
position_type
Type of positions to return. If omitted, organic and SERP-feature positions are both returned. Possible values: ORGANIC, SERP_FEATURE. ORGANIC: positions in the regular organic results only. SERP_FEATURE: positions inside SERP features only.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
scope determines which part of the URL will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/keywords/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&position_type=ORGANIC&filter=volume%20%3E%20100&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"limit": 10,
"offset": 0,
"url": "https://example.com"
},
"data": [
{
"keyword": "seo tools",
"volume": 2400,
"position": 3,
"traffic": 1850,
"traffic_percent": 5.2,
"traffic_cost": {
"value": 92.50,
"currency": "USD"
},
"traffic_cost_percent": 3.8,
"traffic_difference": 120,
"traffic_difference_abs": 120,
"traffic_cost": {
"value": 92.50,
"currency": "USD"
},
"cpc": {
"value": 5.25,
"currency": "USD"
},
"competition_density": 85,
"keyword_difficulty": 72,
"results": 1250000000,
"url": "https://example.com/seo-tools",
"domain": "example.com",
"is_keyword_branded": false,
"is_serp_feature": false,
"type": "ORGANIC",
"position_previous": 4,
"position_difference": 1,
"keyword_serp_features": ["FEATURED_SNIPPET"],
"position_serp_features": [],
"intents": ["INFORMATIONAL", "COMMERCIAL"],
"trends": [45, 52, 58, 65, 72, 78, 85, 88, 92, 95, 98, 100]
},
{
"keyword": "content marketing strategy",
"volume": 1800,
"position": 7,
"traffic": 920,
"traffic_percent": 2.1,
"traffic_difference": -150,
"traffic_difference_abs": 150,
"traffic_cost": {
"value": 48.60,
"currency": "USD"
},
"traffic_cost_percent": 2.0,
"cpc": {
"value": 4.05,
"currency": "USD"
},
"competition_density": 62,
"keyword_difficulty": 58,
"results": 890000000,
"url": "https://example.com/marketing/content-strategy",
"domain": "example.com",
"is_keyword_branded": false,
"is_serp_feature": false,
"type": "ORGANIC",
"position_previous": 6,
"position_difference": -1,
"keyword_serp_features": [],
"position_serp_features": [],
"intents": ["INFORMATIONAL"],
"trends": [30, 35, 40, 42, 45, 48, 52, 55, 58, 61, 64, 68]
}
]
}Jump to Get Monthly Organic Positions TotalGet Monthly Organic Positions Total
Price: 10 API units per request
Returns the total number of monthly organic keywords the domain ranks for.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned. A month without a snapshot is rejected and never replaced with the latest month.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format, case-insensitive. The United Kingdom is gb; uk is rejected. A country with no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get available country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE. DESKTOP for the country’s desktop database; MOBILE for mobile (not all countries have a mobile database).
Value/Type: string
position_type
Type of positions to return. If omitted, both organic and SERP-feature positions are included. Supported values: ORGANIC, SERP_FEATURE. ORGANIC for regular organic results only; SERP_FEATURE for SERP features only.
Value/Type: string
filter
Position filter string. For syntax, refer to Advanced filtering. domain is not filterable (it is the resolved target and therefore constant across the list); intents and trends are not filterable either. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: competition_density, cpc, keyword, keyword_difficulty, keyword_serp_features, position, position_difference, position_previous, position_serp_features, results, traffic, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, traffic_percent, url, volume, is_keyword_branded, is_serp_feature, serp_feature. SERP-feature fields (serp_feature, keyword_serp_features, position_serp_features) take SerpFeature value names as quoted strings, never numeric IDs. The flags (is_keyword_branded, is_serp_feature) take true or false, case-insensitive; 1 and 0 are accepted as well. Filter values use the same units as the response fields, without implicit scaling: cpc is in USD (cpc > 2.50 means $2.50) and competition_density is on 0 to 100. position_previous and position_difference compare ranked months only: a keyword with no previous position never matches such a comparison, whatever the operator.
Example: position > 10 AND volume > 1000
Value/Type: string
Response Parameters
data
total
Value/Type: integer
Total number of matching keywords.
Value/Type: object
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: position > 10 AND volume > 1000
Value/Type: string
position_type
Position type requested. If omitted in the request, both organic and SERP-feature positions are returned. Possible values: ORGANIC, SERP_FEATURE
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/keywords/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&position_type=ORGANIC&filter=position > 10 AND volume > 1000"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"url": "https://example.com",
"country": "US",
"device_type": "DESKTOP",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"position_type": "ORGANIC",
"filter": "position > 10 AND volume > 1000",
"effective_url": "https://example.com"
},
"data": {
"total": 1247
}
}Jump to Get Monthly Position ChangesGet Monthly Position Changes
Price: 20 API units per line
Returns a list of monthly ranking changes. base_month and comparison_month are months in YYYY-MM format, for example, 2026-07 and 2026-08; they need not be adjacent. base_month must be earlier than comparison_month and at most 24 months before the latest monthly snapshot of the selected database. Both months need a monthly snapshot; a month without one is rejected, never replaced by another month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
base_monthRequired
Earlier month of the comparison. Must be earlier than comparison_month. Values for this month are returned in the *_previous fields. Format: ISO 8601 YYYY-MM (for example, 2024-01).
Value/Type: string
comparison_monthRequired
Later month of the comparison, compared against base_month. Values for this month are returned in the fields without the _previous suffix. Format: ISO 8601 YYYY-MM (for example, 2024-12).
Value/Type: string
countryRequired
Country database code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
position_type
Type of positions to return. If omitted, organic and SERP-feature positions are both returned. Supported values: ORGANIC, SERP_FEATURE. ORGANIC: positions in the regular organic results only. SERP_FEATURE: positions inside SERP features only.
Value/Type: string
change_types
Types of position changes to return. All if nothing is specified. A ranking is one keyword at one URL, in the regular results or in one SERP feature; a keyword whose ranking URL changed is LOST at the old URL and NEW at the new one. Supported values:
- NEW: The ranking exists in comparison_month but not in base_month.
- LOST: The ranking exists in base_month but not in comparison_month.
- IMPROVED: A ranking present in both months moved to a better position (a lower position number), in the regular results or in a SERP feature.
- DECLINED: A ranking present in both months moved to a worse position (a higher position number), in the regular results or in a SERP feature.
- UNCHANGED: The position is the same in both months; such a ranking is returned only when its traffic estimate changed.
Every returned change has one of these types, so requesting all five returns the same changes as omitting this parameter.
Value/Type: string[]
filter
Position changes filter string. For syntax, refer to Advanced filtering. intents, keyword_serp_features_new and keyword_serp_features_lost are not filterable. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, url, volume, position, position_difference, position_previous, traffic, traffic_previous, traffic_cost, traffic_cost_previous, traffic_cost_percent, traffic_difference, traffic_percent, competition_density, cpc, keyword_difficulty, results, is_keyword_branded, is_serp_feature, serp_feature, traffic_difference_abs, is_branded. The serp_feature field takes SerpFeature value names as quoted strings, never numeric IDs. The flags (is_keyword_branded, is_serp_feature, is_branded) take true or false, case-insensitive; 1 and 0 are accepted as well. Filter values use the same units as the response fields, without implicit scaling: cpc is in USD (cpc > 2.50 means $2.50) and competition_density is on 0 to 100. position, position_previous and position_difference compare ranked months only: a LOST change has no position, a NEW change no previous one, neither has a difference, and none matches such a comparison whatever the operator (position > 10 excludes LOST rows). Example: keyword = "seo" AND position > 10, serp_feature = "ADS_BOTTOM", cpc > 2.50 AND volume > 100, is_branded = true.
Example: volume > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field such as cpc or a *_traffic_cost selects the whole pair (value and currency), not a bare number. Supported values: keyword, url, volume, position, position_difference, position_previous, traffic, traffic_previous, traffic_cost, traffic_cost_previous, traffic_cost_percent, traffic_difference, traffic_percent, competition_density, cpc, keyword_difficulty, keyword_serp_features_new, keyword_serp_features_lost, results, intents, is_keyword_branded, is_serp_feature, serp_feature, traffic_difference_abs, is_branded.
Value/Type: string[]
limit
Maximum number of position changes to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of position changes to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: traffic_difference_abs. Money fields sort by their numeric value. Not sortable: the repeated fields (keyword_serp_features_new, keyword_serp_features_lost, intents), the flags (is_keyword_branded, is_serp_feature, is_branded) and serp_feature. Sorting by position, position_previous or position_difference puts the changes without that value (LOST, NEW) last in either direction. Supported values: keyword, url, volume, position, position_difference, position_previous, traffic, traffic_previous, traffic_cost, traffic_cost_previous, traffic_cost_percent, traffic_difference, traffic_percent, competition_density, cpc, keyword_difficulty, results, traffic_difference_abs.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
change_type
Type of ranking change. One of: NEW (exists in comparison month only), LOST (exists in base month only), IMPROVED (moved to better position), DECLINED (moved to worse position), or UNCHANGED (same position but traffic changed).
Value/Type: string
keyword
Keyword associated with the ranking change.
Value/Type: string
url
URL associated with the ranking change.
Value/Type: string
volume
Monthly search volume for the keyword.
Value/Type: integer
position
Current organic position in the comparison month. Absent for LOST changes (keyword does not rank in comparison month).
Value/Type: integer
position_previous
Organic position in the base month. Absent for NEW changes (keyword did not rank in base month).
Value/Type: integer
position_difference
Change in position (position_previous minus position). Positive when ranking improved. Absent for NEW or LOST changes.
Value/Type: integer
traffic
Current estimated traffic to this keyword’s ranking in the comparison month.
Value/Type: integer
traffic_previous
Estimated traffic to this keyword’s ranking in the base month.
Value/Type: integer
traffic_difference
Change in estimated traffic.
Value/Type: integer
traffic_difference_abs
Absolute value of traffic change.
Value/Type: integer
traffic_percent
Share of this keyword’s traffic in total domain traffic as a percentage (0–100).
Value/Type: number
traffic_cost
Current traffic cost in USD (comparison month).
traffic_cost
Value/Type: object
value
The amount in whole currency units with decimal fraction (for example, 12.99).
Value/Type: number
Value/Type: object
traffic_cost_previous
Previous traffic cost in USD (base month).
traffic_cost_previous
Value/Type: object
value
The amount in whole currency units with decimal fraction.
Value/Type: number
Value/Type: object
traffic_cost_percent
Share of this keyword’s cost in total domain traffic cost as a percentage (0–100).
Value/Type: number
competition_density
Competition level of advertisers bidding on the keyword in paid search (0–100, where 100 is most competitive).
Value/Type: number
cpc
Cost per click of the keyword in USD.
cpc
Value/Type: object
value
The amount in whole currency units with decimal fraction (for example, 2.50 for $2.50).
Value/Type: number
Value/Type: object
keyword_difficulty
Keyword difficulty score (0–100).
Value/Type: integer
results
Number of search results for the keyword.
Value/Type: integer
position_type
Position type: ORGANIC (regular organic results) or SERP_FEATURE (inside SERP feature block).
Value/Type: string
is_serp_feature
Whether the URL was obtained from a SERP feature block instead of regular organic results.
Value/Type: boolean
serp_feature
Type of SERP feature (for example, FEATURED_SNIPPET, ADS_BOTTOM, KNOWLEDGE_PANEL). Absent for regular organic results.
Value/Type: string
keyword_serp_features_new
List of new SERP features the keyword now appears in (for example, FEATURED_SNIPPET, KNOWLEDGE_PANEL). Empty if no new features in comparison month.
Value/Type: string[]
keyword_serp_features_lost
List of SERP features the keyword no longer appears in. Empty if no features were lost.
Value/Type: string[]
intents
Search intents associated with the keyword. Possible values: COMMERCIAL, INFORMATIONAL, NAVIGATIONAL, TRANSACTIONAL.
Value/Type: string[]
is_keyword_branded
Whether the keyword is branded for one of the domains on the SERP.
Value/Type: boolean
is_branded
Whether the keyword is branded for this domain specifically.
Value/Type: boolean
meta
Response metadata.
Value/Type: object
change_types
Types of position changes to return. All if nothing is specified. A ranking is one keyword at one URL, in the regular results or in one SERP feature; a keyword whose ranking URL changed is LOST at the old URL and NEW at the new one. Possible values:
- NEW: The ranking exists in comparison_month but not in base_month.
- LOST: The ranking exists in base_month but not in comparison_month.
- IMPROVED: A ranking present in both months moved to a better position (a lower position number), in the regular results or in a SERP feature.
- DECLINED: A ranking present in both months moved to a worse position (a higher position number), in the regular results or in a SERP feature.
- UNCHANGED: The position is the same in both months; such a ranking is returned only when its traffic estimate changed.
Every returned change has one of these types, so requesting all five returns the same changes as omitting this parameter.
Value/Type: string[]
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: keyword = \"seo\" AND position > 10
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
position_type
Position type as submitted in the request, or absent if no filter was applied. Possible values: ORGANIC, SERP_FEATURE.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Scope as submitted in the request. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/keywords/changes/monthly?url=example.com&scope=ROOT_DOMAIN&base_month=2024-11&comparison_month=2024-12&country=US&device_type=DESKTOP&position_type=ORGANIC&change_types=DECLINED,IMPROVED,LOST&filter=volume%20%3E%20100"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"url": "https://example.com",
"scope": "ROOT_DOMAIN",
"device_type": "DESKTOP",
"country": "US",
"limit": 10,
"offset": 0,
"effective_url": "https://example.com"
},
"data": [
{
"keyword": "best seo tips",
"url": "https://example.com/blog/seo",
"volume": 1250,
"position": 5,
"position_previous": 8,
"position_difference": 3,
"change_type": "IMPROVED",
"traffic": 320,
"traffic_previous": 180,
"traffic_difference": 140,
"traffic_difference_abs": 140,
"traffic_percent": 2.8,
"traffic_cost": {"value": 45.50, "currency": "USD"},
"traffic_cost_previous": {"value": 28.75, "currency": "USD"},
"traffic_cost_percent": 3.2,
"competition_density": 68,
"cpc": {"value": 2.85, "currency": "USD"},
"keyword_difficulty": 72,
"results": 892000000,
"position_type": "ORGANIC",
"is_serp_feature": false,
"keyword_serp_features_new": [],
"keyword_serp_features_lost": [],
"intents": ["INFORMATIONAL"],
"is_keyword_branded": false,
"is_branded": false
},
{
"keyword": "seo tutorial",
"url": "https://example.com/guides/seo",
"volume": 850,
"position_previous": 12,
"change_type": "LOST",
"traffic": 0,
"traffic_previous": 95,
"traffic_difference": -95,
"traffic_difference_abs": 95,
"traffic_percent": 0,
"traffic_cost": {"value": 0, "currency": "USD"},
"traffic_cost_previous": {"value": 12.50, "currency": "USD"},
"traffic_cost_percent": 0,
"competition_density": 52,
"cpc": {"value": 1.95, "currency": "USD"},
"keyword_difficulty": 58,
"results": 645000000,
"position_type": "ORGANIC",
"is_serp_feature": false,
"keyword_serp_features_new": [],
"keyword_serp_features_lost": [],
"intents": ["INFORMATIONAL"],
"is_keyword_branded": false,
"is_branded": false
},
{
"keyword": "search engine optimization",
"url": "https://example.com/",
"volume": 2100,
"position": 3,
"change_type": "NEW",
"traffic": 510,
"traffic_previous": 0,
"traffic_difference": 510,
"traffic_difference_abs": 510,
"traffic_percent": 4.5,
"traffic_cost": {"value": 78.30, "currency": "USD"},
"traffic_cost_previous": {"value": 0, "currency": "USD"},
"traffic_cost_percent": 5.5,
"competition_density": 85,
"cpc": {"value": 3.75, "currency": "USD"},
"keyword_difficulty": 88,
"results": 1250000000,
"position_type": "ORGANIC",
"is_serp_feature": false,
"keyword_serp_features_new": ["FEATURED_SNIPPET"],
"keyword_serp_features_lost": [],
"intents": ["INFORMATIONAL"],
"is_keyword_branded": false,
"is_branded": false
}
]
}Jump to Get Monthly Position Changes TotalGet Monthly Position Changes Total
Price: 10 API units per request
Returns the total number of monthly position changes. base_month and comparison_month are months in YYYY-MM format, for example, 2026-07 and 2026-08; they need not be adjacent. base_month must be earlier than comparison_month and at most 24 months before the latest monthly snapshot of the selected database. Both months need a monthly snapshot; a month without one is rejected, never replaced by another month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
scope determines which part of the URL will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
base_monthRequired
Earlier month of the comparison. Must be earlier than comparison_month. Format: ISO 8601 YYYY-MM (for example, 2024-01).
Value/Type: string
comparison_monthRequired
Later month of the comparison, compared against base_month. Format: ISO 8601 YYYY-MM (for example, 2024-12).
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: us
Value/Type: string
device_typeRequired
Search database type. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Example: DESKTOP
Value/Type: string
position_type
Type of positions to return. If omitted, organic and SERP-feature positions are both returned. Supported values: ORGANIC, SERP_FEATURE. ORGANIC: positions in the regular organic results only. SERP_FEATURE: positions inside SERP features only.
Value/Type: string
change_types
Types of position changes to return. All if nothing is specified. A ranking is one keyword at one URL, in the regular results or in one SERP feature; a keyword whose ranking URL changed is LOST at the old URL and NEW at the new one. Supported values:
- NEW: The ranking exists in comparison_month but not in base_month.
- LOST: The ranking exists in base_month but not in comparison_month.
- IMPROVED: A ranking present in both months moved to a better position (a lower position number), in the regular results or in a SERP feature.
- DECLINED: A ranking present in both months moved to a worse position (a higher position number), in the regular results or in a SERP feature.
- UNCHANGED: The position is the same in both months; such a ranking is returned only when its traffic estimate changed.
Every returned change has one of these types, so requesting all five returns the same changes as omitting this parameter.
Value/Type: string[]
filter
Position changes filter string. For syntax, refer to Advanced filtering. intents, keyword_serp_features_new and keyword_serp_features_lost are not filterable. Money fields are filtered by their numeric value alone, never by currency: cpc > 2.50 means $2.50 USD. Available fields: keyword, url, volume, position, position_difference, position_previous, traffic, traffic_previous, traffic_cost, traffic_cost_previous, traffic_cost_percent, traffic_difference, traffic_percent, competition_density, cpc, keyword_difficulty, results, is_keyword_branded, is_serp_feature, serp_feature, traffic_difference_abs, is_branded. The serp_feature field takes SerpFeature value names as quoted strings. Boolean flags (is_keyword_branded, is_serp_feature, is_branded) accept true or false (case-insensitive), and also 1 or 0. Filter values use the same units as response fields. For ranked changes only: a LOST change has no position, a NEW change no previous position, neither has a difference, and position-based filters exclude unranked rows.
Example: keyword = "seo" AND position > 10
Value/Type: string
Response Parameters
data
Response data containing the position changes total.
total
Value/Type: integer
Total number of matching position changes.
Value/Type: object
meta
Response metadata.
Value/Type: object
change_types
Types of position changes to return. All if nothing is specified. A ranking is one keyword at one URL, in the regular results or in one SERP feature; a keyword whose ranking URL changed is LOST at the old URL and NEW at the new one. Possible values:
- NEW: The ranking exists in comparison_month but not in base_month.
- LOST: The ranking exists in base_month but not in comparison_month.
- IMPROVED: A ranking present in both months moved to a better position (a lower position number), in the regular results or in a SERP feature.
- DECLINED: A ranking present in both months moved to a worse position (a higher position number), in the regular results or in a SERP feature.
- UNCHANGED: The position is the same in both months; such a ranking is returned only when its traffic estimate changed.
Every returned change has one of these types, so requesting all five returns the same changes as omitting this parameter.
Value/Type: string[]
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: keyword = \"seo\" AND position > 10
Value/Type: string
position_type
Type of positions to return. If omitted, organic and SERP-feature positions are both returned. Possible values: ORGANIC, SERP_FEATURE. ORGANIC: positions in the regular organic results only. SERP_FEATURE: positions inside SERP features only.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
The scope of the query: which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/keywords/changes/monthly/total?url=example.com&scope=ROOT_DOMAIN&base_month=2024-01&comparison_month=2024-12&country=us&device_type=DESKTOP&position_type=ORGANIC&change_types=DECLINED,IMPROVED,LOST&filter=keyword%20%3D%20%22seo%22%20AND%20position%20%3E%2010"{
"data": {
"total": 15
},
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"url": "https://example.com",
"effective_url": "https://example.com",
"scope": "ROOT_DOMAIN",
"country": "us",
"device_type": "DESKTOP",
"position_type": "ORGANIC",
"change_types": [
"DECLINED",
"IMPROVED",
"LOST"
],
"filter": "keyword = \"seo\" AND position > 10"
}
}Jump to Get Monthly Ranked PagesGet Monthly Ranked Pages
Price: 10 API units per line
Returns a list of monthly pages (URLs) on the domain that rank organically.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Part of the URL to include in the analysis. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case. The United Kingdom is gb; uk is rejected. A country must have a database available for the selected device_type.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Pages filter string. For syntax, refer to Advanced filtering. If omitted, no filter is applied. Available fields: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, traffic, traffic_percent. The url field accepts text operators CONTAINS, STARTS_WITH, ENDS_WITH (case-sensitive) and exact match operators =, !=, IN. All other fields accept numeric operators: =, !=, >, >=, <, <=, IN.
Example: organic_traffic > 50
Value/Type: string
fields
Field names from the response to include. If omitted, all fields are returned. Supported values: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, traffic, traffic_percent.
Value/Type: string[]
limit
Maximum number of pages to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of pages to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
order_by
Field name to sort by. Default: traffic. Supported values: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, traffic, traffic_percent.
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC. ASC: ascending, smallest value first. DESC: descending, largest value first.
Example: DESC
Value/Type: string
Response Parameters
url
Ranking page URL.
Value/Type: string
organic_positions
Number of organic keyword positions.
Value/Type: integer
organic_traffic
Estimated organic traffic.
Value/Type: integer
adwords_positions
Number of paid (AdWords) keyword positions.
Value/Type: integer
serp_features_positions
Number of positions with SERP features.
Value/Type: integer
serp_features_traffic
Traffic from positions with SERP features.
Value/Type: integer
positions
Total number of positions (computed as organic_positions + serp_features_positions). Paid (AdWords) positions are not included.
Value/Type: integer
traffic
Total estimated traffic.
Value/Type: integer
traffic_percent
Share of this page’s traffic relative to the domain as a percentage (0–100).
Value/Type: number
intent_breakdown
Breakdown of keyword metrics by position range, split by search intent.
Value/Type: object
top_20
Keywords ranked in positions 1–20.
Value/Type: object
commercial
Commercial-intent keywords.
Value/Type: object
positions
Number of keywords in the range.
Value/Type: integer
traffic
Traffic from keywords in the range.
Value/Type: integer
informational
Informational-intent keywords.
Value/Type: object
positions
Number of keywords in the range.
Value/Type: integer
traffic
Traffic from keywords in the range.
Value/Type: integer
navigational
Navigational-intent keywords.
Value/Type: object
positions
Number of keywords in the range.
Value/Type: integer
traffic
Traffic from keywords in the range.
Value/Type: integer
transactional
Transactional-intent keywords.
Value/Type: object
positions
Number of keywords in the range.
Value/Type: integer
traffic
Traffic from keywords in the range.
Value/Type: integer
unknown
Keywords with unknown intent.
Value/Type: object
positions
Number of keywords in the range.
Value/Type: integer
traffic
Traffic from keywords in the range.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: organic_traffic>50
Value/Type: string
limit
Requested page limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
order_by
Field used for sorting, if specified.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Requested scope. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/pages/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=organic_traffic>50&fields=url,organic_positions,organic_traffic,traffic_percent&limit=10"{
"data": [
{
"url": "https://example.com/blog/seo-tips",
"organic_positions": 284,
"organic_traffic": 15230,
"adwords_positions": 0,
"serp_features_positions": 18,
"serp_features_traffic": 2100,
"positions": 302,
"traffic": 17330,
"traffic_percent": 12.5,
"intent_breakdown": {
"top_20": {
"commercial": {
"positions": 5,
"traffic": 3200
},
"informational": {
"positions": 12,
"traffic": 8500
},
"navigational": {
"positions": 2,
"traffic": 4200
},
"transactional": {
"positions": 1,
"traffic": 1400
},
"unknown": {
"positions": 0,
"traffic": 0
}
}
}
},
{
"url": "https://example.com/services",
"organic_positions": 156,
"organic_traffic": 8920,
"adwords_positions": 2,
"serp_features_positions": 4,
"serp_features_traffic": 680,
"positions": 160,
"traffic": 9600,
"traffic_percent": 6.9,
"intent_breakdown": {
"top_20": {
"commercial": {
"positions": 8,
"traffic": 5100
},
"informational": {
"positions": 3,
"traffic": 2400
},
"navigational": {
"positions": 1,
"traffic": 1200
},
"transactional": {
"positions": 0,
"traffic": 0
},
"unknown": {
"positions": 0,
"traffic": 0
}
}
}
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"scope": "ROOT_DOMAIN",
"url": "example.com",
"effective_url": "https://example.com",
"limit": 10,
"offset": 0,
"order_by": "traffic",
"filter": "organic_traffic>50"
}
}Jump to Get Monthly Ranked Pages TotalGet Monthly Ranked Pages Total
Price: 10 API units per request
Returns the total number of monthly ranking pages for the domain matching the specified criteria.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Part of the URL to include in the analysis. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Pages filter string. For syntax, refer to Advanced filtering. If omitted, no filter is applied. Available fields: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, traffic, traffic_percent. Text fields like url support CONTAINS, STARTS_WITH, and ENDS_WITH (case-sensitive); numeric fields support =, !=, >, >=, <, <=, and IN. Use uppercase for operators and AND/OR, and quote strings.
Example: traffic > 50
Value/Type: string
Response Parameters
data
Response payload containing the count of matching pages.
(data fields)
Value/Type: object
total
Total number of matching ranking pages.
Value/Type: integer
Value/Type: object
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 50
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
scope determines which part of the URL will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/pages/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=traffic%20%3E%2050"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {
"total": 42
}
}Jump to Get Monthly Ranked Pages ChangesGet Monthly Ranked Pages Changes
Price: 20 API units per line
Returns a list of monthly pages with ranking changes. base_month and comparison_month are months in YYYY-MM format, for example, 2026-07 and 2026-08; they need not be adjacent. base_month must be earlier than comparison_month and at most 24 months before the latest monthly snapshot of the selected database. Both months need a monthly snapshot; a month without one is rejected, never replaced by another month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
base_monthRequired
Earlier month of the comparison. Must be earlier than comparison_month. Values for this month are returned in the *_previous fields. Format: ISO 8601 YYYY-MM (for example, 2024-01).
Value/Type: string
comparison_monthRequired
Later month of the comparison, compared against base_month. Values for this month are returned in the fields without the _previous suffix. Format: ISO 8601 YYYY-MM (for example, 2024-12).
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Example: DESKTOP
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. The names are fields of the response items, described in the response schema. Supported values: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, positions_previous, positions_difference, positions_difference_abs, traffic, traffic_percent, traffic_previous, traffic_difference, traffic_difference_abs.
Value/Type: string[]
filter
Page changes filter string. For syntax, refer to Advanced filtering. If omitted, no filter is applied. Available fields: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, positions_previous, positions_difference, positions_difference_abs, traffic, traffic_percent, traffic_previous, traffic_difference, traffic_difference_abs. url is the full page URL exactly as the response url field returns it, matched as a whole by =, != and IN; every other field is a number: =, !=, >, >=, <, <=, IN. positions_difference and traffic_difference are the comparison_month value minus the base_month value, so a negative value is a decrease; the *_abs fields are their absolute values. Write operators, AND and OR in upper case and strings in double quotes, and use parentheses when mixing AND and OR.
Example: traffic_percent > 1
Value/Type: string
order_by
Field name to sort by. Default: traffic. Supported values: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, positions_previous, positions_difference, positions_difference_abs, traffic, traffic_percent, traffic_previous, traffic_difference, traffic_difference_abs.
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC. ASC: ascending, smallest value first. DESC: descending, largest value first.
Example: DESC
Value/Type: string
limit
Maximum number of page changes to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of page changes to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
Response Parameters
url
Ranking page URL.
Value/Type: string
organic_positions
Current number of organic keyword positions.
Value/Type: integer
organic_traffic
Current estimated organic traffic.
Value/Type: integer
adwords_positions
Number of paid (AdWords) keyword positions.
Value/Type: integer
intent_breakdown
Breakdown of keyword metrics by position range (1–20), split by search intent.
intent_breakdown.top_20
Value/Type: object
commercial
Commercial-intent keywords.
commercial
Value/Type: object
positions
Number of keywords in the 1–20 position range.
Value/Type: integer
traffic
Traffic from keywords in the 1–20 position range.
Value/Type: integer
Value/Type: object
informational
Informational-intent keywords.
informational
Value/Type: object
positions
Number of keywords in the 1–20 position range.
Value/Type: integer
traffic
Traffic from keywords in the 1–20 position range.
Value/Type: integer
Value/Type: object
navigational
Navigational-intent keywords.
navigational
Value/Type: object
positions
Number of keywords in the 1–20 position range.
Value/Type: integer
traffic
Traffic from keywords in the 1–20 position range.
Value/Type: integer
Value/Type: object
transactional
Transactional-intent keywords.
transactional
Value/Type: object
positions
Number of keywords in the 1–20 position range.
Value/Type: integer
traffic
Traffic from keywords in the 1–20 position range.
Value/Type: integer
Value/Type: object
unknown
Keywords with unknown intent.
unknown
Value/Type: object
positions
Number of keywords in the 1–20 position range.
Value/Type: integer
traffic
Traffic from keywords in the 1–20 position range.
Value/Type: integer
Value/Type: object
Value/Type: object
positions
Current total number of positions (organic_positions + serp_features_positions). Note: paid (AdWords) positions are not included.
Value/Type: integer
positions_previous
Previous total number of positions (organic_positions + serp_features_positions). Note: paid (AdWords) positions are not included.
Value/Type: integer
positions_difference
Net change in positions (comparison_month minus base_month). Negative values indicate a decrease.
Value/Type: integer
positions_difference_abs
Absolute value of the position change.
Value/Type: integer
serp_features_positions
Number of positions with SERP features.
Value/Type: integer
serp_features_traffic
Traffic from positions with SERP features.
Value/Type: integer
traffic
Current estimated traffic.
Value/Type: integer
traffic_previous
Previous estimated traffic.
Value/Type: integer
traffic_difference
Net change in traffic (comparison_month minus base_month). Negative values indicate a decrease.
Value/Type: integer
traffic_difference_abs
Absolute value of the traffic change.
Value/Type: integer
traffic_percent
Share of domain’s traffic attributed to this page as a percentage. Range: 0 to 100.
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic_percent > 1
Value/Type: string
limit
Limit parameter from the request.
Value/Type: integer
offset
Offset parameter from the request.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/pages/changes/monthly?url=example.com&scope=ROOT_DOMAIN&base_month=2024-06&comparison_month=2024-07&country=US&device_type=DESKTOP&fields=url,organic_positions,organic_traffic&filter=traffic_percent > 1&order_by=traffic"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"url": "example.com",
"effective_url": "https://example.com",
"scope": "ROOT_DOMAIN",
"limit": 100,
"offset": 0,
"filter": "traffic_percent > 1",
"order_by": "traffic"
},
"data": [
{
"url": "https://example.com/blog/seo-tips",
"organic_positions": 145,
"organic_traffic": 2340,
"adwords_positions": 0,
"positions": 156,
"positions_previous": 148,
"positions_difference": 8,
"positions_difference_abs": 8,
"traffic": 2450,
"traffic_previous": 2100,
"traffic_difference": 350,
"traffic_difference_abs": 350,
"traffic_percent": 5.2,
"serp_features_positions": 11,
"serp_features_traffic": 110,
"intent_breakdown": {
"top_20": {
"commercial": {"positions": 3, "traffic": 450},
"informational": {"positions": 12, "traffic": 1800},
"navigational": {"positions": 2, "traffic": 150},
"transactional": {"positions": 2, "traffic": 50},
"unknown": {"positions": 1, "traffic": 0}
}
}
},
{
"url": "https://example.com/products/widget-pro",
"organic_positions": 89,
"organic_traffic": 1850,
"adwords_positions": 5,
"positions": 95,
"positions_previous": 92,
"positions_difference": 3,
"positions_difference_abs": 3,
"traffic": 1950,
"traffic_previous": 1750,
"traffic_difference": 200,
"traffic_difference_abs": 200,
"traffic_percent": 4.1,
"serp_features_positions": 6,
"serp_features_traffic": 100,
"intent_breakdown": {
"top_20": {
"commercial": {"positions": 8, "traffic": 950},
"informational": {"positions": 5, "traffic": 600},
"navigational": {"positions": 1, "traffic": 200},
"transactional": {"positions": 2, "traffic": 200},
"unknown": {"positions": 0, "traffic": 0}
}
}
}
]
}Jump to Get Monthly Ranked Pages Changes TotalGet Monthly Ranked Pages Changes Total
Price: 10 API units per request
Returns the total number of monthly page-level ranking changes. base_month and comparison_month are months in YYYY-MM format, for example, 2026-07 and 2026-08; they need not be adjacent. base_month must be earlier than comparison_month and at most 24 months before the latest monthly snapshot of the selected database. Both months need a monthly snapshot; a month without one is rejected, never replaced by another month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
base_monthRequired
Earlier month of the comparison. Must be earlier than comparison_month. Format: ISO 8601 date (YYYY-MM).
Example: 2024-01
Value/Type: string
comparison_monthRequired
Later month of the comparison, compared against base_month. Format: ISO 8601 date (YYYY-MM).
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (any letter case, for example, us). The United Kingdom is gb; uk is rejected. A country without a database for the selected device_type is rejected. Retrieve supported country and device type pairs from the Get Supported Countries endpoint.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database; not available for all countries.
Example: DESKTOP
Value/Type: string
filter
Page changes filter. For syntax, refer to Advanced filtering. If omitted, no filter is applied. Available fields: url, organic_positions, organic_traffic, adwords_positions, intent_breakdown.top_20.commercial.positions, intent_breakdown.top_20.informational.positions, intent_breakdown.top_20.navigational.positions, intent_breakdown.top_20.transactional.positions, intent_breakdown.top_20.unknown.positions, intent_breakdown.top_20.commercial.traffic, intent_breakdown.top_20.informational.traffic, intent_breakdown.top_20.navigational.traffic, intent_breakdown.top_20.transactional.traffic, intent_breakdown.top_20.unknown.traffic, serp_features_positions, serp_features_traffic, positions, positions_previous, positions_difference, positions_difference_abs, traffic, traffic_percent, traffic_previous, traffic_difference, traffic_difference_abs. url is the full page URL matched as a whole by =, !=, or IN; all other fields are numeric using =, !=, >, >=, <, <=, or IN. positions_difference and traffic_difference are comparison minus baseline (negative = decrease); *_abs fields are absolute values. Use uppercase operators and AND/OR; enclose strings in double quotes; use parentheses when mixing AND and OR.
Example: positions_difference > 10 AND traffic_percent > 1
Value/Type: string
Response Parameters
total
Total number of page-level ranking changes matching the request.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: positions_difference > 10
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/pages/changes/monthly/total?url=example.com&scope=ROOT_DOMAIN&base_month=2024-01&comparison_month=2024-12&country=US&device_type=DESKTOP&filter=positions_difference%20>%2010"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"url": "example.com",
"effective_url": "example.com",
"scope": "ROOT_DOMAIN",
"country": "US",
"device_type": "DESKTOP",
"filter": "positions_difference > 10"
},
"data": {
"total": 342
}
}Jump to Get Monthly CompetitorsGet Monthly Competitors
Price: 40 API units per line
Returns a list of monthly competing domains based on shared organic keywords.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query. The length must not exceed 2,000 characters. The report is domain-scoped: a URL or subdomain is reduced to its registered domain.
Example: samplesite.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case. The United Kingdom is gb; uk is rejected. A country must have a database available for the selected device_type. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
fields
Field names from the response to include. If omitted, all fields are returned. A money field (traffic_cost or a *_traffic_cost) selects the whole pair (value and currency), not a bare number. Supported values: domain, competition_density, common_keywords, organic_positions, organic_traffic, organic_traffic_cost, adwords_positions, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, positions, traffic, traffic_cost.
Value/Type: string[]
limit
Maximum number of competitors to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of competitors to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: common_keywords. Money fields sort by their numeric value. Supported values: domain, competition_density, common_keywords, organic_positions, organic_traffic, organic_traffic_cost, adwords_positions, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, positions, traffic, traffic_cost.
Example: common_keywords
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC. ASC: ascending, smallest value first. DESC: descending, largest value first.
Example: DESC
Value/Type: string
Response Parameters
domain
Competitor domain name.
Value/Type: string
common_keywords
Number of common keywords with the target.
Value/Type: integer
competition_density
Keyword competition density score. Supported range: 0 to 100, with 100 being the most competitive.
Value/Type: number
organic_positions
Number of organic positions.
Value/Type: integer
organic_traffic
Estimated organic traffic.
Value/Type: integer
organic_traffic_cost
Value/Type: object
value
The amount in whole currency units with a decimal fraction (for example, 12.99).
Value/Type: number
adwords_positions
Number of paid (Adwords) positions.
Value/Type: integer
serp_features_positions
Number of positions with SERP features.
Value/Type: integer
serp_features_traffic
Estimated traffic from SERP features.
Value/Type: integer
serp_features_traffic_cost
Value/Type: object
value
The amount in whole currency units with a decimal fraction.
Value/Type: number
positions
Total number of positions.
Value/Type: integer
traffic
Total estimated traffic.
Value/Type: integer
traffic_cost
Value/Type: object
value
The amount in whole currency units with a decimal fraction.
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: samplesite.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
order_by
Requested sort field.
Value/Type: string
direction
Requested sort direction.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/competitors/monthly?domain=samplesite.com&country=US&device_type=DESKTOP&month=2024-12&fields=domain,common_keywords,competition_density,organic_traffic&limit=10"{
"data": [
{
"domain": "competitor1.com",
"common_keywords": 2847,
"competition_density": 68.5,
"organic_positions": 12543,
"organic_traffic": 185000,
"organic_traffic_cost": {
"value": 42500.75,
"currency": "USD"
},
"adwords_positions": 156,
"serp_features_positions": 234,
"serp_features_traffic": 28500,
"serp_features_traffic_cost": {
"value": 5200.50,
"currency": "USD"
},
"positions": 12899,
"traffic": 213500,
"traffic_cost": {
"value": 47700.25,
"currency": "USD"
}
},
{
"domain": "competitor2.com",
"common_keywords": 2156,
"competition_density": 64.2,
"organic_positions": 9876,
"organic_traffic": 142000,
"organic_traffic_cost": {
"value": 31800.00,
"currency": "USD"
},
"adwords_positions": 201,
"serp_features_positions": 189,
"serp_features_traffic": 21300,
"serp_features_traffic_cost": {
"value": 3900.75,
"currency": "USD"
},
"positions": 10277,
"traffic": 163300,
"traffic_cost": {
"value": 35700.75,
"currency": "USD"
}
},
{
"domain": "competitor3.com",
"common_keywords": 1843,
"competition_density": 71.8,
"organic_positions": 11234,
"organic_traffic": 167500,
"organic_traffic_cost": {
"value": 38900.25,
"currency": "USD"
},
"adwords_positions": 128,
"serp_features_positions": 267,
"serp_features_traffic": 31200,
"serp_features_traffic_cost": {
"value": 5850.00,
"currency": "USD"
},
"positions": 11629,
"traffic": 198700,
"traffic_cost": {
"value": 44750.25,
"currency": "USD"
}
}
],
"meta": {
"country": "US",
"device_type": "DESKTOP",
"domain": "samplesite.com",
"effective_url": "https://samplesite.com",
"limit": 10,
"month": "2024-12",
"offset": 0,
"order_by": "common_keywords",
"direction": "DESC",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
}
}Jump to Get Monthly Competitors TotalGet Monthly Competitors Total
Price: 10 API units per request
Returns the total number of monthly competing domains based on shared organic keywords.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query, for example, semrush.com. Required. At most 2,000 characters. The report is domain-scoped: a URL or a subdomain is reduced to its registered domain.
Example: samplesite.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned. A month without a monthly snapshot is rejected.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
Response Parameters
total
Total number of matching competitors.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: samplesite.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/competitors/monthly/total?domain=samplesite.com&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"domain": "samplesite.com",
"effective_url": "https://samplesite.com",
"month": "2024-12"
},
"data": {
"total": 127
}
}Jump to Get Monthly SubdomainsGet Monthly Subdomains
Price: 10 API units per line
Returns a list of monthly subdomains.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query (for example, semrush.com). The report is domain-scoped: URLs and subdomains are normalized to their registered domain. Maximum 2,000 characters.
Example: samplesite.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM, for example, 2024-12). If omitted, the latest monthly snapshot for the selected country and device_type is returned. A month with no available snapshot is rejected; the endpoint never falls back to a different month.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format (for example, us, any letter case). The United Kingdom is gb; uk is rejected. A country without a database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get available country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. The names are fields of the response items, described in the response schema. Supported values: subdomain, organic_positions, organic_traffic, organic_traffic_percent, serp_features_positions, serp_features_traffic, serp_features_traffic_percent, positions, traffic, traffic_percent.
Value/Type: string[]
limit
Maximum number of subdomains to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of subdomains to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: traffic. Supported values: subdomain, organic_positions, organic_traffic, organic_traffic_percent, serp_features_positions, serp_features_traffic, serp_features_traffic_percent, positions, traffic, traffic_percent.
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC. ASC: ascending, smallest value first. DESC: descending, largest value first.
Example: DESC
Value/Type: string
Response Parameters
subdomain
Subdomain name.
Value/Type: string
organic_positions
Number of organic positions on the SERP.
Value/Type: integer
organic_traffic
Estimated organic traffic.
Value/Type: integer
organic_traffic_percent
Share of organic traffic as a percentage (0–100).
Value/Type: number
serp_features_positions
Number of SERP feature positions on the SERP.
Value/Type: integer
serp_features_traffic
Estimated traffic from SERP features.
Value/Type: integer
serp_features_traffic_percent
Share of SERP feature traffic as a percentage (0–100).
Value/Type: number
positions
Total number of keyword positions.
Value/Type: integer
traffic
Total estimated traffic.
Value/Type: integer
traffic_percent
Share of total traffic as a percentage (0–100).
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: samplesite.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/subdomains/monthly?domain=samplesite.com&country=US&device_type=DESKTOP&month=2024-12&fields=subdomain,organic_positions,organic_traffic&limit=10"{
"data": [
{
"subdomain": "blog.samplesite.com",
"organic_positions": 2847,
"organic_traffic": 15420,
"organic_traffic_percent": 42.5,
"serp_features_positions": 312,
"serp_features_traffic": 3210,
"serp_features_traffic_percent": 8.9,
"positions": 3159,
"traffic": 18630,
"traffic_percent": 51.4
},
{
"subdomain": "help.samplesite.com",
"organic_positions": 1654,
"organic_traffic": 8920,
"organic_traffic_percent": 24.6,
"serp_features_positions": 201,
"serp_features_traffic": 1850,
"serp_features_traffic_percent": 5.1,
"positions": 1855,
"traffic": 10770,
"traffic_percent": 29.7
},
{
"subdomain": "api.samplesite.com",
"organic_positions": 893,
"organic_traffic": 5230,
"organic_traffic_percent": 14.4,
"serp_features_positions": 89,
"serp_features_traffic": 620,
"serp_features_traffic_percent": 1.7,
"positions": 982,
"traffic": 5850,
"traffic_percent": 16.1
}
],
"meta": {
"country": "US",
"device_type": "DESKTOP",
"domain": "samplesite.com",
"effective_url": "https://samplesite.com",
"limit": 10,
"month": "2024-12",
"offset": 0,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
}
}Jump to Get Monthly Subdomains TotalGet Monthly Subdomains Total
Price: 10 API units per request
Returns the total number of monthly subdomains with ranking keywords.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query. At most 2,000 characters. URLs and subdomains are reduced to their registered domain.
Example: example.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM), for example, 2024-08. If omitted, the latest monthly snapshot for the selected country and device_type is returned. Invalid months are rejected.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, for example, us or US. The United Kingdom is gb; uk is rejected. Check the Get Supported Countries endpoint for supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE.
Value/Type: string
Response Parameters
total
Total number of subdomains with ranking keywords.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: example.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Request success status.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/subdomains/monthly/total?domain=example.com&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"country": "US",
"device_type": "DESKTOP",
"domain": "example.com",
"effective_url": "https://example.com",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {
"total": 148
}
}Jump to Get Monthly Positions TrendGet Monthly Positions Trend
Price: 10 API units per line
Returns the monthly trend of the target’s organic rankings: counts by SERP position bucket, rankings inside SERP features, and the traffic and traffic-cost estimates behind them. date_from and date_to are months in YYYY-MM format, for example, 2026-03 and 2026-08 when 2026-08 is the latest monthly snapshot. date_from must be earlier than date_to (equal months are rejected) and at most 12 months before the latest monthly snapshot of the selected database. Both months need a monthly snapshot; a month without one is rejected, never replaced by another month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. Maximum 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
date_fromRequired
Start date of the range. Format: ISO 8601 YYYY-MM.
Example: 2024-01
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). For example, US for the United States, GB for the United Kingdom.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database. MOBILE: mobile search database; not available for all countries.
Example: DESKTOP
Value/Type: string
filter
Filter string. For syntax, refer to Advanced filtering. Available fields: month, organic_positions, organic_positions_branded, organic_positions_1_3, organic_positions_4_10, organic_positions_11_20, organic_positions_21_30, organic_positions_31_40, organic_positions_41_50, organic_positions_51_60, organic_positions_61_70, organic_positions_71_80, organic_positions_81_90, organic_positions_91_inf, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, positions, traffic, traffic_cost, keyword_serp_features, position_serp_features. Money fields are filtered by numeric value alone (for example, traffic_cost > 100).
Example: organic_traffic > 1000
Value/Type: string
fields
Metric names to include in the response. If omitted, all metrics are returned. Supported values: month, organic_positions, organic_positions_branded, organic_positions_1_3, organic_positions_4_10, organic_positions_11_20, organic_positions_21_30, organic_positions_31_40, organic_positions_41_50, organic_positions_51_60, organic_positions_61_70, organic_positions_71_80, organic_positions_81_90, organic_positions_91_inf, organic_traffic, organic_traffic_cost, serp_features_positions, serp_features_traffic, serp_features_traffic_cost, positions, traffic, traffic_cost, keyword_serp_features, position_serp_features.
Value/Type: string[]
Response Parameters
organic_positions
Number of the target’s organic rankings across all SERP positions.
Value/Type: integer
organic_positions_branded
Number of organic rankings for branded keywords.
Value/Type: integer
organic_positions_1_3
Number of organic rankings at SERP positions 1 to 3.
Value/Type: integer
organic_positions_4_10
Number of organic rankings at SERP positions 4 to 10.
Value/Type: integer
organic_positions_11_20
Number of organic rankings at SERP positions 11 to 20.
Value/Type: integer
organic_positions_21_30
Number of organic rankings at SERP positions 21 to 30.
Value/Type: integer
organic_positions_31_40
Number of organic rankings at SERP positions 31 to 40.
Value/Type: integer
organic_positions_41_50
Number of organic rankings at SERP positions 41 to 50.
Value/Type: integer
organic_positions_51_60
Number of organic rankings at SERP positions 51 to 60.
Value/Type: integer
organic_positions_61_70
Number of organic rankings at SERP positions 61 to 70.
Value/Type: integer
organic_positions_71_80
Number of organic rankings at SERP positions 71 to 80.
Value/Type: integer
organic_positions_81_90
Number of organic rankings at SERP positions 81 to 90.
Value/Type: integer
organic_positions_91_inf
Number of organic rankings at SERP position 91 and below.
Value/Type: integer
organic_traffic
Estimated organic search traffic.
Value/Type: integer
organic_traffic_cost
Estimated cost of organic traffic in USD.
Value/Type: object
value
The amount in whole currency units with decimal fraction (for example, 12.99).
Value/Type: number
serp_features_positions
Number of rankings inside SERP features.
Value/Type: integer
serp_features_traffic
Estimated traffic from positions with SERP features.
Value/Type: integer
serp_features_traffic_cost
Estimated traffic cost from SERP feature positions in USD.
Value/Type: object
value
The amount in whole currency units with decimal fraction.
Value/Type: number
positions
Total number of rankings: organic_positions + serp_features_positions (paid positions are never included).
Value/Type: integer
traffic
Total estimated traffic.
Value/Type: integer
traffic_cost
Total estimated traffic cost in USD.
Value/Type: object
value
The amount in whole currency units with decimal fraction.
Value/Type: number
keyword_serp_features
Breakdown of SERP features at the keyword level.
Value/Type: array
id
SERP feature identifier.
Value/Type: string
counter
Number of occurrences of the SERP feature.
Value/Type: integer
position_serp_features
Breakdown of SERP features at the position level.
Value/Type: array
id
SERP feature identifier.
Value/Type: string
counter
Number of occurrences of the SERP feature.
Value/Type: integer
meta
Response metadata.
Value/Type: object
date_from
Start date of the requested range in YYYY-MM format.
Example: 2024-01
Value/Type: string
date_to
End date of the requested range in YYYY-MM format.
Example: 2024-03
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: organic_traffic > 1000
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL analyzed: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, or PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/organic-search/rankings/trend/monthly?url=example.com&scope=ROOT_DOMAIN&date_from=2024-01&date_to=2024-03&country=US&device_type=DESKTOP&fields=month,organic_positions,organic_traffic,traffic_cost,serp_features_positions"{
"meta": {
"country": "US",
"date_from": "2024-01",
"date_to": "2024-03",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "example.com"
},
"data": [
{
"month": "2024-01",
"organic_positions": 8234,
"organic_traffic": 25680,
"traffic_cost": {
"value": 1245.50,
"currency": "USD"
},
"serp_features_positions": 127
},
{
"month": "2024-02",
"organic_positions": 8567,
"organic_traffic": 27150,
"traffic_cost": {
"value": 1389.75,
"currency": "USD"
},
"serp_features_positions": 142
},
{
"month": "2024-03",
"organic_positions": 8945,
"organic_traffic": 29420,
"traffic_cost": {
"value": 1534.25,
"currency": "USD"
},
"serp_features_positions": 156
}
]
}Jump to Get Monthly Serp ResultsGet Monthly Serp Results
Price: 10 API units per line
Returns the given keyword’s monthly SERP: one entry per SERP position, giving the domain and URL that rank there, that position’s estimated traffic, and any SERP features attached to it. Entries are ordered by position, ascending.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve SERP results for. Required.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
position_type
Types of positions to return. All if nothing is specified. Supported values: ORGANIC, SERP_FEATURE.
Value/Type: string
filter
SERP result filter string. For syntax, refer to Advanced filtering. Money fields are filtered by their numeric value alone, never by currency: traffic_cost > 50.00. Available fields: position, domain, url, traffic, traffic_cost, keyword_serp_features, position_serp_features, serp_feature. SERP-feature fields (keyword_serp_features, position_serp_features, serp_feature) take feature names as quoted strings. Examples: domain = "example.com" AND position > 1; keyword_serp_features HAS_ANY ("REVIEWS", "AI_OVERVIEW").
Example: traffic > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: position, domain, url, traffic, traffic_cost, keyword_serp_features, position_serp_features, serp_feature.
Value/Type: string[]
limit
Maximum number of SERP results to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of SERP results to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
Response Parameters
position
Organic position in the SERP.
Value/Type: integer
domain
Domain that holds this position.
Value/Type: string
url
URL ranking for the keyword.
Value/Type: string
traffic
Estimated monthly traffic driven to the URL by the keyword.
Value/Type: integer
traffic_cost
Estimated monthly cost of the traffic, in USD. Always USD regardless of the requested country. Contains currency (ISO 4217 code, always “USD”) and value (the amount in decimal format).
Value/Type: object
keyword_serp_features
All SERP features present on this keyword’s SERP. Describes the SERP as a whole, so every entry in the response carries the same value. Examples: INSTANT_ANSWER, KNOWLEDGE_PANEL, REVIEWS, AI_OVERVIEW.
Value/Type: string[]
position_serp_features
SERP features attached to this particular position, such as review snippets or sitelinks rendered alongside this ranking result. Examples: REVIEWS, SITELINKS.
Value/Type: string[]
serp_feature
Set only when this position is itself a SERP feature block rather than a regular organic result, in which case it identifies which feature. Absent for regular organic results. Example: FEATURED_SNIPPET.
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 100
Value/Type: string
keyword
Keyword used in the request.
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
position_type
Types of positions to return. All if nothing is specified. Possible values: ORGANIC, SERP_FEATURE
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/organic-search/serp-results/monthly?keyword=python+tutorial&country=US&device_type=DESKTOP&month=2024-12&position_type=ORGANIC&filter=traffic%20%3E%20100"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"keyword": "python tutorial",
"month": "2024-12",
"position_type": "ORGANIC",
"limit": 10,
"offset": 0
},
"data": [
{
"position": 1,
"domain": "python.org",
"url": "https://docs.python.org/3/tutorial/",
"traffic": 15420,
"traffic_cost": {
"currency": "USD",
"value": 125.50
},
"keyword_serp_features": ["FEATURED_SNIPPET"],
"position_serp_features": []
},
{
"position": 2,
"domain": "w3schools.com",
"url": "https://www.w3schools.com/python/",
"traffic": 8930,
"traffic_cost": {
"currency": "USD",
"value": 72.30
},
"keyword_serp_features": ["FEATURED_SNIPPET"],
"position_serp_features": ["SITELINKS"]
},
{
"position": 3,
"domain": "real-python.com",
"url": "https://realpython.com/learning-paths/python-basics/",
"traffic": 6250,
"traffic_cost": {
"currency": "USD",
"value": 51.80
},
"keyword_serp_features": ["FEATURED_SNIPPET"],
"position_serp_features": []
}
]
}Jump to Get Monthly Gap KeywordsGet Monthly Gap Keywords
Price: 20 API units per line
Returns an array of keywords of the given intersection type (COMMON, MISSING, and so on) for the compared targets, with the metrics of each keyword and the ranking of every target for it. The result set is paginated with limit and offset.
Jump to EndpointEndpoint
Query parameters
channelRequired
Channel whose rankings are compared. Required. The channel is defined once and applies to the target and to the competitor alike. Supported values: ORGANIC, ADWORDS, PLA.
Value/Type: string
target_urlRequired
URL of the target to query: the site the report is built around. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
target_scopeRequired
Scope of the target, which determines which part of target_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
competitor_urlRequired
URL of the competitor to compare the target against. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
competitor_scopeRequired
Scope of the competitor, which determines which part of competitor_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used. The same month applies to every target.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
intersection_type
Type of keyword intersection to return. Default: ALL. Applies on top of channel: the intersection is computed over the rankings that channel selects. Supported values: ALL, COMMON, MISSING, STRONG, UNIQUE, WEAK.
Value/Type: string
filter
Gap keywords filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, competition_density, cpc, keyword_difficulty, results, volume, target.position, target.url, competitor.position, competitor.url, intents, is_keyword_branded. The ranking of a single side is addressed with dot notation: target.* is the ranking of target_url, and competitor.* is the ranking of competitor_url. A keyword whose requested side has no ranking never passes a condition on that side, so target.position > 10 also drops every MISSING keyword. A filter takes at most 4 conditions on target.*, at most 4 on competitor.*, and at most 38 on keyword-level fields. A condition is one comparison, such as target.position > 10 or target.url CONTAINS "blog"; AND and NOT do not count. A filter exceeding these limits is refused with FILTER_TOO_COMPLEX.
Example: volume > 1000 AND keyword CONTAINS "buy"
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. target and competitor select the whole ranking object (position and URL); dot notation narrows the selection down to a single nested field, for example target.position. Supported values: keyword, competition_density, cpc, keyword_difficulty, results, volume, target, target.position, target.url, competitor, competitor.position, competitor.url, intents, is_keyword_branded.
Value/Type: string[]
limit
Maximum number of keywords to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of keywords to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. target.* refers to the ranking of target_url, and competitor.* refers to the ranking of competitor_url, so target.position sorts by the position of the target itself. Supported values: keyword, competition_density, cpc, keyword_difficulty, results, volume, target.position, target.url, competitor.position, competitor.url.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
keyword
Keyword text.
Value/Type: string
volume
Number of monthly searches for the keyword in the requested database (country and device type).
Value/Type: integer
competition_density
Competition density of the keyword in paid search. Supported range: 0 to 100. Higher values mean more advertisers compete for the keyword.
Value/Type: number
cpc
Value/Type: object
value
Estimated cost per click in USD (for example, 2.50 for $2.50).
Value/Type: number
keyword_difficulty
Keyword difficulty score (0–100) estimating how hard it is to rank organically for the keyword. Higher values mean it is harder to rank.
Value/Type: integer
results
Approximate number of search results the search engine reports for the keyword.
Value/Type: integer
target
Ranking of the target (target_url from the request) for the keyword. Not returned when the target doesn’t rank for the keyword (case for every MISSING keyword and some ALL keywords).
Value/Type: object
position
Position the site ranks at for the keyword.
Value/Type: integer
url
URL of the target’s page that ranks for the keyword.
Value/Type: string
competitor
Ranking of the competitor (competitor_url from the request) for the keyword. Not returned when the competitor doesn’t rank for the keyword (case for every UNIQUE keyword and some ALL keywords).
Value/Type: object
position
Position the site ranks at for the keyword.
Value/Type: integer
url
URL of the competitor’s page that ranks for the keyword.
Value/Type: string
intents
Search intents associated with the keyword. Possible values: COMMERCIAL, INFORMATIONAL, NAVIGATIONAL, TRANSACTIONAL.
Value/Type: string[]
is_keyword_branded
Whether the keyword includes a brand name.
Value/Type: boolean
meta
Response metadata.
Value/Type: object
channel
Channel whose rankings are compared. Required. The channel is defined once and applies to the target and to the competitor alike. Possible values: ORGANIC, ADWORDS, PLA
Value/Type: string
competitor_scope
Scope of the competitor, which determines which part of competitor_url will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Value/Type: string
competitor_url
Competitor URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: volume > 1000
Value/Type: string
intersection_type
Intersection type the response was built from: the requested intersection_type, or ALL when the request omitted it. Surfaced in the response meta. Possible values: ALL, COMMON, MISSING, STRONG, UNIQUE, WEAK
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
target_scope
Scope of the target, which determines which part of target_url will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Value/Type: string
target_url
Target URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/gap/monthly?channel=ORGANIC&target_url=https://example.com&target_scope=ROOT_DOMAIN&competitor_url=https://competitor.com&competitor_scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&intersection_type=ALL&filter=volume%20%3E%201000&fields=keyword,volume,keyword_difficulty,target,competitor&limit=10"{
"data": [
{
"keyword": "project management tools",
"volume": 2850,
"competition_density": 65,
"cpc": {
"value": 3.25,
"currency": "USD"
},
"keyword_difficulty": 42,
"results": 1240000000,
"target": {
"position": 5,
"url": "https://example.com/project-management"
},
"competitor": {
"position": 3,
"url": "https://competitor.com/tools/project-management"
},
"intents": ["COMMERCIAL", "INFORMATIONAL"],
"is_keyword_branded": false
},
{
"keyword": "team collaboration software",
"volume": 1920,
"competition_density": 58,
"cpc": {
"value": 2.85,
"currency": "USD"
},
"keyword_difficulty": 38,
"results": 890000000,
"target": {
"position": 8,
"url": "https://example.com/collaboration"
},
"competitor": {
"position": 2,
"url": "https://competitor.com/solutions/collaboration"
},
"intents": ["COMMERCIAL"],
"is_keyword_branded": false
},
{
"keyword": "workflow automation platform",
"volume": 1450,
"competition_density": 71,
"cpc": {
"value": 4.10,
"currency": "USD"
},
"keyword_difficulty": 51,
"results": 520000000,
"intents": ["COMMERCIAL", "INFORMATIONAL", "TRANSACTIONAL"],
"is_keyword_branded": false
}
],
"meta": {
"channel": "ORGANIC",
"competitor_scope": "ROOT_DOMAIN",
"competitor_url": "https://competitor.com",
"country": "US",
"device_type": "DESKTOP",
"filter": "volume > 1000",
"intersection_type": "ALL",
"limit": 10,
"month": "2024-12",
"offset": 0,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"target_scope": "ROOT_DOMAIN",
"target_url": "https://example.com"
}
}Jump to Get Monthly Gap Keywords CountsGet Monthly Gap Keywords Counts
Price: 20 API units per line
Returns counters for each intersection type for each target (for example, how many keywords are shared or missing for each target domain). The counters are returned in the order the targets were passed in the request.
Jump to EndpointEndpoint
Query parameters
channelRequired
Channel whose rankings are compared. Required. The channel is defined once and applies to the target and to the competitor alike. Supported values: ORGANIC, ADWORDS, PLA.
Value/Type: string
target_urlRequired
URL of the target to query: the site the report is built around. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
target_scopeRequired
Scope of the target, which determines which part of target_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
competitor_urlRequired
URL of the competitor to compare the target against. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
competitor_scopeRequired
Scope of the competitor, which determines which part of competitor_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Gap keywords filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, competition_density, cpc, keyword_difficulty, results, volume, target.position, target.url, competitor.position, competitor.url, intents, is_keyword_branded. The ranking of a single side is addressed with dot notation: target.* refers to the ranking of target_url, competitor.* refers to the ranking of competitor_url. A keyword whose requested side has no ranking never passes a condition on that side, so target.position > 10 also drops every MISSING keyword. A filter takes at most 4 conditions on target.*, at most 4 on competitor.* and at most 38 on keyword-level fields. A condition is one comparison, such as target.position > 10 or target.url CONTAINS "blog"; AND and NOT do not count. A filter over a limit is refused with FILTER_TOO_COMPLEX.
Example: volume > 1000 AND keyword CONTAINS "buy"
Value/Type: string
Response Parameters
all
Number of keywords at least one of the compared sites ranks for (common + unique + missing). The same value for both target and competitor.
Value/Type: integer
common
Number of keywords both compared sites rank for.
Value/Type: integer
unique
Number of keywords only this site ranks for.
Value/Type: integer
missing
Number of keywords the other site ranks for but this one doesn’t.
Value/Type: integer
strong
Number of keywords this site ranks higher for than the other one.
Value/Type: integer
weak
Number of keywords this site ranks lower for than the other one.
Value/Type: integer
meta
Response metadata.
Value/Type: object
channel
Channel whose rankings are compared. Required. The channel is defined once and applies to the target and to the competitor alike. Possible values: ORGANIC, ADWORDS, PLA
Value/Type: string
competitor_scope
Scope of the competitor, which determines which part of competitor_url will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Value/Type: string
competitor_url
Competitor URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: volume > 1000
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
target_scope
Scope of the target, which determines which part of target_url will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Value/Type: string
target_url
Target URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/gap/monthly/counts?channel=ORGANIC&target_url=example.com&target_scope=ROOT_DOMAIN&competitor_url=competitor.com&competitor_scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=volume%20%3E%201000"{
"data": [
{
"all": 45230,
"common": 32150,
"unique": 8940,
"missing": 4140,
"strong": 15680,
"weak": 16470
},
{
"all": 45230,
"common": 32150,
"unique": 4140,
"missing": 8940,
"strong": 16470,
"weak": 15680
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"channel": "ORGANIC",
"target_url": "example.com",
"target_scope": "ROOT_DOMAIN",
"competitor_url": "competitor.com",
"competitor_scope": "ROOT_DOMAIN",
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"filter": "volume > 1000"
}
}Jump to Get Monthly Gap OverlapsGet Monthly Gap Overlaps
Price: 20 API units per line
Returns common keywords count for every combination of targets: the data an intersection diagram of the compared targets is built from.
Jump to EndpointEndpoint
Query parameters
channelRequired
Channel whose rankings are compared. Required. The channel is defined once and applies to the target and to the competitor alike. Supported values: ORGANIC, ADWORDS, PLA.
Value/Type: string
target_urlRequired
URL of the target to query: the site the report is built around. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
target_scopeRequired
Scope of the target, which determines which part of target_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
competitor_urlRequired
URL of the competitor to compare the target against. Required. The length of a target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
competitor_scopeRequired
Scope of the competitor, which determines which part of competitor_url will be taken into account. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). For example, US for the United States, GB for the United Kingdom. A country that has no database for the selected device_type is rejected.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database. MOBILE: mobile search database; not available for all countries.
Value/Type: string
filter
Gap keywords filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, competition_density, cpc, keyword_difficulty, results, volume, target.position, target.url, competitor.position, competitor.url, intents, is_keyword_branded. The ranking of a single side is addressed with dot notation: target.* is the ranking of target_url, and competitor.* is the ranking of competitor_url. A keyword whose requested side has no ranking never passes a condition on that side, so target.position > 10 also drops every MISSING keyword. A filter takes at most 4 conditions on target.*, at most 4 on competitor.*, and at most 38 on keyword-level fields. A condition is one comparison, such as target.position > 10 or target.url CONTAINS "blog"; AND and NOT do not count. A filter over a limit is refused with FILTER_TOO_COMPLEX.
Example: volume > 1000 AND keyword CONTAINS "buy"
Value/Type: string
Response Parameters
common_keywords
Number of keywords that every target listed in target_indexes ranks for.
Value/Type: integer
target_indexes
List of target indexes (positions in the request: target_url first, then competitor_url) that share common keywords.
Value/Type: integer[]
meta
Response metadata.
Value/Type: object
channel
Channel whose rankings are compared. Possible values: ORGANIC, ADWORDS, PLA.
Value/Type: string
competitor_scope
Scope of the competitor. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
competitor_url
Competitor URL as provided in the request.
Example: competitor.com
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: volume > 1000
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
target_scope
Scope of the target. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
target_url
Target URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/gap/overlaps/monthly?channel=ORGANIC&target_url=example.com&target_scope=ROOT_DOMAIN&competitor_url=competitor.com&competitor_scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=volume > 1000"{
"meta": {
"channel": "ORGANIC",
"competitor_scope": "ROOT_DOMAIN",
"competitor_url": "competitor.com",
"country": "US",
"device_type": "DESKTOP",
"filter": "volume > 1000",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"target_scope": "ROOT_DOMAIN",
"target_url": "example.com"
},
"data": [
{
"target_indexes": [0, 1],
"common_keywords": 245
},
{
"target_indexes": [0],
"common_keywords": 128
},
{
"target_indexes": [1],
"common_keywords": 87
}
]
}Jump to Get Monthly Paid Search AdvertisementsGet Monthly Paid Search Advertisements
Price: 20 API units per line
Returns the advertisements the target ran in paid search in the requested month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Determines which part of the URL will be analyzed. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country database code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country lacking a database for the selected device_type is rejected. Check the Get Supported Countries endpoint to get available country and device type combinations.
Example: US
Value/Type: string
device_typeRequired
Search database device type. DESKTOP uses the country’s desktop search database; MOBILE uses the mobile search database (not available in every country). Supported values: DESKTOP, MOBILE.
Example: DESKTOP
Value/Type: string
filter
Filter expression. For syntax, refer to Advanced filtering. Available fields: url, url_visible, title, description, ad_id, keyword, positions, crawled_time. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: url = "example.com" AND positions > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: url, url_visible, title, description, ad_id, keyword, positions, crawled_time.
Value/Type: string[]
limit
Maximum number of copies to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of copies to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
direction
Sorting direction. Applies only to the positions column. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
url
Final URL of the ad.
Example: https://example.com/products
Value/Type: string
url_visible
Display (visible) URL shown in the ad.
Example: example.com/products
Value/Type: string
title
Title of the ad.
Example: Premium Products | Best Deals
Value/Type: string
description
Description text of the ad.
Example: Shop our exclusive collection with free shipping on orders over $50.
Value/Type: string
ad_id
Unique ad identifier.
Example: 123456789
Value/Type: string
keyword
Keyword that triggered the ad.
Example: premium products
Value/Type: string
positions
Number of keyword positions this ad appeared in.
Example: 5
Value/Type: integer
crawled_time
Timestamp of the most recent crawl in which the ad was seen, in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ). May predate the requested month.
Example: 2024-12-15T10:30:00Z
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: url = \"example.com\" AND positions > 100
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Determines which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/advertisements/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=positions%20%3E%205&fields=url,url_visible,title"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "positions > 5",
"limit": 100,
"month": "2024-12",
"offset": 0,
"scope": "ROOT_DOMAIN",
"url": "https://example.com"
},
"data": [
{
"url": "https://example.com/products",
"url_visible": "example.com/products",
"title": "Premium Products | Best Deals",
"description": "Shop our exclusive collection with free shipping on orders over $50.",
"ad_id": "123456789",
"keyword": "premium products",
"positions": 8,
"crawled_time": "2024-12-15T10:30:00Z"
},
{
"url": "https://example.com/sale",
"url_visible": "example.com/sale",
"title": "Year-End Sale - Up to 70% Off",
"description": "Limited time offer on selected items. Free delivery worldwide.",
"ad_id": "987654321",
"keyword": "sale products",
"positions": 6,
"crawled_time": "2024-12-16T14:22:00Z"
}
]
}Jump to Get Monthly Paid Search Advertisements TotalGet Monthly Paid Search Advertisements Total
Price: 10 API units per request
Returns the total number of distinct paid search advertisements for the target domain in the requested month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target domain or URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format, case-insensitive (for example, us or US). The United Kingdom is gb; uk is not accepted. Supported country and device type combinations vary. Check the Get Supported Countries endpoint for valid pairs.
Example: US
Value/Type: string
device_typeRequired
Search database type. Supported values: DESKTOP, MOBILE. DESKTOP for desktop searches, or MOBILE for mobile searches. Not all countries have data for both device types.
Value/Type: string
filter
Filter expression. For syntax, refer to Advanced filtering. Available fields: url, url_visible, title, description, ad_id, keyword, positions, crawled_time. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: positions > 100
Value/Type: string
Response Parameters
total
Total number of distinct paid search advertisements found.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: positions > 100
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/advertisements/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=positions > 100"{
"data": {
"total": 342
},
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "example.com",
"url": "example.com",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"filter": "positions > 100"
}
}Jump to Get Monthly Paid Search KeywordsGet Monthly Paid Search Keywords
Price: 20 API units per line
Returns the keywords the target advertised on in paid search in the requested month, with the position of each ad. This is the monthly snapshot; for what changed since the month before, use the Get Monthly Paid Search Keywords Changes endpoint.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Which part of the URL to query: the root domain, a subdomain, a specific folder, or a single page.
Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Not all countries have databases for all device types. Use the Get Supported Countries endpoint to verify country and device type availability.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search results. MOBILE: mobile search results (not available in all countries).
Example: DESKTOP
Value/Type: string
filter
Filter expression. For syntax, refer to Advanced filtering. Money fields (cpc, traffic_cost) are filtered by numeric value alone; currency is not part of the filter. Available fields: keyword, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, competition_density, results, keyword_difficulty, title, description, url, url_visible, crawled_time, ad_id, traffic_difference, traffic_difference_abs. String fields like ad_id must be quoted exactly as they appear in the response.
Example: cpc > 2.50 AND volume > 100
Value/Type: string
fields
Field names to include in the response; omit to return all fields. Money fields like cpc or traffic_cost include both value and currency.
Supported values: keyword, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, competition_density, results, trends, keyword_difficulty, title, description, url, url_visible, crawled_time, ad_id, traffic_difference, traffic_difference_abs.
Example: keyword,position,volume,cpc
Value/Type: string[]
limit
Maximum number of results to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of positions to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: volume. Money fields sort by their numeric value. When sorting by position_previous, new keywords (value 0) sort last regardless of direction.
Supported values: keyword, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, competition_density, results, keyword_difficulty, title, description, url, url_visible, crawled_time, traffic_difference, traffic_difference_abs.
Example: volume
Value/Type: string
direction
Sort direction: ascending or descending. Default: DESC.
Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
keyword
Keyword that triggered the ad.
Value/Type: string
position
Current ad position in paid results.
Value/Type: integer
position_previous
Ad position in the previous month. Value 0 indicates a new ad (not advertised previously).
Value/Type: integer
position_difference
Change in position: position_previous minus position. Positive values indicate the ad moved up. When position_previous is 0, this is the negative of the current position.
Value/Type: integer
volume
Monthly search volume for the keyword.
Value/Type: integer
block
Ad placement block.
Possible values: TOP, BOTTOM, MIDDLE.
Value/Type: string
cpc
Position cost per click in USD.
cpc
Value/Type: object
value
The numeric amount.
Value/Type: number
Value/Type: object
traffic
Estimated traffic from this keyword.
Value/Type: integer
traffic_percent
Share of keyword traffic in total domain traffic as a percentage (0–100).
Value/Type: number
traffic_cost
Estimated traffic cost in USD.
traffic_cost
Value/Type: object
value
The numeric amount.
Value/Type: number
Value/Type: object
traffic_cost_percent
Share of keyword cost in total domain traffic cost as a percentage (0–100).
Value/Type: number
competition_density
Paid competition intensity (0–100).
Value/Type: number
results
Number of search results for the keyword.
Value/Type: integer
keyword_difficulty
Keyword difficulty score.
Value/Type: integer
title
Title text of the ad.
Value/Type: string
description
Description text of the ad.
Value/Type: string
url
Final URL (landing page) of the ad.
Value/Type: string
url_visible
Display URL shown in the ad.
Value/Type: string
crawled_time
Timestamp of the most recent crawl in which the ad was seen, in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ).
Value/Type: string
ad_id
Unique ad identifier.
Value/Type: string
traffic_difference
Net change in traffic since the previous month.
Value/Type: integer
traffic_difference_abs
Absolute value of traffic change.
Value/Type: integer
trends
Monthly trend data for the keyword as relative index values on a 0–100 scale (for example, 12 months of history).
Value/Type: array
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: cpc > 2.50 AND volume > 100
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
The scope from the request.
Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/keywords/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=cpc > 2.50 AND volume > 100&fields=keyword,position,volume,cpc,traffic"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"url": "example.com",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"filter": "cpc > 2.50 AND volume > 100",
"limit": 10,
"offset": 0
},
"data": [
{
"keyword": "coffee shop",
"position": 3,
"position_previous": 4,
"position_difference": 1,
"volume": 5400,
"block": "TOP",
"cpc": {
"value": 3.25,
"currency": "USD"
},
"traffic": 2150,
"traffic_percent": 12.5,
"traffic_cost": {
"value": 6987.50,
"currency": "USD"
},
"traffic_cost_percent": 15.2
},
{
"keyword": "best coffee beans",
"position": 5,
"position_previous": 0,
"position_difference": -5,
"volume": 1200,
"block": "TOP",
"cpc": {
"value": 2.80,
"currency": "USD"
},
"traffic": 480,
"traffic_percent": 2.8,
"traffic_cost": {
"value": 1344.00,
"currency": "USD"
},
"traffic_cost_percent": 2.9
}
]
}Jump to Get Monthly Paid Search Keywords TotalGet Monthly Paid Search Keywords Total
Price: 10 API units per request
Returns the number of paid keywords matching the same target, month and filter as the Get Monthly Paid Search Keywords endpoint.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. Not all countries have databases for all device types. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE. DESKTOP is available in all countries; MOBILE is available in select countries only.
Value/Type: string
filter
Keywords filter string. For syntax, refer to Advanced filtering. Money fields are filtered by numeric value alone (for example, cpc > 2.50); currency is not part of the filter. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it. Available fields: keyword, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, competition_density, results, keyword_difficulty, title, description, url, url_visible, crawled_time, ad_id, traffic_difference, traffic_difference_abs.
Example: url = "example.com" AND keyword = "example"
Value/Type: string
Response Parameters
data
Total count of paid keywords matching the query.
data
Value/Type: object
total
Total number of matching keywords.
Value/Type: integer
Value/Type: object
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Example: DESKTOP
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: url = \"example.com\" AND keyword = \"example\"
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Echo of the scope applied to the request.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/keywords/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=url%20%3D%20%22example.com%22"{
"data": {
"total": 1523
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "url = \"example.com\"",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
}
}Jump to Get Monthly Paid Search Keywords ChangesGet Monthly Paid Search Keywords Changes
Price: 40 API units per line
Returns how the target’s paid keyword positions changed between the requested month and the month before it: keywords gained, lost, improved, and declined. Narrow the result with change_types; for the plain monthly snapshot use the Get Monthly Paid Search Keywords endpoint.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned. Changes are always computed against the month immediately before it.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Search database device type. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country supports.
Example: DESKTOP
Value/Type: string
change_types
Position change types to include. Default: NEW, LOST, IMPROVED, DECLINED. Add UNCHANGED to also get keywords advertised at the same position in both months. Note: for LOST keywords (no longer advertised), position and position_difference are empty. Supported values: DECLINED, IMPROVED, LOST, NEW, UNCHANGED.
Example: IMPROVED,DECLINED
Value/Type: string[]
filter
Filter string. For syntax, refer to Advanced filtering. Money fields are filtered by numeric value only (for example, cpc > 2.50); currency is never part of the filter. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it. The change_type field accepts quoted value names like "NEW", never numeric IDs. Available fields: keyword, change_type, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, competition_density, results, keyword_difficulty, title, description, url, url_visible, ad_id, crawled_time.
Example: change_type = "IMPROVED" AND volume > 100
Value/Type: string
fields
Response fields to include. All fields are returned if not specified. Money fields like cpc or traffic_cost return the entire value-currency pair, not a bare number. Supported values: keyword, change_type, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, competition_density, results, trends, keyword_difficulty, title, description, url, url_visible, ad_id, crawled_time.
Example: keyword,position,volume,cpc,traffic
Value/Type: string[]
limit
Maximum number of position changes to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Example: 100
Value/Type: integer
offset
Number of position changes to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000.
Example: 0
Value/Type: integer
order_by
Field to sort by. Default: position_difference. Money fields sort by numeric value. Rows without the sorted value (LOST keywords when sorting by position, NEW keywords when sorting by position_previous) sort last. Supported values: keyword, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, competition_density, results, keyword_difficulty, title, description, url, url_visible, crawled_time.
Example: position_difference
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
data
Array of keyword position changes.
Value/Type: array
keyword
Keyword that triggered the ad.
Value/Type: string
change_type
Type of change of the ad position relative to the previous month. Possible values: NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
position
Ad position in the requested month. Empty for LOST keywords, which are no longer advertised.
Value/Type: integer
position_difference
Change in position: position_previous minus position, positive when the ad moved up. For NEW keywords, the value is minus position. Empty for LOST keywords.
Value/Type: integer
position_previous
Ad position in the previous month. Empty for NEW keywords, which were not advertised then.
Value/Type: integer
block
Ad placement block. Possible values: TOP, BOTTOM, MIDDLE.
Value/Type: string
volume
Monthly search volume.
Value/Type: integer
cpc
Cost per click, in USD.
cpc
Value/Type:
value
Amount in the specified currency.
Value/Type: number
Value/Type: object
traffic
Estimated traffic from this keyword.
Value/Type: integer
traffic_percent
Share of keyword traffic in total domain traffic as a percentage (0–100).
Value/Type: number
traffic_cost
Estimated traffic cost, in USD.
traffic_cost
Value/Type:
value
Amount in USD.
Value/Type: number
Value/Type: object
traffic_cost_percent
Share of keyword’s cost in total domain traffic cost as a percentage (0–100).
Value/Type: number
traffic_difference
Net change in traffic relative to the previous month.
Value/Type: integer
traffic_difference_abs
Absolute value of the traffic change.
Value/Type: integer
competition_density
Paid competition intensity (0–100).
Value/Type: number
results
Number of search results for the keyword.
Value/Type: integer
keyword_difficulty
Keyword difficulty score.
Value/Type: integer
title
Title of the ad shown.
Value/Type: string
description
Ad description text.
Value/Type: string
url
Final URL (landing page) of the ad.
Value/Type: string
url_visible
Display (visible) URL shown in the ad.
Value/Type: string
ad_id
Unique ad identifier.
Value/Type: string
crawled_time
Timestamp of the most recent crawl in which the advertisement was seen, in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ).
Value/Type: string
trends
Monthly trend data for the keyword (for example, 12 months). Each value is a relative index on a 0–100 scale.
Value/Type: array
meta
Response metadata.
Value/Type: object
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request succeeded.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
change_types
Position change types included in the response: either the requested change_types or the default [NEW, LOST, IMPROVED, DECLINED].
Value/Type: string[]
filter
Filter expression passed in the request, if any.
- no need for extra Device type of the search database, for example, DESKTOP.
Value/Type: string
limit
Maximum number of results requested.
Value/Type: integer
offset
Number of results skipped.
Value/Type: integer
order_by
The field used for sorting.
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/keywords/changes/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&change_types=IMPROVED,DECLINED&filter=change_type%20%3D%20%22IMPROVED%22%20AND%20volume%20%3E%20100&limit=10&offset=0&order_by=position_difference&direction=DESC"{
"data": [
{
"keyword": "marketing automation software",
"change_type": "IMPROVED",
"position": 3,
"position_difference": 2,
"position_previous": 5,
"block": "TOP",
"volume": 450,
"cpc": {
"value": 12.50,
"currency": "USD"
},
"traffic": 890,
"traffic_percent": 2.3,
"traffic_cost": {
"value": 11125.00,
"currency": "USD"
},
"traffic_cost_percent": 3.1,
"traffic_difference": 120,
"traffic_difference_abs": 120,
"competition_density": 85,
"results": 1250000,
"keyword_difficulty": 72,
"title": "Marketing Automation Platform | Company",
"description": "Streamline your marketing with our automation tools",
"url": "https://example.com/marketing-automation",
"url_visible": "example.com/marketing-automation",
"ad_id": "1234567890",
"crawled_time": "2024-12-15T09:30:00Z",
"trends": [45, 48, 52, 55, 58, 62, 65, 68, 70, 72, 74, 75]
},
{
"keyword": "best marketing tools",
"change_type": "DECLINED",
"position": 7,
"position_difference": -2,
"position_previous": 5,
"block": "TOP",
"volume": 320,
"cpc": {
"value": 8.75,
"currency": "USD"
},
"traffic": 520,
"traffic_percent": 1.8,
"traffic_cost": {
"value": 4550.00,
"currency": "USD"
},
"traffic_cost_percent": 1.3,
"traffic_difference": -85,
"traffic_difference_abs": 85,
"competition_density": 92,
"results": 2100000,
"keyword_difficulty": 68,
"title": "Marketing Tools Review | Company",
"description": "Compare the top marketing tools for your business",
"url": "https://example.com/marketing-tools",
"url_visible": "example.com/marketing-tools",
"ad_id": "0987654321",
"crawled_time": "2024-12-14T14:15:00Z",
"trends": [38, 40, 42, 44, 45, 46, 45, 44, 43, 42, 41, 40]
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"url": "example.com",
"effective_url": "https://example.com",
"scope": "ROOT_DOMAIN",
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"change_types": ["IMPROVED", "DECLINED"],
"filter": "change_type = \"IMPROVED\" AND volume > 100",
"limit": 10,
"offset": 0,
"order_by": "position_difference"
}
}Jump to Get Monthly Paid Search Keywords Changes TotalGet Monthly Paid Search Keywords Changes Total
Price: 10 API units per request
Returns the total number of paid keyword changes matching the same target, month, change_types, and filter as the Get Monthly Paid Search Keywords Changes endpoint.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length of the target URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Which part of the target URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned. Changes are always computed against the month immediately before it.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
change_types
Types of position changes to return. Default: NEW, LOST, IMPROVED, DECLINED, that is, every keyword whose paid position actually changed. Add UNCHANGED to also get keywords that were advertised at the same position in both months. Supported values: DECLINED, IMPROVED, LOST, NEW, UNCHANGED.
Value/Type: string[]
filter
Position changes filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, change_type, position, position_difference, position_previous, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, traffic_difference, traffic_difference_abs, competition_density, results, keyword_difficulty, title, description, url, url_visible, ad_id, crawled_time. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it. The change_type field accepts Position.ChangeType value names as quoted strings, never numeric IDs.
Example: change_type = "NEW" AND volume > 1000
Value/Type: string
Response Parameters
total
Total number of matching position changes.
Value/Type: integer
meta
Response metadata.
Value/Type: object
change_types
Types of position changes the response was built from: the requested change_types, or NEW, LOST, IMPROVED, DECLINED when the request omitted them. Possible values: DECLINED, IMPROVED, LOST, NEW, UNCHANGED.
Value/Type: string[]
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: change_type = \"NEW\" AND volume > 1000
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/keywords/changes/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&change_types=DECLINED,IMPROVED,LOST&filter=change_type = \"NEW\" AND volume > 1000"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"change_types": ["DECLINED", "IMPROVED", "LOST"],
"filter": "change_type = \"NEW\" AND volume > 1000"
},
"data": {
"total": 427
}
}Jump to Get Monthly Paid Search PagesGet Monthly Paid Search Pages
Price: 20 API units per line
Returns the pages the target advertised in paid search in the requested month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, case-insensitive (for example, us or US). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Check the Get Supported Countries endpoint to get supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Pages filter string. For syntax, refer to Advanced filtering. Available fields: url, positions, traffic, traffic_percent.
Example: positions > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: url, positions, traffic, traffic_percent.
Value/Type: string[]
limit
Maximum number of pages to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of pages to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: traffic. Supported values: url, positions, traffic, traffic_percent.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
url
Ranking page URL.
Value/Type: string
positions
Total number of keyword positions for this page.
Value/Type: integer
traffic
Estimated traffic for the page.
Value/Type: integer
traffic_percent
Share of this page’s traffic relative to the domain as a percentage (0–100).
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: positions > 100
Value/Type: string
limit
The maximum number of pages that were requested.
Value/Type: integer
offset
The number of pages skipped before results were returned.
Value/Type: integer
order_by
The field name that results were sorted by (echoed from the request).
Example: traffic
Value/Type: string
request_id
Unique request identifier.
Example: 4fb1773ec2a8d61a0407f464599f897c
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/pages/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=positions%20%3E%20100&fields=url,positions,traffic,traffic_percent&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "positions > 100",
"limit": 10,
"month": "2024-12",
"offset": 0,
"order_by": "traffic",
"scope": "ROOT_DOMAIN",
"url": "example.com"
},
"data": [
{
"url": "https://example.com/products",
"positions": 245,
"traffic": 3500,
"traffic_percent": 42.3
},
{
"url": "https://example.com/blog",
"positions": 168,
"traffic": 2100,
"traffic_percent": 25.4
},
{
"url": "https://example.com/solutions",
"positions": 112,
"traffic": 1850,
"traffic_percent": 22.4
}
]
}Jump to Get Monthly Paid Search Pages TotalGet Monthly Paid Search Pages Total
Price: 10 API units per request
Returns the total number of pages the target advertised in a specified month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Determines which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database for the country. MOBILE: mobile search database, not available for all countries.
Example: DESKTOP
Value/Type: string
filter
Pages filter string. For syntax, refer to Advanced filtering. Available fields: url, positions, traffic, traffic_percent.
Example: positions > 10
Value/Type: string
Response Parameters
total
Total number of matching pages.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: positions > 10
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Determines which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/pages/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=positions > 10"{
"data": {
"total": 42
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "positions > 10",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
}
}Jump to Get Monthly Paid Search CompetitorsGet Monthly Paid Search Competitors
Price: 80 API units per line
Returns domains competing with the target for the same paid keywords in the requested month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. Maximum length: 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Not all countries have databases for all device types. Use the Get Supported Countries endpoint to get available country and device type combinations.
Example: US
Value/Type: string
device_typeRequired
Search database type. Supported values: DESKTOP, MOBILE. DESKTOP for desktop search, MOBILE for mobile search (not available for all countries).
Example: DESKTOP
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field such as cpc or a *_traffic_cost selects the whole pair (value and currency), not a bare number. Supported values: domain, competition_density, common_keywords, adwords_positions, adwords_traffic, adwords_traffic_cost, organic_positions.
Value/Type: string[]
limit
Maximum number of competitors to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Example: 10
Value/Type: integer
offset
Number of competitors to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000.
Example: 0
Value/Type: integer
order_by
Field to sort by. Default: common_keywords. Money fields sort by their numeric value. Supported values: domain, competition_density, common_keywords, adwords_positions, adwords_traffic, adwords_traffic_cost, organic_positions.
Example: common_keywords
Value/Type: string
direction
Sort order. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
domain
Competitor’s domain name.
Example: competitor1.com
Value/Type: string
competition_density
Overall competition intensity in paid search (0–100).
Example: 75.5
Value/Type: number
common_keywords
Number of shared keywords between the target and this competitor.
Example: 342
Value/Type: integer
adwords_positions
Number of paid search (AdWords) positions held.
Example: 28
Value/Type: integer
adwords_traffic
Estimated traffic from paid search.
Example: 15000
Value/Type: integer
adwords_traffic_cost
Estimated cost of paid search traffic (in USD).
Value/Type: object
value
The amount in currency units.
Example: 5250.75
Value/Type: number
currency
ISO 4217 currency code. Always USD, regardless of the requested country.
Example: USD
Value/Type: string
organic_positions
Number of organic positions held by the competitor.
Example: 18
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/competitors/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&fields=domain,competition_density,common_keywords,adwords_positions,adwords_traffic&limit=10"{
"data": [
{
"domain": "competitor1.com",
"competition_density": 75.5,
"common_keywords": 342,
"adwords_positions": 28,
"adwords_traffic": 15000,
"adwords_traffic_cost": {
"value": 5250.75,
"currency": "USD"
},
"organic_positions": 18
},
{
"domain": "competitor2.com",
"competition_density": 62.3,
"common_keywords": 287,
"adwords_positions": 15,
"adwords_traffic": 8900,
"adwords_traffic_cost": {
"value": 3120.45,
"currency": "USD"
},
"organic_positions": 25
},
{
"domain": "competitor3.com",
"competition_density": 58.1,
"common_keywords": 201,
"adwords_positions": 22,
"adwords_traffic": 12400,
"adwords_traffic_cost": {
"value": 4680.30,
"currency": "USD"
},
"organic_positions": 12
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"scope": "ROOT_DOMAIN",
"url": "https://example.com",
"month": "2024-12",
"limit": 10,
"offset": 0
}
}Jump to Get Monthly Paid Search Competitors TotalGet Monthly Paid Search Competitors Total
Price: 10 API units per request
Returns the total number of paid search competitors for a specified domain or subdomain in a given month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
The URL level to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is used.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Not all countries support all device types. Use the Get Supported Countries endpoint to check available country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Search database type. Supported values: DESKTOP, MOBILE. Note that not all countries have a mobile database.
Value/Type: string
Response Parameters
data
total
Total number of paid search competitors found for the specified domain and month.
Value/Type: integer
Value/Type: object
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
The URL level used in the request. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request succeeded.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/competitors/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12"{
"data": {
"total": 1234
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
}
}Jump to Get Monthly Paid Search SubdomainsGet Monthly Paid Search Subdomains
Price: 20 API units per line
Returns the target’s subdomains that ran ads in paid search in the requested month.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query. The report is domain-scoped: a URL or a subdomain is reduced to its registered domain.
Example: example.com
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: subdomain, positions, traffic, traffic_percent.
Value/Type: string[]
limit
Maximum number of subdomains to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of subdomains to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Default: traffic. Supported values: subdomain, positions, traffic, traffic_percent.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
subdomain
Subdomain name.
Value/Type: string
positions
Number of adwords positions on the SERP.
Value/Type: integer
traffic
Number of adwords traffic.
Value/Type: integer
traffic_percent
Share of total traffic as a percentage. Supported range: 0 to 100.
Value/Type: number
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: example.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/subdomains/monthly?domain=example.com&country=US&device_type=DESKTOP&month=2024-12&fields=subdomain,positions,traffic&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"domain": "example.com",
"effective_url": "https://example.com",
"month": "2024-12",
"limit": 10,
"offset": 0
},
"data": [
{
"subdomain": "shop.example.com",
"positions": 12,
"traffic": 1250,
"traffic_percent": 35.2
},
{
"subdomain": "blog.example.com",
"positions": 8,
"traffic": 890,
"traffic_percent": 25.1
},
{
"subdomain": "support.example.com",
"positions": 5,
"traffic": 635,
"traffic_percent": 17.9
}
]
}Jump to Get Monthly Paid Search Subdomains TotalGet Monthly Paid Search Subdomains Total
Price: 10 API units per request
Returns the number of the target’s subdomains that ran ads in the requested month.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query. The report is domain-scoped: a URL or a subdomain is reduced to its registered domain.
Example: example.com
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
Response Parameters
total
Total number of subdomains running ads in the specified month.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: example.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/subdomains/monthly/total?domain=example.com&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"domain": "example.com",
"effective_url": "https://example.com",
"month": "2024-12"
},
"data": {
"total": 247
}
}Jump to Get Paid Search CoverageGet Paid Search Coverage
Price: 20 API units per line
Returns a target’s paid search advertising history over a 12-month period, with one entry per keyword showing the ad text, display URLs, and the best ad position reached each month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Not all countries have databases for all device types. Verify country-device availability using the Get Supported Countries endpoint.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database (not available for all countries).
Value/Type: string
filter
Coverage filter. For syntax, refer to Advanced filtering. Money fields are filtered by numeric value only (for example, cpc > 2.50); currency is never part of the filter. Available fields: keyword, coverage_12m, volume, cpc, traffic, url, url_visible, title.
Example: traffic > 100 AND coverage_12m > 50
Value/Type: string
fields
Field names from the response to include. Defaults to all fields. best_positions includes the complete list of per-month best positions. Money fields like cpc include both value and currency. Supported values: keyword, coverage_12m, volume, cpc, traffic, url, url_visible, title, best_positions.
Value/Type: string[]
limit
Maximum number of ads to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of ads to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
direction
Sorting direction for coverage_12m. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
keyword
Keyword that triggered the historical ad.
Value/Type: string
coverage_12m
Share of months the ad was shown over the year (0–100).
Value/Type: number
volume
Monthly search volume for the keyword.
Value/Type: integer
cpc
Estimated cost per click in USD. Contains value (number) and currency (string).
Value/Type: object
traffic
Estimated paid traffic from the keyword.
Value/Type: integer
url
Final URL of the ad.
Value/Type: string
url_visible
Display (visible) URL shown in the ad.
Value/Type: string
title
Ad title shown in the search result.
Value/Type: string
best_positions
List of best ad positions for the keyword throughout the year. Each entry contains month (ISO 8601 format, YYYY-MM) and position (integer).
Value/Type: array
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 100 AND coverage_12m > 50
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Which part of the URL was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/coverage/12-month?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&filter=traffic%20%3E%20100&fields=keyword,coverage_12m,volume,cpc&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"url": "https://example.com",
"scope": "ROOT_DOMAIN",
"limit": 10,
"offset": 0
},
"data": [
{
"keyword": "project management software",
"coverage_12m": 85,
"volume": 18100,
"cpc": {
"value": 12.50,
"currency": "USD"
},
"traffic": 1523,
"url": "https://example.com/products",
"url_visible": "example.com › products",
"title": "Project Management Tools",
"best_positions": [
{
"month": "2024-01",
"position": 2
},
{
"month": "2024-02",
"position": 1
}
]
},
{
"keyword": "collaboration platform",
"coverage_12m": 72,
"volume": 9200,
"cpc": {
"value": 8.75,
"currency": "USD"
},
"traffic": 612,
"url": "https://example.com/features",
"url_visible": "example.com › features",
"title": "Collaboration Features",
"best_positions": [
{
"month": "2024-01",
"position": 3
},
{
"month": "2024-02",
"position": 2
}
]
}
]
}Jump to Get Paid Search Coverage TotalGet Paid Search Coverage Total
Price: 10 API units per request
Returns the number of keywords in the target’s advertising history matching the request.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. Must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (any letter case). The United Kingdom is gb; uk is rejected. A country must have a database for the selected device_type. Use the Get Supported Countries endpoint to get available country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. DESKTOP covers the country’s desktop search database; MOBILE covers mobile search, which not all countries support. Supported values: DESKTOP, MOBILE.
Value/Type: string
filter
Coverage filter string. For syntax, refer to Advanced filtering. Money fields are filtered by numeric value only (currency is not part of the filter). Available fields: keyword, coverage_12m, volume, cpc, traffic, url, url_visible, title.
Example: traffic > 100 AND coverage_12m > 50
Value/Type: string
Response Parameters
total
Total number of matching keywords in the advertising history.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 100 AND coverage_12m > 50
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL to analyze. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/coverage/12-month/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&filter=traffic > 100 AND coverage_12m > 50"{
"data": {
"total": 1250
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "traffic > 100 AND coverage_12m > 50",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
}
}Jump to Get Monthly Paid Search Rankings TrendGet Monthly Paid Search Rankings Trend
Price: 20 API units per line
Returns the monthly number of paid positions, broken down by SERP position bucket, plus the traffic and traffic cost behind them, over the requested date range.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://samplesite.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
date_fromRequired
Start date of the range in ISO 8601 format (YYYY-MM).
Example: 2024-01
Value/Type: string
date_toRequired
End date of the range in ISO 8601 format (YYYY-MM).
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: us
Value/Type: string
device_typeRequired
Search database to query. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Rankings filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, block, volume, cpc, traffic, traffic_percent, traffic_cost, traffic_cost_percent, competition_density, results, keyword_difficulty, title, description, url, url_visible, crawled_time, ad_id, traffic_difference, traffic_difference_abs. ad_id is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: traffic > 100
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field such as cpc or a *_traffic_cost selects the whole pair (value and currency), not a bare number. Supported values: month, positions, positions_1_3, positions_4_10, positions_11_inf, traffic, traffic_cost, positions_new, positions_lost, positions_improved, positions_declined.
Value/Type: string[]
Response Parameters
data
List of rankings trend data points. Each object represents a month.
Value/Type: array of objects
data[*]
Monthly paid search rankings trend data point.
Value/Type: object
positions
Total number of paid search positions in the SERP.
Value/Type: integer
positions_1_3
Number of positions ranking 1–3 in the SERP.
Value/Type: integer
positions_4_10
Number of positions ranking 4–10 in the SERP.
Value/Type: integer
positions_11_inf
Number of positions ranking 11 and beyond in the SERP.
Value/Type: integer
positions_new
Number of newly gained positions.
Value/Type: integer
positions_lost
Number of lost positions.
Value/Type: integer
positions_improved
Number of positions with improved rank.
Value/Type: integer
positions_declined
Number of positions with declined rank.
Value/Type: integer
traffic
Estimated number of clicks from paid search.
Value/Type: integer
traffic_cost
Cost of paid search traffic.
Value/Type: object
value
Cost amount.
Value/Type: number
meta
Response metadata.
Value/Type: object
date_from
Start date of the requested range in YYYY-MM format.
Example: 2024-01
Value/Type: string
date_to
End date of the requested range in YYYY-MM format.
Example: 2024-12
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: traffic > 100
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
scope determines which part of the URL will be taken into account. Required. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://samplesite.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/paid-search/rankings/trend/monthly?url=example.com&scope=ROOT_DOMAIN&date_from=2024-01&date_to=2024-12&country=us&device_type=DESKTOP&filter=traffic > 100&fields=month,positions,positions_1_3"{
"data": [
{
"month": "2024-01",
"positions": 45,
"positions_1_3": 12,
"positions_4_10": 18,
"positions_11_inf": 15,
"positions_new": 3,
"positions_lost": 2,
"positions_improved": 5,
"positions_declined": 1,
"traffic": 2450,
"traffic_cost": {
"value": 1275.50,
"currency": "USD"
}
},
{
"month": "2024-02",
"positions": 48,
"positions_1_3": 14,
"positions_4_10": 19,
"positions_11_inf": 15,
"positions_new": 2,
"positions_lost": 1,
"positions_improved": 4,
"positions_declined": 2,
"traffic": 2680,
"traffic_cost": {
"value": 1398.75,
"currency": "USD"
}
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "us",
"device_type": "DESKTOP",
"scope": "ROOT_DOMAIN",
"url": "example.com",
"effective_url": "https://example.com",
"date_from": "2024-01",
"date_to": "2024-12",
"filter": "traffic > 100"
}
}Jump to Get Monthly AdvertisementsGet Monthly Advertisements
Price: 20 API units per line
Returns the list of paid (AdWords) advertisements displayed for the given keyword in the selected month, including their domains, URLs, creatives and placement blocks.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve advertisements for. Required.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: domain, url, url_visible, block, title, description, crawled_time, positions.
Value/Type: string[]
limit
Maximum number of advertisements to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of advertisements to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
Response Parameters
domain
Domain the advertisement leads to.
Value/Type: string
url
Final landing URL of the advertisement: the full address the click resolves to, including scheme, path and any tracking parameters.
Value/Type: string
url_visible
Display URL rendered in the advertisement creative: the shortened, advertiser-configured text shown beneath the title, usually the bare domain or the domain plus a vanity path, and without a scheme.
Value/Type: string
block
Placement block of the advertisement in the SERP. Possible values: TOP, BOTTOM, MIDDLE.
Value/Type: string
title
Title of the advertisement.
Value/Type: string
description
Description of the advertisement.
Value/Type: string
crawled_time
Timestamp of the most recent crawl in which the advertisement was seen, in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ). Each item aggregates every occurrence of the same advertisement, so this is the last observation, not the first one or the crawl time of an individual SERP record. It may predate the requested month.
Value/Type: string
positions
Number of positions the advertisement appeared in.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
Keyword used in the request.
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/advertisements/monthly?keyword=example&country=US&device_type=DESKTOP&month=2024-12&fields=domain,url,url_visible&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": [
{
"domain": "example.com",
"url": "https://www.example.com/products/item123?utm_campaign=sem",
"url_visible": "www.example.com/products",
"block": "TOP",
"title": "Premium Product Offer",
"description": "High-quality items at competitive prices. Shop now and save.",
"crawled_time": "2024-12-15T14:32:00Z",
"positions": 5
},
{
"domain": "competitor.com",
"url": "https://www.competitor.com/deals?source=google_ads",
"url_visible": "www.competitor.com/deals",
"block": "TOP",
"title": "Shop Best Deals Today",
"description": "Exclusive discounts on top brands. Limited time only.",
"crawled_time": "2024-12-14T10:15:00Z",
"positions": 3
},
{
"domain": "shop.example.com",
"url": "https://shop.example.com/sale?promo=holiday2024",
"url_visible": "shop.example.com/sale",
"block": "MIDDLE",
"title": "Holiday Sale Event",
"description": "Get up to 50% off selected items. Free shipping included.",
"crawled_time": "2024-12-13T09:45:00Z",
"positions": 2
}
]
}Jump to Get Monthly Advertisements TotalGet Monthly Advertisements Total
Price: 10 API units per request
Returns the total number of paid advertisements displayed for the given keyword in the selected month.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve advertisements for.
Example: insurance
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). The United Kingdom is gb; uk is rejected. Not all countries support all device types.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Example: DESKTOP
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
Response Parameters
data
total
Value/Type: integer
Total number of paid advertisements.
Value/Type: object
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
The queried keyword.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Example: 200
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/advertisements/monthly/total?keyword=insurance&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"country": "US",
"device_type": "DESKTOP",
"keyword": "insurance",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {
"total": 245
}
}Jump to Get Monthly AdvertisersGet Monthly Advertisers
Price: 80 API units per line
Returns the domains that advertised on the given keyword in the selected month, with the best advertisement position each of them held on that keyword and the creative shown at it. Advertisers are ordered by their total monthly advertising traffic across all keywords in the database, descending.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve the advertisers for. Required.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: domain, traffic, traffic_cost, positions, position, title, description, url, url_visible.
Value/Type: string[]
limit
Maximum number of advertisers to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of advertisers to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
Response Parameters
domain
Domain that advertised on the keyword.
Value/Type: string
position
Best advertisement position the advertiser held on the requested keyword during the month. “Best” means the highest-ranking (numerically lowest) position out of every position the advertiser held on this keyword that month. Ties are resolved in favour of the most recently crawled position.
Value/Type: integer
positions
Number of paid advertisement positions the domain held across all of its keywords in the requested month. Not restricted to the requested keyword. For this keyword, refer to position for this keyword.
Value/Type: integer
traffic
Estimated paid traffic the domain received across all of its keywords in the requested month. Not restricted to the requested keyword.
Value/Type: integer
traffic_cost
Estimated cost of that paid traffic, in USD, on the same scope as traffic. Always USD regardless of the requested country.
traffic_cost
Value/Type: object
value
The amount in whole currency units with a decimal fraction (for example, 12.99).
Value/Type: number
Value/Type: object
title
Title of the advertisement shown at position.
Value/Type: string
description
Description of the advertisement shown at position.
Value/Type: string
url
Final landing URL of the advertisement shown at position, including scheme, path and any tracking parameters.
Value/Type: string
url_visible
Display URL rendered in the advertisement’s creative: the shortened, advertiser-configured text, usually the bare domain or the domain plus a vanity path, without a scheme.
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
Keyword (from request).
Value/Type: string
limit
Maximum number of advertisers returned.
Value/Type: integer
offset
Number of advertisers skipped.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request succeeded.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/advertisers/monthly?keyword=seo+tools&country=US&device_type=DESKTOP&month=2024-12&fields=domain,traffic,traffic_cost,position&limit=10"{
"data": [
{
"domain": "ahrefs.com",
"position": 2,
"positions": 1250,
"traffic": 45230,
"traffic_cost": {
"value": 125750.50,
"currency": "USD"
},
"title": "SEO Tools & Software",
"description": "Rank higher on Google with Ahrefs SEO tools.",
"url": "https://ahrefs.com/?utm_source=google",
"url_visible": "ahrefs.com"
},
{
"domain": "semrush.com",
"position": 1,
"positions": 2150,
"traffic": 87650,
"traffic_cost": {
"value": 245320.75,
"currency": "USD"
},
"title": "SEO & SEM Software for Marketing",
"description": "Grow your online visibility with Semrush tools.",
"url": "https://semrush.com/?utm_source=gads",
"url_visible": "semrush.com"
}
],
"meta": {
"country": "US",
"device_type": "DESKTOP",
"keyword": "seo tools",
"month": "2024-12",
"limit": 10,
"offset": 0,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
}
}Jump to Get Monthly Advertisers TotalGet Monthly Advertisers Total
Price: 10 API units per request
Returns the total number of domains that advertised on the given keyword in the selected month. Counts exactly the advertisers the Get Monthly Advertisers endpoint paginates over for the same month.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve the advertisers for.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
Response Parameters
total
Total number of domains that advertised on the keyword.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
Keyword used in the request.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/advertisers/monthly/total?keyword=iphone&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"keyword": "iphone",
"month": "2024-12"
},
"data": {
"total": 487
}
}Jump to Get Monthly Shopping AdvertisementsGet Monthly Shopping Advertisements
Price: 20 API units per line
Returns a list of distinct shopping advertisements appearing for the target in monthly snapshots.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Defines which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Value/Type: string
countryRequired
Country database code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. Not all countries have databases for every device_type. Check the Get Supported Countries endpoint to find available country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. DESKTOP queries the country’s desktop search database. MOBILE queries the mobile search database (not available for all countries). Supported values: DESKTOP, MOBILE.
Value/Type: string
filter
Filter expression. For syntax, refer to Advanced filtering. Available fields: url, title, positions, price, shop_name, uniq_hash. Filter values use the same units as response fields. The price field filters by numeric value in the country’s currency (for example, price = 12.99). uniq_hash is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it. The url and title conditions cannot be combined with other fields using OR, nor negated together with them. Use AND between the two groups; OR and NOT are supported within either group. Example: url CONTAINS "apple" AND positions > 3.
Example: price > 50 AND shop_name = "Amazon"
Value/Type: string
fields
Field names to include in the response. If omitted, all fields are returned. The price field selects the complete object (value and currency), not a bare number. Supported values: url, image, title, positions, price, shop_name, uniq_hash.
Value/Type: string[]
limit
Maximum number of advertisements to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of advertisements to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
order_by
Field name to sort by. Default: positions. Supported values: positions.
Value/Type: string
direction
Sorting direction: ascending or descending. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
data
Array of shopping advertisements.
Value/Type: object[]
data[*].url
Landing page URL of the product ad.
Value/Type: string
data[*].image
Product image URL shown in the PLA.
Value/Type: string
data[*].title
Product title displayed in the PLA.
Value/Type: string
data[*].positions
Number of keyword positions this advertisement appears in.
Value/Type: integer
data[*].price
Product price as shown in the ad, with its currency.
Value/Type: object
value
The amount in whole currency units with a decimal fraction (for example, 12.99). Not converted across currencies.
Value/Type: number
currency
ISO 4217 currency code (for example, USD, EUR, GBP). Follows the country’s SERP currency.
Value/Type: string
data[*].shop_name
Name of the advertiser or shop.
Value/Type: string
data[*].uniq_hash
Unique advertisement identifier.
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: price > 50 AND shop_name = \"Amazon\"
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Scope used in the request. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=price%20%3E%2050&fields=url,title,positions,price,shop_name"{
"data": [
{
"url": "https://example.com/product/wireless-headphones",
"title": "Premium Wireless Headphones - High Quality Sound",
"positions": 15,
"price": {
"value": 79.99,
"currency": "USD"
},
"shop_name": "Amazon"
},
{
"url": "https://example.com/product/usb-cable",
"title": "Fast Charging USB-C Cable 6ft",
"positions": 8,
"price": {
"value": 12.99,
"currency": "USD"
},
"shop_name": "Best Buy"
}
],
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"url": "https://example.com",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"limit": 100,
"offset": 0,
"filter": "price > 50"
}
}Jump to Get Monthly Shopping Advertisements TotalGet Monthly Shopping Advertisements Total
Price: 10 API units per request
Returns the total number of distinct shopping advertisements displayed for the given URL in the selected month.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length of the URL must not exceed 2,000 characters. Accepts URLs with or without the protocol (https:// or http://).
Example: https://example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). For example, US for the United States, GB for the United Kingdom. The specified country must have a database for the selected device_type. Use the Get Supported Countries endpoint to verify available country and device type combinations.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database. MOBILE: mobile search database; not available for all countries.
Value/Type: string
filter
Filter string. For syntax, refer to Advanced filtering. Available fields: url, title, positions, price, shop_name, uniq_hash. Filter values use the same units as the response fields, without implicit scaling: price filters by the numeric price value in the country’s currency. uniq_hash is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it. The url and title conditions cannot be combined with other fields using OR, nor negated together with them. Use AND between groups (for example, url CONTAINS "seo" AND positions = 3); OR and NOT inside either group are supported (for example, NOT (url CONTAINS "seo" OR title CONTAINS "seo") AND positions = 3).
Example: price = 12.99 AND positions = 3
Value/Type: string
Response Parameters
total
Total number of distinct shopping advertisements found.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: price = 12.99
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Scope used in the request: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, or PAGE.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=price = 12.99"{
"data": {
"total": 45
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "price = 12.99",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "example.com"
}
}Jump to Get Monthly Shopping Advertisements CompetitorsGet Monthly Shopping Advertisements Competitors
Price: 80 API units per line
Returns competing domains ranked by shared PLA (Product Listing Ads) keywords.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query, for example, example.com. Required. The report is domain-scoped: a URL or a subdomain is reduced to its registered domain.
Example: samplesite.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. Supported values: domain, pla_positions, adwords_positions, adwords_traffic, adwords_traffic_cost, common_keywords, competition_density, organic_positions.
Value/Type: string[]
limit
Maximum number of PLA competitors to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of PLA competitors to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Supported values: domain, pla_positions, adwords_positions, adwords_traffic, adwords_traffic_cost, common_keywords, competition_density, organic_positions.
Example: competition_density
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
domain
Competitor’s domain name.
Value/Type: string
pla_positions
Number of PLA positions held by the competitor.
Value/Type: integer
adwords_positions
Number of paid search (AdWords) positions.
Value/Type: integer
adwords_traffic
Estimated traffic from AdWords.
Value/Type: integer
adwords_traffic_cost
Estimated cost of AdWords traffic in USD.
adwords_traffic_cost
Value/Type: object
value
The amount in whole currency units with a decimal fraction (for example, 12.99).
Value/Type: number
Value/Type: object
common_keywords
Number of keywords shared with the target in PLA campaigns.
Value/Type: integer
competition_density
Keyword competition density score in PLA. Range: 0 to 100, with 100 being the most competitive.
Value/Type: number
organic_positions
Number of organic positions for the competitor.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: samplesite.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/competitors/monthly?domain=example.com&country=US&device_type=DESKTOP&month=2024-12&fields=domain,pla_positions,adwords_positions,adwords_traffic&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"domain": "example.com",
"country": "US",
"device_type": "DESKTOP",
"month": "2024-12",
"limit": 10,
"offset": 0,
"effective_url": "https://example.com",
"total": 2
},
"data": [
{
"domain": "competitor1.com",
"pla_positions": 42,
"adwords_positions": 38,
"adwords_traffic": 1250,
"adwords_traffic_cost": {
"value": 3500.75,
"currency": "USD"
},
"common_keywords": 85,
"competition_density": 72.5,
"organic_positions": 156
},
{
"domain": "competitor2.com",
"pla_positions": 35,
"adwords_positions": 32,
"adwords_traffic": 890,
"adwords_traffic_cost": {
"value": 2145.50,
"currency": "USD"
},
"common_keywords": 62,
"competition_density": 58.3,
"organic_positions": 201
}
]
}Jump to Get Monthly Shopping Advertisements Competitors TotalGet Monthly Shopping Advertisements Competitors Total
Price: 10 API units per request
Returns the total number of identified PLA competitors.
Jump to EndpointEndpoint
Query parameters
domainRequired
Root domain to query, for example, example.com. The report is domain-scoped: a URL or a subdomain is reduced to its registered domain.
Example: samplesite.com
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
Response Parameters
total
Total number of identified PLA competitors.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
domain
Requested domain.
Example: samplesite.com
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://samplesite.com
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/competitors/monthly/total?domain=samplesite.com&country=US&device_type=DESKTOP&month=2024-12"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"domain": "samplesite.com",
"effective_url": "https://samplesite.com",
"month": "2024-12"
},
"data": {
"total": 89
}
}Jump to Get Monthly Shopping Advertisements PositionsGet Monthly Shopping Advertisements Positions
Price: 20 API units per line
Returns a list of PLA keywords and positions the target domain appears for in Google Shopping results.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. Required. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: example.com
Value/Type: string
scopeRequired
Which part of the URL to analyze. Required. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case, for example, us. The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
filter
Positions filter string. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone, never by the pair: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, url, position, position_difference, position_previous, volume, cpc, keyword_difficulty, competition_density, price, results, shop_name, title, uniq_hash. Filter values use the same units as the response fields, without implicit scaling: cpc is in USD (cpc > 2.50 means $2.50), competition_density is on 0 to 100, and price filters by the numeric price value in the country’s currency (price > 12.99). uniq_hash is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: keyword = "seo" AND position > 10
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field, price or cpc, selects the whole pair (value and currency), not a bare number. Supported values: keyword, url, position, position_difference, position_previous, volume, cpc, keyword_difficulty, competition_density, image, price, results, shop_name, title, trends, uniq_hash.
Value/Type: string[]
limit
Maximum number of PLA positions to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of PLA positions to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Money fields sort by their numeric value. Default: volume. Advertisements without a previous position sort last in either direction when sorting by position_previous or position_difference. Supported values: keyword, url, position, position_difference, position_previous, volume, cpc, keyword_difficulty, competition_density, price, results, shop_name, title.
Value/Type: string
direction
Sorting direction (ascending or descending). Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
keyword
Keyword that triggered the PLA ad.
Value/Type: string
url
Landing page URL of the ad.
Value/Type: string
position
Current PLA position in the SERP.
Value/Type: integer
position_difference
Change in position: position_previous minus position, positive when the position improved. Absent when there is no previous position.
Value/Type: integer
position_previous
Previous PLA position. Absent when the advertisement had no position in the previous month.
Value/Type: integer
volume
Monthly search volume for the keyword.
Value/Type: integer
cpc
Cost per click of the keyword, in USD (for example 2.50 for $2.50).
Value/Type: object
value
The amount, in whole currency units with a decimal fraction—for example, 12.99, never 1299. Always set.
Value/Type: number
keyword_difficulty
Keyword difficulty score (0–100).
Value/Type: integer
competition_density
Competition level of advertisers bidding on the keyword in paid search (0 to 100, with 100 being the most competitive).
Value/Type: number
image
Product image URL used in the ad.
Value/Type: string
price
Product price as shown in the ad, with its currency.
Value/Type: object
value
The amount, in whole currency units with a decimal fraction—for example, 12.99, never 1299. Always set.
Value/Type: number
currency
ISO 4217 code of the currency value is expressed in. For advertised product prices, this follows the SERP the advertisement was displayed on and therefore the requested country. Always set.
Value/Type: string
results
Number of total results for the keyword.
Value/Type: integer
shop_name
Advertiser or shop name.
Value/Type: string
title
Product title displayed in the PLA.
Value/Type: string
trends
Monthly search volume trend data for the keyword (typically 12 months). Each value is a relative index on a 0 to 100 scale.
Value/Type: integer[]
uniq_hash
Unique PLA identifier.
Value/Type: string
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: keyword = \"seo\" AND position > 10
Value/Type: string
limit
Requested limit.
Value/Type: integer
offset
Requested offset.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
scope
Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/keywords/monthly?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=keyword%20=%20%22seo%22%20AND%20position%20%3E%2010&fields=keyword,url,position,volume,cpc&limit=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"country": "US",
"device_type": "DESKTOP",
"effective_url": "example.com",
"url": "example.com",
"scope": "ROOT_DOMAIN",
"month": "2024-12",
"limit": 10,
"offset": 0
},
"data": [
{
"keyword": "seo services",
"url": "https://www.example.com/seo-services",
"position": 5,
"volume": 12500,
"cpc": {
"value": 15.75,
"currency": "USD"
},
"keyword_difficulty": 62,
"competition_density": 78,
"shop_name": "Example Shop",
"title": "Professional SEO Services",
"results": 2850000000,
"price": {
"value": 99.99,
"currency": "USD"
},
"image": "https://example.com/images/seo-service.jpg",
"trends": [45, 48, 52, 55, 58, 62, 65, 68, 70, 72, 75, 78],
"uniq_hash": "abc123def456ghi789jk"
},
{
"keyword": "search engine optimization",
"url": "https://www.example.com/seo",
"position": 8,
"volume": 9800,
"cpc": {
"value": 12.50,
"currency": "USD"
},
"keyword_difficulty": 55,
"competition_density": 72,
"shop_name": "Example Shop",
"title": "SEO Solutions & Strategies",
"results": 1950000000,
"price": {
"value": 149.99,
"currency": "USD"
},
"image": "https://example.com/images/seo-solutions.jpg",
"trends": [52, 55, 58, 60, 62, 65, 68, 70, 72, 74, 76, 78],
"uniq_hash": "xyz789abc123def456ghi"
}
]
}Jump to Get Monthly Shopping Advertisements Positions TotalGet Monthly Shopping Advertisements Positions Total
Price: 10 API units per request
Returns the total number of the target’s PLA positions (keyword and advertisement pairs); lost positions, which the list omits, are counted.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country without a database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database (not available for all countries).
Value/Type: string
filter
Filter string. For syntax, refer to Advanced filtering. Money fields are filtered by numeric value alone, with currency never part of the filter expression: cpc > 2.50 means USD $2.50. Available fields: keyword, url, position, position_difference, position_previous, volume, cpc, keyword_difficulty, competition_density, price, results, shop_name, title, uniq_hash. Filter values use the same units as the response fields: cpc is in USD, competition_density is 0–100, and price is in the country’s currency. uniq_hash is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: position > 10 AND cpc > 2.50
Value/Type: string
Response Parameters
total
Total number of matching shopping advertisement positions (keyword and advertisement pairs).
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: position > 10 AND cpc > 2.50
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL that was analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/keywords/monthly/total?url=example.com&scope=ROOT_DOMAIN&country=US&device_type=DESKTOP&month=2024-12&filter=position%20%3E%2010%20AND%20cpc%20%3E%202.50"{
"data": {
"total": 1247
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "position > 10 AND cpc > 2.50",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
}
}Jump to Get Monthly Shopping Advertisements Overview TrendGet Monthly Shopping Advertisements Overview Trend
Price: 20 API units per line
Returns the monthly numbers of the target’s PLA positions and distinct ads over time.
Jump to EndpointEndpoint
Query parameters
urlRequired
Target URL to query. The length must not exceed 2,000 characters. Accepts URLs with or without the protocol (https://).
Example: https://example.com
Value/Type: string
scopeRequired
Part of the URL to analyze. Supported values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
date_fromRequired
Start date of the range in ISO 8601 format (YYYY-MM).
Example: 2024-01
Value/Type: string
date_toRequired
End date of the range in ISO 8601 format (YYYY-MM).
Example: 2024-12
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (any letter case), such as us. The United Kingdom is gb; uk is rejected.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE.
Value/Type: string
filter
Filter expression. For syntax, refer to Advanced filtering. A money field is filtered by its numeric value alone: cpc > 2.50, and the currency is never part of a filter. Available fields: keyword, url, position, position_difference, position_previous, volume, cpc, keyword_difficulty, competition_density, price, results, shop_name, title, uniq_hash. Filter values use the same units as the response fields: cpc is in USD, competition_density is on 0 to 100, and price is the numeric price value in the country’s currency. uniq_hash is a string: quote it exactly as returned in the response, and use only the =, !=, and IN operators with it.
Example: position > 5
Value/Type: string
fields
Field names from the response to include. All if nothing is specified. Supported values: month, positions, ads.
Value/Type: string[]
Response Parameters
data
Array of monthly overview trend points.
data[*]
Value/Type:
positions
Total number of target PLA positions in the SERP.
Value/Type: integer
ads
Total number of distinct PLA ads displayed.
Value/Type: integer
Value/Type: object[]
meta
Response metadata.
Value/Type: object
date_from
Start date of the requested range in YYYY-MM format.
Example: 2024-01
Value/Type: string
date_to
End date of the requested range in YYYY-MM format.
Example: 2024-12
Value/Type: string
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
effective_url
Normalized version of the requested URL.
Example: https://example.com
Value/Type: string
filter
Filter expression passed in the request, if any.
Example: position > 5
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
scope
Part of the URL analyzed. Possible values: ROOT_DOMAIN, SUBDOMAIN, SUBFOLDER, PAGE.
Example: ROOT_DOMAIN
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Set to true if the request was successful.
Value/Type: boolean
url
URL as provided in the request.
Example: https://example.com
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/shopping-advertisements/overview/trend/monthly?url=example.com&scope=ROOT_DOMAIN&date_from=2024-01&date_to=2024-12&country=US&device_type=DESKTOP&filter=position%20%3E%205&fields=month,positions,ads"{
"meta": {
"country": "US",
"date_from": "2024-01",
"date_to": "2024-12",
"device_type": "DESKTOP",
"effective_url": "https://example.com",
"filter": "position > 5",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"scope": "ROOT_DOMAIN",
"status_code": 200,
"success": true,
"url": "https://example.com"
},
"data": [
{
"month": "2024-01",
"positions": 45,
"ads": 28
},
{
"month": "2024-02",
"positions": 52,
"ads": 31
},
{
"month": "2024-03",
"positions": 48,
"ads": 29
}
]
}Jump to Get Monthly Shopping Advertisements by KeywordGet Monthly Shopping Advertisements by Keyword
Price: 20 API units per line
Returns the list of shopping advertisements displayed for the given keyword in the selected month, including product titles, prices and shops. These are the ads previously known in the industry as product listing ads (PLA).
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve shopping advertisements for. Required.
Value/Type: string
countryRequired
Country code in ISO 3166-1 Alpha-2 format (case-insensitive). For example, US for the United States, GB for the United Kingdom.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: desktop search database. MOBILE: mobile search database; not available for all countries.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
fields
Field names from the response entity to include in the response. All if nothing is specified. A money field such as price, cpc or a *_traffic_cost selects the whole pair (value and currency), not a bare number. Supported values: domain, url, price, title, shop_name, image, crawled_time, positions.
Value/Type: string[]
limit
Maximum number of shopping advertisements to return. Default: 100. Maximum: 5,000. A value of 0 is rejected. The sum of limit and offset must not exceed 500,000.
Value/Type: integer
offset
Number of shopping advertisements to skip before returning results. Default: 0. The sum of limit and offset must not exceed 500,000; with the default limit of 100, the largest offset is 499,900.
Value/Type: integer
order_by
Field name to sort by. Money fields sort by their numeric value. Default: positions. Supported values: domain, url, price, title, shop_name, crawled_time, positions.
Value/Type: string
direction
Sorting direction. Default: DESC. Supported values: ASC, DESC.
Example: DESC
Value/Type: string
Response Parameters
domain
Domain the advertisement leads to.
Value/Type: string
url
Landing page URL of the product advertisement.
Value/Type: string
price
Product price as shown in the advertisement, with its currency.
Value/Type: object
value
The amount in whole currency units with decimal fraction (for example, 12.99).
Value/Type: number
currency
ISO 4217 currency code (for example, USD, EUR). Follows the country’s SERP currency.
Value/Type: string
title
Product title.
Value/Type: string
shop_name
Name of the advertiser or shop.
Value/Type: string
image
Product image URL.
Value/Type: string
crawled_time
Timestamp of the most recent crawl in which the advertisement was seen, in ISO 8601 format (YYYY-MM-DDThh:mm:ssZ). This is the last observation of the advertisement, not the first, and may predate the requested month.
Value/Type: string
positions
Number of positions the advertisement appeared in.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
Keyword used in the request.
Value/Type: string
limit
Maximum number of items to return, as specified in the request.
Value/Type: integer
offset
Number of items skipped before returning results, as specified in the request.
Value/Type: integer
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/shopping-advertisements/monthly?keyword=running+shoes&country=US&device_type=DESKTOP&month=2024-12&fields=domain,url,price,title&limit=10"{
"meta": {
"country": "US",
"device_type": "DESKTOP",
"keyword": "running shoes",
"limit": 10,
"month": "2024-12",
"offset": 0,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": [
{
"domain": "amazon.com",
"url": "https://amazon.com/s?k=running+shoes",
"price": {
"value": 89.99,
"currency": "USD"
},
"title": "Nike Men's Revolution Running Shoe",
"shop_name": "Amazon",
"image": "https://images.amazon.com/running-shoe.jpg",
"crawled_time": "2024-12-15T10:30:00Z",
"positions": 3
},
{
"domain": "nike.com",
"url": "https://nike.com/running-shoes",
"price": {
"value": 120.00,
"currency": "USD"
},
"title": "Nike Air Zoom Pegasus",
"shop_name": "Nike",
"image": "https://images.nike.com/pegasus.jpg",
"crawled_time": "2024-12-14T14:20:00Z",
"positions": 2
},
{
"domain": "adidas.com",
"url": "https://adidas.com/ultraboost-shoes",
"price": {
"value": 180.00,
"currency": "USD"
},
"title": "Adidas Ultraboost Running Shoe",
"shop_name": "Adidas",
"image": "https://images.adidas.com/ultraboost.jpg",
"crawled_time": "2024-12-13T09:15:00Z",
"positions": 1
}
]
}Jump to Get Monthly Shopping Advertisements by Keyword TotalGet Monthly Shopping Advertisements by Keyword Total
Price: 10 API units per request
Returns the total number of shopping advertisements displayed for the given keyword in the selected month.
Jump to EndpointEndpoint
Query parameters
keywordRequired
Keyword to retrieve shopping advertisements for.
Value/Type: string
countryRequired
Country (database) code in ISO 3166-1 Alpha-2 format, in any letter case (for example, us). The United Kingdom is gb; uk is rejected. A country that has no database for the selected device_type is rejected. Use the Get Supported Countries endpoint to get the supported country and device type pairs.
Example: US
Value/Type: string
device_typeRequired
Device type of the search database. Supported values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
month
Month in ISO 8601 format (YYYY-MM). If omitted, the latest monthly snapshot for the selected country and device_type is returned.
Example: 2024-12
Value/Type: string
Response Parameters
total
Total number of shopping advertisements displayed for the keyword in the selected month.
Value/Type: integer
meta
Response metadata.
Value/Type: object
device_type
Device type of the search database. Possible values: DESKTOP, MOBILE. DESKTOP: the country’s desktop search database. MOBILE: the country’s mobile search database, which not every country has.
Value/Type: string
keyword
The keyword queried.
Value/Type: string
request_id
Unique request identifier.
Value/Type: string
status_code
HTTP status code.
Value/Type: integer
success
Whether the request was successful.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/domain-analytics/v1/keywords/shopping-advertisements/monthly/total?keyword=laptop&country=US&device_type=DESKTOP&month=2024-12"{
"data": {
"total": 145
},
"meta": {
"country": "US",
"device_type": "DESKTOP",
"keyword": "laptop",
"month": "2024-12",
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
}
}Last updated: November 13, 2026