Docs

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

No credit cardInstant delivery100 free requests/mo
LIVE9,481,163API calls served
Loved by developers

Add to your AI in 30 seconds

  1. Click Claude above. Name and URL are prefilled.
  2. Confirm, then sign in on the Trends MCP page to authorize.
Other AI clients
{"mcpServers": {"trends-mcp": {"url": "https://api.trendsmcp.ai/mcp","headers": {"Authorization": "YOUR_API_KEY"}}}}
API
import requestsresponse = requests.post("https://api.trendsmcp.ai/api",headers={"Authorization": "YOUR_API_KEY"},json={"mode": "","source": ,"keyword": "artificial intelligence","percent_growth": []})print(response.json())

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).

Never expose your API key in client-side code or public repositories.
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.

Time seriesmode: "get_time_series"

Historical weekly data for one source + keyword. One HTTP request = one quota unit.

Growthmode: "get_growth"

Point-to-point % change for one source + keyword. All percent_growth periods in the same call count as one request.

Top trendsmode: "get_top_trends"

MCP: every 10 rows is one request. REST: one POST is one request. Each call is one feed (type).

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.

sourceDescriptionKeyword format
google searchGoogle search volumeAny keyword or phrase
google imagesGoogle image search volumeAny keyword or phrase
google newsGoogle News search volumeAny keyword or phrase
google shoppingGoogle Shopping search volumeAny keyword or phrase
youtubeYouTube search volumeAny keyword or phrase
tiktokTikTok hashtag volumeHashtag or topic
redditSubreddit subscribersSubreddit name only, no r/ prefix
amazonAmazon product search volumeProduct name or category
wikipediaWikipedia page viewsArticle title or topic
news volumeNews article mention volumeAny keyword or phrase
news sentimentNews sentiment score (positive / negative)Any keyword or phrase
app downloadsAndroid app downloadsAndroid bundle ID e.g. com.openai.chatgpt
app rankingsAndroid app store ranking chartsAndroid bundle ID e.g. com.himshers.hims
npmnpm package weekly downloadsExact package name, case-sensitive e.g. react, @babel/core
steamSteam 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. Returns the current ranked leaders on that platform (e.g. the top 25 trending hashtags on TikTok right now).

typePlatform / feed
Google TrendsTop trending search terms on Google right now
Google News Top NewsTop news stories from Google News
TikTok Trending HashtagsTop trending hashtags on TikTok
TikTok Trending SearchesTop trending search terms on TikTok
YouTube TrendingTop trending videos on YouTube
X (Twitter) TrendingTop trending topics on X
Reddit Hot PostsHottest posts on Reddit's front page
Reddit World NewsTop posts in r/worldnews
Wikipedia TrendingMost-viewed Wikipedia articles today
Amazon Best Sellers Top RatedAmazon top-rated best sellers across all categories
App Store Top FreeTop free apps on the iOS App Store
App Store Top PaidTop paid apps on the iOS App Store
Google PlayTop apps on Google Play
Top WebsitesMost-visited websites globally by traffic rank
Spotify Top PodcastsTop podcasts on Spotify
Steam Most PlayedTop games by concurrent live players
SubstackTop Substack newsletters overall
GitHubDaily trending repositories across all languages
IMDb MOVIEmeterTop 100 most-popular movies by user activity
Open Library Trending BooksDaily 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.

modeWhat it returnsRequired fields
get_time_series~5 years of weekly points for a keywordsource, keyword
get_growth% change over one or more periodssource, keyword (percent_growth optional, default ["12M"])
get_top_trendsLive ranked leaderboard for a platform feed; sort: "rank_change" for biggest climberstype (limit, category, sort, window optional)

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

All three modes
// 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 }

// Top trends, biggest climbers this week (sort: "rank" is the default)
{ "mode": "get_top_trends", "type": "Amazon Best Sellers by Category", "category": "Toys Games", "sort": "rank_change", "window": "7d", "limit": 10 }
POSThttps://api.trendsmcp.ai/api
mode"get_time_series"

Time 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

FieldTypeRequiredDescription
modestringRequired"get_time_series" (or alias "get_trends")
sourcestringRequiredOne source per request. See Data Sources.
keywordstringRequiredKeyword, brand, product, or topic.

Response fields

FieldTypeDescription
datestringISO 8601 date e.g. "2026-03-21"
valuenumberNormalized trend score, 0–100.
volumenumber | nullAbsolute volume where available. null otherwise.
keywordstringThe keyword queried.
sourcestringThe 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
]
POSThttps://api.trendsmcp.ai/api
mode"get_growth"

Growth

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

FieldTypeRequiredDescription
modestringRequired"get_growth"
sourcestringRequiredOne source or comma-separated list. See Data Sources.
keywordstringRequiredKeyword, brand, or topic. Format depends on source — see Data Sources.
percent_growtharrayOptionalPreset strings or custom date objects. Defaults to ["12M"] if omitted.

Growth period presets

7D14D30D1M2M3M6M9M12M1Y18M24M2Y36M3Y48M60M5YMTDQTDYTD

Custom date range object

FieldTypeDescription
namestringOptional label returned in results.
recentstringMore recent date, YYYY-MM-DD.
baselinestringBaseline/comparison date, YYYY-MM-DD.

Response fields

FieldTypeDescription
search_termstringThe keyword queried.
data_sourcestringThe source used.
resultsarrayOne object per period requested.
  periodstringPeriod identifier, e.g. "12M" or custom name.
  growthnumberPercentage change, positive or negative.
  directionstring"increase" or "decrease".
  recent_datestringISO 8601 date of the recent data point.
  baseline_datestringISO 8601 date of the baseline point.
  recent_valuenumberNormalized score at the recent date.
  baseline_valuenumberNormalized score at the baseline date.
  volume_availablebooleanWhether absolute volume exists for this source.
  recent_volumenumber | nullAbsolute volume at the recent date.
  baseline_volumenumber | nullAbsolute volume at the baseline date.
  volume_growthnumber | nullVolume growth %, if available.
metadataobjecttotal_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
  }
}
POSThttps://api.trendsmcp.ai/api
mode"get_top_trends"

Top 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: MCP is 10 rows = 1 request. REST is 1 per POST. Full rules

Feed labels must match the strings below exactly (including spacing and capitalization).

Request body

FieldTypeRequiredDescription
modestringRequired"get_top_trends"
typestringOptionalFeed name (see below). Omit on REST for all feeds; required on MCP.
categorystringOptionalFilter for Amazon Best Sellers by Category, Google Trends by Category, Top Websites, Substack by Category, and TikTok Trending Hashtags by Category. Case-insensitive; unknown values return an error listing the valid categories. Full lists under Data Sources.
sortstringOptional"rank" (default): the current board, ordered by chart position. "rank_change": movers mode, ordered by biggest climb versus a baseline snapshot. Rows become objects with rank, keyword, prev_rank, rank_change.
windowstringOptionalBaseline for sort="rank_change": "30d" (default) or "7d" week-over-week. If the feed updates too slowly for the window, the response returns count: 0 with a note naming the window to retry.
limitintegerOptionalMax items per feed (default 25, up to 200).
offsetintegerOptionalPagination offset per feed (default 0).

Available feeds

Amazon Best Sellers by CategoryAmazon Best Sellers Top RatedApp Store Top FreeApp Store Top PaidGitHubGoogle News Top NewsGoogle PlayGoogle TrendsGoogle Trends by CategoryIMDb MOVIEmeterOpen Library Trending BooksReddit Hot PostsReddit World NewsSteam Most PlayedSubstackSubstack by CategoryTop WebsitesSpotify Top PodcastsTikTok Trending HashtagsTikTok Trending Hashtags by CategoryTikTok Trending SearchesWikipedia TrendingX (Twitter) TrendingYouTube Trending
{
  "mode":  "get_top_trends",
  "type":  "Google Trends",
  "limit": 10
}
{
  "mode":     "get_top_trends",
  "type":     "Google Trends by Category",
  "category": "Games",
  "limit":    10
}

Always pass category for Amazon Best Sellers by Category, Google Trends by Category, Top Websites, Substack by Category, and TikTok Trending Hashtags by Category. Case-insensitive. Official names are listed under Data Sources.

{
  "mode":     "get_top_trends",
  "type":     "Amazon Best Sellers by Category",
  "category": "Toys Games",
  "sort":     "rank_change",
  "window":   "7d",
  "limit":    10
}

sort: "rank_change" answers "what is newly trending" instead of "what is on top": items are ordered by biggest climb versus the baseline snapshot (window "1d", "3d", "7d", "14d", or "30d", the default). Rows are objects, e.g. {"rank": 4, "keyword": "…", "prev_rank": 31, "rank_change": 27}, and the response adds sort, window, and baseline_ts. Works on every feed. If a feed updates too slowly for the window (e.g. monthly Top Websites with "7d"), or the board turned over completely versus the baseline, you get count: 0 plus a note explaining why and what to do next.

{
  "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.

Get GrowthPoint-to-point growth & momentum
Year-over-year momentum"Using TrendsMCP, how has Google Search interest in GLP-1 grown over the past 12 months?"
Multi-period snapshot"Via TrendsMCP, show me 3M, 6M, and 1Y growth for Anthropic on Google Search."
YTD brand tracking"Using TrendsMCP, what's the YTD Google Search growth for Duolingo?"
Cross-source momentum"Via TrendsMCP, compare 6-month growth for weight loss drugs across Google, TikTok, and Amazon."
News sentiment shift"Using TrendsMCP, how has news sentiment for Meta changed over the past 6 months?"
Custom date range"Via TrendsMCP, show Google Search growth for AI agents from Jan 2025 to Jan 2026."
Subreddit subscriber growth"Using TrendsMCP, what's the subscriber growth for subreddit wallstreetbets on Reddit over the last 30 days?"
Shopping demand signal"Via TrendsMCP, show me 12M Google Shopping growth for running shoes."
Get Top TrendsLive leaderboards across platforms
Google trending now"Using TrendsMCP, what's trending on Google right now?"
TikTok hashtags"Via TrendsMCP, show me the top TikTok trending hashtags today."
Reddit front page"Using TrendsMCP, what are the hottest Reddit posts right now?"
Wikipedia trending"Via TrendsMCP, what are the top trending Wikipedia articles today?"
X / Twitter topics"Using TrendsMCP, show me what's trending on X right now."
App Store charts"Via TrendsMCP, what apps are topping the App Store Free charts today?"
Amazon best sellers (top rated)"Using TrendsMCP, what are the top-rated Amazon best sellers right now?"
Amazon by category"Via TrendsMCP, show Amazon best sellers for category Electronics."
Fastest climbers this week"Using TrendsMCP, what are the fastest-climbing Amazon best sellers in Toys Games this week?"
Top websites by category"Using TrendsMCP, show the top websites in the finance category."
YouTube trending"Via TrendsMCP, what's trending on YouTube right now?"

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. Add sort: "rank_change" (with window "1d", "3d", "7d", "14d", or "30d") to get the biggest climbers instead of the current board.

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.

StatusError codeMeaning
400missing_parameterRequired field missing from request body
400invalid_sourceUnrecognized source value (message may list allowed values)
401Missing or invalid API key
404not_foundNo series or entity matched this keyword/source (when the pipeline classifies it that way)
variesdata_unavailablePipeline could not return data (temporary gap, unsupported query, or empty upstream). HTTP status is not always 404; read message.
429rate_limitedMonthly request limit reached. Upgrade for more.
500internal_errorUnexpected server error

Additional codes can appear as the data layer evolves; treat message as the operator-facing detail.

400 Response
{
  "error":   "missing_parameter",
  "message": "The 'keyword' parameter is required."
}