v1
latestOpenAPI 3.1.02026-07-24490622.0 KBGet Organic Outranking Keywords
Compare two domains' organic rankings in one call. Returns keywords where one domain outranks the other or has just overtaken it, with both sites' ranks, changes, clicks, and URLs. The comparison domain's metrics appear in the your* fields. Choose the mode with keywordSearchType.
Query parameters
Primary domain to analyze. This domain's ranking data appears in the main response fields (rank, rankChange, seoClicks, etc.). Accepts full domains (example.com), complete URLs, subdomains, or specific paths.
Required. Chooses the ranking scenario for the query/compareDomain pair and governs how results are interpreted. TheyOutrankYou: keywords where query ranks above compareDomain. TheyJustSurpassedYou: recent crossovers where query moved ahead.
Domain to compare against. This domain's ranking data appears in the 'your' response fields (yourRank, yourRankChange, yourUrl). The endpoint shows where the query domain currently outranks this comparison domain.
Comma-separated list of terms that must be present in the keyword.
Used with includeTerms. If true: match any term (OR). If false: require all terms (AND).
Comma-separated list of terms to exclude from results (e.g., branded or irrelevant terms).
If true, exclude keywords where the query domain's homepage (root domain, e.g., example.com) ranks; if false, include all.
Filter to keywords where monthly search volume (Google) is ≥ this value.
Filter to keywords where monthly search volume (Google) is ≤ this value.
Filter to keywords where the keyword difficulty score is ≥ this value (0-100; higher = harder to rank).
Filter to keywords where the keyword difficulty score is ≤ this value (0-100; higher = harder to rank).
Filter to keywords where the query domain's rank position is ≥ this value (1 = best/top organic result).
Filter to keywords where the query domain's rank position is ≤ this value (1 = best/top organic result).
Filter to keywords where the query domain improved by at least this many positions vs. the previous month (rank_change ≥ value). Positive values mean moved up; negative values mean moved down.
Filter to keywords where the query domain's month-over-month rank change is at most this many positions (rank_change ≤ value). Positive values mean moved up; negative values mean moved down.
Filter to keywords where the average cost per click (CPC) is ≥ this value.
Filter to keywords where the average cost per click (CPC) is ≤ this value.
Match type for CPC filtering. Broad = includes variations/related terms; Exact = exact keyword only; Phrase = contains the keyword phrase in order (with additional words allowed).
Filter to keywords where estimated monthly organic clicks (SEO clicks) to the query domain are ≥ this value.
Filter to keywords where estimated monthly organic clicks (SEO clicks) to the query domain are ≤ this value.
Filter to keywords where the query domain's month-over-month change in estimated organic clicks is ≥ this value. Positive values indicate click gains; negative values indicate click losses.
Filter to keywords where the query domain's month-over-month change in estimated organic clicks is ≤ this value. Positive values indicate click gains; negative values indicate click losses.
Filter to keywords where the mobile search share (%) is ≥ this value (range 0-100).
Filter to keywords where the mobile search share (%) is ≤ this value (range 0-100).
Filter to keywords where the desktop search share (%) is ≥ this value (range 0-100).
Filter to keywords where the desktop search share (%) is ≤ this value (range 0-100).
Filter to keywords where the percentage of searches with no click is ≥ this value (range 0-100).
Filter to keywords where the percentage of searches with no click is ≤ this value (range 0-100).
Filter to keywords where the share of SERP clicks going to paid ads (%) is ≥ this value (range 0-100).
Filter to keywords where the share of SERP clicks going to paid ads (%) is ≤ this value (range 0-100).
Filter to keywords where the share of SERP clicks going to organic results (%) is ≥ this value (range 0-100).
Filter to keywords where the share of SERP clicks going to organic results (%) is ≤ this value (range 0-100).
Filter to keywords where the estimated monthly advertising cost is ≥ this value.
Filter to keywords where the estimated monthly advertising cost is ≤ this value.
Match type for monthly cost filtering. Broad = includes variations/related terms; Exact = exact keyword only; Phrase = contains the keyword phrase in order (with additional words allowed).
Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≥ this value.
Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≤ this value.
Filter to keywords where the number of homepage/root-domain URLs in the top 100 results is ≥ this value.
Filter to keywords where the number of homepage/root-domain URLs in the top 100 results is ≤ this value.
Filter to keywords where total monthly SERP clicks (all domains) are ≥ this value. Independent of rank; includes both organic and paid clicks.
Filter to keywords where total monthly SERP clicks (all domains) are ≤ this value. Includes both organic and paid clicks.
Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≥ this value.
Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≤ this value.
The maximum number of rows returned.
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>
Column to sort by.
Order to sort the results.
Row number to start the results with.
Exclude adult keywords considered unsafe for work.
Only include adult keywords considered unsafe for work.
Indicates whether to apply exact match filtering for the query. This parameter will result in only exact matches, meaning protocols (http/https) and trailing slashes must be included. For example, a query of "https://example.com/blog" will not match
- "example.com/blog"
- "https://example.com/blog/"
Response
OK
Example response
{
"resultCount": 100,
"results": [
{
"keyword": "running shoes",
"topRankedUrl": "https://example.com/best-running-shoes",
"rank": 7,
"rankChange": -3,
"searchVolume": 700000,
"keywordDifficulty": 69,
"broadCostPerClick": 0.28,
"phraseCostPerClick": 0.28,
"exactCostPerClick": 0.28,
"seoClicks": 3000,
"seoClicksChange": -600,
"totalMonthlyClicks": 647000,
"percentMobileSearches": 0.4,
"percentDesktopSearches": 0.6,
"percentNotClicked": 0.075,
"percentPaidClicks": 0.079,
"percentOrganicClicks": 0.921,
"broadMonthlyCost": 6043.5,
"phraseMonthlyCost": 5695.5,
"exactMonthlyCost": 5392.5,
"rankingHomepages": 10,
"yourRank": 5,
"yourRankChange": -3,
"yourUrl": "https://comparedomain.com/blog"
}
],
"totalMatchingResults": 75000
}