Keyword Search Volume, CPC, Keyword Ideas and Google Trends API
Google keyword search volume, CPC, difficulty, keyword ideas and Google Trends. Pay per call (x402)
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"keyword-search-volume-google-trends": {
"url": "https://keywords.duoleads.com/mcp"
}
}
}Remote endpoints
https://keywords.duoleads.com/mcpstreamable-httpWhat it can do
Tool inventory
Tools (6)
🟢keyword_overview(keywords, locationCode, languageCode, country, includeMonthly)
Search volume, CPC, competition, keyword difficulty and search intent for up to 100 keywords in one $0.04 call (Google Ads data). Use when you already have a keyword list to prioritise. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Keywords without data are left out of results and listed in missing (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"minItems": 1,
"maxItems": 100,
"type": "array",
"items": {
"type": "string",
"maxLength": 320
},
"description": "Keywords to look up (1-100; each at most 80 characters). Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing, and a request with no keyword left to look up is a free 400 (the one exception to openverbs schema compatibility)."
},
"locationCode": {
"description": "Google Ads location code (geo target ID). Default 2840 (United States); an unsupported code falls back to 2840 (United States).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"languageCode": {
"description": "Language code (2-letter). Default en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used.",
"type": "string",
"maxLength": 16
},
"country": {
"description": "ISO 3166-1 alpha-2 code or country name, used when locationCode is absent (uk = gb).",
"type": "string",
"maxLength": 64
},
"includeMonthly": {
"description": "Add each keyword's monthly search volumes.",
"type": "boolean"
}
},
"required": [
"keywords"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢keyword_search_volume(keywords, country, lang, includeMonthly)
Google search volume, CPC, competition, keyword difficulty and intent for up to 20 comma-separated keywords in one $0.04 GET (Google Ads data). Use when you need monthly search volume for a few keywords in a country. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. Up to 100 keywords for the same $0.04: POST /v1/keyword-overview. Keywords without data are listed in missing (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keywords": {
"minItems": 1,
"maxItems": 20,
"type": "array",
"items": {
"type": "string",
"maxLength": 320
},
"description": "1-20 keywords (no commas inside a keyword; each at most 80 characters). Whitespace and control characters are normalised to single spaces and keywords to lower case; a keyword that is then empty, over 10 words or over 80 characters is not looked up and is listed in missing; none left to look up is a free 400."
},
"country": {
"description": "ISO 3166-1 alpha-2 country code of a supported location (us, gb, de, ...; uk = gb). Default us.",
"type": "string",
"maxLength": 8
},
"lang": {
"description": "Language code offered for the country (en, es, de, ...). Default en when offered.",
"type": "string",
"maxLength": 16
},
"includeMonthly": {
"description": "Add each keyword's monthly search volumes.",
"type": "boolean"
}
},
"required": [
"keywords"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢keyword_ideas(keyword, limit, locationCode, languageCode, country, ...)
Keyword ideas for a seed keyword, each with Google search volume, CPC, competition, keyword difficulty and search intent; up to 100 ideas in one $0.04 call (Google Ads data). Use when you need related keywords to target. volume = avg monthly searches, cpc in USD, competition 0-1, difficulty 0-100. No ideas returns empty results (still charged). Bad input is free; upstream errors are not charged. Price: $0.04 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string",
"maxLength": 320,
"description": "Seed keyword to expand (at most 80 characters; whitespace, control characters and case are normalised; a seed then empty, over 10 words or over 80 characters is a free 400)."
},
"limit": {
"description": "Maximum ideas to return (1-100). Default 20.",
"type": "integer",
"minimum": 1,
"maximum": 100
},
"locationCode": {
"description": "Google Ads location code (geo target ID). Default 2840 (United States); an unsupported code falls back to 2840 (United States).",
"type": "integer",
"minimum": -9007199254740991,
"maximum": 9007199254740991
},
"languageCode": {
"description": "Language code (2-letter). Default en. An unsupported location falls back to 2840 (United States) with en (or the requested language if the United States offers it); a supported location with a language it does not offer uses that location's default language (en if offered). Either way market.fallback is true and market.warnings says what was used.",
"type": "string",
"maxLength": 16
},
"country": {
"description": "ISO 3166-1 alpha-2 code or country name, used when locationCode is absent.",
"type": "string",
"maxLength": 64
},
"includeMonthly": {
"description": "Add each idea's monthly search volumes.",
"type": "boolean"
}
},
"required": [
"keyword"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢google_trends(keyword, country, timeframe)
Google Trends interest over time for one keyword: a dated 0-100 series for a country or worldwide, past 7 days to 5 years, in one $0.045 GET. Use when you need search-interest trends, seasonality or demand direction for a keyword. Daily points for short windows, weekly for 12 months. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Price: $0.045 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"country": {
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide.",
"type": "string",
"maxLength": 8
},
"timeframe": {
"description": "Time window. Default past_12_months.",
"type": "string",
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
]
}
},
"required": [
"keyword"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢google_trends_related_queries(keyword, country, timeframe)
Google Trends related queries for one keyword: the top related searches (0-100) and the rising ones (% growth), for a country or worldwide, past 7 days to 5 years, in one $0.03 GET. Use when you need query expansion, content ideas or emerging searches around a keyword. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Price: $0.03 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"country": {
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide.",
"type": "string",
"maxLength": 8
},
"timeframe": {
"description": "Time window. Default past_12_months.",
"type": "string",
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
]
}
},
"required": [
"keyword"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}🟢google_trends_by_region(keyword, country, timeframe)
Google Trends interest by region for one keyword: 0-100 interest per subregion of a country (or per country worldwide), past 7 days to 5 years, in one $0.03 GET. Use when you need where a keyword is searched most, for geo-targeting or local market research. A live call takes up to about 30 s. Bad input is free; upstream errors are not charged. Price: $0.03 per successful call, paid over x402 (USDC on Base); pass the payment in _meta["x402/payment"].
Input Schema
{
"type": "object",
"properties": {
"keyword": {
"type": "string",
"minLength": 1,
"maxLength": 100,
"description": "One keyword or phrase (2-100 characters, no commas)."
},
"country": {
"description": "ISO 3166-1 alpha-2 country code (us, gb, de, ...; uk = gb). Omit for worldwide.",
"type": "string",
"maxLength": 8
},
"timeframe": {
"description": "Time window. Default past_12_months.",
"type": "string",
"enum": [
"past_7_days",
"past_30_days",
"past_90_days",
"past_12_months",
"past_5_years"
]
}
},
"required": [
"keyword"
],
"$schema": "http://json-schema.org/draft-07/schema#"
}Community
Evidence