Reference
Jump to Create CampaignCreate Campaign
Price: 100 API units per line
This request creates a Position Tracking campaign in a project. If a project has one or more tracking campaigns, make sure that a combination of its device, location, search engine, and language is different from those in the existing campaigns.
You can use the campaign_id value from the response as the campaign identifier in other Position Tracking API requests.
Billing is based on added_keywords (keywords created after empty values are dropped), same as Add Campaign Keywords.
At most 10,000 keywords per request. This is the maximum batch size for a single request, not a limit on how many keywords the campaign can track.
Jump to EndpointEndpoint
Body parameters
project_idRequired
Semrush project that will own the campaign.
Value/Type: integer
titleRequired
User-defined campaign name.
Value/Type: string
engineRequired
Search engine identifier used by the campaign. Supported values: GOOGLE, BAIDU, BING.
Value/Type: string
deviceRequired
Device preset used for tracking.
Supported values depend on the campaign search engine: GOOGLE supports DESKTOP, MOBILE, and TABLET; BING supports DESKTOP and MOBILE; BAIDU supports DESKTOP only.
Value/Type: string
location_idRequired
Location identifier used for the campaign. Get it from the Lookup Tracking Locations endpoint.
Value/Type: integer
tracking_urlRequired
Primary URL whose rankings are tracked by the campaign. The length must not exceed 2000 characters. The tracking scope is inferred from the URL format:
example.com: Root domain (includes all its subdomains)blog.example.com: Subdomain (includes its own subdomains)example.com/blog/: Subfolder (all pages under the path)https://example.com/blog: Exact page URL
A leading protocol (https://) marks the value as an exact page, so https://example.com is treated as a page URL, not as a root domain.
Value/Type: string
keywords Required
Keywords to track.
Value/Type: object[]
keywordRequired
Keyword text.
Value/Type: string
tags
Tags assigned to this keyword. May be empty when no tags are set. Up to five tags per keyword.
Value/Type: string[]
business_name
Business name used to match the campaign target in local pack or map results when those results list businesses without URLs. If the local pack entry has a URL, matching uses the tracking URL instead.
Value/Type: string
weekly_notification
Whether weekly notifications should be enabled immediately.
Default: true.
Value/Type: boolean
language_code
Target locale for the campaign when the location supports multiple languages.
Language code from Lookup Tracking Locations for the selected location.
Must be an ISO 639-1 two-letter language code (for example, en, de, fr). Macro-regional locales (for example, es-419) use BCP 47 language tags instead.
Example: fr
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
project_id
Project identifier for the project that owns the created campaign.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
data
Created campaign.
Value/Type: object
campaign_id
Campaign identifier to use in subsequent campaign and report requests.
Value/Type: string
added_keywords
Number of keywords billed for this request. Used for tarification to charge API units based on keywords created after empty values are dropped.
Value/Type: integer
curl -X POST "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"project_id": 106669195,
"title": "samplesite.com",
"engine": "GOOGLE",
"device": "DESKTOP",
"location_id": 2124,
"volume_type": "NATIONAL",
"tracking_url": "aloa.com",
"language_code": "fr",
"weekly_notification": true,
"keywords": [
{
"keyword": "seo tools",
"tags": ["brand", "product"]
},
{
"keyword": "position tracking",
"tags": ["product"]
}
]
}'{
"meta": {
"success": true,
"status_code": 200,
"request_id": "776b0a471025ee8d881eedf375e57315",
"project_id": 106669195
},
"data": {
"campaign_id": "106669195_219639",
"added_keywords": 2
}
}Jump to Get Management CampaignGet Management Campaign
Price: 0 API units per request
This request returns the current configuration and basic details of a Position Tracking campaign. Use it to inspect the tracked target, location, device, language, keyword count, and notification status before updating the campaign or requesting reports for it.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
campaign
Campaign configuration and summary.
Value/Type: object
campaign_id
Unique campaign identifier used across campaign and report requests.
Value/Type: string
title
User-defined campaign name.
Value/Type: string
tracking_url
Primary URL whose rankings are tracked in this campaign.
Value/Type: string
tracking_url_type
Scope of the primary URL whose rankings are tracked by the campaign.
Supported values: ROOTDOMAIN, SUBDOMAIN, SUBFOLDER, URL.
Value/Type: string
business_name
Business name used to match the campaign target in local pack or map results when those results list businesses without URLs. If the local pack entry has a URL, matching uses the tracking URL instead.
Value/Type: string
keywords_count
Count of keywords currently tracked in the campaign.
Value/Type: integer
engine
Search engine from which rankings are collected.
Supported values: GOOGLE, BING, BAIDU
Value/Type: string
location
Geographic location and market settings for the campaign.
Value/Type: object
id
Location identifier from the location lookup catalog.
Value/Type: integer
name
Short human-readable label for the location.
Value/Type: string
country_code
ISO 3166-1 alpha-2 country code (for example, us, de).
Value/Type: string
type
Geographic granularity of this location. Example values: country, region, city, state, neighbourhood.
Value/Type: string
device
Device profile emulated when rankings are harvested.
Supported values: DESKTOP, MOBILE, TABLET.
Value/Type: string
language
Locale identifier. Must be an ISO 639-1 two-letter language code (for example, en, de).
Macro-regional locales (for example, es-419) use BCP 47 language tags instead.
Value/Type: string
weekly_notification
Whether the account receives weekly email digests for this campaign.
Value/Type: boolean
created_at
Date when the campaign was created (ISO-8601 YYYY-MM-DD).
Value/Type: string
updated_at
Date when the campaign settings were last updated (ISO-8601 YYYY-MM-DD).
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214"
},
"data": {
"campaign": {
"campaign_id": "2132421_3214",
"title": "samplesite.com",
"tracking_url": "samplesite.com",
"tracking_url_type": "ROOTDOMAIN",
"business_name": "",
"keywords_count": 32,
"engine": "GOOGLE",
"location": {
"id": 2250,
"name": "France",
"country_code": "fr",
"type": "country"
},
"device": "DESKTOP",
"language": "fr",
"weekly_notification": true,
"created_at": "2025-08-03",
"updated_at": "2026-09-07"
}
}
}Jump to Update Management CampaignUpdate Management Campaign
Price: 0 API units per request
This request updates mutable campaign settings for an existing Position Tracking campaign: weekly email notifications, the tracked URL, and the business name. Only the fields explicitly set in the request are updated.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
weekly_notification
Enables or disables weekly email digests with campaign performance statistics.
Value/Type: boolean
tracking_url
New tracking URL for the campaign. The length must not exceed 2000 characters. Domain must be equal to the project’s domain. The tracking scope is inferred from the URL format:
example.com: Root domain (includes all its subdomains)blog.example.com: Subdomain (includes its own subdomains)example.com/blog/: Subfolder (all pages under the path)https://example.com/blog: Exact page URL
A leading protocol (https://) marks the value as an exact page, so https://example.com is treated as a page URL, not as a root domain.
Example: samplesite.com
Value/Type: string
business_name
New business name used to match the campaign target in local pack or map results when those results list businesses without URLs. If the local pack entry has a URL, matching uses the tracking URL instead.
Value/Type: string
curl -X PATCH "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"weekly_notification": true,
"tracking_url": "samplesite.com",
"business_name": "Sample Business"
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Delete Management CampaignDelete Management Campaign
Price: 0 API units per request
This request deletes an existing Position Tracking campaign. Use it when you no longer need the campaign and want to remove it from the project.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Get Campaign Tracking PointsGet Campaign Tracking Points
Price: 0 API units per request
This request returns a list of dates when campaign data was harvested. Use these dates to understand which tracking points are available for the campaign before requesting reports for a specific day or period.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
date_fromRequired
Lower bound for the returned date inventory (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Upper bound for the returned date inventory (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
date_from
Same as the request date_from parameter.
Example: 2026-01-01
Value/Type: string
date_to
Same as the request date_to parameter.
Example: 2026-01-02
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
tracking_points
Dates with collected ranking data. Pass them to report endpoints as interval or snapshot dates.
Value/Type: object[]
date
Harvest date (ISO-8601 YYYY-MM-DD). Use as date_from, date_to, or snapshot dates in report requests.
Example: 2026-01-01
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/tracking-points?date_from=2026-01-01&date_to=2026-01-03"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"date_from": "2026-01-01",
"date_to": "2026-01-03"
},
"data": {
"tracking_points": [
{
"date": "2026-01-01"
},
{
"date": "2026-01-02"
},
{
"date": "2026-01-03"
}
]
}
}Jump to Get CompetitorsGet Competitors
Price: 0 API units per request
This request returns the competitor domains currently configured for the selected tracking campaign. Use it to review the comparison setup before adding, deleting, or replacing campaign competitors.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
competitors
Competitor entries with stable identifiers for later deletion.
Value/Type: object[]
id
Stable competitor identifier used when deleting competitors from a campaign.
Value/Type: string
competitor_url
Competitor URL tracked in comparison reports.
Value/Type: string
competitor_url_type
Supported values: ROOTDOMAIN, SUBDOMAIN, SUBFOLDER, URL
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/competitors"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214"
},
"data": {
"competitors": [
{
"id": "c1",
"competitor_url": "competitor1.com",
"competitor_url_type": "ROOTDOMAIN"
},
{
"id": "c2",
"competitor_url": "competitor2.com",
"competitor_url_type": "ROOTDOMAIN"
}
]
}
}Jump to Add CompetitorsAdd Competitors
Price: 0 API units per request
This request lets you add up to 20 competitor domains to an existing tracking campaign. Added competitors become available in comparison-focused Position Tracking reports. This makes it easier to benchmark the tracked domain against other market players.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
competitors Required
Competitor targets to register for side-by-side comparison in SEO reports.
Value/Type: object[]
competitor_urlRequired
Competitor URL to track. The length must not exceed 2000 characters. The tracking scope is inferred from the URL format:
example.com: Root domain (includes all its subdomains)blog.example.com: Subdomain (includes its own subdomains)example.com/blog/: Subfolder (all pages under the path)https://example.com/blog: Exact page URL
A leading protocol (https://) marks the value as an exact page, so https://example.com is treated as a page URL, not as a root domain.
Value/Type: string
curl -X POST "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/competitors" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"competitors": [
{
"competitor_url": "competitor1.com"
},
{
"competitor_url": "competitor2.com"
}
]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Delete CompetitorsDelete Competitors
Price: 0 API units per request
This request lets you delete competitors from an existing tracking campaign. Use it when the comparison set changes and you no longer want those domains to appear in competitor-related reports for the campaign.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
competitor_idsRequired
Competitor identifiers to delete, as returned by the Get Competitors endpoint.
Value/Type: string[]
curl -X DELETE "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/competitors" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"competitor_ids": ["c1", "c2"]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Get Campaign KeywordsGet Campaign Keywords
Price: 0 API units per request
This request returns the tracked keywords in the selected campaign together with their assigned tags. Use it to review the current keyword set before adding, removing, or regrouping keywords in the campaign.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
keywords
Keywords with attached tags.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
tags
Tags assigned to this keyword. May be empty when no tags are set.
Value/Type: string[]
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {
"keywords": [
{
"keyword": "seo tools",
"tags": ["brand", "product"]
},
{
"keyword": "position tracking",
"tags": ["product"]
}
]
}
}Jump to Add Campaign KeywordsAdd Campaign Keywords
Price: 100 API units per line
This request lets you add keywords to track to an existing tracking campaign and group them with tags. Newly added keywords become part of the campaign’s tracked keyword set and can then be used in Position Tracking reports and tag-based analysis. At most 10,000 keywords per request. This is the maximum batch size for a single request, not a limit on how many keywords the campaign can track.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
keywords Required
Keywords to create together with optional tags.
Value/Type: object[]
keywordRequired
Keyword text.
Value/Type: string
tags
Tags assigned to this keyword. May be empty when no tags are set. Up to five tags per keyword.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
added_keywords
Number of keywords added. Used for tarification to charge API units based on actual data returned.
Value/Type: integer
curl -X POST "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"keywords": [
{
"keyword": "seo tools",
"tags": ["brand", "product"]
},
{
"keyword": "position tracking",
"tags": ["product"]
}
]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {
"added_keywords": 2
}
}Jump to Delete Campaign KeywordsDelete Campaign Keywords
Price: 0 API units per request
This request lets you remove tracked keywords from an existing tracking campaign. Use it when some queries are no longer relevant to the campaign and should no longer be included in tracking, reporting, or billing-sensitive keyword sets. At most 10,000 keywords per request. This is the maximum batch size for a single request, not a limit on how many keywords the campaign can track.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
keywordsRequired
Keywords to remove from the campaign.
Value/Type: string[]
curl -X DELETE "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"keywords": ["seo tools", "position tracking"]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Get Campaign TagsGet Campaign Tags
Price: 0 API units per request
This request returns the tags currently available in the selected tracking campaign. Use it to discover existing keyword tags and reuse them in filtering, reporting, or campaign management flows.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
tags
Distinct tags currently assigned to at least one keyword.
Value/Type: object[]
tag
Tag name used to group keywords in the campaign.
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords/tags"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {
"tags": [
{
"tag": "brand"
},
{
"tag": "product"
}
]
}
}Jump to Add Campaign TagsAdd Campaign Tags
Price: 0 API units per request
This request lets you assign up to five tags to each of your tracked keywords. Use tags to group keywords into logical segments such as brand, product line, or competitor terms. Then reuse those groups in filtering and reporting.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
bindings Required
Tag-to-keywords bindings to create.
Value/Type: object[]
tagRequired
Tag name to create or attach (up to five tags per keyword in a campaign).
Value/Type: string
keywordsRequired
Keywords that should receive this tag.
Value/Type: string[]
curl -X POST "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords/tags" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"bindings": [
{
"tag": "brand",
"keywords": ["seo tools"]
},
{
"tag": "product",
"keywords": ["seo tools", "position tracking"]
}
]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to Delete Campaign TagsDelete Campaign Tags
Price: 0 API units per request
This request lets you delete up to five tags assigned to each of your tracked keywords. Use it when you need to reorganize keyword groups or remove tags that are no longer useful for filtering and reporting. At most 10,000 keywords per request. This is the maximum batch size for a single request, not a limit on how many keywords the campaign can track.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Body parameters
bindings Required
Tag-to-keywords bindings to remove.
Value/Type: object[]
tagRequired
Tag name to detach (up to five tags per keyword in a campaign).
Value/Type: string
keywordsRequired
Keywords that should lose this tag. At most 10,000 keywords per request. This is the maximum batch size for a single request, not a limit on how many keywords the campaign can track.
Value/Type: string[]
curl -X DELETE "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords/tags" \
-H 'Authorization: Apikey YOUR_API_KEY' \
-H 'Content-Type: application/json' \
-d '{
"bindings": [
{
"tag": "brand",
"keywords": ["seo tools"]
},
{
"tag": "product",
"keywords": ["seo tools", "position tracking"]
}
]
}'{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true,
"campaign_id": "2132421_3214"
},
"data": {}
}Jump to List Project CampaignsList Project Campaigns
Price: 0 API units per request
This request returns a list of campaigns in the specified project and basic information about each of them. Use it to discover the campaigns available in the project before requesting campaign details or reports.
Jump to EndpointEndpoint
Query parameters
project_id
Optional project ID filter. If provided, returns campaigns from this project only. If omitted, returns all campaigns available to the requester.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
campaigns
Campaigns currently linked to the project.
Value/Type: object[]
campaign_id
Unique campaign identifier used across campaign and report requests.
Value/Type: string
title
User-defined campaign name.
Value/Type: string
tracking_url
Primary URL whose rankings are tracked in this campaign.
Value/Type: string
tracking_url_type
Scope of the primary URL whose rankings are tracked by the campaign.
Supported values: ROOTDOMAIN, SUBDOMAIN, SUBFOLDER, URL.
Value/Type: string
business_name
Business name used to match the campaign target in local pack or map results when those results list businesses without URLs. If the local pack entry has a URL, matching uses the tracking URL instead.
Value/Type: string
keywords_count
Count of keywords currently tracked in the campaign.
Value/Type: integer
engine
Search engine from which rankings are collected.
Supported values: GOOGLE, BING, BAIDU.
Value/Type: string
location
Geographic location and market settings for the campaign.
Value/Type: object
id
Location identifier from the location lookup catalog.
Value/Type: integer
name
Short human-readable label for the location.
Value/Type: string
country_code
ISO 3166-1 alpha-2 country code (for example, us, de).
Value/Type: string
type
Geographic granularity of this location. Example values: country, region, city, state, neighbourhood.
Value/Type: string
device
Device profile emulated when rankings are harvested.
Supported values: DESKTOP, MOBILE, TABLET.
Value/Type: string
language
Locale identifier. Must be an ISO 639-1 two-letter language code (for example, en, de).
Macro-regional locales (for example, es-419) use BCP 47 language tags instead.
Value/Type: string
weekly_notification
Whether the account receives weekly email digests for this campaign.
Value/Type: boolean
created_at
Date when the campaign was created (ISO-8601 YYYY-MM-DD).
Value/Type: string
updated_at
Date when the campaign settings were last updated (ISO-8601 YYYY-MM-DD).
Value/Type: string
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns?project_id=10"{
"meta": {
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"status_code": 200,
"success": true
},
"data": {
"campaigns": [
{
"campaign_id": "2132421_3214",
"title": "samplesite.com",
"tracking_url": "samplesite.com",
"tracking_url_type": "ROOTDOMAIN",
"business_name": "",
"keywords_count": 32,
"engine": "GOOGLE",
"location": {
"id": 2250,
"name": "France",
"country_code": "fr",
"type": "country"
},
"device": "DESKTOP",
"language": "fr",
"weekly_notification": true,
"created_at": "2025-08-03",
"updated_at": "2026-09-07"
},
{
"campaign_id": "2132421_3215",
"title": "samplesite.com",
"tracking_url": "samplesite.com",
"tracking_url_type": "ROOTDOMAIN",
"business_name": "",
"keywords_count": 32,
"engine": "GOOGLE",
"location": {
"id": 2250,
"name": "France",
"country_code": "fr",
"type": "country"
},
"device": "MOBILE",
"language": "fr",
"weekly_notification": false,
"created_at": "2025-08-03",
"updated_at": "2026-09-07"
}
]
}
}Jump to Lookup Tracking LocationsLookup Tracking Locations
Price: 0 API units per request
This request searches the location catalog used when creating campaigns.
Requires engine (GOOGLE, BING, or BAIDU).
Optional filters: location_id, name, country_code.
Jump to EndpointEndpoint
Query parameters
location_id
Exact Semrush location identifier when you already know the target location.
Value/Type: integer
name
Free-text prefix or substring matched against location names.
Value/Type: string
country_code
ISO 3166-1 alpha-2 country code (for example, us, de) used to narrow the location search.
Value/Type: string
engineRequired
Search engine whose location catalog is queried.
Results include only locations and languages available for this engine.
Supported values: GOOGLE, BAIDU, BING.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
engine
Search engine whose location catalog is queried.
Results include only locations and languages available for this engine.
Supported values: GOOGLE, BAIDU, BING
Value/Type: string
name
Location name filter echoed in the response.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
locations
Candidate locations ordered by relevance to the search criteria.
Value/Type: object[]
id
Location identifier to pass as location_id when creating a campaign.
Value/Type: integer
name
Short human-readable label for the location.
Value/Type: string
canonical_name
Canonical name of the location.
Value/Type: string
parent_id
Parent location in the geographic hierarchy, or 0 for top-level locations.
Value/Type: integer
country_code
ISO 3166-1 alpha-2 country code (for example, us, de).
Value/Type: string
type
Geographic granularity of this location. Example values: country, region, city, state, neighbourhood.
Value/Type: string
languages
Languages supported for ranking collection in this location.
Value/Type: object[]
language_code
Locale identifier. Must be an ISO 639-1 two-letter language code (for example, en, de). Macro-regional locales (for example, es-419) use BCP 47 language tags instead.
Value/Type: string
name
Display name of the language.
Value/Type: string
is_default
When true, this language is pre-selected if the client does not send language_code.
Value/Type: boolean
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/locations?engine=GOOGLE&name=France&country_code=fr"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"engine": "GOOGLE",
"name": "France"
},
"data": {
"locations": [
{
"id": 2250,
"name": "France",
"canonical_name": "France",
"parent_id": 0,
"country_code": "fr",
"type": "country",
"languages": [
{
"language_code": "fr",
"name": "French",
"is_default": true
},
{
"language_code": "en",
"name": "English",
"is_default": false
}
]
}
]
}
}Jump to Get Seo OverviewGet Seo Overview
Price: 100 API units per line
This request returns the main keyword-level SEO overview report for the selected target. It lists matching keywords together with their current metrics and metric changes across the selected period. The 90-day potential is always included when available. Use dedicated counter endpoints when you need aggregate bucket summaries instead of keyword rows.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the selected target ranks inside any of the listed features.
Mutually exclusive with serp_features, serp_features_exclude, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no ranks-with-SERP-feature filter is applied.
Value/Type: string[]
not_ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the listed features are present on the SERP but the selected target does not rank inside them.
Values are combined with AND.
Mutually exclusive with serp_features, serp_features_exclude, and ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no not-ranks-with-SERP-feature filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to date_from and date_to.
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by.
Supported values: ORDER_BY_KEYWORD, ORDER_BY_VOLUME, ORDER_BY_CPC, ORDER_BY_TRAFFIC, ORDER_BY_TRAFFIC_COST, ORDER_BY_VISIBILITY, ORDER_BY_SHARE_OF_VOICE, ORDER_BY_POSITION.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS, ORDER_DATE_POINT_DAYS_90.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
is_crawled_potential
Whether 90-day potential data is available.
Value/Type: boolean
data
Keyword-level rows for the selected target.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
cpc
Estimated cost per click in USD. Available for Google campaigns only.
Value/Type: number
volume
Average monthly search volume for the keyword at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
keyword_difficulty
Keyword difficulty score on a 0–100 scale.
Value/Type: integer
tags
Tags assigned to this keyword. May be empty when no tags are set.
Value/Type: string[]
intents
Classified search intents for the keyword.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
Value/Type: string[]
created_at
Date when the keyword was added to the campaign (ISO-8601 YYYY-MM-DD).
Value/Type: string
tracking_points
Per-date observations for the selected target across the requested interval.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
is_crawled
Whether rankings were successfully collected for this keyword on this date.
Value/Type: boolean
position
Organic ranking position of the selected target (1 is the top result).
Value/Type: integer
visibility
Visibility score for the selected target on this date (0–100).
Value/Type: number
share_of_voice
Share of voice for the selected target on this date, when available for the subscription. Available for Google campaigns only.
Value/Type: number
traffic
Estimated organic traffic driven by this keyword on this date. Available for Google campaigns only.
Value/Type: number
traffic_cost
Estimated traffic cost equivalent on this date. Available for Google campaigns only.
Value/Type: number
url
Landing page URL that ranks for the selected target on this date.
Value/Type: string
serp_page_features
SERP feature blocks present anywhere on the results page for this keyword and date.
Value/Type: string[]
serp_features
SERP feature blocks where the selected target has a ranking for this keyword and date.
Value/Type: string[]
diff
Metric changes between the first and last tracking points in this row.
Value/Type: object
position
Position change: begin-date position minus end-date position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
visibility
Visibility change: end-date value minus begin-date value.
Value/Type: number
share_of_voice
Share-of-voice change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
traffic_cost
Traffic-cost change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
potential
90-day potential for the selected target. Omitted when potential data has not been crawled.
Value/Type: object
date
90-day potential date (ISO-8601 YYYY-MM-DD).
Value/Type: string
position
Potential organic ranking position of the selected target (1 is the top result).
Value/Type: integer
visibility
Potential visibility score for the selected target (0–100).
Value/Type: number
traffic
Potential estimated traffic. Available for Google campaigns only.
Value/Type: number
traffic_cost
Potential estimated traffic cost. Available for Google campaigns only.
Value/Type: number
diff
Metric movement from the latest real tracking point to the 90-day potential.
Value/Type: object
position
Position change: latest real tracking-point position minus potential position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
visibility
Visibility change: potential value minus latest real tracking-point value.
Value/Type: number
share_of_voice
Share-of-voice change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
traffic
Traffic change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
traffic_cost
Traffic-cost change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"is_crawled_volumes_cpc": true,
"is_crawled_potential": true,
"limit": 10,
"offset": 0,
"total": 2
},
"data": [
{
"keyword": "seo tools",
"cpc": 2.45,
"volume": 1200,
"keyword_difficulty": 48,
"tags": [
"product"
],
"intents": [
"COMMERCIAL",
"INFORMATIONAL"
],
"created_at": "2025-08-03",
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 8,
"visibility": 6.2,
"share_of_voice": 4.1,
"traffic": 180,
"traffic_cost": 441,
"url": "https://samplesite.com/seo-tools",
"serp_page_features": [
"ORG",
"FEATURED_SNIPPET"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 5,
"visibility": 8.5,
"share_of_voice": 5.8,
"traffic": 240,
"traffic_cost": 588,
"url": "https://samplesite.com/seo-tools",
"serp_page_features": [
"ORG",
"FEATURED_SNIPPET"
],
"serp_features": [
"ORG",
"FEATURED_SNIPPET"
]
}
],
"diff": {
"position": 3,
"visibility": 2.3,
"share_of_voice": 1.7,
"traffic": 60,
"traffic_cost": 147
},
"potential": {
"date": "2026-04-02",
"position": 3,
"visibility": 11.2,
"traffic": 310,
"traffic_cost": 760,
"diff": {
"position": 2,
"visibility": 2.7,
"share_of_voice": 1.4,
"traffic": 70,
"traffic_cost": 172
}
}
},
{
"keyword": "position tracking",
"cpc": 1.85,
"volume": 650,
"keyword_difficulty": 36,
"tags": [
"brand"
],
"intents": [
"NAVIGATIONAL"
],
"created_at": "2025-08-03",
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 15,
"visibility": 3.1,
"share_of_voice": 1.4,
"traffic": 42,
"traffic_cost": 78,
"url": "https://samplesite.com/position-tracking",
"serp_page_features": [
"ORG"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 12,
"visibility": 4.2,
"share_of_voice": 2.0,
"traffic": 65,
"traffic_cost": 120,
"url": "https://samplesite.com/position-tracking",
"serp_page_features": [
"ORG"
],
"serp_features": [
"ORG"
]
}
],
"diff": {
"position": 3,
"visibility": 1.1,
"share_of_voice": 0.6,
"traffic": 23,
"traffic_cost": 42
}
}
]
}Jump to Get Seo Overview Serp Feature CountersGet Seo Overview Serp Feature Counters
Price: 10 API units per request
This request returns SERP-feature counters for the same filtered dataset used by the main overview report. Use it to see which SERP features are most common across the selected target’s keyword set without loading keyword-level rows.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to date_from and date_to.
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
SERP-feature aggregate counts for the filtered keyword set.
Value/Type: object[]
feature
SERP feature type being counted.
Value/Type: string
exists
Keywords where the feature is present on the SERP.
Value/Type: integer
does_not_exist
Keywords where the feature is not present on the SERP.
Value/Type: integer
competitor_ranks
Keywords where the competitor specified by target_url AND/OR target_business_name parameter(s) ranks inside the feature block.
Value/Type: integer
competitor_does_not_rank
Keywords where the competitor specified by target_url AND/OR target_business_name parameter(s) doesn’t rank inside the feature block.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/serp-features?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": [
{
"feature": "ORG",
"exists": 145,
"does_not_exist": 5,
"competitor_ranks": 40,
"competitor_does_not_rank": 110
},
{
"feature": "FEATURED_SNIPPET",
"exists": 35,
"does_not_exist": 115,
"competitor_ranks": 12,
"competitor_does_not_rank": 138
}
]
}Jump to Get Seo Overview Top CountersGet Seo Overview Top Counters
Price: 100 API units per request
This request returns top-range counters for the same filtered dataset used by the main overview report. It groups keywords into ranking buckets such as Top 3, Top 10, Top 20, Top 50 and Top 100. It shows how keywords moved between those buckets over the selected period.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to date_from and date_to.
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Movement counters for ranking buckets such as Top 3 or Top 10.
Value/Type: object[]
range
Machine-readable bucket key (for example, top_3, top_10).
Value/Type: string
counter
Movement counters for this bucket.
Value/Type: object
all
Total keywords in the bucket on the end date.
Value/Type: integer
improved
Keywords whose position improved between the begin and end dates.
Value/Type: integer
declined
Keywords whose position declined between the begin and end dates.
Value/Type: integer
unchanged
Keywords whose position stayed in the same bucket.
Value/Type: integer
new
Keywords that newly appeared in the bucket between the begin and end dates.
Value/Type: integer
lost
Keywords that were lost from the bucket between the begin and end dates.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/top?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": [
{
"range": "top_3",
"counter": {
"all": 15,
"improved": 4,
"declined": 2,
"unchanged": 8,
"new": 2,
"lost": 1
}
},
{
"range": "top_10",
"counter": {
"all": 42,
"improved": 8,
"declined": 5,
"unchanged": 24,
"new": 5,
"lost": 3
}
}
]
}Jump to Get Seo Overview Volume CountersGet Seo Overview Volume Counters
Price: 10 API units per request
This request returns search-volume counters for the same filtered dataset used by the main overview report. Use it to understand whether the selected target’s visibility is driven more by low-volume, mid-volume, or high-volume keywords. Available only for Google campaigns. Other search engines return Bad Request.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to date_from and date_to.
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Keyword counts grouped by average monthly search volume.
Value/Type: object
volume_less_10
Keywords with volume from 0 through 10.
Value/Type: integer
volume_11_100
Keywords with volume from 11 through 100.
Value/Type: integer
volume_101_1000
Keywords with volume from 101 through 1,000.
Value/Type: integer
volume_1001_10000
Keywords with volume from 1,001 through 10,000.
Value/Type: integer
volume_10000_plus
Keywords with volume above 10,000.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/volume?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": {
"volume_less_10": 38,
"volume_11_100": 102,
"volume_101_1000": 54,
"volume_1001_10000": 21,
"volume_10000_plus": 8
}
}Jump to Get Seo Overview ExtendedGet Seo Overview Extended
Price: 10 API units per line
This request returns the extended version of the overview report. It provides keyword-level rows with per-date ranking data for the selected target. Use it when you need a more detailed view of ranking movements than the main overview report provides.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the selected target ranks inside any of the listed features.
Mutually exclusive with serp_features, serp_features_exclude, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no ranks-with-SERP-feature filter is applied.
Value/Type: string[]
not_ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the listed features are present on the SERP but the selected target does not rank inside them.
Values are combined with AND.
Mutually exclusive with serp_features, serp_features_exclude, and ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no not-ranks-with-SERP-feature filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to date_from and date_to.
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by.
Supported values: ORDER_BY_KEYWORD, ORDER_BY_VOLUME, ORDER_BY_CPC, ORDER_BY_TRAFFIC, ORDER_BY_TRAFFIC_COST, ORDER_BY_VISIBILITY, ORDER_BY_SHARE_OF_VOICE, ORDER_BY_POSITION.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS, ORDER_DATE_POINT_DAYS_90.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Keyword-level rows for the selected target.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
cpc
Estimated cost per click in USD. Available for Google campaigns only.
Value/Type: number
volume
Average monthly search volume for the keyword at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
keyword_difficulty
Keyword difficulty score on a 0–100 scale.
Value/Type: integer
tags
Tags assigned to this keyword. May be empty when no tags are set.
Value/Type: string[]
intents
Classified search intents for the keyword.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
Value/Type: string[]
created_at
Date when the keyword was added to the campaign (ISO-8601 YYYY-MM-DD).
Value/Type: string
tracking_points
Per-date observations for the selected target across the requested interval.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
is_crawled
Whether rankings were successfully collected for this keyword on this date.
Value/Type: boolean
position
Organic ranking position of the selected target (1 is the top result).
Value/Type: integer
visibility
Visibility score for the selected target on this date (0–100).
Value/Type: number
share_of_voice
Share of voice for the selected target on this date, when available for the subscription. Available for Google campaigns only.
Value/Type: number
traffic
Estimated organic traffic driven by this keyword on this date. Available for Google campaigns only.
Value/Type: number
traffic_cost
Estimated traffic cost equivalent on this date. Available for Google campaigns only.
Value/Type: number
url
Landing page URL that ranks for the selected target on this date.
Value/Type: string
serp_page_features
SERP feature blocks present anywhere on the results page for this keyword and date.
Value/Type: string[]
serp_features
SERP feature blocks where the selected target has a ranking for this keyword and date.
Value/Type: string[]
diff
Metric changes between the first and last tracking points in this row.
Value/Type: object
position
Position change: begin-date position minus end-date position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
visibility
Visibility change: end-date value minus begin-date value.
Value/Type: number
share_of_voice
Share-of-voice change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
traffic_cost
Traffic-cost change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/extended?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&volume_type=NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"volume_type": "NATIONAL",
"limit": 10,
"offset": 0,
"total": 2,
"is_crawled_volumes_cpc": true
},
"data": [
{
"keyword": "seo tools",
"cpc": 2.45,
"volume": 1200,
"keyword_difficulty": 48,
"tags": [
"product"
],
"intents": [
"COMMERCIAL",
"INFORMATIONAL"
],
"created_at": "2025-08-03",
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 8,
"visibility": 6.2,
"share_of_voice": 4.1,
"traffic": 180,
"traffic_cost": 441,
"url": "https://samplesite.com/seo-tools",
"serp_page_features": [
"ORG",
"FEATURED_SNIPPET"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 6,
"visibility": 7.3,
"share_of_voice": 4.9,
"traffic": 210,
"traffic_cost": 514,
"url": "https://samplesite.com/seo-tools",
"serp_page_features": [
"ORG",
"FEATURED_SNIPPET"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-03",
"is_crawled": true,
"position": 5,
"visibility": 8.5,
"share_of_voice": 5.8,
"traffic": 240,
"traffic_cost": 588,
"url": "https://samplesite.com/seo-tools",
"serp_page_features": [
"ORG",
"FEATURED_SNIPPET"
],
"serp_features": [
"ORG",
"FEATURED_SNIPPET"
]
}
],
"diff": {
"position": 3,
"visibility": 2.3,
"share_of_voice": 1.7,
"traffic": 60,
"traffic_cost": 147
}
},
{
"keyword": "position tracking",
"cpc": 1.85,
"volume": 650,
"keyword_difficulty": 36,
"tags": [
"brand"
],
"intents": [
"NAVIGATIONAL"
],
"created_at": "2025-08-03",
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 15,
"visibility": 3.1,
"share_of_voice": 1.4,
"traffic": 42,
"traffic_cost": 78,
"url": "https://samplesite.com/position-tracking",
"serp_page_features": [
"ORG"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 14,
"visibility": 3.7,
"share_of_voice": 1.7,
"traffic": 54,
"traffic_cost": 99,
"url": "https://samplesite.com/position-tracking",
"serp_page_features": [
"ORG"
],
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-03",
"is_crawled": true,
"position": 12,
"visibility": 4.2,
"share_of_voice": 2.0,
"traffic": 65,
"traffic_cost": 120,
"url": "https://samplesite.com/position-tracking",
"serp_page_features": [
"ORG"
],
"serp_features": [
"ORG"
]
}
],
"diff": {
"position": 3,
"visibility": 1.1,
"share_of_voice": 0.6,
"traffic": 23,
"traffic_cost": 42
}
}
]
}Jump to Get Seo Overview TrendGet Seo Overview Trend
Price: 100 API units per request
This request returns the aggregate SEO overview trend for the selected target over time. It shows how the target’s average position, visibility, share of voice, traffic, and traffic cost change across tracking dates. It also returns the 90-day potential: forecasted aggregate metrics that estimate the target’s SEO potential over the next 3 months. Potential is available for Google campaigns only.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
position_filter_date_from
Optional comparison-window start for the position filter (ISO-8601 YYYY-MM-DD).
Use this field when position_min, position_max, or position_filter_mode should be evaluated against a different begin date than the main report interval.
The report can still return trend data for date_from..date_to, while the position filter checks whether a keyword was in the selected position range between position_filter_date_from and position_filter_date_to.
If omitted, date_from is used.
Value/Type: string
position_filter_date_to
Optional comparison-window end for the position filter (ISO-8601 YYYY-MM-DD).
Use this field together with position_filter_date_from when the position filter should compare positions on dates different from the main report interval.
For example, you can return the trend for one interval but keep only keywords that entered, left, improved, declined, or stayed within the selected position range between position_filter_date_from and position_filter_date_to.
If omitted, date_to is used.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
keyword_difficulty_min
Minimum keyword difficulty score, inclusive. If omitted, no lower keyword difficulty bound is applied.
Value/Type: integer
keyword_difficulty_max
Maximum keyword difficulty score, inclusive. If omitted, no upper keyword difficulty bound is applied.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features, ranks_with_serp_feature, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the selected target ranks inside any of the listed features.
Mutually exclusive with serp_features, serp_features_exclude, and not_ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no ranks-with-SERP-feature filter is applied.
Value/Type: string[]
not_ranks_with_serp_feature
Comma-separated list of SERP features.
A keyword is included if the listed features are present on the SERP but the selected target does not rank inside them.
Values are combined with AND.
Mutually exclusive with serp_features, serp_features_exclude, and ranks_with_serp_feature.
If more than one of these four parameters is provided, the first filled value is used in this order:
serp_features, serp_features_exclude, ranks_with_serp_feature, not_ranks_with_serp_feature.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no not-ranks-with-SERP-feature filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive, for the position filter.
Together with position_max, this defines the position range checked on the comparison window selected by position_filter_date_from and position_filter_date_to.
If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive, for the position filter.
The allowed upper bound depends on the campaign search engine and report channel.
Together with position_min, this defines the position range checked on the comparison window selected by position_filter_date_from and position_filter_date_to.
If omitted, no upper position bound is applied.
Value/Type: integer
position_filter_mode
Selects which keywords pass the position_min/position_max range relative to the comparison window (position_filter_date_from/position_filter_date_to, which default to date_from/date_to).
ALL: end-date position is in range. NEW/LOST: entered or left the range in the interval.
IMPROVED/DECLINED/UNCHANGED: position change in the interval.
Default: ALL when position_min or position_max is set and position_filter_mode is omitted.
Supported values: ALL, NEW, LOST, IMPROVED, DECLINED, UNCHANGED.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
is_crawled_potential
Whether 90-day potential data is available.
Value/Type: boolean
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Actual metrics and the 90-day potential for the selected target.
Value/Type: object
tracking_points
Actual aggregate metrics by tracking date.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
average_position
Average target position.
Value/Type: number
absolute_visibility
Absolute visibility score.
Value/Type: number
visibility
Visibility score.
Value/Type: number
traffic
Estimated traffic. Available for Google campaigns only.
Value/Type: number
traffic_cost
Estimated traffic cost. Available for Google campaigns only.
Value/Type: number
share_of_voice
Share-of-voice score. Available for Google campaigns only.
Value/Type: number
potential
Forecasted aggregate metrics for the selected target. Estimates SEO potential (position, visibility, traffic, and related metrics) about 3 months ahead of the latest tracking data. Available for Google campaigns only. Omitted when potential data is not available.
Value/Type: object
date
90-day potential date (ISO-8601 YYYY-MM-DD).
Value/Type: string
average_position
Average potential target position.
Value/Type: number
absolute_visibility
Absolute potential visibility score.
Value/Type: number
visibility
Potential visibility score for the selected target (0–100).
Value/Type: number
traffic
Potential estimated traffic. Available for Google campaigns only.
Value/Type: number
traffic_cost
Potential estimated traffic cost. Available for Google campaigns only.
Value/Type: number
diff
Metric movement from the latest real tracking point to the 90-day potential.
Value/Type: object
position
Position change: latest real tracking-point position minus potential position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
visibility
Visibility change: potential value minus latest real tracking-point value.
Value/Type: number
share_of_voice
Share-of-voice change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
traffic
Traffic change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
traffic_cost
Traffic-cost change: potential value minus latest real tracking-point value. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"total": 3,
"volume_type": "NATIONAL",
"is_crawled_volumes_cpc": true,
"is_crawled_potential": true
},
"data": {
"tracking_points": [
{
"date": "2026-01-01",
"average_position": 8.5,
"absolute_visibility": 6.2,
"visibility": 6.2,
"traffic": 450,
"traffic_cost": 892,
"share_of_voice": 4.8
},
{
"date": "2026-01-02",
"average_position": 7.7,
"absolute_visibility": 7.2,
"visibility": 7.2,
"traffic": 515,
"traffic_cost": 1021,
"share_of_voice": 5.2
},
{
"date": "2026-01-03",
"average_position": 6.8,
"absolute_visibility": 8.1,
"visibility": 8.1,
"traffic": 580,
"traffic_cost": 1150,
"share_of_voice": 5.6
}
],
"potential": {
"date": "2026-04-03",
"average_position": 5.9,
"absolute_visibility": 9.4,
"visibility": 9.4,
"traffic": 665,
"traffic_cost": 1320,
"diff": {
"visibility": 1.3,
"traffic": 85,
"traffic_cost": 170
}
}
}
}Jump to Get Seo Multi OverviewGet Seo Multi Overview
Price: 10 API units per line
This request compares keyword positions across multiple tracking campaigns over the same period. Use it to analyze how the same keyword set performs across different targets, devices, or locations and to compare one main campaign against other campaigns in the project.
Billing is 10 API units per line. For this endpoint, one line is one entry in a keyword’s campaign_occurrences list.
The number of billable lines is the total number of campaign occurrences across all returned keywords.
Example: if the response contains one keyword with 2 campaign occurrences and another with 3, the request is billed as 5 lines (50 API units).
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type_selector
Rule used to choose the search volume level for each compared campaign. Supported values:
VOLUME_TYPE_SELECTOR_NATIONAL: country-level volume for every campaign;VOLUME_TYPE_SELECTOR_FROM_TARGET_SETTINGS: volume level configured in each campaign’s settings;VOLUME_TYPE_SELECTOR_MOST_LOCAL_AVAILABLE: the most local volume level available for each campaign’s location.
If omitted, VOLUME_TYPE_SELECTOR_FROM_TARGET_SETTINGS is used.
Applies to Google campaigns only.
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
compared_campaign_ids
Additional campaign IDs to compare against the main campaign. When omitted, all targets in the project are included.
Example: 735878_89,8976983476
Value/Type: string[]
primary_target_campaign_id
Target campaign ID that should be treated as the main comparison target.
Example: 2132421_3214
Value/Type: string
keyword_intersection_type
Keyword intersection type across all selected targets. Default: KEYWORD_INTERSECTION_TYPE_ALL.
Supported values: KEYWORD_INTERSECTION_TYPE_ALL, KEYWORD_INTERSECTION_TYPE_SHARED, KEYWORD_INTERSECTION_TYPE_NOT_IN_MAIN, KEYWORD_INTERSECTION_TYPE_ONLY_IN_MAIN.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
serp_features
Comma-separated list of SERP features.
A keyword is included if its SERP contains any of the listed features.
Mutually exclusive with serp_features_exclude.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
serp_features_exclude
Comma-separated list of SERP features.
A keyword is excluded if its SERP contains any of the listed features.
Mutually exclusive with serp_features.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by.
Supported values: ORDER_BY_KEYWORD, ORDER_BY_VOLUME, ORDER_BY_CPC, ORDER_BY_POSITION.
If omitted, the default report sort is used.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF.
Value/Type: string
order_target_index
Target index in the compared_campaign_ids array.
Example: 0
Value/Type: integer
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type_selector
Same as the request volume_type_selector parameter.
Value/Type: string
data
Keyword-level comparison rows across target campaigns.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
campaign_occurrences
Campaigns where this keyword exists.
Value/Type: object[]
campaign_id
Campaign ID where this keyword exists.
Value/Type: string
created_at
Date when the keyword was added to the campaign (ISO-8601 YYYY-MM-DD).
Value/Type: string
targets
Compared target campaign data.
Value/Type: object[]
target_campaign_id
Compared target campaign ID.
Value/Type: string
volume
Average monthly search volume for this keyword in the target campaign context. Available for Google campaigns only.
Value/Type: integer
cpc
Estimated cost per click in USD. Available for Google campaigns only.
Value/Type: number
tracking_points
Begin and end observations for this target campaign.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
is_crawled
Whether rankings were successfully collected for this keyword on this date.
Value/Type: boolean
position
Target position.
Value/Type: integer
url
Ranking URL.
Value/Type: string
serp_features
SERP feature blocks where the selected target has a ranking for this keyword and date.
Value/Type: string[]
diff
Movement between begin and end tracking points.
Value/Type: object
position
Position change: begin-date position minus end-date position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/overview/targets?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type_selector=VOLUME_TYPE_SELECTOR_NATIONAL&target_url=*.samplesite.com%2F*&target_business_name=Sample%20Business&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type_selector": "VOLUME_TYPE_SELECTOR_NATIONAL",
"limit": 10,
"offset": 0,
"total": 1
},
"data": [
{
"keyword": "seo tools",
"campaign_occurrences": [
{
"campaign_id": "2132421_3214",
"created_at": "2025-08-03"
},
{
"campaign_id": "735878_89",
"created_at": "2026-07-12"
}
],
"targets": [
{
"target_campaign_id": "2132421_3214",
"volume": 1200,
"cpc": 2.45,
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 8,
"url": "https://samplesite.com/seo-tools",
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 5,
"url": "https://samplesite.com/seo-tools",
"serp_features": [
"ORG",
"FEATURED_SNIPPET"
]
}
],
"diff": {
"position": 3
}
},
{
"target_campaign_id": "735878_89",
"volume": 1200,
"cpc": 2.45,
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 12,
"url": "https://competitor.com/seo-tools",
"serp_features": [
"ORG"
]
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 9,
"url": "https://competitor.com/seo-tools",
"serp_features": [
"ORG"
]
}
],
"diff": {
"position": 3
}
}
]
}
]
}Jump to Get Seo Rankings DistributionGet Seo Rankings Distribution
Price: 20 API units per request
This request returns the rankings distribution for the selected target. It shows how many tracked keywords fall into ranking buckets such as Top 3, Top 10, Top 20, and Top 50 (plus Top 100 for Google), together with visibility, traffic, share of voice, and bucket-level changes across the selected period. Available buckets depend on the campaign search engine.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by. Default: ORDER_BY_VISIBILITY.
Supported values: ORDER_BY_SHARE_OF_VOICE, ORDER_BY_VISIBILITY, ORDER_BY_TRAFFIC, ORDER_BY_TOP3, ORDER_BY_TOP10, ORDER_BY_TOP20, ORDER_BY_TOP50, ORDER_BY_TOP100.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_top_segment
Top bucket used for sorting. Default: ORDER_TOP_SEGMENT_ALL.
Supported values: ORDER_TOP_SEGMENT_ALL, ORDER_TOP_SEGMENT_IMPROVED, ORDER_TOP_SEGMENT_DECLINED, ORDER_TOP_SEGMENT_NEW, ORDER_TOP_SEGMENT_LOST.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Ranking distribution for the selected compared target.
Value/Type: object
date
Snapshot date represented by this row (the end date of the compared interval, ISO-8601 YYYY-MM-DD).
Value/Type: string
volume
Sum of average monthly search volumes for keywords attributed to the compared target, at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
visibility
Visibility score on the end date.
Value/Type: number
visibility_diff
Visibility change: end-date value minus begin-date value.
Value/Type: number
share_of_voice
Share-of-voice score on the end date, when available for the subscription. Available for Google campaigns only.
Value/Type: number
share_of_voice_diff
Share-of-voice change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
estimated_traffic
Estimated traffic on the end date.
Value/Type: number
estimated_traffic_diff
Estimated traffic change: end-date value minus begin-date value.
Value/Type: number
buckets
Ranking distribution buckets for this compared target. Available buckets depend on the campaign search engine:
top_3, top_10, top_20, top_50, top_100top_3, top_10, top_20, top_50Value/Type: object
top_3
Counts for the Top 3 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the end date.
Value/Type: integer
difference_count
Bucket size change: end-date value minus begin-date value.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket.
Value/Type: integer
new_count
Number of keywords that became new in this bucket.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket.
Value/Type: integer
top_10
Counts for the Top 10 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the end date.
Value/Type: integer
difference_count
Bucket size change: end-date value minus begin-date value.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket.
Value/Type: integer
new_count
Number of keywords that became new in this bucket.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket.
Value/Type: integer
top_20
Counts for the Top 20 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the end date.
Value/Type: integer
difference_count
Bucket size change: end-date value minus begin-date value.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket.
Value/Type: integer
new_count
Number of keywords that became new in this bucket.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket.
Value/Type: integer
top_50
Counts for the Top 50 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the end date.
Value/Type: integer
difference_count
Bucket size change: end-date value minus begin-date value.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket.
Value/Type: integer
new_count
Number of keywords that became new in this bucket.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket.
Value/Type: integer
top_100
Counts for the Top 100 bucket. Populated for Google campaigns. Omitted for Bing and Baidu.
Value/Type: object
total_count
Total number of keywords in the bucket on the end date.
Value/Type: integer
difference_count
Bucket size change: end-date value minus begin-date value.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket.
Value/Type: integer
new_count
Number of keywords that became new in this bucket.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/rankings-distribution?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"total": 1,
"is_crawled_volumes_cpc": true
},
"data": {
"date": "2026-01-02",
"volume": 18400,
"visibility": 8.1,
"visibility_diff": 1.9,
"share_of_voice": 5.6,
"share_of_voice_diff": 0.8,
"estimated_traffic": 580,
"estimated_traffic_diff": 130,
"buckets": {
"top_3": {
"total_count": 15,
"difference_count": 2,
"improved_count": 4,
"declined_count": 2,
"new_count": 2,
"lost_count": 1
},
"top_10": {
"total_count": 42,
"difference_count": 3,
"improved_count": 8,
"declined_count": 5,
"new_count": 5,
"lost_count": 3
},
"top_20": {
"total_count": 68,
"difference_count": 4,
"improved_count": 10,
"declined_count": 6,
"new_count": 6,
"lost_count": 4
},
"top_50": {
"total_count": 95,
"difference_count": 5,
"improved_count": 12,
"declined_count": 7,
"new_count": 7,
"lost_count": 5
},
"top_100": {
"total_count": 120,
"difference_count": 6,
"improved_count": 14,
"declined_count": 8,
"new_count": 8,
"lost_count": 6
}
}
}
}Jump to Get Seo Rankings Distribution TrendGet Seo Rankings Distribution Trend
Price: 20 API units per request
This request returns the rankings distribution trend for the selected target over time. Use it to track how keyword counts move between ranking buckets across tracking dates and to understand whether visibility is becoming more concentrated in stronger or weaker positions. This helps reveal whether the target is steadily improving, losing ground, or becoming more volatile. Available buckets depend on the campaign search engine.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Ranking-distribution trend series for the selected compared target.
Value/Type: object
tracking_points
Per-date ranking distribution snapshots.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
buckets
Ranking buckets for this date. Available buckets depend on the campaign search engine:
top_3, top_10, top_20, top_50, positions_4_to_10, positions_11_to_20, top_100, positions_21_to_100, outside_top_100top_3, top_10, top_20, top_50, positions_4_to_10, positions_11_to_20, positions_21_to_50, outside_top_50Value/Type: object
top_3
Counts for the Top 3 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
top_10
Counts for the Top 10 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
top_20
Counts for the Top 20 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
top_50
Counts for the Top 50 bucket.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
top_100
Counts for the Top 100 bucket. Populated for Google campaigns. Omitted for Bing and Baidu.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
positions_4_to_10
Counts for positions 4 through 10.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
positions_11_to_20
Counts for positions 11 through 20.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
positions_21_to_100
Counts for positions 21 through 100. Populated for Google campaigns. Omitted for Bing and Baidu.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
outside_top_100
Counts for keywords outside the Top 100. Populated for Google campaigns. Omitted for Bing and Baidu.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
positions_21_to_50
Counts for positions 21 through 50. Populated for Bing and Baidu campaigns. Omitted for Google.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
outside_top_50
Counts for keywords outside the Top 50. Populated for Bing and Baidu campaigns. Omitted for Google.
Value/Type: object
total_count
Total number of keywords in the bucket on the selected date.
Value/Type: integer
unchanged_count
Number of keywords that did not change bucket placement on the selected date.
Value/Type: integer
improved_count
Number of keywords that improved into this bucket on the selected date.
Value/Type: integer
declined_count
Number of keywords that declined into this bucket on the selected date.
Value/Type: integer
new_count
Number of keywords that became new in this bucket on the selected date.
Value/Type: integer
lost_count
Number of keywords that were lost from this bucket on the selected date.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/rankings-distribution/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&target_url=*.samplesite.com%2F*&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"volume_type": "NATIONAL",
"total": 3
},
"data": {
"tracking_points": [
{
"date": "2026-01-01",
"buckets": {
"top_3": {
"total_count": 12,
"unchanged_count": 8,
"improved_count": 2,
"declined_count": 1,
"new_count": 1,
"lost_count": 1
},
"top_10": {
"total_count": 38,
"unchanged_count": 24,
"improved_count": 6,
"declined_count": 4,
"new_count": 3,
"lost_count": 2
},
"top_20": {
"total_count": 60,
"unchanged_count": 40,
"improved_count": 8,
"declined_count": 6,
"new_count": 4,
"lost_count": 3
},
"top_50": {
"total_count": 88,
"unchanged_count": 60,
"improved_count": 10,
"declined_count": 8,
"new_count": 5,
"lost_count": 4
},
"top_100": {
"total_count": 110,
"unchanged_count": 80,
"improved_count": 12,
"declined_count": 9,
"new_count": 6,
"lost_count": 5
},
"positions_4_to_10": {
"total_count": 26,
"unchanged_count": 16,
"improved_count": 4,
"declined_count": 3,
"new_count": 2,
"lost_count": 1
},
"positions_11_to_20": {
"total_count": 22,
"unchanged_count": 14,
"improved_count": 3,
"declined_count": 2,
"new_count": 2,
"lost_count": 1
},
"positions_21_to_100": {
"total_count": 50,
"unchanged_count": 36,
"improved_count": 6,
"declined_count": 4,
"new_count": 3,
"lost_count": 2
},
"outside_top_100": {
"total_count": 40,
"unchanged_count": 30,
"improved_count": 4,
"declined_count": 3,
"new_count": 2,
"lost_count": 2
}
}
},
{
"date": "2026-01-02",
"buckets": {
"top_3": {
"total_count": 14,
"unchanged_count": 8,
"improved_count": 3,
"declined_count": 2,
"new_count": 2,
"lost_count": 1
},
"top_10": {
"total_count": 40,
"unchanged_count": 24,
"improved_count": 7,
"declined_count": 4,
"new_count": 4,
"lost_count": 2
},
"top_20": {
"total_count": 64,
"unchanged_count": 40,
"improved_count": 9,
"declined_count": 6,
"new_count": 5,
"lost_count": 4
},
"top_50": {
"total_count": 92,
"unchanged_count": 60,
"improved_count": 11,
"declined_count": 8,
"new_count": 6,
"lost_count": 4
},
"top_100": {
"total_count": 115,
"unchanged_count": 80,
"improved_count": 13,
"declined_count": 8,
"new_count": 7,
"lost_count": 6
},
"positions_4_to_10": {
"total_count": 26,
"unchanged_count": 16,
"improved_count": 4,
"declined_count": 3,
"new_count": 2,
"lost_count": 2
},
"positions_11_to_20": {
"total_count": 24,
"unchanged_count": 14,
"improved_count": 4,
"declined_count": 2,
"new_count": 2,
"lost_count": 2
},
"positions_21_to_100": {
"total_count": 51,
"unchanged_count": 36,
"improved_count": 6,
"declined_count": 4,
"new_count": 4,
"lost_count": 2
},
"outside_top_100": {
"total_count": 35,
"unchanged_count": 26,
"improved_count": 4,
"declined_count": 2,
"new_count": 2,
"lost_count": 2
}
}
},
{
"date": "2026-01-03",
"buckets": {
"top_3": {
"total_count": 15,
"unchanged_count": 8,
"improved_count": 4,
"declined_count": 2,
"new_count": 2,
"lost_count": 1
},
"top_10": {
"total_count": 42,
"unchanged_count": 24,
"improved_count": 8,
"declined_count": 5,
"new_count": 5,
"lost_count": 3
},
"top_20": {
"total_count": 68,
"unchanged_count": 40,
"improved_count": 10,
"declined_count": 6,
"new_count": 6,
"lost_count": 4
},
"top_50": {
"total_count": 95,
"unchanged_count": 60,
"improved_count": 12,
"declined_count": 7,
"new_count": 7,
"lost_count": 5
},
"top_100": {
"total_count": 120,
"unchanged_count": 80,
"improved_count": 14,
"declined_count": 8,
"new_count": 8,
"lost_count": 6
},
"positions_4_to_10": {
"total_count": 27,
"unchanged_count": 16,
"improved_count": 5,
"declined_count": 3,
"new_count": 3,
"lost_count": 2
},
"positions_11_to_20": {
"total_count": 26,
"unchanged_count": 14,
"improved_count": 5,
"declined_count": 3,
"new_count": 3,
"lost_count": 2
},
"positions_21_to_100": {
"total_count": 52,
"unchanged_count": 36,
"improved_count": 7,
"declined_count": 4,
"new_count": 4,
"lost_count": 3
},
"outside_top_100": {
"total_count": 30,
"unchanged_count": 22,
"improved_count": 3,
"declined_count": 2,
"new_count": 2,
"lost_count": 1
}
}
}
]
}
}Jump to Get Seo Landing PagesGet Seo Landing Pages
Price: 1000 API units per line
This request lists the ranking URLs attributed to the selected target across the tracked keyword set in the selected search channel. Use it to understand which landing pages are responsible for search visibility across the tracked keyword set.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
url_filter
Filter landing pages by URL.
Values that start with http:// or https:// match the full URL exactly.
Otherwise the value is matched as a substring of the URL.
Value/Type: string
page_status
Return only new or lost pages.
Supported values: PAGE_NEW, PAGE_LOST.
Value/Type: string
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by.
Supported values: ORDER_BY_URL, ORDER_BY_TRAFFIC, ORDER_BY_AVERAGE_POSITION, ORDER_BY_VOLUME, ORDER_BY_KEYWORDS_COUNT.
If omitted, the default report sort is used.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
keywords_count
Number of keywords included in the report.
Value/Type: integer
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Landing page rows for the selected target.
Value/Type: object[]
url
Landing page URL.
Value/Type: string
status
Page new or lost status in the interval.
Supported values: PAGE_NEW, PAGE_LOST.
Value/Type: string
metrics
Page-level aggregate metrics at date_to.
Value/Type: object
date
Metrics date (ISO-8601 YYYY-MM-DD), normally the report date_to.
Value/Type: string
traffic
Estimated traffic aggregated for the page on this date. Available for Google campaigns only.
Value/Type: number
average_position
Average keyword position for the page on this date.
Value/Type: number
volume
Total average monthly search volume of keywords mapped to this page on the end date, at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
keywords_count
Number of keywords mapped to this page.
Value/Type: integer
intent_rates
Intent distribution for this page at the metrics date.
Value/Type: object[]
intent
Search intent bucket.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
Value/Type: string
keywords_count
Number of keywords in this intent bucket.
Value/Type: integer
keywords_percentage
Percentage of landing page keywords in this intent bucket.
Value/Type: number
traffic
Estimated traffic for this intent bucket. Available for Google campaigns only.
Value/Type: number
diff
Page-level movement between begin and end dates.
Value/Type: object
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
average_position
Average-position change: begin-date value minus end-date value. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: number
volume
Volume change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: integer
keywords_count
Keywords-count change: end-date value minus begin-date value.
Value/Type: integer
keywords
Keywords mapped to this page.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
tags
Tags assigned to this keyword. May be empty when no tags are set.
Value/Type: string[]
status
Keyword new or lost status in the interval.
Supported values: KEYWORD_NEW, KEYWORD_LOST.
Value/Type: string
intents
Classified search intents for the keyword.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
Value/Type: string[]
positions
Per-date keyword positions.
Value/Type: object[]
date
Position date (ISO-8601 YYYY-MM-DD).
Value/Type: string
serp_features
SERP feature blocks where the selected target has a ranking for this keyword and date.
Value/Type: string[]
traffic
Estimated traffic for this keyword and date. Available for Google campaigns only.
Value/Type: number
position
Keyword position for this page.
Value/Type: integer
volume
Average monthly search volume for the keyword at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
diff
Keyword-level movement between begin and end dates.
Value/Type: object
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
position
Position change: begin-date position minus end-date position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/landing-pages?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&volume_type=NATIONAL&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"limit": 10,
"offset": 0,
"total": 1,
"keywords_count": 250,
"is_crawled_volumes_cpc": true
},
"data": [
{
"url": "https://samplesite.com/seo-tools",
"status": "PAGE_NEW",
"metrics": {
"date": "2026-01-02",
"traffic": 52000,
"average_position": 3.2,
"volume": 18400,
"keywords_count": 85,
"intent_rates": [
{
"intent": "COMMERCIAL",
"keywords_count": 40,
"keywords_percentage": 47.1,
"traffic": 28000
}
]
},
"diff": {
"traffic": 4000,
"average_position": 0.6,
"volume": 1200,
"keywords_count": 8
},
"keywords": [
{
"keyword": "seo tools",
"tags": [
"product"
],
"status": "KEYWORD_NEW",
"intents": [
"COMMERCIAL"
],
"positions": [
{
"date": "2026-01-01",
"serp_features": [
"ORG"
],
"traffic": 180,
"position": 8,
"volume": 1200
},
{
"date": "2026-01-02",
"serp_features": [
"ORG"
],
"traffic": 240,
"position": 5,
"volume": 1200
}
],
"diff": {
"traffic": 60,
"position": 3
}
}
]
}
]
}Jump to Get Seo Landing Pages New Lost CountersGet Seo Landing Pages New Lost Counters
Price: 10 API units per request
This request returns aggregate counts of new and lost landing pages for the filtered landing-pages dataset. Use it to see how many pages entered or dropped out of search results between the selected dates without loading the full landing-pages table.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
url_filter
Filter landing pages by URL.
Values that start with http:// or https:// match the full URL exactly.
Otherwise the value is matched as a substring of the URL.
Value/Type: string
page_status
Return only new or lost pages.
Supported values: PAGE_NEW, PAGE_LOST.
Value/Type: string
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Landing page new and lost aggregate counts.
Value/Type: object
new_count
Number of pages that became new in the selected interval.
Value/Type: integer
lost_count
Number of pages that were lost in the selected interval.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/landing-pages/new-lost?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": {
"new_count": 12,
"lost_count": 8
}
}Jump to Get Seo Landing Pages Volume CountersGet Seo Landing Pages Volume Counters
Price: 10 API units per request
This request returns a single aggregate search-volume histogram for the filtered landing-pages dataset. It doesn’t return separate buckets for each page. Use it to understand whether the selected target’s landing-page visibility is concentrated more in lower-volume or higher-volume keyword segments. Available only for Google campaigns. Other search engines return Bad Request.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
url_filter
Filter landing pages by URL.
Values that start with http:// or https:// match the full URL exactly.
Otherwise the value is matched as a substring of the URL.
Value/Type: string
page_status
Return only new or lost pages.
Supported values: PAGE_NEW, PAGE_LOST.
Value/Type: string
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Keyword counts grouped by average monthly search volume.
Value/Type: object
volume_less_10
Keywords with volume from 0 through 10.
Value/Type: integer
volume_11_100
Keywords with volume from 11 through 100.
Value/Type: integer
volume_101_1000
Keywords with volume from 101 through 1,000.
Value/Type: integer
volume_1001_10000
Keywords with volume from 1,001 through 10,000.
Value/Type: integer
volume_10000_plus
Keywords with volume above 10,000.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/landing-pages/volume?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": {
"volume_less_10": 38,
"volume_11_100": 102,
"volume_101_1000": 54,
"volume_1001_10000": 21,
"volume_10000_plus": 8
}
}Jump to Get Seo CompetitorsGet Seo Competitors
Price: 1000 API units per line
This request lists the domains that appear for the tracked keyword set in the selected search channel, together with their average position and visibility. Use it to identify the main competitors for the tracked keyword set and compare their performance against the selected target.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
included_linktypes
Comma-separated list of SERP features.
Builds the report using only domains’ rankings in the listed SERP features.
Mutually exclusive with excluded_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features include filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Builds the report excluding domains’ rankings in the listed SERP features.
Mutually exclusive with included_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features exclude filter is applied.
Value/Type: string[]
position_depth
Maximum ranking position included in report calculations. Accepts any uint32. Default: 150.
Value/Type: integer
order_by
Field the report result should be sorted by. Default: ORDER_BY_URL.
Supported values: ORDER_BY_SHARE_OF_VOICE, ORDER_BY_VISIBILITY, ORDER_BY_TRAFFIC, ORDER_BY_TRAFFIC_COST, ORDER_BY_MATCHES, ORDER_BY_AVERAGE_POSITION, ORDER_BY_URL, ORDER_BY_DEVIATION.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
urls
Comma-separated list of competitor URLs to include. When provided, the report returns only these competitors. If omitted, all discovered competitors are included.
Value/Type: string[]
exclude_urls
Comma-separated list of competitor URLs to exclude from the report. If omitted, no competitor URL exclusion is applied.
Value/Type: string[]
tracking_url_type
URL type that defines how competitor URLs are aggregated in the response
(root domain, subdomain, subfolder, or exact page).
Default: campaign tracking URL type.
Supported values: ROOTDOMAIN, SUBDOMAIN, SUBFOLDER, URL.
Value/Type: string
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
keywords_count
Number of keywords included in the report.
Value/Type: integer
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Discovered competitor rows for the selected target.
Value/Type: object
competitors
Discovered competitor URL rows.
Value/Type: object[]
competitor_url
Discovered competitor URL or URL mask.
Value/Type: string
tracking_points
Per-date metrics for this competitor.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
matches
Number of matching keywords for this competitor.
Value/Type: integer
average_position
Average competitor position.
Value/Type: number
deviation
Standard deviation of keyword positions for this competitor on this date.
Keywords without a match are counted as the search engine’s maximum position.
Lower values mean rankings are more tightly clustered around average_position.
Value/Type: number
traffic
Estimated traffic. Available for Google campaigns only.
Value/Type: number
traffic_cost
Estimated traffic cost. Available for Google campaigns only.
Value/Type: number
visibility
Visibility score.
Value/Type: number
share_of_voice
Share-of-voice score. Available for Google campaigns only.
Value/Type: number
diff
Movement between the first and last tracking points.
Value/Type: object
matches
Matches change: end-date value minus begin-date value.
Value/Type: integer
average_position
Average-position change: begin-date value minus end-date value. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: number
deviation
Deviation change: end-date value minus begin-date value.
Value/Type: number
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
traffic_cost
Traffic-cost change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
visibility
Visibility change: end-date value minus begin-date value.
Value/Type: number
share_of_voice
Share-of-voice change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/competitors?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"total": 1,
"keywords_count": 250,
"volume_type": "NATIONAL",
"is_crawled_volumes_cpc": true,
"limit": 10,
"offset": 0
},
"data": {
"competitors": [
{
"competitor_url": "competitor1.com",
"tracking_points": [
{
"date": "2026-01-01",
"matches": 110,
"average_position": 3.1,
"deviation": 1.4,
"traffic": 41000,
"traffic_cost": 8200,
"visibility": 7800,
"share_of_voice": 14.1
},
{
"date": "2026-01-02",
"matches": 120,
"average_position": 2.5,
"deviation": 1.1,
"traffic": 45000,
"traffic_cost": 9000,
"visibility": 8500,
"share_of_voice": 15.2
}
],
"diff": {
"matches": 10,
"average_position": 0.6,
"deviation": -0.3,
"traffic": 4000,
"traffic_cost": 800,
"visibility": 700,
"share_of_voice": 1.1
}
}
]
}
}Jump to Get Seo Competitors Serp Feature CountersGet Seo Competitors Serp Feature Counters
Price: 10 API units per request
This request returns SERP-feature counters for the filtered dataset used by the competitors report. Unlike the overview SERP-feature counters, these values are calculated for the competitors-discovery dataset, that is, for the keyword set and competing domains represented in the competitors report.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
included_linktypes
Comma-separated list of SERP features.
Builds the report using only domains’ rankings in the listed SERP features.
Mutually exclusive with excluded_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features include filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Builds the report excluding domains’ rankings in the listed SERP features.
Mutually exclusive with included_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features exclude filter is applied.
Value/Type: string[]
position_depth
Maximum ranking position included in report calculations. Accepts any uint32. Default: 150.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
SERP feature counts over discovered competitor URLs.
Value/Type: object[]
feature
SERP feature type being counted.
Value/Type: string
competitors_rank
Number of discovered competitor URLs that rank inside this SERP feature.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/competitors/serp-features?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": [
{
"feature": "ORG",
"competitors_rank": 40
},
{
"feature": "FEATURED_SNIPPET",
"competitors_rank": 12
}
]
}Jump to Get Seo Competitors Volume CountersGet Seo Competitors Volume Counters
Price: 10 API units per request
This request returns search-volume counters for the filtered dataset used by the competitors report. Use it to understand whether the discovered competitor landscape is concentrated more in lower-volume or higher-volume keyword segments. Available only for Google campaigns. Other search engines return Bad Request.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
volume_min
Minimum search volume, inclusive. If omitted, no lower volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
volume_max
Maximum search volume, inclusive. If omitted, no upper volume bound is applied. Applies to Google campaigns only.
Value/Type: integer
cpc_min
Minimum cost per click, inclusive. If omitted, no lower CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
cpc_max
Maximum cost per click, inclusive. If omitted, no upper CPC bound is applied. Applies to Google campaigns only.
Value/Type: number
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
intents
Comma-separated list of search intents to filter keywords by.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
If omitted, no intent filter is applied.
Value/Type: string[]
included_linktypes
Comma-separated list of SERP features.
Builds the report using only domains’ rankings in the listed SERP features.
Mutually exclusive with excluded_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features include filter is applied.
Value/Type: string[]
excluded_linktypes
Comma-separated list of SERP features.
Builds the report excluding domains’ rankings in the listed SERP features.
Mutually exclusive with included_linktypes.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, no SERP features exclude filter is applied.
Value/Type: string[]
position_depth
Maximum ranking position included in report calculations. Accepts any uint32. Default: 150.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
data
Keyword counts grouped by average monthly search volume.
Value/Type: object
volume_less_10
Keywords with volume from 0 through 10.
Value/Type: integer
volume_11_100
Keywords with volume from 11 through 100.
Value/Type: integer
volume_101_1000
Keywords with volume from 101 through 1,000.
Value/Type: integer
volume_1001_10000
Keywords with volume from 1,001 through 10,000.
Value/Type: integer
volume_10000_plus
Keywords with volume above 10,000.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/competitors/volume?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL"
},
"data": {
"volume_less_10": 38,
"volume_11_100": 102,
"volume_101_1000": 54,
"volume_1001_10000": 21,
"volume_10000_plus": 8
}
}Jump to Get Seo Cannibalization KeywordsGet Seo Cannibalization Keywords
Price: 40 API units per line
This request returns the keyword-level cannibalization report for the selected target. It lists keywords where multiple URLs from the same site compete in search results, together with ranking positions, estimated traffic, the current top URL, and the number of competing URLs.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
order_by
Field the report result should be sorted by. Default: ORDER_BY_KEYWORD.
Supported values: ORDER_BY_KEYWORD, ORDER_BY_VOLUME, ORDER_BY_TRAFFIC, ORDER_BY_POSITION.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Keyword-level cannibalization rows.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
tags
Tags assigned to this keyword. May be empty when no tags are set.
Value/Type: string[]
intents
Classified search intents for the keyword.
Supported values: INFORMATIONAL, NAVIGATIONAL, COMMERCIAL, TRANSACTIONAL.
Value/Type: string[]
volume
Average monthly search volume for the keyword at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
tracking_points
Per-date keyword tracking snapshots.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
is_crawled
Whether rankings were successfully collected for this keyword on this date.
Value/Type: boolean
position
Best ranking position among cannibalizing URLs on this date.
Value/Type: integer
estimated_traffic
Estimated traffic for the keyword on this date.
Value/Type: number
top_url
Top ranking URL on this date.
Value/Type: string
urls_count
Number of ranking URLs on this date.
Value/Type: integer
diff
Difference between the begin and end dates.
Value/Type: object
position
Position change: begin-date position minus end-date position. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: integer
estimated_traffic
Estimated-traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/cannibalization/keywords?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&keyword_contains=analytics&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"limit": 10,
"offset": 0,
"total": 1,
"is_crawled_volumes_cpc": true
},
"data": [
{
"keyword": "analytics tools",
"tags": [
"product"
],
"intents": [
"COMMERCIAL"
],
"volume": 2400,
"tracking_points": [
{
"date": "2026-01-01",
"is_crawled": true,
"position": 7,
"estimated_traffic": 110,
"top_url": "https://samplesite.com/analytics",
"urls_count": 3
},
{
"date": "2026-01-02",
"is_crawled": true,
"position": 5,
"estimated_traffic": 140,
"top_url": "https://samplesite.com/analytics",
"urls_count": 3
}
],
"diff": {
"position": 2,
"estimated_traffic": 30
}
}
]
}Jump to Get Seo Cannibalization Keyword TrendGet Seo Cannibalization Keyword Trend
Price: 20 API units per line
This request returns the cannibalization trend for one selected keyword. It shows which pages ranked for that keyword during the selected period and how their positions changed over time. Use it to investigate which URLs are competing for the same query and how that competition evolves.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
keywordRequired
Exact keyword whose trend should be returned. Required by the backend.
Encode reserved characters in the value (for example, & → %26).
Example: apple
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
keyword
Keyword selected for this report.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
data
Ranking pages for the selected keyword.
Value/Type: object[]
url
Ranking page URL.
Value/Type: string
tracking_points
Per-date page tracking snapshots for the selected keyword.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
position
Ranking position for the page on the given date.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/cannibalization/keywords/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&target_url=*.samplesite.com%2F*&keyword=seo%20tools"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"keyword": "seo tools",
"total": 2
},
"data": [
{
"url": "https://samplesite.com/seo-tools",
"tracking_points": [
{
"date": "2026-01-01",
"position": 5
},
{
"date": "2026-01-02",
"position": 4
},
{
"date": "2026-01-03",
"position": 3
}
]
},
{
"url": "https://samplesite.com/blog/seo-tools",
"tracking_points": [
{
"date": "2026-01-01",
"position": 12
},
{
"date": "2026-01-02",
"position": 10
},
{
"date": "2026-01-03",
"position": 9
}
]
}
]
}Jump to Get Seo Cannibalization PagesGet Seo Cannibalization Pages
Price: 40 API units per line
This request returns the page-level cannibalization report for the selected target. It lists affected URLs together with the number of cannibalized keywords, average position, estimated traffic, total keyword volume, and the changes between the begin and end dates. Use it to identify which pages are most affected by cannibalization and how strong that impact is.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
url_filter
Filter landing pages by URL.
Values that start with http:// or https:// match the full URL exactly.
Otherwise the value is matched as a substring of the URL.
Example: blog
Value/Type: string
order_by
Field the report result should be sorted by. Default: ORDER_BY_URL.
Supported values: ORDER_BY_URL, ORDER_BY_VOLUME, ORDER_BY_TRAFFIC, ORDER_BY_AVERAGE_POSITION, ORDER_BY_MATCHES.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Cannibalizing page rows.
Value/Type: object[]
url
Page URL.
Value/Type: string
metrics
Metrics at the begin and end dates.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
keywords_count
Number of affected keywords on this date.
Value/Type: integer
average_position
Average keyword position for the page on this date.
Value/Type: number
traffic
Estimated traffic aggregated for the page on this date. Available for Google campaigns only.
Value/Type: number
volume
Total average monthly search volume of keywords mapped to this page on this date, at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
diff
Movement between the begin and end dates.
Value/Type: object
keywords_count
Keywords-count change: end-date value minus begin-date value.
Value/Type: integer
average_position
Average-position change: begin-date value minus end-date value. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: number
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
volume
Volume change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/cannibalization/pages?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&limit=10"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"limit": 10,
"offset": 0,
"total": 1,
"is_crawled_volumes_cpc": true
},
"data": [
{
"url": "https://samplesite.com/about",
"metrics": [
{
"date": "2026-01-01",
"keywords_count": 12,
"average_position": 5.1,
"traffic": 210,
"volume": 6400
},
{
"date": "2026-01-02",
"keywords_count": 15,
"average_position": 4.2,
"traffic": 260,
"volume": 7200
}
],
"diff": {
"keywords_count": 3,
"average_position": 0.9,
"traffic": 50,
"volume": 800
}
}
]
}Jump to Get Seo Cannibalization Page TrendGet Seo Cannibalization Page Trend
Price: 20 API units per line
This request returns the cannibalization trend for one selected page URL. It shows which keywords are affected for that page during the selected period and how their positions changed over time. Use it to understand which queries contribute to the page’s cannibalization pattern and how that set evolves.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
page_urlRequired
Exact page URL whose trend should be returned.
Example: https://example.com/blog
Value/Type: string
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
page_url
Same as the request page_url parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
data
Keyword trend rows for the selected page.
Value/Type: object[]
keyword
Keyword text.
Value/Type: string
tracking_points
Per-date page ranking snapshots for the keyword.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
position
Ranking position of the keyword on the page for the given date.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/cannibalization/pages/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&page_url=https%3A%2F%2F2.zoppoz.workers.dev%3A443%2Fhttps%2Fexample.com%2Fblog"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"page_url": "https://samplesite.com/blog",
"total": 1
},
"data": [
{
"keyword": "content marketing",
"tracking_points": [
{
"date": "2026-01-01",
"position": 4
},
{
"date": "2026-01-02",
"position": 3
},
{
"date": "2026-01-03",
"position": 2
}
]
}
]
}Jump to Get Seo Cannibalization Health TrendGet Seo Cannibalization Health Trend
Price: 20 API units per request
This request returns the cannibalization health trend for the selected target. It shows how many ranked keywords are affected by cannibalization, how many URLs are involved, and how the overall cannibalization health changes over time. Use it to monitor whether internal competition between pages is becoming better or worse across tracking dates.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
keyword_contains
Comma-separated list of keyword substrings to include.
A keyword matches if its text contains any of the listed substrings.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no keyword filter is applied.
Value/Type: string[]
keyword_not_contains
Comma-separated list of keyword substrings to exclude.
Excludes keywords containing any listed substring.
URL-encode each substring, then join them with commas (,). For example, encode & as %26.
If omitted, no keyword filter is applied.
Value/Type: string[]
position_min
Minimum position, inclusive. If omitted, no lower position bound is applied.
Value/Type: integer
position_max
Maximum position, inclusive. The allowed upper bound depends on the campaign search engine and report channel. If omitted, no upper position bound is applied.
Value/Type: integer
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
data
Cannibalization health trend series for the selected target.
Value/Type: object
tracking_points
Aggregate health snapshots by tracking date.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
keywords
Total number of tracked keywords considered on this date.
Value/Type: integer
ranked_keywords
Number of keywords that rank for the selected target on this date.
Value/Type: integer
cannibal_keywords
Number of ranked keywords affected by cannibalization on this date.
Value/Type: integer
health_percentage
Percentage of ranked keywords that are healthy on this date.
Value/Type: number
urls
Number of ranking URLs used by the selected target on this date.
Value/Type: integer
cannibal_urls
Number of URLs involved in cannibalization on this date.
Value/Type: integer
urls_health_percentage
Percentage of URLs that are healthy on this date.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/cannibalization/health/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&target_url=*.samplesite.com%2F*"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"total": 3
},
"data": {
"tracking_points": [
{
"date": "2026-01-01",
"keywords": 200,
"ranked_keywords": 160,
"cannibal_keywords": 125,
"health_percentage": 21.9,
"urls": 40,
"cannibal_urls": 12,
"urls_health_percentage": 70.0
},
{
"date": "2026-01-02",
"keywords": 200,
"ranked_keywords": 165,
"cannibal_keywords": 112,
"health_percentage": 32.1,
"urls": 39,
"cannibal_urls": 11,
"urls_health_percentage": 71.8
},
{
"date": "2026-01-03",
"keywords": 200,
"ranked_keywords": 170,
"cannibal_keywords": 98,
"health_percentage": 42.4,
"urls": 38,
"cannibal_urls": 10,
"urls_health_percentage": 73.7
}
]
}
}Jump to Get Seo TagsGet Seo Tags
Price: 20 API units per line
This request returns metrics aggregated by keyword tags for the selected target. Use it to compare the performance of keyword groups such as brand, product, or competitor segments by visibility, traffic, share of voice, average position, and keyword count.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the comparison window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
order_by
Field the report result should be sorted by. Default: ORDER_BY_TAG.
Supported values: ORDER_BY_TAG, ORDER_BY_AVERAGE_POSITION, ORDER_BY_VISIBILITY, ORDER_BY_TRAFFIC, ORDER_BY_SHARE_OF_VOICE, ORDER_BY_VOLUME, ORDER_BY_MATCHES.
Volume-related sort values apply to Google campaigns only.
Value/Type: string
order_date_point
Sort using the begin, end, or change value of order_by. Default: ORDER_DATE_POINT_END.
Supported values: ORDER_DATE_POINT_BEGIN, ORDER_DATE_POINT_END, ORDER_DATE_POINT_DIFF, ORDER_DATE_POINT_DIFF_ABS.
Value/Type: string
direction
Sort order for the result set (ascending or descending). Default: ASC.
Supported values: ASC, DESC.
Value/Type: string
limit
Maximum number of rows to return in the response body. Default: 10.
Value/Type: integer
offset
Number of matching rows skipped before returning results. Default: 0.
Value/Type: integer
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
limit
Same as the request limit parameter.
Value/Type: integer
offset
Same as the request offset parameter.
Value/Type: integer
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Tag-level aggregate rows for the selected target.
Value/Type: object[]
tag
Tag name used to group keywords in the campaign.
Value/Type: string
metrics
Metrics at the begin and end dates.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
average_position
Average position for the tag on this date.
Value/Type: number
visibility
Visibility score for the tag on this date.
Value/Type: number
traffic
Estimated traffic for the tag on this date. Available for Google campaigns only.
Value/Type: number
share_of_voice
Share-of-voice score for the tag on this date, when available. Available for Google campaigns only.
Value/Type: number
diff
Metric changes across the selected interval.
Value/Type: object
average_position
Average-position change: begin-date value minus end-date value. If a position is missing at one end of the comparison window, the calculation depends on the corresponding search engine’s maximum position.
Value/Type: number
visibility
Visibility change: end-date value minus begin-date value.
Value/Type: number
traffic
Traffic change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
share_of_voice
Share-of-voice change: end-date value minus begin-date value. Available for Google campaigns only.
Value/Type: number
keywords_count
Number of keywords assigned to the tag on the end date.
Value/Type: integer
volume
Aggregated average monthly search volume for the tag on the end date, at the selected volume_type.
Available for Google campaigns only.
Value/Type: integer
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/tags?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-02&target_url=*.samplesite.com%2F*&volume_type=NATIONAL&limit=20"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-02",
"volume_type": "NATIONAL",
"limit": 20,
"offset": 0,
"total": 1,
"is_crawled_volumes_cpc": true
},
"data": [
{
"tag": "brand",
"metrics": [
{
"date": "2026-01-01",
"average_position": 2.1,
"visibility": 11800,
"traffic": 78000,
"share_of_voice": 26.5
},
{
"date": "2026-01-02",
"average_position": 1.8,
"visibility": 12500,
"traffic": 85000,
"share_of_voice": 28.5
}
],
"diff": {
"average_position": 0.3,
"visibility": 700,
"traffic": 7000,
"share_of_voice": 2.0
},
"keywords_count": 45,
"volume": 22000
}
]
}Jump to Get Seo Tags TrendGet Seo Tags Trend
Price: 20 API units per line
This request returns trend data for keyword tags over the selected period. Use it to see how each tag group changes over time by metrics such as average position, visibility, traffic, and share of voice. It is especially useful when clients monitor different business segments inside one campaign and want to compare their dynamics.
Jump to EndpointEndpoint
Path parameters
campaign_idRequired
Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.
Value/Type: string
Query parameters
channelRequired
Search channel to include in the report: organic listings or paid ads.
Supported values: ORGANIC, PAID.
Value/Type: string
date_fromRequired
Interval start for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-01
Value/Type: string
date_toRequired
Interval end for the trend window (ISO-8601 YYYY-MM-DD).
Example: 2026-01-02
Value/Type: string
target_url
Target URL or URL mask whose rankings are analyzed in this report. If omitted, the primary URL configured on the campaign is used.
Use asterisks (*) to set the matching scope. Without asterisks, the value is matched exactly.
A value that includes a URL scheme (http:// or https://) is always treated as an exact page match.
Supported mask patterns:
- Root domain (
*.ebay.com/*): Any path under the specified root domain, including all subdomains. - Subdomain (
www.ebay.com/*): Any path under the specified host. - Subfolder (
*.ebay.com/motors/*): Any path under the specified subfolder on the root domain or any of its subdomains. - Exact URL (
http://www.ebay.com/motors/): Exact page match.
Value/Type: string
target_business_name
Business name used to match the campaign target in local pack or map results
when those results list businesses without URLs.
In that case the target is matched by business name; if the local pack entry has a URL, matching uses the URL (target_url / campaign tracking URL) instead.
Value/Type: string
volume_type
Search volume aggregation level.
Supported values: NATIONAL, REGIONAL, LOCAL.
If not provided, the value is taken from campaign settings.
Applies to Google campaigns only.
Value/Type: string
excluded_linktypes
Comma-separated list of SERP features.
Excluded SERP feature blocks don’t receive a position. Remaining blocks are renumbered as if the excluded blocks weren’t on the SERP.
Supported values: ORG, LOCAL_PACK, LOCAL_TEASER, NEWS, RELATED_QUESTIONS, IMAGES, ADWORDS_TOP, SHOPPING_RESULTS, KNOWLEDGE_CARD, X_RESULTS, APPLICATIONS_BLOCK, VIDEO_BLOCK, AMP, REVIEW, VIDEO, FEATURED_SNIPPET, SITELINKS, ADWORDS_BOTTOM, KNOWLEDGE_GRAPH, HOTELS, FLIGHTS, JOBS, INDENTED, ORGANIC_CAROUSEL, RELATED_SEARCHES, AI_SUMMARY, AI_STORIES, ASK_AI, AI_CHAT, AI_OVERVIEW, AI_RESPONSE, AI_DOUBLE_RESPONSE, AI_CITATIONS, MEDIA_ACTIONS, SPORTS_ONEBOX, AI_SEARCH_RESULTS.
If omitted, all SERP feature blocks keep their positions.
Value/Type: string[]
tags
Comma-separated list of tags to include.
A keyword matches if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
tags_exclude
Comma-separated list of tags to exclude.
A keyword is excluded if it has any of the listed tags.
Encode reserved characters in each value (for example, & → %26). Encode each item, then join with ,.
If omitted, no tags filter is applied.
Value/Type: string[]
Response Parameters
meta
Response metadata.
Value/Type: object
campaign_id
Position Tracking campaign identifier used for this request.
Value/Type: string
channel
Same as the request channel parameter.
Value/Type: string
date_from
Same as the request date_from parameter.
Value/Type: string
date_to
Same as the request date_to parameter.
Value/Type: string
request_id
Unique identifier for this API request.
Value/Type: string
status_code
HTTP status code of the response.
Value/Type: integer
success
true when the request completed successfully; otherwise false.
Value/Type: boolean
total
Total number of rows for this request.
Value/Type: integer
volume_type
Volume aggregation level used for this report.
Equals the request volume_type when provided; otherwise the campaign setting.
Supported values: NATIONAL, REGIONAL, LOCAL.
Value/Type: string
is_crawled_volumes_cpc
Whether search volume and CPC are available for this campaign.
true only for Google campaigns after keyword volume/CPC data has been crawled; otherwise false.
Value/Type: boolean
data
Tag trend series for the selected target.
Value/Type: object[]
tag
Tag name used to group keywords in the campaign.
Value/Type: string
tracking_points
Trend points for the tag across the selected interval.
Value/Type: object[]
date
Harvest date for this snapshot (ISO-8601 YYYY-MM-DD).
Value/Type: string
average_position
Average position for the tag on this date.
Value/Type: number
visibility
Visibility score for the tag on this date.
Value/Type: number
traffic
Estimated traffic for the tag on this date. Available for Google campaigns only.
Value/Type: number
share_of_voice
Share-of-voice score for the tag on this date, when available. Available for Google campaigns only.
Value/Type: number
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/reports/tags/trend?channel=ORGANIC&date_from=2026-01-01&date_to=2026-01-03&target_url=*.samplesite.com%2F*&volume_type=NATIONAL"{
"meta": {
"success": true,
"status_code": 200,
"request_id": "4fb1773ec2a8d61a0407f464599f897c",
"campaign_id": "2132421_3214",
"channel": "ORGANIC",
"date_from": "2026-01-01",
"date_to": "2026-01-03",
"volume_type": "NATIONAL",
"total": 1,
"is_crawled_volumes_cpc": true
},
"data": [
{
"tag": "brand",
"tracking_points": [
{
"date": "2026-01-01",
"average_position": 2.1,
"visibility": 11800,
"traffic": 78000,
"share_of_voice": 26.5
},
{
"date": "2026-01-02",
"average_position": 2.0,
"visibility": 12150,
"traffic": 81500,
"share_of_voice": 27.5
},
{
"date": "2026-01-03",
"average_position": 1.8,
"visibility": 12500,
"traffic": 85000,
"share_of_voice": 28.5
}
]
}
]
}Last updated: November 9, 2026