For AI agents and developers

MCP and AI agent access

Give an AI agent daily Google search volume for any keyword: history, a 45-day forecast and your tracked keyword list.

There are three ways for an agent to reach DailySearchVolume.com data. All three return the same numbers: an estimate of Google searches for each day, plus a 45-day forecast.

  • MCP server for agents such as Claude, Cursor and other MCP clients.
  • WebMCP tools that every page registers in browsers that support WebMCP.
  • REST API with an OpenAPI specification, for any agent framework that can call HTTP.

The free public keywords, the same ones shown on public keyword pages, need no account or API key. Your own tracked keywords need an API key from My Account on a Growth plan or higher.

MCP server

The DSV MCP server exposes three tools over streamable HTTP:

ToolWhat it doesNeeds an API key
dsv_get_keyword_dataDaily search volume for a keyword and locale, as JSON (existing history and predicted 45-day forecast) or CSVOnly for keywords that are not public
dsv_list_keywordsLists your tracked keywords, or the free public keywords without a keyFor your own list
dsv_add_keywordAdds a keyword and locale to your tracker, optionally in a groupYes

The server is a thin wrapper around the REST API below, so you can run it yourself in a few lines of Python with FastMCP:

import os, requests
from fastmcp import FastMCP

DSV = "https://www.dailysearchvolume.com"
HEADERS = {"User-Agent": "my-agent/1.0", "X-DSV-Source": "mcp"}
if os.getenv("DSV_API_KEY"):
    HEADERS["X-API-KEY"] = os.environ["DSV_API_KEY"]

mcp = FastMCP(name="Daily Search Volume")

@mcp.tool(name="dsv_get_keyword_data")
def get_keyword_data(keyword: str, locale: str = "en-us", type: str = "json") -> str:
    """Daily Google search volume for a keyword. locale: en-us, en-ca, en-gb, all-all, ..."""
    r = requests.get(f"{DSV}/keyword_data/{locale}/{keyword}", params={"type": type}, headers=HEADERS)
    return r.text

@mcp.tool(name="dsv_list_keywords")
def list_keywords(scope: str = "free") -> str:
    """List keywords. scope="free" lists public keywords; "" lists your tracked keywords."""
    r = requests.get(f"{DSV}/list_keywords", params={"type": "json", "scope": scope}, headers=HEADERS)
    return r.text

@mcp.tool(name="dsv_add_keyword")
def add_keyword(keyword: str, locale: str = "en-us", group: str = "") -> str:
    """Add a keyword to your DailySearchVolume.com tracker (needs DSV_API_KEY)."""
    r = requests.post(f"{DSV}/submit_keywords", data={"keyword": keyword, "locale": locale, "group": group}, headers=HEADERS)
    return r.text

if __name__ == "__main__":
    mcp.run(transport="streamable-http", host="127.0.0.1", port=9169)

Then point your MCP client at it. For example, in a client that reads an mcpServers config:

{
  "mcpServers": {
    "dailysearchvolume": { "url": "http://127.0.0.1:9169/mcp" }
  }
}

Ask the agent something like "How did daily searches for nvidia change over the last 30 days, and what does the forecast say?" and it will call dsv_get_keyword_data.

WebMCP tools on every page

Every page registers these tools with document.modelContext in browsers that support WebMCP. A browser agent can call them from the homepage, a group page, an article, or anywhere else on the site:

  • dsv_get_keyword_data returns daily history and the 45-day forecast for a keyword and locale.
  • dsv_list_keywords lists the free public keywords.
  • dsv_add_keyword adds a keyword to a signed-in paid account, optionally in a named group.

Keyword pages, such as chatgpt, also register tools for the chart on that page:

  • dsv_get_current_keyword_summary reads the page's daily history, forecast and 7-day, 30-day and year-on-year changes.
  • dsv_set_current_chart_view changes the chart range and rolling average.
  • dsv_add_current_keyword_to_tracker adds the keyword visible on the page to a signed-in account.

Add ?webmcp-demo to any page URL to see which tools registered in your browser.

REST API

Any agent that can make HTTP requests can use the API directly. Send a descriptive User-Agent, and an X-API-KEY header for keywords that are not public.

curl -A "my-agent/1.0" "https://www.dailysearchvolume.com/keyword_data/en-us/chatgpt?type=json"

curl -A "my-agent/1.0" -H "X-API-KEY: $DSV_API_KEY" \
  "https://www.dailysearchvolume.com/keyword_data/en-us/your%20keyword?type=csv"

The JSON response has two arrays: existing, with [date, searches] for each day of history, and predicted, with the same shape for the next 45 days. Full details are in the API documentation and the OpenAPI document.