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

POSThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns

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[]

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

data

Created campaign.

Value/Type: object

Request example
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"]
      }
  ]
}'
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id

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

Campaign configuration and summary.

Value/Type: object

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214"
Response example
JSON
{
  "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

PATCHhttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id

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

Request example
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"
}'
Response example
JSON
{
  "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

DELETEhttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id

Path parameters

campaign_idRequired

Position Tracking campaign identifier from the List Project Campaigns or Create Campaign endpoint.

Value/Type: string

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/tracking-points

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

tracking_points

Dates with collected ranking data. Pass them to report endpoints as interval or snapshot dates.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/competitors

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

competitors

Competitor entries with stable identifiers for later deletion.

Value/Type: object[]

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/competitors"
Response example
JSON
{
  "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

POSThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/competitors

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[]

Request example
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"
      }
  ]
}'
Response example
JSON
{
  "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

DELETEhttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/competitors

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[]

Request example
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"]
}'
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords

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

keywords

Keywords with attached tags.

Value/Type: object[]

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords"
Response example
JSON
{
  "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

POSThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords

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[]

Response Parameters

meta

Response metadata.

Value/Type: object

added_keywords

Number of keywords added. Used for tarification to charge API units based on actual data returned.

Value/Type: integer

Request example
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"]
      }
  ]
}'
Response example
JSON
{
  "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

DELETEhttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords

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[]

Request example
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"]
}'
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords/tags

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

tags

Distinct tags currently assigned to at least one keyword.

Value/Type: object[]

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/2132421_3214/keywords/tags"
Response example
JSON
{
  "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

POSThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords/tags

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[]

Request example
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"]
      }
  ]
}'
Response example
JSON
{
  "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

DELETEhttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/keywords/tags

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[]

Request example
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"]
      }
  ]
}'
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns

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

campaigns

Campaigns currently linked to the project.

Value/Type: object[]

Request example
curl -H 'Authorization: Apikey YOUR_API_KEY' "https://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns?project_id=10"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/locations

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

locations

Candidate locations ordered by relevance to the search criteria.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview

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

data

Keyword-level rows for the selected target.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/serp-features

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

data

SERP-feature aggregate counts for the filtered keyword set.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/top

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

data

Movement counters for ranking buckets such as Top 3 or Top 10.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/volume

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

data

Keyword counts grouped by average monthly search volume.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/extended

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

data

Keyword-level rows for the selected target.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/trend

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

data

Actual metrics and the 90-day potential for the selected target.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/overview/targets

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

data

Keyword-level comparison rows across target campaigns.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/rankings-distribution

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

data

Ranking distribution for the selected compared target.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/rankings-distribution/trend

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

data

Ranking-distribution trend series for the selected compared target.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/landing-pages

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

data

Landing page rows for the selected target.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/landing-pages/new-lost

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

data

Landing page new and lost aggregate counts.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/landing-pages/volume

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

data

Keyword counts grouped by average monthly search volume.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/competitors

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

data

Discovered competitor rows for the selected target.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/competitors/serp-features

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

data

SERP feature counts over discovered competitor URLs.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/competitors/volume

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

data

Keyword counts grouped by average monthly search volume.

Value/Type: object

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/cannibalization/keywords

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

data

Keyword-level cannibalization rows.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/cannibalization/keywords/trend

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

data

Ranking pages for the selected keyword.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/cannibalization/pages

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

data

Cannibalizing page rows.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/cannibalization/pages/trend

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

data

Keyword trend rows for the selected page.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/cannibalization/health/trend

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

data

Cannibalization health trend series for the selected target.

Value/Type: object

Request example
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*"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/tags

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

data

Tag-level aggregate rows for the selected target.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

GEThttps://api.semrush.com/apis/v4/position-tracking/v1/seo/campaigns/:campaign_id/reports/tags/trend

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

data

Tag trend series for the selected target.

Value/Type: object[]

Request example
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"
Response example
JSON
{
  "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

Was this page helpful?