### GET /websites/developer_spyfu Source: https://developer.spyfu.com/reference/organicserpapi_getkeywordswheretheyjustsurpassedyou_get Retrieves keyword data for a specified domain, with extensive filtering options. ```APIDOC ## GET /websites/developer_spyfu ### Description This endpoint retrieves a list of keywords related to a given domain, allowing for granular filtering based on various metrics such as search volume, keyword difficulty, ranking, and cost per click. ### Method GET ### Endpoint `/websites/developer_spyfu` ### Parameters #### Query Parameters - **excludeTerms** (string) - Optional - Comma-separated list of terms to exclude from results (e.g., branded or irrelevant terms). - **excludeHomepageKeywords** (boolean) - Optional - If true, exclude keywords where the query domain's homepage (root domain, e.g., example.com) ranks; if false, include all. Defaults to false. - **searchVolume.min** (number) - Optional - Filter to keywords where monthly search volume (Google) is ≥ this value. - **searchVolume.max** (number) - Optional - Filter to keywords where monthly search volume (Google) is ≤ this value. - **keywordDifficulty.min** (number) - Optional - Filter to keywords where the keyword difficulty score is ≥ this value (0-100; higher = harder to rank). - **keywordDifficulty.max** (number) - Optional - Filter to keywords where the keyword difficulty score is ≤ this value (0-100; higher = harder to rank). - **rank.min** (number) - Optional - Filter to keywords where the query domain's rank position is ≥ this value (1 = best/top organic result). - **rank.max** (number) - Optional - Filter to keywords where the query domain's rank position is ≤ this value (1 = best/top organic result). - **rankChange.min** (number) - Optional - 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. - **rankChange.max** (number) - Optional - 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. - **costPerClick.min** (number) - Optional - Filter to keywords where the average cost per click (CPC) is ≥ this value. - **costPerClick.max** (number) - Optional - Filter to keywords where the average cost per click (CPC) is ≤ this value. ### Request Example ``` GET /websites/developer_spyfu?excludeTerms=free,cheap&searchVolume.min=1000&rank.max=10 ``` ### Response #### Success Response (200) - **keywords** (array) - A list of keyword objects matching the query criteria. - **keyword** (string) - The keyword itself. - **search_volume** (number) - The monthly search volume for the keyword. - **difficulty** (number) - The keyword difficulty score. - **rank** (number) - The current rank of the domain for the keyword. - **cpc** (number) - The average cost per click for the keyword. #### Response Example ```json { "keywords": [ { "keyword": "example keyword", "search_volume": 1500, "difficulty": 45, "rank": 5, "cpc": 1.25 } ] } ``` ``` -------------------------------- ### GET /competitors Source: https://developer.spyfu.com/reference/competitorsapi_gettopseocompetitors_get Retrieves a paginated list of competitor domains based on shared keyword overlap. ```APIDOC ## GET /competitors ### Description Retrieves a list of competitor domains competing for shared organic keywords. Includes metrics such as common keyword counts and overlap rank. ### Method GET ### Endpoint /competitors ### Parameters #### Query Parameters - **sortOrder** (string) - Optional - Order to sort results (Ascending, Descending). Default: Descending. - **pageSize** (integer) - Optional - The maximum number of rows returned (1-550). Default: 5. - **startingRow** (integer) - Optional - Row number to start the results with (1-550). Default: 1. ### Request Example GET /competitors?pageSize=5&startingRow=1&sortOrder=Descending ### Response #### Success Response (200) - **resultCount** (integer) - Number of results returned. - **totalMatchingResults** (integer) - Total number of competitor domains available. - **results** (array) - List of competitor objects. - **domain** (string) - The competitor domain name. - **commonTerms** (integer) - Number of shared keywords. - **rank** (number) - Overlap strength metric. #### Response Example { "resultCount": 5, "totalMatchingResults": 2500, "results": [ { "domain": "example.com", "commonTerms": 1432, "rank": 0.85 } ] } ``` -------------------------------- ### GET /organic-serp-keywords Source: https://developer.spyfu.com/reference/organicserpapi_getgainedclickskeywords_get Retrieves a list of organic keywords for a domain with various filtering, sorting, and pagination options. ```APIDOC ## GET /organic-serp-keywords ### Description Retrieves organic SERP keyword results for a specified domain. Includes detailed SEO metrics such as click estimates, ranking changes, and cost-per-click data. ### Method GET ### Endpoint /organic-serp-keywords ### Parameters #### Query Parameters - **sortOrder** (string) - Optional - Order to sort the results. Default: "Descending". Enum: ["Ascending", "Descending"] - **startingRow** (integer) - Optional - Row number to start the results with. Range: 1-10000. Default: 1 - **adultFilter** (boolean) - Optional - Exclude adult keywords. Default: true - **onlyAdultKeywords** (boolean) - Optional - Only include adult keywords. Default: false - **exactMatch** (boolean) - Optional - Apply exact match filtering for the query. ### Request Example GET /organic-serp-keywords?startingRow=1&adultFilter=true ### Response #### Success Response (200) - **resultCount** (integer) - Number of results returned - **results** (array) - List of keyword objects containing SEO metrics like RankChange, SeoClicks, and CostPerClick data. #### Response Example { "resultCount": 100, "results": [ { "RankChange": 2, "SeoClicks": 150, "BroadCostPerClick": 1.25 } ] } ``` -------------------------------- ### GET /websites/developer_spyfu/keywords Source: https://developer.spyfu.com/reference/paidserpapi_getnewkeywords_get Fetches detailed monthly metrics for a given keyword, including estimated clicks, costs, and competitor information. ```APIDOC ## GET /websites/developer_spyfu/keywords ### Description Retrieves detailed monthly metrics for a specific keyword, offering insights into paid search performance and competitive landscape. ### Method GET ### Endpoint /websites/developer_spyfu/keywords ### Parameters #### Query Parameters - **keyword** (string) - Required - The keyword to retrieve metrics for. #### Request Body This endpoint does not accept a request body. ### Response #### Success Response (200) - **keyword** (string) - The keyword itself. - **monthlySearches** (number) - Estimated monthly organic searches for the keyword. - **broadMonthlyClicks** (number) - Estimated monthly paid clicks for broad match targeting. - **phraseMonthlyClicks** (number) - Estimated monthly paid clicks for phrase match targeting. - **exactMonthlyClicks** (number) - Estimated monthly paid clicks for exact match targeting. - **broadMonthlyCost** (number) - Estimated monthly advertising spend for broad match targeting. - **phraseMonthlyCost** (number) - Estimated monthly advertising spend for phrase match targeting. - **exactMonthlyCost** (number) - Estimated monthly advertising spend for exact match targeting. - **paidCompetitors** (integer) - Total number of unique advertisers observed purchasing ads for this keyword over the last 14 months. - **distinctCompetitors** (array[string]) - List of domain names that have purchased ads for this keyword over the last 14 months. - **rankingHomepages** (integer) - Number of domain homepages ranking within the first 100 organic search results for this keyword. - **serpFeaturesCsv** (string) - CSV string listing SERP features present for this keyword. #### Response Example ```json { "keyword": "example keyword", "monthlySearches": 10000, "broadMonthlyClicks": 57019.8, "phraseMonthlyClicks": 38000, "exactMonthlyClicks": 29094.6, "broadMonthlyCost": 41604.9, "phraseMonthlyCost": 25542, "exactMonthlyCost": 19041.6, "paidCompetitors": 15, "distinctCompetitors": [ "example.com", "competitor1.com", "competitor2.com" ], "rankingHomepages": 8, "serpFeaturesCsv": "Featured Snippet,People Also Ask" } ``` ``` -------------------------------- ### GET /v2/seo/getNewTopPages Source: https://developer.spyfu.com/reference/toppagesapi_getnewtoppages_get Retrieves pages that have recently started generating significant organic traffic for a specific domain, helping identify emerging content strategies. ```APIDOC ## GET /v2/seo/getNewTopPages ### Description Returns pages that have recently started generating significant organic traffic for a domain. This endpoint identifies newly discovered high-performing content, revealing fresh opportunities and emerging content strategies. ### Method GET ### Endpoint /v2/seo/getNewTopPages ### Parameters #### Query Parameters - **query** (string) - Required - Domain or URL to analyze (e.g., example.com). - **keywordFilter** (string) - Optional - Filter to pages that rank for keywords containing this term. - **seoClicks.min** (number) - Optional - Filter to pages where estimated monthly organic clicks are ≥ this value. - **seoClicks.max** (number) - Optional - Filter to pages where estimated monthly organic clicks are ≤ this value. - **pageSize** (integer) - Optional - The maximum number of rows returned (default: 5, max: 1000). - **countryCode** (string) - Optional - The country code for the market to analyze. ### Request Example GET /v2/seo/getNewTopPages?query=example.com&pageSize=5 ### Response #### Success Response (200) - **pages** (array) - List of top performing pages. - **url** (string) - The URL of the page. - **clicks** (number) - Estimated monthly organic clicks. #### Response Example { "pages": [ { "url": "https://example.com/blog/new-post", "clicks": 150 } ] } ``` -------------------------------- ### Get New Top Pages Source: https://developer.spyfu.com/reference/toppagesapi_getnewtoppages_get Fetches pages that have recently started generating significant organic traffic for a given domain. This is useful for understanding emerging SEO trends and successful content strategies. ```APIDOC ## GET /websites/developer_spyfu/new_top_pages ### Description Returns pages that have recently started generating significant organic traffic for a domain. This endpoint identifies newly discovered high-performing content, revealing fresh opportunities and emerging content strategies that are driving SEO success. ### Method GET ### Endpoint /websites/developer_spyfu/new_top_pages ### Parameters #### Query Parameters - **query** (string) - Required - The domain to retrieve new top pages for (e.g., "example.com"). ### Request Example ``` GET /websites/developer_spyfu/new_top_pages?query=example.com ``` ### Response #### Success Response (200) - **pages** (array) - A list of objects, where each object represents a new top page and contains details such as URL, traffic metrics, and ranking information. #### Response Example ```json { "pages": [ { "url": "https://example.com/new-article", "organic_traffic": 1500, "ranking_keywords": 50, "last_updated": "2023-10-27T10:00:00Z" }, { "url": "https://example.com/another-page", "organic_traffic": 1200, "ranking_keywords": 45, "last_updated": "2023-10-26T09:00:00Z" } ] } ``` ``` -------------------------------- ### POST /keyword/bulk Source: https://developer.spyfu.com/reference/relatedkeywordsv2api_getkeywordsbybulksearchpost_post Retrieve comprehensive keyword metrics and intelligence for a large list of exact keywords. ```APIDOC ## POST /keyword/bulk ### Description Returns comprehensive keyword metrics and intelligence for a large list of exact keywords. This endpoint is designed for bulk analysis, providing search volume, competition data, and cost estimates. ### Method POST ### Endpoint /keyword/bulk ### Parameters #### Request Body - **keywords** (array of strings) - Required - A list of exact keywords to analyze. ### Request Example { "keywords": ["running shoes", "marathon training", "best sneakers"] } ### Response #### Success Response (200) - **keyword** (string) - The keyword analyzed. - **search_volume** (integer) - Monthly search volume. - **difficulty** (float) - Competition score. - **cpc** (float) - Estimated cost per click. #### Response Example { "results": [ { "keyword": "running shoes", "search_volume": 150000, "difficulty": 75.5, "cpc": 1.25 } ] } ``` -------------------------------- ### HMAC Authentication Example (Python) Source: https://developer.spyfu.com/reference/kombatapi_getcompetingppckeywords_get Provides an example of HMAC authentication, which involves signing requests with a secret key to ensure integrity and authenticity. This is a more secure method for API interactions. ```python import hmac import hashlib import base64 api_key = b"YOUR_SECRET_KEY" message = b"GET&/path/to/resource×tamp=123456789" signature = hmac.new(api_key, message, hashlib.sha256).digest() encoded_signature = base64.b64encode(signature).decode('utf-8') # The signature would typically be sent in a custom header, e.g., 'X-Signature' print(f"X-Signature: {encoded_signature}") ``` -------------------------------- ### GET /websites/developer_spyfu Source: https://developer.spyfu.com/reference/competitorsapi_getcombinedtopcompetitors_get Retrieves a list of PPC and SEO competitors for a given domain, including metrics like common terms and rank. ```APIDOC ## GET /websites/developer_spyfu ### Description Retrieves a list of PPC and SEO competitors for a given domain, including metrics like common terms and rank. ### Method GET ### Endpoint /websites/developer_spyfu ### Parameters #### Query Parameters - **domain** (string) - Required - The domain name for which to retrieve competitor data. - **country** (string) - Optional - The country code (e.g., 'us', 'gb') to filter competitor data by. - **pageSize** (integer) - Optional - The number of competitor results to return per page. Maximum value is 100. - **pageNumber** (integer) - Optional - The page number of the competitor results to retrieve. ### Request Example ```json { "example": "GET /websites/developer_spyfu?domain=example.com&country=us&pageSize=50&pageNumber=1" } ``` ### Response #### Success Response (200) - **ppcCompetitors** (array) - Array of competitor domains ranked by PPC keyword overlap and competitive strength. - **seoCompetitors** (array) - Array of competitor domains ranked by organic search keyword overlap and SEO competitive strength. #### Response Example ```json { "example": "{\n \"ppcCompetitors\": [\n {\n \"domain\": \"competitor1.com\",\n \"commonTerms\": 1500,\n \"rank\": 1.5\n }\n ],\n \"seoCompetitors\": [\n {\n \"domain\": \"competitor2.com\",\n \"commonTerms\": 1200,\n \"rank\": 2.1\n }\n ]\n}" } ``` #### Error Responses - **400** - Bad Request - Invalid parameters provided (e.g., invalid domain format, pageSize exceeds maximum, or invalid country code). - **401** - Unauthorized - Invalid API credentials or insufficient permissions to access competitor data. - **500** - Internal Server Error - A server-side error occurred while processing the request. ``` -------------------------------- ### GET /websites/developer_spyfu Source: https://developer.spyfu.com/reference/organicserpapi_getgainedrankskeywords_get Retrieves a list of keywords for a given website, including detailed SEO metrics and search volume data. Supports filtering, sorting, and pagination. ```APIDOC ## GET /websites/developer_spyfu ### Description Retrieves a list of keywords for a given website, including detailed SEO metrics and search volume data. Supports filtering, sorting, and pagination. ### Method GET ### Endpoint /websites/developer_spyfu ### Parameters #### Query Parameters - **SearchVolume** (object) - Optional - An object to filter results by search volume. Accepts a range of values. - **sortOrder** (string) - Optional - Order to sort the results. Enum: ["Ascending", "Descending"]. Default: "Descending" - **startingRow** (integer) - Optional - Row number to start the results with. Minimum: 1, Maximum: 10000. Default: 1 - **adultFilter** (boolean) - Optional - Exclude adult keywords considered unsafe for work. Default: true - **onlyAdultKeywords** (boolean) - Optional - Only include adult keywords considered unsafe for work. Default: false - **exactMatch** (boolean) - Optional - Indicates whether to apply exact match filtering for the query. If true, protocols and trailing slashes must be included in the query. ### Request Example ```json { "example": "Request Body Not Applicable for GET" } ``` ### Response #### Success Response (200) - **resultCount** (integer) - Number of results returned. - **results** (array) - An array of keyword objects, each containing comprehensive SEO metrics. #### Response Example ```json { "resultCount": 100, "results": [ { "RankChange": "Change in organic position from previous data update (positive values indicate ranking improvement; negative values indicate moving further down the SERP).", "SeoClicks": "Estimated number of organic clicks the domain gets from ranking on this keyword", "SeoClicksChange": "Change in estimated organic clicks from previous data update", "PercentMobileSearches": "Percentage breakdown of searches from mobile vs desktop devices", "PercentDesktopSearches": "Percentage breakdown of searches from desktop vs mobile devices", "PercentNotClicked": "Rate that searchers leave the SERP without clicking any result", "PercentPaidClicks": "Percentage of SERP clicks that went to paid ads", "PercentOrganicClicks": "Percentage of SERP clicks that went to organic results", "BroadCostPerClick": "Average amount advertisers pay per click for broad match ads on this keyword", "ExactCostPerClick": "Average amount advertisers pay per click for exact match ads on this keyword", "PhraseCostPerClick": "Average amount advertisers pay per click for phrase match ads on this keyword", "BroadMonthlyCost": "Estimated monthly advertising spend for broad match bidding", "ExactMonthlyCost": "Estimated monthly advertising spend for exact match bidding", "PhraseMonthlyCost": "Estimated monthly advertising spend for phrase match bidding", "TotalMonthlyClicks": "Total estimated clicks made on this SERP to any paid or organic results", "PaidCompetitors": "Total number of advertisers seen over the last 6 months for this keyword", "RankingHomepages": "Number of homepage URLs (vs deeper paths) ranking within first 100 results" } ] } ``` ``` -------------------------------- ### Get New Top Pages API Endpoint Source: https://developer.spyfu.com/reference/toppagesapi_getnewtoppages_get This OpenAPI definition describes the 'Get New Top Pages' GET endpoint for the SpyFu SEO Research API. It allows users to retrieve pages that have recently gained significant organic traffic for a specified domain or URL. The endpoint supports filtering by keywords, estimated organic clicks (min/max), and page size, with a required 'query' parameter for the domain or URL. ```json { "operationId": "TopPagesApi_GetNewTopPages_GET", "summary": "Get New Top Pages", "description": "Returns pages that have recently started generating significant organic traffic for a domain. This endpoint identifies newly discovered high-performing content, revealing fresh opportunities and emerging content strategies that are driving SEO success.\n\n[Visualize this API live on SpyFu](https://www.spyfu.com/seo/top-pages/domain?query=example.com) _(TODO - verify)_", "parameters": [ { "name": "query", "in": "query", "description": "Domain or URL to analyze. Accepts full domains (example.com), complete URLs (https://example.com/blog), subdomains (blog.example.com), or specific paths (example.com/products/).", "required": true, "schema": { "type": "string", "examples": [ "example.com" ] }, "example": "example.com" }, { "name": "keywordFilter", "in": "query", "description": "Filter to pages that rank for keywords containing this term. Helps narrow results to specific topics or content themes.", "schema": { "type": "string", "examples": [ "hosting" ] }, "example": "hosting" }, { "name": "seoClicks.min", "in": "query", "description": "Filter to pages where estimated monthly organic clicks are ≥ this value.", "schema": { "type": "number", "format": "float", "examples": [ "100" ] }, "example": "100" }, { "name": "seoClicks.max", "in": "query", "description": "Filter to pages where estimated monthly organic clicks are ≤ this value.", "schema": { "type": "number", "format": "float", "examples": [ 10000 ] }, "example": 10000 }, { "name": "pageSize", "in": "query", "description": "The maximum number of rows returned.", "schema": { "type": "integer", "format": "int32", "examples": [ 5 ], "default": 5, "maximum": 1000, "minimum": 1 }, "example": 5 }, { "name": "countryCode", "in": "query" } ] } ``` -------------------------------- ### POST /websites/developer_spyfu Source: https://developer.spyfu.com/reference/relatedkeywordsv2api_getkeywordsbybulksearchpost_post Retrieve bulk keywords for the public API with specified filtering criteria. ```APIDOC ## POST /websites/developer_spyfu ### Description This endpoint allows you to get bulk keywords for the public API. You can filter keywords based on various criteria such as country code, search volume, keyword difficulty, word count, and cost per click options. ### Method POST ### Endpoint /websites/developer_spyfu ### Parameters #### Request Body - **countryCode** (string) - Optional - The country to get results for. Defaults to 'US'. - **searchVolume** (object) - Optional - Filters keywords based on their search volume. - **min** (number) - Optional - Minimum search volume. - **max** (number) - Optional - Maximum search volume. - **liveSearchVolume** (object) - Optional - Filters keywords based on their live search volume. - **min** (number) - Optional - Minimum live search volume. - **max** (number) - Optional - Maximum live search volume. - **keywordDifficulty** (object) - Optional - Filters keywords based on their difficulty score. - **min** (number) - Optional - Minimum keyword difficulty. - **max** (number) - Optional - Maximum keyword difficulty. - **wordCount** (object) - Optional - Filters keywords based on the number of words they contain. - **min** (number) - Optional - Minimum word count. - **max** (number) - Optional - Maximum word count. - **clicks** (object) - Optional - Filters keywords based on the number of clicks they receive. - **min** (number) - Optional - Minimum clicks. - **max** (number) - Optional - Maximum clicks. - **costPerClickOption** (string) - Optional - Keyword matching option to filter results by. Allowed values: 'Broad', 'Exact'. ### Request Example ```json { "countryCode": "US", "searchVolume": { "min": 1000, "max": 10000 }, "keywordDifficulty": { "max": 70 }, "costPerClickOption": "Broad" } ``` ### Response #### Success Response (200) - **keywords** (array) - An array of keyword objects matching the criteria. - **keyword** (string) - The keyword itself. - **search_volume** (number) - The search volume for the keyword. - **difficulty** (number) - The keyword difficulty score. - **clicks** (number) - The number of clicks for the keyword. - **cost_per_click** (number) - The cost per click for the keyword. - **live_search_volume** (number) - The live search volume for the keyword. - **word_count** (number) - The number of words in the keyword. #### Response Example ```json { "keywords": [ { "keyword": "example keyword", "search_volume": 5000, "difficulty": 55, "clicks": 1200, "cost_per_click": 1.50, "live_search_volume": 4800, "word_count": 3 } ] } ``` ``` -------------------------------- ### Configure Get Most Profitable PPC Keywords Endpoint Source: https://developer.spyfu.com/reference/paidserpapi_getmostsuccessful_get This snippet defines the GET endpoint for retrieving successful PPC keywords. It includes query parameters for domain filtering, term inclusion/exclusion, and search volume constraints. ```json { "/v2/ppc/getMostSuccessful": { "get": { "operationId": "PaidSerpApi_GetMostSuccessful_GET", "parameters": [ { "name": "query", "in": "query", "required": true, "schema": { "type": "string" } }, { "name": "includeTerms", "in": "query", "schema": { "type": "string" } }, { "name": "searchVolume.min", "in": "query", "schema": { "type": "number" } } ] } } } ``` -------------------------------- ### GET /keywords Source: https://developer.spyfu.com/reference/paidserpapi_getnewkeywords_get Retrieve a list of keywords with filtering and sorting capabilities. ```APIDOC ## GET /keywords ### Description Fetches keyword data based on specified filters, pagination, and sorting preferences. ### Method GET ### Endpoint /keywords ### Parameters #### Query Parameters - **wordCount.max** (float) - Optional - Filter by the maximum number of words in the keyword. - **pageSize** (integer) - Optional - The maximum number of rows returned (1-10000, default: 5). - **countryCode** (string) - Optional - Country to get results for (default: US). - **sortBy** (string) - Optional - Column to sort by (default: SearchVolume). - **sortOrder** (string) - Optional - Sort direction for results (Ascending/Descending, default: Descending). - **startingRow** (integer) - Optional - The starting index for pagination. ### Request Example GET /keywords?pageSize=5&countryCode=US&sortBy=SearchVolume ### Response #### Success Response (200) - **data** (array) - List of keyword objects. - **totalCount** (integer) - Total number of records available. #### Response Example { "data": [ { "keyword": "example", "searchVolume": 1000 } ], "totalCount": 1 } ``` -------------------------------- ### GET /websites/developer_spyfu/keywords Source: https://developer.spyfu.com/reference/relatedkeywordsv2api_getkeywordsbybulksearch_get Fetches keyword metrics based on provided parameters. This endpoint allows for filtering by country, adult content, and returns detailed search volume, ranking difficulty, and click data. ```APIDOC ## GET /websites/developer_spyfu/keywords ### Description Fetches keyword metrics based on provided parameters. This endpoint allows for filtering by country, adult content, and returns detailed search volume, ranking difficulty, and click data. ### Method GET ### Endpoint /websites/developer_spyfu/keywords ### Parameters #### Query Parameters - **country** (string) - Optional - The country code for which to retrieve keyword data. Supported values: "UA", "UK", "US", "ZA". - **adultFilter** (boolean) - Optional - Exclude adult keywords considered unsafe for work. Defaults to true. - **onlyAdultKeywords** (boolean) - Optional - Only include adult keywords considered unsafe for work. Defaults to false. ### Request Example ```json { "example": "" } ``` ### Response #### Success Response (200) - **resultCount** (integer) - Number of results returned. - **totalMatchingResults** (integer) - The total number of results available that matches the query including items that might not be included in the returned results/page. - **results** (array) - An array of keyword objects, or null if no results are found. - **keyword** (string) - The keyword string, or null. - **searchVolume** (integer) - The estimated number of times this past month that people have searched this keyword. The numbers reflect searches done in the US on Google.com (or in the UK on Google.co.uk if you are looking at UK data). We blend data from multiple sources to give a truer snapshot of activity on this keyword., or null. - **liveSearchVolume** (integer) - This metric displays a more likely SV based on recent trends or out-of-date estimates. The original volume remains unchanged in any domain's rolled-up metrics., or null. - **rankingDifficulty** (integer) - We've calculated how difficult it would be to rank on this keyword. The score is based on a scale of 0-100 (with 100 being the most difficult to rank for). Compare this number to other keywords you're targeting to get an idea of how to prioritize your SEO campaign., or null. - **totalMonthlyClicks** (integer) - Description not available., or null. #### Response Example ```json { "resultCount": 100, "totalMatchingResults": 5000, "results": [ { "keyword": "red shoes", "searchVolume": 266000, "liveSearchVolume": 82000, "rankingDifficulty": 98, "totalMonthlyClicks": null } ] } ``` ``` -------------------------------- ### GET /keywords/advertising-metrics Source: https://developer.spyfu.com/reference/relatedkeywordsv2api_getalsobuysadsforkeywords_get Retrieves detailed advertising cost and click estimates for a specific keyword. ```APIDOC ## GET /keywords/advertising-metrics ### Description Retrieves the average cost-per-click, monthly click estimates, and monthly cost projections for a given keyword based on match types. ### Method GET ### Endpoint /keywords/advertising-metrics ### Parameters #### Query Parameters - **keyword** (string) - Required - The keyword to retrieve metrics for. ### Response #### Success Response (200) - **exactCostPerClick** (number) - Average cost per click for exact match. - **broadMonthlyClicks** (number) - Estimated monthly clicks for broad match. - **phraseMonthlyClicks** (number) - Estimated monthly clicks for phrase match. - **exactMonthlyClicks** (number) - Estimated monthly clicks for exact match. - **broadMonthlyCost** (number) - Estimated monthly spend for broad match. - **phraseMonthlyCost** (number) - Estimated monthly spend for phrase match. - **exactMonthlyCost** (number) - Estimated monthly spend for exact match. #### Response Example { "exactCostPerClick": 0.65, "broadMonthlyClicks": 57019.8, "phraseMonthlyClicks": 42150.3, "exactMonthlyClicks": 29094.6, "broadMonthlyCost": 41604.9, "phraseMonthlyCost": 25542.0, "exactMonthlyCost": 18911.5 } ``` -------------------------------- ### GET /competitors/combined Source: https://developer.spyfu.com/reference/competitorsapi_getcombinedtopcompetitors_get Retrieves a paginated list of competitor domains that compete in both paid and organic search, ranked by competitive overlap strength. ```APIDOC ## GET /competitors/combined ### Description Retrieves a paginated list of domains competing in both paid and organic search with overlap metrics and competitive strength indicators. ### Method GET ### Endpoint /competitors/combined ### Parameters #### Query Parameters - **sortOrder** (string) - Optional - Order to sort results. Default: "Descending". Enum: ["Ascending", "Descending"] - **pageSize** (integer) - Optional - The maximum number of rows returned. Range: 1-550. Default: 5 - **startingRow** (integer) - Optional - Row number to start the results with. Range: 1-550. Default: 1 ### Response #### Success Response (200) - **resultCount** (integer) - Number of results returned - **totalMatchingResults** (integer) - Total number of competitor domains available - **combinedCompetitors** (array) - Array of competitor domains ranked by combined SEO and PPC keyword overlap strength #### Response Example { "resultCount": 50, "totalMatchingResults": 5000, "combinedCompetitors": [ { "rank": 1.0, "domain": "example.com" } ] } ``` -------------------------------- ### GET /keywords/filter Source: https://developer.spyfu.com/reference/organicserpapi_getkeywordswheretheyoutrankyou_get Retrieves a list of keywords filtered by specific performance and SERP metrics. ```APIDOC ## GET /keywords/filter ### Description Filters keyword data based on click behavior, advertising costs, and competitor presence. ### Method GET ### Endpoint /keywords/filter ### Parameters #### Query Parameters - **percentNotClicked.max** (number) - Optional - Filter to keywords where the percentage of searches with no click is ≤ this value (0-100). - **percentPaidClicks.min** (number) - Optional - Filter to keywords where the share of SERP clicks going to paid ads (%) is ≥ this value (0-100). - **percentPaidClicks.max** (number) - Optional - Filter to keywords where the share of SERP clicks going to paid ads (%) is ≤ this value (0-100). - **percentOrganicClicks.min** (number) - Optional - Filter to keywords where the share of SERP clicks going to organic results (%) is ≥ this value (0-100). - **percentOrganicClicks.max** (number) - Optional - Filter to keywords where the share of SERP clicks going to organic results (%) is ≤ this value (0-100). - **monthlyCost.min** (number) - Optional - Filter to keywords where the estimated monthly advertising cost is ≥ this value. - **monthlyCost.max** (number) - Optional - Filter to keywords where the estimated monthly advertising cost is ≤ this value. - **monthlyCostOption** (string) - Optional - Match type: Broad, Exact, or Phrase. - **paidCompetitors.min** (number) - Optional - Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≥ this value. - **paidCompetitors.max** (number) - Optional - Filter to keywords where the number of distinct advertisers observed over the last 6 months is ≤ this value. ### Request Example GET /keywords/filter?percentPaidClicks.min=20&monthlyCost.max=5000 ### Response #### Success Response (200) - **results** (array) - List of filtered keyword objects. #### Response Example { "status": "success", "data": [] } ``` -------------------------------- ### GET /websites/developer_spyfu Source: https://developer.spyfu.com/reference/organicserpapi_getnewlyrankedkeywords_get Retrieves a list of organic search keywords for a given website, along with comprehensive SEO metrics. ```APIDOC ## GET /websites/developer_spyfu ### Description Retrieves a list of organic search keywords for a given website, along with comprehensive SEO metrics including rankings, click estimates, and SERP analysis data. ### Method GET ### Endpoint /websites/developer_spyfu ### Parameters #### Query Parameters - **website** (string) - Required - The domain name for which to retrieve keyword data. - **country** (string) - Optional - The country code for which to retrieve data (e.g., 'us', 'gb'). Defaults to 'us'. ### Request Example ``` GET /websites/developer_spyfu?website=example.com&country=us ``` ### Response #### Success Response (200) - **results** (array) - An array of objects, where each object represents an organic search keyword with its associated SEO metrics. - **keyword** (string) - The keyword for which this domain ranks organically in the top 100 search results. - **topRankedUrl** (string) - The highest ranking URL from this domain for this specific keyword. - **rank** (integer) - Current organic search position for this keyword (1 = top position). - **rankChange** (integer) - Change in ranking position since the previous measurement period. - **searchVolume** (integer) - Monthly search volume for this keyword. - **keywordDifficulty** (integer) - SEO difficulty score (1-100) indicating how challenging it would be to rank organically for this keyword. - **broadCostPerClick** (number) - Average cost per click for broad match advertising on this keyword. - **phraseCostPerClick** (number) - Average cost per click for phrase match advertising on this keyword. - **exactCostPerClick** (number) - Average cost per click for exact match advertising on this keyword. #### Response Example ```json { "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 } ] } ``` ``` -------------------------------- ### GET /keywords/filter Source: https://developer.spyfu.com/reference/organicserpapi_getlostclickskeywords_get Retrieves a list of keywords filtered by specific performance and competitive metrics. ```APIDOC ## GET /keywords/filter ### Description Filters keyword data based on SERP click distribution, advertising costs, and competitive landscape metrics. ### Method GET ### Endpoint /keywords/filter ### Parameters #### Query Parameters - **percentPaidClicks.max** (number) - Optional - Filter to keywords where the share of SERP clicks going to paid ads (%) is ≤ this value (range 0-100). - **percentOrganicClicks.min** (number) - Optional - Filter to keywords where the share of SERP clicks going to organic results (%) is ≥ this value (range 0-100). - **percentOrganicClicks.max** (number) - Optional - Filter to keywords where the share of SERP clicks going to organic results (%) is ≤ this value (range 0-100). - **monthlyCost.min** (number) - Optional - Filter to keywords where the estimated monthly advertising cost is ≥ this value. - **monthlyCost.max** (number) - Optional - Filter to keywords where the estimated monthly advertising cost is ≤ this value. - **monthlyCostOption** (string) - Optional - Match type for monthly cost filtering (Broad, Exact, Phrase). - **paidCompetitors.min** (number) - Optional - Filter to keywords where the number of distinct advertisers observed over the last 14 months is ≥ this value. - **paidCompetitors.max** (number) - Optional - Filter to keywords where the number of distinct advertisers observed over the last 14 months is ≤ this value. - **rankingHomepages.min** (number) - Optional - Filter to keywords where the number of homepage/root-domain URLs in the top 100 results is ≥ this value. - **rankingHomepages.max** (number) - Optional - Filter to keywords where the number of homepage/root-domain URLs in the top 100 results is ≤ this value. ### Request Example GET /keywords/filter?monthlyCost.min=100&monthlyCostOption=Broad ### Response #### Success Response (200) - **results** (array) - List of filtered keyword objects. #### Response Example { "results": [ { "keyword": "example keyword", "monthlyCost": 150, "percentOrganicClicks": 75 } ] } ``` -------------------------------- ### GET /websites/developer_spyfu Source: https://developer.spyfu.com/reference/kombatapi_getcompetingseokeywords_get Retrieves keyword data with advanced filtering capabilities. You can filter by metrics like 'notClickedSearchesPercentage', 'paidClickSearchPercentage', 'organicClicksSearchPercentage', 'monthlyCost', 'rankingHomepages', 'adCount', and 'wordCount'. The 'monthlyCostOption' parameter allows specifying the matching type for monthly cost filtering. ```APIDOC ## GET /websites/developer_spyfu ### Description Retrieves keyword data with advanced filtering capabilities. You can filter by metrics like 'notClickedSearchesPercentage', 'paidClickSearchPercentage', 'organicClicksSearchPercentage', 'monthlyCost', 'rankingHomepages', 'adCount', and 'wordCount'. The 'monthlyCostOption' parameter allows specifying the matching type for monthly cost filtering. ### Method GET ### Endpoint /websites/developer_spyfu ### Parameters #### Query Parameters - **notClickedSearchesPercentage.min** (number) - Optional - 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. - **notClickedSearchesPercentage.max** (number) - Optional - 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. - **paidClickSearchPercentage.min** (number) - Optional - Filter by the percentage of clicks that go to ads. - **paidClickSearchPercentage.max** (number) - Optional - Filter by the percentage of clicks that go to ads. - **organicClicksSearchPercentage.min** (number) - Optional - Filter by the percentage of clicks that go to organic results, not ads. - **organicClicksSearchPercentage.max** (number) - Optional - Filter by the percentage of clicks that go to organic results, not ads. - **monthlyCost.min** (number) - Optional - Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption` - **monthlyCost.max** (number) - Optional - Filter by the monthly cost of the keyword. This will use the keyword matching option selected in `monthlyCostOption` - **monthlyCostOption** (string) - Optional - Monthly Cost keyword matching option to filter results by. Enum: ["Broad", "Exact", "Phrase"]. Example: "Broad" - **rankingHomepages.min** (number) - Optional - Homepages on the SERP range to filter results by. - **rankingHomepages.max** (number) - Optional - Homepages on the SERP range to filter results by. - **adCount.min** (number) - Optional - Filter by the number of total advertisers - **adCount.max** (number) - Optional - Filter by the number of total advertisers - **wordCount.min** (number) - Optional - Filter by the number of words in the keyword. - **wordCount.max** (number) - Optional - Filter by the number of words in the keyword. - **onlyAdultKeywords** (boolean) - Optional - Filter to include only adult keywords. ### Response #### Success Response (200) - **keyword** (string) - The keyword. - **monthlySearches** (integer) - The estimated number of monthly searches for the keyword. - **monthlyCost** (number) - The estimated monthly cost for the keyword. - **competition** (number) - The competition level for the keyword. - **paidClicks** (integer) - The number of paid clicks for the keyword. - **organicClicks** (integer) - The number of organic clicks for the keyword. - **adCount** (integer) - The number of advertisers for the keyword. - **rankingHomepages** (integer) - The number of homepages ranking for the keyword. - **wordCount** (integer) - The number of words in the keyword. - **notClickedSearchesPercentage** (number) - The percentage of searches that do not result in a click. - **paidClickSearchPercentage** (number) - The percentage of clicks that go to ads. - **organicClicksSearchPercentage** (number) - The percentage of clicks that go to organic results. #### Response Example { "keywords": [ { "keyword": "example keyword", "monthlySearches": 1000, "monthlyCost": 50.5, "competition": 0.75, "paidClicks": 200, "organicClicks": 600, "adCount": 10, "rankingHomepages": 5, "wordCount": 3, "notClickedSearchesPercentage": 10.5, "paidClickSearchPercentage": 25.0, "organicClicksSearchPercentage": 75.0 } ] } ```