REST API Reference
One POST endpoint. Set mode in the JSON body to choose time series, growth, or top trends.
Get my free API key
By continuing you agree to our Terms & Privacy Policy.
Nothing there? Check spam or .
Optional — tell us more to tailor your setup
What are you working on?
How will you connect?
Connect
Add to your AI in 30 seconds
How will you connect to TrendsMCP?
Connect through MCP
Add Trends MCP to Claude, Cursor, Windsurf, or VS Code. Pick your client below.
Which client are you using?
Or configure manually
Cursor Settings → Tools & MCP → Add a Custom MCP Server
"trends-mcp": { "url": "https://api.trendsmcp.ai/mcp", "transport": "http", "headers": { "Authorization": "Bearer YOUR_API_KEY" } }
Mac / Linux — ~/.cursor/mcp.json
Windows — %USERPROFILE%\.cursor\mcp.json
↑ Sign up above first to get your API key — the config won't work without it.
Opens Claude with Name and URL pre-filled — review and click Add.
Manual: Settings → Customize → Connectors https://www.trendsmcp.ai/mcp
Or configure manually
User → Settings → Developer → Edit Config — add inside mcpServers
"trends-mcp": { "command": "npx", "args": [ "-y", "mcp-remote", "https://api.trendsmcp.ai/mcp", "--header", "Authorization:${AUTH_HEADER}" ], "env": { "AUTH_HEADER": "Bearer YOUR_API_KEY" } }
Mac — ~/Library/Application Support/Claude/claude_desktop_config.json
Windows — %APPDATA%\Claude\claude_desktop_config.json
Fully quit and restart Claude Desktop after saving.
Windsurf
Settings → Advanced Settings → Cascade → Add custom server +
"trends-mcp": { "url": "https://api.trendsmcp.ai/mcp", "transport": "http", "headers": { "Authorization": "Bearer YOUR_API_KEY" } }
Mac / Linux — ~/.codeium/windsurf/mcp_config.json
Windows — %USERPROFILE%\.codeium\windsurf\mcp_config.json
Or: Command Palette → Windsurf: Configure MCP Servers
VS Code
Extensions sidebar → search @mcp trends-mcp → Install — or paste manually into .vscode/mcp.json inside servers
"trends-mcp": { "type": "http", "url": "https://api.trendsmcp.ai/mcp", "headers": { "Authorization": "Bearer YOUR_API_KEY" } }
Paste into .vscode/mcp.json, or:
Command Palette (⇧⌘P / Ctrl+Shift+P) → MCP: Add Server
Connect through API
Call the REST API directly from your code. Try a live request below.
↑ Sign up above first to get your API key. Live requests require it.
Authentication
An account is required to connect — both for MCP and the REST API. Sign up for free with your email and we'll send your API key instantly (100 requests/month, no credit card). Every request must then include that API key as a Bearer token in the Authorization header. How calls are counted is defined below (same rules for REST and MCP).
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"get_time_series","source":"google search","keyword":"bitcoin"}'import requests
res = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={"mode": "get_time_series", "source": "google search", "keyword": "bitcoin"}
)
res.raise_for_status()
data = res.json()const res = await fetch("https://api.trendsmcp.ai/api", {
method: "POST",
headers: {
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json"
},
body: JSON.stringify({ mode: "get_time_series", source: "google search", keyword: "bitcoin" })
});
const data = await res.json();What counts as a request
Each successful hit against the data API uses one unit of your monthly quota.
mode: "get_time_series"Historical weekly data for one source + keyword. One HTTP request = one quota unit.
mode: "get_growth"Point-to-point % change for one source + keyword. All percent_growth periods in the same call count as one request.
mode: "get_top_trends"Counted per feed (type) and per page. Example with limit 25: offset 0 is one request, offset 25 is another for the same type. Different feeds are separate. If one response includes several feeds, each feed is counted per page on its own.
Data Sources
Two types of sources are available, accessed via different operations. Keyword sources return a historical time series or growth metric for a specific keyword. Live feeds return the top-ranked items on a platform right now. No keyword needed.
Keyword sources (Get Trends & Get Growth)
Pass the source value below in your request body alongside keyword. On REST, set mode to "get_time_series" (time series) or "get_growth" (period-over-period %). For Get Growth, pass one source or a comma-separated list (e.g. amazon, tiktok, youtube). For Get Trends, pass one source per request. Scores are normalized to a 0–100 scale where the pipeline supports it.
| source | Description | Keyword format |
|---|---|---|
google search | Google search volume | Any keyword or phrase |
google images | Google image search volume | Any keyword or phrase |
google news | Google News search volume | Any keyword or phrase |
google shopping | Google Shopping search volume | Any keyword or phrase |
youtube | YouTube search volume | Any keyword or phrase |
tiktok | TikTok hashtag volume | Hashtag or topic |
reddit | Subreddit subscribers | Subreddit name only, no r/ prefix |
amazon | Amazon product search volume | Product name or category |
wikipedia | Wikipedia page views | Article title or topic |
news volume | News article mention volume | Any keyword or phrase |
news sentiment | News sentiment score (positive / negative) | Any keyword or phrase |
app downloads | Android app download estimates (AppBrain) | Android bundle ID e.g. com.openai.chatgpt |
app rankings | Android app store ranking charts (AppBrain) | Android bundle ID e.g. com.himshers.hims |
npm | npm package weekly downloads | Exact package name, case-sensitive e.g. react, @babel/core |
steam | Steam concurrent players (monthly) | Game display name e.g. Elden Ring (first Steam search result) |
Live feeds (Get Top Trends)
Pass the type value below with mode: "get_top_trends". No keyword needed. Optional category filter for Amazon Best Sellers by Category and Top Websites. Returns the current ranked leaders on that platform (e.g. the top 25 trending hashtags on TikTok right now).
| type | Platform / feed |
|---|---|
Google Trends | Top trending search terms on Google right now |
Google News Top News | Top news stories from Google News |
TikTok Trending Hashtags | Top trending hashtags on TikTok |
TikTok Trending Searches | Top trending search terms on TikTok |
TikTok Shop Hot Products | Top hot products on TikTok Shop |
YouTube Trending | Top trending videos on YouTube |
X (Twitter) Trending | Top trending topics on X |
Reddit Hot Posts | Hottest posts on Reddit's front page |
Reddit World News | Top posts in r/worldnews |
Wikipedia Trending | Most-viewed Wikipedia articles today |
Amazon Best Sellers Top Rated | Amazon top-rated best sellers across all categories |
Amazon Best Sellers by Category | Amazon best sellers filtered by product category |
App Store Top Free | Top free apps on the iOS App Store |
App Store Top Paid | Top paid apps on the iOS App Store |
Google Play | Top apps on Google Play |
Top Websites | Most-visited websites globally by traffic rank |
Spotify Top Podcasts | Top podcasts on Spotify |
Steam Most Played | Top games by concurrent live players |
GitHub Trending Repos | Daily trending repositories across all languages |
IMDb MOVIEmeter | Top 100 most-popular movies by user activity |
Open Library Trending Books | Daily trending books from Open Library |
About this data
Cross-platform trend indices on a unified, normalized scale, produced by Trends MCP's analytics pipeline.
API modes
Every call is POST https://api.trendsmcp.ai/api with Authorization: Bearer <key>. Pick the operation with the mode field in the JSON body.
| mode | What it returns | Required fields |
|---|---|---|
get_time_series | ~5 years of weekly points for a keyword | source, keyword |
get_growth | % change over one or more periods | source, keyword (percent_growth optional, default ["12M"]) |
get_top_trends | Live ranked leaderboard for a platform feed | type (limit optional, default 25) |
get_trends is accepted as an alias for get_time_series (same handler). Prefer get_time_series in user-facing REST examples.
Copy-paste examples
// Time series
{ "mode": "get_time_series", "source": "google search", "keyword": "bitcoin" }
// Growth
{ "mode": "get_growth", "source": "google search", "keyword": "bitcoin", "percent_growth": ["12M"] }
// Top trends
{ "mode": "get_top_trends", "type": "Google Trends", "limit": 10 }https://api.trendsmcp.ai/apiTime series
Full historical weekly data for one source + keyword (~261 points, normalized 0–100). Alias: "get_trends".
Quota: 1 request per source + keyword. Full rules
Request body
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | Required | "get_time_series" (or alias "get_trends") |
source | string | Required | One source per request. See Data Sources. |
keyword | string | Required | Keyword, brand, product, or topic. |
Response fields
| Field | Type | Description |
|---|---|---|
date | string | ISO 8601 date e.g. "2026-03-21" |
value | number | Normalized trend score, 0–100. |
volume | number | null | Absolute volume where available. null otherwise. |
keyword | string | The keyword queried. |
source | string | The data source used. |
{
"mode": "get_time_series",
"source": "google search",
"keyword": "bitcoin"
}[
{
"date": "2026-03-21",
"value": 47,
"volume": 25853617,
"keyword": "bitcoin",
"source": "google search"
},
// ... up to 261 weekly data points
]https://api.trendsmcp.ai/apiGrowth
Point-to-point % change over one or more periods (percent_growth presets or custom date pairs). One source per request; comma-separated sources supported for comparison.
Quota: 1 request per source + keyword (all percent_growth periods in that call). Full rules
Request body
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | Required | "get_growth" |
source | string | Required | One source or comma-separated list. See Data Sources. |
keyword | string | Required | Keyword, brand, or topic. Format depends on source — see Data Sources. |
percent_growth | array | Optional | Preset strings or custom date objects. Defaults to ["12M"] if omitted. |
Growth period presets
7D14D30D1M2M3M6M9M12M1Y18M24M2Y36M3Y48M60M5YMTDQTDYTDCustom date range object
| Field | Type | Description |
|---|---|---|
name | string | Optional label returned in results. |
recent | string | More recent date, YYYY-MM-DD. |
baseline | string | Baseline/comparison date, YYYY-MM-DD. |
Response fields
| Field | Type | Description |
|---|---|---|
search_term | string | The keyword queried. |
data_source | string | The source used. |
results | array | One object per period requested. |
period | string | Period identifier, e.g. "12M" or custom name. |
growth | number | Percentage change, positive or negative. |
direction | string | "increase" or "decrease". |
recent_date | string | ISO 8601 date of the recent data point. |
baseline_date | string | ISO 8601 date of the baseline point. |
recent_value | number | Normalized score at the recent date. |
baseline_value | number | Normalized score at the baseline date. |
volume_available | boolean | Whether absolute volume exists for this source. |
recent_volume | number | null | Absolute volume at the recent date. |
baseline_volume | number | null | Absolute volume at the baseline date. |
volume_growth | number | null | Volume growth %, if available. |
metadata | object | total_data_points, calculations_completed, all_successful. |
{
"mode": "get_growth",
"source": "google search",
"keyword": "bitcoin",
"percent_growth": ["12M"]
}{
"mode": "get_growth",
"source": "amazon",
"keyword": "nike",
"percent_growth": [
{
"name": "Last Year",
"recent": "2025-12-31",
"baseline": "2024-12-31"
}
]
}{
"search_term": "nike",
"data_source": "google search",
"results": [
{
"period": "12M",
"growth": -12.31,
"direction": "decrease",
"recent_date": "2026-03-21",
"baseline_date": "2025-03-22",
"recent_value": 57,
"baseline_value": 65,
"volume_available": true,
"recent_volume": 24158298,
"baseline_volume": 27548936,
"volume_growth": -12.31
}
],
"metadata": {
"total_data_points": 261,
"calculations_completed": 1,
"all_successful": true
}
}https://api.trendsmcp.ai/apiTop trends
Live ranked leaderboard for one platform feed (type). No keyword needed. REST: omit type to return all feeds in one response. MCP: one type per call.
Quota: per feed (type) and per page (limit / offset). Full rules
Request body
| Field | Type | Required | Description |
|---|---|---|---|
mode | string | Required | "get_top_trends" |
type | string | Optional | Feed name (see below). Omit on REST for all feeds; required on MCP. |
category | string | Optional | Filter for Amazon Best Sellers by Category and Top Websites only. |
limit | integer | Optional | Max items per feed (default 25, up to 200). |
offset | integer | Optional | Pagination offset per feed (default 0). |
Available feeds
Amazon Best Sellers by CategoryAmazon Best Sellers Top RatedApp Store Top FreeApp Store Top PaidGitHub Trending ReposGoogle News Top NewsGoogle PlayGoogle TrendsIMDb MOVIEmeterOpen Library Trending BooksReddit Hot PostsReddit World NewsSteam Most PlayedTop WebsitesSpotify Top PodcastsTikTok Trending HashtagsTikTok Trending SearchesTikTok Shop Hot ProductsWikipedia TrendingX (Twitter) TrendingYouTube Trending{
"mode": "get_top_trends",
"type": "Google Trends",
"limit": 10
}{
"as_of_ts": "2026-03-26T22:22:25Z",
"type": "Google Trends",
"limit": 10,
"count": 10,
"data": [
[1, "chuck norris"],
[2, "project hail mary"],
[3, "bachelorette cancelled"]
// ... [rank, name] pairs
]
}MCP / AI
AI Prompts
When using Trends MCP through an AI assistant (Claude, ChatGPT, Cursor, etc.), include "using TrendsMCP" or "via TrendsMCP" in your prompt so the AI routes to the MCP instead of a web search.
nvidia over the past 5 years."com.openai.chatgpt."Stanley cup."Bitcoin weekly."air fryer over 5 years."langchain weekly."Elden Ring."Tesla over the last year."wallstreetbets on Reddit."GLP-1 grown over the past 12 months?"Anthropic on Google Search."Duolingo?"weight loss drugs across Google, TikTok, and Amazon."Meta changed over the past 6 months?"AI agents from Jan 2025 to Jan 2026."wallstreetbets on Reddit over the last 30 days?"running shoes."Electronics."Live leaderboards: MCP tools require one feed (type) per call. The REST Get Top Trends request can omit type to return every feed in one response.
Errors
Errors return JSON with an error string and message. HTTP status may be 4xx/5xx depending on the failure; some upstream gaps are reported as data_unavailable (or similar) with a generic message rather than not_found.
| Status | Error code | Meaning |
|---|---|---|
| 400 | missing_parameter | Required field missing from request body |
| 400 | invalid_source | Unrecognized source value (message may list allowed values) |
| 401 | Missing or invalid API key | |
| 404 | not_found | No series or entity matched this keyword/source (when the pipeline classifies it that way) |
| varies | data_unavailable | Pipeline could not return data (temporary gap, unsupported query, or empty upstream). HTTP status is not always 404; read message. |
| 429 | rate_limited | Monthly request limit reached. Upgrade for more. |
| 500 | internal_error | Unexpected server error |
Additional codes can appear as the data layer evolves; treat message as the operator-facing detail.
{
"error": "missing_parameter",
"message": "The 'keyword' parameter is required."
}