YouTube search-interest API
MCP serverSearchThis app lets your AI look up YouTube search volume and trending videos over time. Once added, your AI can check how much a topic is being searched on YouTube and which videos are trending, and how both change over time. This helps you see what people are watching and searching for before you plan content or pick a topic.
Available today. Use it from your connected AI after setup.
Needs your own account with this service. Credentials stay encrypted.
Get a free key at trendsapi.ai and add it to finish setup. Then ask your AI to check search volume or trending videos for any topic you are interested in.
Then ask your AI: use the trends get growth tool from YouTube search-interest API
What your AI can do with it
- Look up YouTube search volume for a topic
- See which videos are trending on YouTube
- Track how search volume changes over time
- Track how trending videos change over time
From the project's README
As published by trendsapi-ai/youtube-trends-api in README.md.
YouTube search interest trends via the Trends API. History, growth, and live YouTube trending.
Key: trendsapi.ai/#get-key. HTTP contract and every source: trendsapi-ai/trendsapi.
Authentication
pip install trendsapi-youtube
export TRENDSAPI_KEY=your_key
Python 3.9+. Same key as the HTTP API.
from trendsapi_youtube import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
Keyword helpers default to source: "youtube". Pass source= to hit any other platform with the same client. Official full client (every source, no preset): trendsapi.
Methods
| Method | REST mode | Returns |
|---|---|---|
get_time_series(keyword, source=, data_mode=) | get_time_series | list[TrendsDataPoint] |
get_growth(keyword, percent_growth=, source=, data_mode=) | get_growth | GetGrowthResponse |
get_live(limit=, offset=, category=) | get_top_trends | GetTopTrendsResponse |
get_top_trends(type=, ...) | get_top_trends | GetTopTrendsResponse |
source is lowercase (youtube). type is exact (YouTube Trending). Mixing them is a 400.
from trendsapi_youtube import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
series = client.get_time_series("sourdough starter")
print(series[-1].date, series[-1].value)
growth = client.get_growth("sourdough starter", percent_growth=["3M", "12M"])
print(growth.results[0].growth, growth.results[0].direction)
hot = client.get_live(limit=10)
print(hot.data) # [[1, "..."], ...]
get_time_series
points = client.get_time_series("sourdough starter")
Each point:
| Field | Always | Meaning |
|---|---|---|
date | yes | YYYY-MM-DD |
value | yes | 0-100 index for this series |
keyword | yes | Echo |
volume | no | Absolute volume when available |
source or datatype | no | Pipeline label |
Python returns list[TrendsDataPoint]. Use .date and .value, not ["date"].
JS returns the same fields as object properties.
get_growth
g = client.get_growth("sourdough starter", percent_growth=["12M", "3M", "YTD"])
print(g.results[0].growth, g.results[0].direction)
percent_growth default: ["12M"]. Presets: 7D 14D 30D 1M 2M 3M 6M 9M 12M/1Y 18M 24M/2Y 36M/3Y 48M 60M/5Y MTD QTD YTD. Custom: {"name": "Launch", "recent": "2024-06-01", "baseline": "2024-01-01"}.
| Field | Meaning |
|---|---|
search_term | Keyword |
data_source | Source |
results | One object per window (period, growth, direction, dates, values) |
metadata | Counts / success flag |
Several windows still count as one request. Python: growth.results[0].growth. JS: growth.results[0].growth.
get_live
hot = client.get_live(limit=10)
| Field | Meaning |
|---|---|
as_of_ts | Snapshot time |
type | Feed name |
limit, offset, count | Pagination |
data | [rank, label] rows |
Python: hot.data. JS: hot.data. Optional offset= and category= (Amazon Best Sellers by Category, Top Websites only).
Async
import asyncio
from trendsapi_youtube import AsyncTrendsAPI
async def main():
c = AsyncTrendsAPI()
return await asyncio.gather(
c.get_time_series("sourdough starter"),
c.get_time_series("sourdough starter", source="google search"),
)
asyncio.run(main())
Each 200 is one billed request.
Pandas
from dataclasses import asdict
import pandas as pd
from trendsapi_youtube import TrendsAPI
df = pd.DataFrame(asdict(p) for p in TrendsAPI().get_time_series("sourdough starter"))
df["date"] = pd.to_datetime(df["date"])
print(df.set_index("date")["value"].resample("ME").mean().tail())
JavaScript / TypeScript
npm install trendsapi-youtube
Node 18+, Deno, Bun, Workers. Same API key. Field tables above apply.
Methods
| Method | REST mode | Returns |
|---|---|---|
getTimeSeries(keyword, { source, data_mode }) | get_time_series | weekly points |
getGrowth(keyword, { percent_growth, source, data_mode }) | get_growth | growth object |
getLive({ limit, offset, category }) | get_top_trends | live feed |
getTopTrends({ type, ... }) | get_top_trends | live feed |
import { TrendsAPI } from "trendsapi-youtube";
const client = new TrendsAPI({ apiKey: process.env.TRENDSAPI_KEY! });
const series = await client.getTimeSeries("sourdough starter");
console.log(series.at(-1)?.date, series.at(-1)?.value);
const growth = await client.getGrowth("sourdough starter", {
percent_growth: ["3M", "12M"],
});
console.log(growth.results[0].growth, growth.results[0].direction);
const live = await client.getLive({ limit: 10 });
console.log(live.data); // [[1, "..."], ...]
Call (curl)
| Field | Value |
|---|---|
| Endpoint | POST https://api.trendsapi.ai/api |
| Auth | Authorization: Bearer $TRENDSAPI_KEY |
| History | source: youtube with get_time_series or get_growth |
| Keyword | Search phrase, e.g. sourdough starter |
Live type | YouTube Trending |
curl -sS -X POST https://api.trendsapi.ai/api \
-H "Authorization: Bearer $TRENDSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"get_time_series","source":"youtube","keyword":"sourdough starter"}'
Source notes
valueis 0-100 for this term on YouTube only, not video metadata.typeisYouTube Trending, notyoutube.- No
regionCodeon this endpoint.
Errors
| HTTP | Client |
|---|---|
| 200 | Parsed payload. Python dataclasses / JS typed objects |
| 400 | Raises. Fix source or type spelling |
| 401 | Raises. Check TRENDSAPI_KEY |
| 404 | Raises. No series for that keyword. Do not retry |
| 429 | Raises. Quota |
| 5xx | Client retries, then raises |
The HTTP body field is a JSON string. SDKs decode it. Raw curl must parse body a second time.
Site: https://trendsapi.ai/trends/youtube-trends.
License
MIT. See LICENSE.
Tools it offers (3)
What this server listed when ahel dialed its public endpoint in Sep 2026, with no key and no account of yours. The names are the server’s own.
trends___get_growthtrends___get_time_seriestrends___get_top_trends
Signals
- GitHub stars
- 1
- Last commit
- Aug 2026
Advanced
- Delivery
- youtube MCP server → your ahel gateway (mcp.ahel.ai) → every connected AI client.
- Catalog kind
- mcp-server
- Gateway key
ai-trendsapi-youtube- Source
- github.com/trendsapi-ai/youtube-trends-api
- Hosted endpoint
https://youtube.api.trendsapi.ai/mcp