SpyFu Kombat API API
The Kombat API API from SpyFu — 2 operation(s) for kombat api.
The Kombat API API from SpyFu — 2 operation(s) for kombat api.
openapi: 3.0.3
info:
title: Account Account API Kombat API API
version: v2
servers:
- url: https://api.spyfu.com/apis/accounts_api
security:
- Basic_Authentication_Token: []
- Query_Parameter_Token: []
- HMAC_Authentication_Header: []
tags:
- name: Kombat API
paths:
/v2/kombat/getCompetingPpcKeywords:
get:
operationId: KombatApi_GetCompetingPpcKeywords_GET
summary: Get Competing PPC Keywords
description: 'Returns paid search keywords shared across multiple competitor domains. The process selects keywords from the includedDomains, then removes any keywords that belong to domains in the excludedDomains list.
[Visualize this API live on SpyFu](https://www.spyfu.com/kombat?query=example.com,example.org)'
parameters:
- name: includeDomainsCsv
in: query
description: Comma-separated list of domains to include in keyword analysis.
required: true
schema:
type: string
example: domain.com,anotherdomain.com
example: domain.com,anotherdomain.com
- name: excludeDomainsCsv
in: query
description: CSV list of domains to exclude in results
schema:
type: string
example: excludedomain.com
example: excludedomain.com
- name: isIntersection
in: query
description: Keywords (True:ALL/False:ANY) the domains contain.
required: true
schema:
type: boolean
default: true
example: true
example: true
- name: searchVolume.min
in: query
description: Filter by the number of searches done this past month on Google.
schema:
type: number
format: float
- name: searchVolume.max
in: query
description: Filter by the number of searches done this past month on Google.
schema:
type: number
format: float
- name: liveSearchVolume.min
in: query
description: Filter by the number of searches done this past month on Google. This value is refreshed each month.
schema:
type: number
format: float
- name: liveSearchVolume.max
in: query
description: Filter by the number of searches done this past month on Google. This value is refreshed each month.
schema:
type: number
format: float
- name: keywordDifficulty.min
in: query
description: Filter by how difficult it is to rank on this keyword. This can also be called Ranking Difficulty.
schema:
type: number
format: float
- name: keywordDifficulty.max
in: query
description: Filter by how difficult it is to rank on this keyword. This can also be called Ranking Difficulty.
schema:
type: number
format: float
- name: clicks.min
in: query
description: Filter by the number of total monthly clicks on the SERP for this keyword--organic and paid.
schema:
type: number
format: float
- name: clicks.max
in: query
description: Filter by the number of total monthly clicks on the SERP for this keyword--organic and paid.
schema:
type: number
format: float
- name: costPerClickOption
in: query
description: Cost per click keyword matching option to filter results by.
schema:
type: string
enum:
- Broad
- Exact
- Phrase
example: Broad
example: Broad
- name: costPerClick.min
in: query
description: Filter by the average cost per click. This will use the keyword matching option selected in `costPerClickOption`
schema:
type: number
format: float
- name: costPerClick.max
in: query
description: Filter by the average cost per click. This will use the keyword matching option selected in `costPerClickOption`
schema:
type: number
format: float
- name: isQuestion
in: query
description: Filter on if the keyword is a question.
schema:
type: boolean
default: false
example: false
example: false
- name: isTransactionalIntent
in: query
description: Filter on if the keyword has transactional intent.
schema:
type: boolean
default: false
example: false
example: false
- name: mobileSearchesPercentage.min
in: query
description: Filter by the percentage of searches that are done on mobile devices.
schema:
type: number
format: float
- name: mobileSearchesPercentage.max
in: query
description: Filter by the percentage of searches that are done on mobile devices.
schema:
type: number
format: float
- name: desktopSearchesPercentage.min
in: query
description: Filter by the percentage of searches that are done on desktop devices.
schema:
type: number
format: float
- name: desktopSearchesPercentage.max
in: query
description: Filter by the percentage of searches that are done on desktop devices.
schema:
type: number
format: float
- name: notClickedSearchesPercentage.min
in: query
description: 'Filter by the percentage of searches that are not clicked.
Some keyword searches supply clear information in a featured snippet or similar displays. They don''t require a click to get the information. Those will have higher percentages in this metric.'
schema:
type: number
format: float
- name: notClickedSearchesPercentage.max
in: query
description: 'Filter by the percentage of searches that are not clicked.
Some keyword searches supply clear information in a featured snippet or similar displays. They don''t require a click to get the information. Those will have higher percentages in this metric.'
schema:
type: number
format: float
- name: paidClickSearchPercentage.min
in: query
description: Filter by the percentage of clicks that go to ads.
schema:
type: number
format: float
- name: paidClickSearchPercentage.max
in: query
description: Filter by the percentage of clicks that go to ads.
schema:
type: number
format: float
- name: organicClicksSearchPercentage.min
in: query
description: Filter by the percentage of clicks that go to organic results, not ads.
schema:
type: number
format: float
- name: organicClicksSearchPercentage.max
in: query
description: Filter by the percentage of clicks that go to organic results, not ads.
schema:
type: number
format: float
- name: monthlyCost.min
in: query
description: Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption`
schema:
type: number
format: float
- name: monthlyCost.max
in: query
description: Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption`
schema:
type: number
format: float
- name: monthlyCostOption
in: query
description: Monthly Cost keyword matching option to filter results by.
schema:
type: string
enum:
- Broad
- Exact
- Phrase
example: Broad
example: Broad
- name: rankingHomepages.min
in: query
description: Homepages on the SERP range to filter results by.
schema:
type: number
format: float
- name: rankingHomepages.max
in: query
description: Homepages on the SERP range to filter results by.
schema:
type: number
format: float
- name: adCount.min
in: query
description: Filter by the number of total advertisers
schema:
type: number
format: float
- name: adCount.max
in: query
description: Filter by the number of total advertisers
schema:
type: number
format: float
- name: wordCount.min
in: query
description: Filter by the number of words in the keyword.
schema:
type: number
format: float
- name: wordCount.max
in: query
description: Filter by the number of words in the keyword.
schema:
type: number
format: float
- name: onlyAdultKeywords
in: query
description: Only include adult keywords considered unsafe for work.
schema:
type: boolean
default: false
example: false
example: false
- name: pageSize
in: query
description: The maximum number of rows returned.
schema:
type: integer
format: int32
default: 5
maximum: 10000
minimum: 1
example: 5
example: 5
- name: countryCode
in: query
description: Country market to search. Specifically, this maps to the Google domain version to query against (e.g., google.com for US, google.de for Germany, etc.). <a href='https://developer.spyfu.com/reference/adhistoryapi_getdomainadhistory_get#/'>All Countries</a>
schema:
type: string
default: US
enum:
- AR
- AT
- AU
- BE
- BR
- CA
- CH
- DE
- DK
- ES
- FR
- IE
- IN
- IT
- JP
- MX
- NL
- 'NO'
- NZ
- PL
- PT
- SE
- SG
- TR
- UA
- UK
- US
- ZA
example: US
example: US
- name: sortBy
in: query
description: Column to sort by.
schema:
type: string
default: SearchVolume
enum:
- SearchVolume
- LiveSearchVolume
- RankingDifficulty
- TotalMonthlyClicks
- PercentMobileSearches
- PercentDesktopSearches
- PercentSearchesNotClicked
- PercentPaidClicks
- PercentOrganicClicks
- BroadCostPerClick
- PhraseCostPerClick
- ExactCostPerClick
- BroadMonthlyClicks
- PhraseMonthlyClicks
- ExactMonthlyClicks
- BroadMonthlyCost
- PhraseMonthlyCost
- ExactMonthlyCost
- PaidCompetitors
- RankingHomepages
x-enumDescriptions:
SearchVolume: Monthly search volume
LiveSearchVolume: Real-time search volume data
RankingDifficulty: SEO competition difficulty score
TotalMonthlyClicks: Estimated total monthly clicks
PercentMobileSearches: Percentage of searches from mobile devices
PercentDesktopSearches: Percentage of searches from desktop devices
PercentSearchesNotClicked: Percentage of searches resulting in no clicks
PercentPaidClicks: Percentage of clicks going to paid results
PercentOrganicClicks: Percentage of clicks going to organic results
BroadCostPerClick: Broad match cost per click estimate
PhraseCostPerClick: Phrase match cost per click estimate
ExactCostPerClick: Exact match cost per click estimate
BroadMonthlyClicks: Estimated monthly clicks for broad match
PhraseMonthlyClicks: Estimated monthly clicks for phrase match
ExactMonthlyClicks: Estimated monthly clicks for exact match
BroadMonthlyCost: Estimated monthly cost for broad match
PhraseMonthlyCost: Estimated monthly cost for phrase match
ExactMonthlyCost: Estimated monthly cost for exact match
PaidCompetitors: Number of paid search competitors
RankingHomepages: Number of homepages ranking organically
example: SearchVolume
example: SearchVolume
- name: sortOrder
in: query
description: Order to sort the results.
schema:
type: string
default: Descending
enum:
- Ascending
- Descending
example: Descending
example: Descending
- name: startingRow
in: query
description: Row number to start the results with.
schema:
type: integer
format: int32
default: 1
maximum: 10000
minimum: 1
example: 1
example: 1
- name: adultFilter
in: query
description: Exclude adult keywords considered unsafe for work.
schema:
type: boolean
default: true
example: true
example: true
responses:
'200':
description: Successfully retrieved competing PPC keywords. Returns keyword data with search metrics, cost estimates, and competitive intelligence for multiple domain analysis.
content:
application/json:
schema:
description: Response wrapper containing competitive keyword analysis data showing keywords where multiple domains compete in the same search channel with pagination metadata.
type: object
properties:
resultCount:
description: Number of results returned
type: integer
format: int32
readOnly: true
example: 100
totalMatchingResults:
description: Total number of competitive keywords available that match the query criteria, including results not included in the current page.
type: integer
format: int64
readOnly: true
example: 50000
results:
description: Array of competitive keywords with detailed metrics showing overlap between multiple domains in either SEO or PPC search channels.
type: array
items:
type: object
properties:
keyword:
description: The keyword that shows competitive overlap between multiple domains in the same search channel.
type: string
nullable: true
example: running shoes
searchVolume:
description: Estimated monthly search volume for this keyword based on Google search data across the selected country/region, blended from multiple sources for accuracy.
type: integer
format: int64
nullable: true
example: 266000
liveSearchVolume:
description: Adjusted search volume based on recent trends and real-time data, providing a more current estimate than historical averages.
type: integer
format: int64
nullable: true
example: 82000
rankingDifficulty:
description: SEO difficulty score (0-100) indicating how challenging it would be to rank organically for this keyword, with 100 being most difficult.
type: integer
format: int32
nullable: true
example: 98
totalMonthlyClicks:
description: Total estimated monthly clicks (both organic and paid) generated from search results for this keyword.
type: integer
format: int64
nullable: true
example: 219000
percentMobileSearches:
description: Percentage of searches for this keyword that originate from mobile devices (0.0-1.0).
type: number
format: double
nullable: true
example: 0.52
percentDesktopSearches:
description: Percentage of searches for this keyword that originate from desktop devices (0.0-1.0).
type: number
format: double
nullable: true
example: 0.48
percentSearchesNotClicked:
description: Percentage of searches where users leave the SERP without clicking any result, often due to sufficient information in featured snippets or direct answers (0.0-1.0).
type: number
format: double
nullable: true
example: 0.18
percentPaidClicks:
description: Percentage of total SERP clicks that go to paid ad results (0.0-1.0).
type: number
format: double
nullable: true
example: 0.52
percentOrganicClicks:
description: Percentage of total SERP clicks that go to organic search results (0.0-1.0).
type: number
format: double
nullable: true
example: 0.48
broadCostPerClick:
description: Average cost-per-click for broad match keyword targeting, representing what advertisers typically pay when their ads are triggered by related keywords.
type: number
format: double
nullable: true
example: 0.73
phraseCostPerClick:
description: Average cost-per-click for phrase match keyword targeting, where ads show for searches that include the keyword phrase in the same order.
type: number
format: double
nullable: true
example: 0.67
exactCostPerClick:
description: Average cost-per-click for exact match keyword targeting, the most precise and typically highest-performing match type.
type: number
format: double
nullable: true
example: 0.65
broadMonthlyClicks:
description: Estimated monthly paid clicks for broad match targeting of this keyword.
type: number
format: float
nullable: true
example: 57019.8
phraseMonthlyClicks:
description: Estimated monthly paid clicks for phrase match targeting of this keyword.
type: number
format: float
nullable: true
example: 38000
exactMonthlyClicks:
description: Estimated monthly paid clicks for exact match targeting of this keyword.
type: number
format: float
nullable: true
example: 29094.6
broadMonthlyCost:
description: Estimated monthly advertising spend for broad match targeting of this keyword.
type: number
format: double
nullable: true
example: 41604.9
phraseMonthlyCost:
description: Estimated monthly advertising spend for phrase match targeting of this keyword.
type: number
format: double
nullable: true
example: 25542
exactMonthlyCost:
description: Estimated monthly advertising spend for exact match targeting of this keyword.
type: number
format: double
nullable: true
example: 19041.6
paidCompetitors:
description: Total number of unique advertisers observed purchasing ads for this keyword over the last 14 months, indicating competitive intensity.
type: integer
format: int32
nullable: true
example: 15
distinctCompetitors:
description: List of domain names that have purchased ads for this keyword over the last 14 months.
type: array
items:
type: string
nullable: true
example:
- example.com
- competitor1.com
- competitor2.com
rankingHomepages:
description: Number of domain homepages (root URLs) ranking within the first 100 organic search results for this keyword.
type: integer
format: int32
nullable: true
example: 8
serpFeaturesCsv:
description: Comma-separated list of SERP features present for this keyword (e.g., Images, Videos, Maps, Shopping), indicating competition for organic real estate.
type: string
nullable: true
example: Images,Maps
serpFirstResult:
description: Domain name of the top-ranking organic result for this keyword, useful for identifying category leaders.
type: string
nullable: true
example: example.com
isQuestion:
description: Indicates whether this keyword is phrased as a question (who, what, when, where, why, how).
type: boolean
example: false
isNotSafeForWork:
description: Indicates whether this keyword is flagged as containing adult or inappropriate content.
type: boolean
example: false
additionalProperties: false
description: Represents a competitive keyword with comprehensive metrics including search volume, competition analysis, cost data, and SERP characteristics for competitive intelligence analysis.
readOnly: true
nullable: true
additionalProperties: false
'400':
description: Bad Request - Invalid parameters provided (e.g., malformed domain list, invalid boolean values, or invalid country code)
'401':
description: Unauthorized - Invalid API credentials or insufficient permissions to access Kombat keyword data
'500':
description: Internal Server Error - A server-side error occurred while processing the request
tags:
- Kombat API
/v2/kombat/getCompetingSeoKeywords:
get:
operationId: KombatApi_GetCompetingSeoKeywords_GET
summary: Get Competing SEO Keywords
description: 'Returns organic search keywords shared across multiple competitor domains. The process selects keywords from the includedDomains, then removes any keywords that belong to domains in the excludedDomains list.
[Visualize this API live on SpyFu](https://www.spyfu.com/kombat?query=example.com,example.org)'
parameters:
- name: includeDomainsCsv
in: query
description: CSV list of domains to include in results
required: true
schema:
type: string
example: domain.com,anotherdomain.com
example: domain.com,anotherdomain.com
- name: excludeDomainsCsv
in: query
description: CSV list of domains to exclude in results
schema:
type: string
example: excludedomain.com
example: excludedomain.com
- name: isIntersection
in: query
description: Keywords (True:ALL/False:ANY) the domains contain.
required: true
schema:
type: boolean
default: true
example: true
example: true
- name: searchVolume.min
in: query
description: Filter by the number of searches done this past month on Google.
schema:
type: number
format: float
- name: searchVolume.max
in: query
description: Filter by the number of searches done this past month on Google.
schema:
type: number
format: float
- name: liveSearchVolume.min
in: query
description: Filter by the number of searches done this past month on Google. This value is refreshed each month.
schema:
type: number
format: float
- name: liveSearchVolume.max
in: query
description: Filter by the number of searches done this past month on Google. This value is refreshed each month.
schema:
type: number
format: float
- name: keywordDifficulty.min
in: query
description: Filter by how difficult it is to rank on this keyword. This can also be called Ranking Difficulty.
schema:
type: number
format: float
- name: keywordDifficulty.max
in: query
description: Filter by how difficult it is to rank on this keyword. This can also be called Ranking Difficulty.
schema:
type: number
format: float
- name: clicks.min
in: query
description: Filter by the number of total monthly clicks on the SERP for this keyword--organic and paid.
schema:
type: number
format: float
- name: clicks.max
in: query
description: Filter by the number of total monthly clicks on the SERP for this keyword--organic and paid.
schema:
type: number
format: float
- name: costPerClickOption
in: query
description: Cost per click keyword matching option to filter results by.
schema:
type: string
enum:
- Broad
- Exact
- Phrase
example: Broad
example: Broad
- name: costPerClick.min
in: query
description: Filter by the average cost per click. This will use the keyword matching option selected in `costPerClickOption`
schema:
type: number
format: float
- name: costPerClick.max
in: query
description: Filter by the average cost per click. This will use the keyword matching option selected in `costPerClickOption`
schema:
type: number
format: float
- name: isQuestion
in: query
description: Filter on if the keyword is a question.
schema:
type: boolean
default: false
example: false
example: false
- name: isTransactionalIntent
in: query
description: Filter on if the keyword has transactional intent.
schema:
type: boolean
default: false
example: false
example: false
- name: mobileSearchesPercentage.min
in: query
description: Filter by the percentage of searches that are done on mobile devices.
schema:
type: number
format: float
- name: mobileSearchesPercentage.max
in: query
description: Filter by the percentage of searches that are done on mobile devices.
schema:
type: number
format: float
- name: desktopSearchesPercentage.min
in: query
description: Filter by the percentage of searches that are done on desktop devices.
schema:
type: number
format: float
- name: desktopSearchesPercentage.max
in: query
description: Filter by the percentage of searches that are done on desktop devices.
schema:
type: number
format: float
- name: notClickedSearchesPercentage.min
in: query
description: 'Filter by the percentage of searches that are not clicked.
Some keyword searches supply clear information in a featured snippet or similar displays. They don''t require a click to get the information. Those will have higher percentages in this metric.'
schema:
type: number
format: float
- name: notClickedSearchesPercentage.max
in: query
description: 'Filter by the percentage of searches that are not clicked.
Some keyword searches supply clear information in a featured snippet or similar displays. They don''t require a click to get the information. Those will have higher percentages in this metric.'
schema:
type: number
format: float
- name: paidClickSearchPercentage.min
in: query
description: Filter by the percentage of clicks that go to ads.
schema:
type: number
format: float
- name: paidClickSearchPercentage.max
in: query
description: Filter by the percentage of clicks that go to ads.
schema:
type: number
format: float
- name: organicClicksSearchPercentage.min
in: query
description: Filter by the percentage of clicks that go to organic results, not ads.
schema:
type: number
format: float
- name: organicClicksSearchPercentage.max
in: query
description: Filter by the percentage of clicks that go to organic results, not ads.
schema:
type: number
format: float
- name: monthlyCost.min
in: query
description: Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption`
schema:
type: number
format: float
- name: monthlyCost.max
in: query
description: Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption`
schema:
type: number
format: float
- name: monthlyCostOption
in: query
description: Monthly Cost keyword matching option to filter results by.
schema:
type: string
enum:
- Broad
- Exact
- Phrase
example: Broad
example: Broad
- name: rankingHomepages.min
in: query
description: Homepages on the SERP range to filter results by.
schema:
type: number
format: float
- name: rankingHomepages.max
in: query
description: Homepages on the SERP range to filter results by.
schema:
type: number
format: float
- name: adCount.min
in: query
description: Filter by the number of total advertisers
schema:
type: number
format: float
- name: adCount.max
in: query
descri
# --- truncated at 32 KB (52 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/spyfu/refs/heads/main/openapi/spyfu-kombat-api-api-openapi.yml