Docs
Socialytics docs
Live trend data from 27 platforms through 5 tools, over MCP in your AI assistant or the REST API in your code. One key for both.
https://socialytics.dev/mcpClaude, ChatGPT: sign in, no key to pastehttps://api.trendsmcp.ai/mcpCursor, VS Code and other clientsPOST https://api.trendsmcp.ai/apiJSON body with modeQuickstart
From zero to your first answer
Get a free API key
Email and an 8-digit code. No password, no card. 100 requests a month on Free.
Get my free API key
By continuing you agree to our Terms & Privacy Policy.
Connect your AI, or call the API
Pick your assistant to add Socialytics as an MCP server, or copy a request for your code.
MCPIn your AI assistant
Ask Claude, ChatGPT or Cursor about trends in plain language. They fetch the data from Socialytics for you. No code.
Connect with your Socialytics account. No API key to copy.
- Add the connector below. The name and URL are prefilled.
- Sign in to Socialytics and approve access.
- Start a chat with Socialytics enabled and ask a trend question.
Using Claude Code? Run this in your terminal, then type /mcp in Claude Code to sign in.
claude mcp add --transport http --scope user socialytics https://socialytics.dev/mcpSet up manually
In Claude, open Settings → Connectors and add a custom connector named Socialytics. Enter this URL, then connect and sign in.
https://socialytics.dev/mcpGet your free API key, then add Socialytics from your account.
- Sign up or log in to your Socialytics account.
- Choose Cursor there and add the server with your key included.
Set up manually
In Cursor's MCP settings, add a remote server. Use this URL and the API-key configuration under “API key setup / other AI clients” below.
https://api.trendsmcp.ai/mcpConnect with your Socialytics account. No API key to copy.
- Click Add to ChatGPT below. In Plugins, select +, then Add custom MCP server.
- Name it Socialytics, paste the server URL, and choose OAuth. Accept the warning and select Create as a plugin.
- Install it and sign in to Socialytics. In a chat, type @ and pick Socialytics.
https://socialytics.dev/mcpWorks in ChatGPT on the web. On Business and Enterprise, a workspace admin can turn custom servers off.
Set up manually
Create a plugin named Socialytics, use this URL for the connection, and select OAuth authentication.
https://socialytics.dev/mcpGet your free API key, then add Socialytics from your account.
- Sign up or log in to your Socialytics account.
- Choose VS Code there and add the server with your key included.
Set up manually
In the Command Palette, choose MCP: Add Server, then HTTP. For API-key authentication, use the configuration in the setup guide.
https://api.trendsmcp.ai/mcpTest your connection
Once connected, paste this into your AI and check that it uses Socialytics to fetch results.
API key setup / other AI clients
Two addresses, same data. Clients that sign in (Claude, ChatGPT, Claude Code) use https://socialytics.dev/mcp. Clients that send an API key (Cursor, VS Code, others) use https://api.trendsmcp.ai/mcp with the config below.
{"mcpServers": {"socialytics": {"url": "https://api.trendsmcp.ai/mcp","headers": {"Authorization": "Bearer YOUR_API_KEY"}}}}
APIIn your own code
Send requests from Python, JavaScript or any HTTP tool with your API key, and get JSON back.
import requestsresponse = requests.post("https://api.trendsmcp.ai/api",headers={"Authorization": "Bearer YOUR_API_KEY"},json={"mode": "","source": ,"keyword": "artificial intelligence","window": []"custom": {"recent": , "baseline": }"type": ,"category": ,"sort": ,"window": ,"limit": 25})print(response.json())
Ask
In your assistant: “How has interest in electric vehicles changed over the last 5 years?” It picks the tool and the source. In code, pick a tool below.
Authentication
One key for MCP and REST
Send your key in the Authorization header: Bearer YOUR_API_KEY (the bare key works too). Claude and ChatGPT connectors sign in through https://socialytics.dev/mcp instead, so there is no key to paste.
Keep the key on the server side: never in browser code or a public repository. If it leaks, make a new one on your account page.
Tool
Time Series
1 request per callget_time_series · Full history for one topic.
About five years of weekly history for one keyword on one source, as a 0 to 100 index plus volume where the source has it.
Parameters
| Name | Type | Description |
|---|---|---|
mode REST | string | get_time_series. MCP clients call the tool by name instead. |
keyword required | string | Format depends on the source. |
source required | string | Exactly one keyword source. |
country optional | string | ISO 3166-1 alpha-2 country code (US, GB, JP). Boards and TikTok default to US; Google time series and growth default to worldwide.Works with Google Search, Google Images, Google News, Google Shopping, YouTube, TikTok, Pinterest. |
language optional | string | Wikipedia language edition (en, de, ja, pt); defaults to en.Works with Wikipedia. |
resolution optional | string | 'weekly' (about 5 years, default) or 'daily' (last 90 days, fetched live).Works with Google Search, Google Images, Google News, Google Shopping, YouTube. |
Example
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "get_time_series", "keyword": "electric vehicles", "source": "Google Search"}'import requests
response = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"mode": "get_time_series",
"keyword": "electric vehicles",
"source": "Google Search"
},
)
print(response.json())const response = 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",
"keyword": "electric vehicles",
"source": "Google Search"
}),
});
console.log(await response.json());Response
A list of points, oldest first (weekly for most sources, daily or monthly for some). About 260 weekly points (5 years) per call.
| Field | Type | Description |
|---|---|---|
date | string | ISO 8601 date of the point, e.g. 2026-03-21. |
value | number | Interest on a 0 to 100 index. |
volume | number | null | Absolute volume where the source has it (searches, views, downloads). |
keyword | string | The keyword you asked for. |
source | string | The source used. |
body)[
{
"date": "2026-10-17",
"value": 47,
"volume": 25853617,
"keyword": "bitcoin",
"source": "google search"
},
{
"date": "2026-10-24",
"value": 52,
"volume": 28012440,
"keyword": "bitcoin",
"source": "google search"
}
]Tool
Growth
1 request per call, every window includedget_growth · How fast something is rising.
Point-to-point growth over one or more windows, on one source or several in the same call.
Parameters
| Name | Type | Description |
|---|---|---|
mode REST | string | get_growth. MCP clients call the tool by name instead. |
keyword required | string | Format depends on the source. |
source required | string | One source, or several separated by commas. |
percent_growth optional | string[] | Window presets such as 3M, 12M or YTD. Default 12M. |
country optional | string | ISO 3166-1 alpha-2 country code (US, GB, JP). Boards and TikTok default to US; Google time series and growth default to worldwide.Works with Google Search, Google Images, Google News, Google Shopping, YouTube, TikTok, Pinterest. |
language optional | string | Wikipedia language edition (en, de, ja, pt); defaults to en.Works with Wikipedia. |
resolution optional | string | 'weekly' (about 5 years, default) or 'daily' (last 90 days, fetched live).Works with Google Search, Google Images, Google News, Google Shopping, YouTube. |
Windows
Any number with D, W, M or Y up to 5 years, plus MTD, QTD and YTD. Default 12M. Common:
7D1W14D2W30D1M2M3M6M9M12M1Y18M24M2Y36M3Y48M4Y60M5YMTDQTDYTDREST also takes a custom range: an object in percent_growth with
name | string | Optional label, returned as period. |
recent | string | The more recent date, YYYY-MM-DD. |
baseline | string | The date to compare with, YYYY-MM-DD. |
Example
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "get_growth", "keyword": "electric vehicles", "source": "Google Search", "percent_growth": ["3M", "12M"]}'import requests
response = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"mode": "get_growth",
"keyword": "electric vehicles",
"source": "Google Search",
"percent_growth": [
"3M",
"12M"
]
},
)
print(response.json())const response = await fetch("https://api.trendsmcp.ai/api", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"mode": "get_growth",
"keyword": "electric vehicles",
"source": "Google Search",
"percent_growth": [
"3M",
"12M"
]
}),
});
console.log(await response.json());Response
One result per window you asked for.
| Field | Type | Description |
|---|---|---|
search_term | string | The keyword you asked for. |
data_source | string | The source used. |
results[].period | string | The window, e.g. 12M, or your custom name. |
results[].growth | number | Change in percent, positive or negative. |
results[].direction | string | increase or decrease. |
results[].recent_date / baseline_date | string | The two dates compared. |
results[].recent_value / baseline_value | number | The 0 to 100 index at those dates. |
results[].volume_growth | number | null | Change in absolute volume, where the source has volume. |
body){
"search_term": "nike",
"data_source": "google search",
"results": [
{
"period": "12M",
"growth": -12.31,
"direction": "decrease",
"recent_date": "2026-10-24",
"baseline_date": "2025-10-25",
"recent_value": 57,
"baseline_value": 65,
"volume_growth": -12.31
}
]
}Tool
Top Trends
MCP: 1 request per 10 rows, at most 10 per call. REST: 1 request per callget_top_trends · What's moving right now.
A live ranked board with no keyword: the current leaders, or the biggest climbers against an earlier snapshot.
Parameters
| Name | Type | Description |
|---|---|---|
mode REST | string | get_top_trends. MCP clients call the tool by name instead. |
type required | string | Exactly one live board. |
limit optional | integer | 1 to 200. Default 25. |
offset optional | integer | Rows to skip. Default 0. |
sort optional | string | rank (default) or rank_change for climbers. |
window optional | string | With rank_change: 1d, 3d, 7d, 14d, 30d. Default 30d. |
country optional | string | ISO 3166-1 alpha-2 country code (US, GB, JP). Boards and TikTok default to US; Google time series and growth default to worldwide.Works with Google Trends, Google Trends by Category, Pinterest Trending, Pinterest Trending by Category, TikTok Trending Hashtags, TikTok Trending Hashtags by Category, X (Twitter) Trending, YouTube Trending. |
category optional | string | Official board name within the feed; without it the feed mixes every board.Works with Amazon Best Sellers by Category, Google Trends by Category, Pinterest Trending by Category, Top Websites, Substack by Category, TikTok Trending Hashtags by Category. |
Example
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "get_top_trends", "type": "Google Trends", "limit": 10}'import requests
response = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"mode": "get_top_trends",
"type": "Google Trends",
"limit": 10
},
)
print(response.json())const response = await fetch("https://api.trendsmcp.ai/api", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"mode": "get_top_trends",
"type": "Google Trends",
"limit": 10
}),
});
console.log(await response.json());Response
The board as of its latest snapshot. Rows are [rank, keyword] (plus the category path on category boards); with sort rank_change they are objects with prev_rank and rank_change.
| Field | Type | Description |
|---|---|---|
type | string | The board. |
as_of_ts | string | When the snapshot was taken. |
count | number | Rows returned. |
data | array | [rank, keyword] rows, or {rank, keyword, prev_rank, rank_change} with sort rank_change. |
note | string | Your plan's limit on this board, when it applies (e.g. top 10, delayed 24 hours). |
body){
"type": "Google Trends",
"as_of_ts": "2026-10-27T12:00:00Z",
"count": 3,
"data": [
[
1,
"world series"
],
[
2,
"election polls"
],
[
3,
"halloween costumes"
]
]
}Tool
Context
MCP: 1 request per source, at most 5 per call. REST: one source per call, 1 requestget_context · What people are saying.
What people are posting, reading and betting about a keyword right now: posts, videos, stories, comments and markets from each source, with engagement.
Parameters
| Name | Type | Description |
|---|---|---|
mode REST | string | get_context. MCP clients call the tool by name instead. |
keyword required | string | Any name or phrase. |
source required | string | One source, or up to 5 separated by commas. |
days optional | integer | Look back 1 to 30 days. Default 7. |
limit optional | integer | Items per source, 1 to 20. Default 10. |
comments optional | integer | Top comments or replies for the first N items of each source (0 to 5, default 2).Works with YouTube, TikTok, Instagram, X, Reddit, Bluesky, Hacker News. |
Example
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "get_context", "keyword": "nvidia", "source": "News"}'import requests
response = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"mode": "get_context",
"keyword": "nvidia",
"source": "News"
},
)
print(response.json())const response = await fetch("https://api.trendsmcp.ai/api", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"mode": "get_context",
"keyword": "nvidia",
"source": "News"
}),
});
console.log(await response.json());Response
Per source, the posts, videos, stories and markets about the keyword, best first.
| Field | Type | Description |
|---|---|---|
keyword | string | The keyword you asked for. |
window_days | number | How far back it looked. |
sources[].source | string | The source. |
sources[].items[] | array | Each item: kind, url, title, text, author, published, engagement (views, likes, comments, shares, score…), top_comments. |
sources[].error | string | null | Why a source returned nothing, when it failed. |
body){
"keyword": "nintendo switch 2",
"window_days": 7,
"count": 1,
"sources": [
{
"source": "YouTube",
"count": 1,
"error": null,
"items": [
{
"kind": "video",
"title": "Switch 2 review",
"url": "https://youtube.com/watch?v=\u2026",
"published": "2026-10-22T09:39:22Z",
"engagement": {
"views": 91542,
"likes": 5997,
"comments": 527
}
}
]
}
]
}Tool
Top Posts
1 request per call🔒 Business planget_top_posts · Top posts for one hashtag.
Live top posts for one hashtag, fetched on every call. Business plan.
Parameters
| Name | Type | Description |
|---|---|---|
mode REST | string | get_top_posts. MCP clients call the tool by name instead. |
keyword required | string | The hashtag, with or without #. |
source required | string | TikTok or Instagram. |
limit optional | integer | 1 to 20. Default 20. |
Example
curl -X POST https://api.trendsmcp.ai/api \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{"mode": "get_top_posts", "keyword": "booktok", "source": "TikTok"}'import requests
response = requests.post(
"https://api.trendsmcp.ai/api",
headers={"Authorization": "Bearer YOUR_API_KEY"},
json={
"mode": "get_top_posts",
"keyword": "booktok",
"source": "TikTok"
},
)
print(response.json())const response = await fetch("https://api.trendsmcp.ai/api", {
method: "POST",
headers: { "Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json" },
body: JSON.stringify({
"mode": "get_top_posts",
"keyword": "booktok",
"source": "TikTok"
}),
});
console.log(await response.json());Response
The top posts for the hashtag right now, fetched live on every call.
| Field | Type | Description |
|---|---|---|
keyword | string | The hashtag, without #. |
source | string | tiktok or instagram. |
posts[].rank | number | Position on the hashtag page. |
posts[].caption | string | The post's text. |
posts[].author | string | null | The account, where available. |
posts[].plays / likes / comments | number | null | Engagement, where the source has it. |
posts[].posted | string | When it was posted. |
posts[].url | string | Link to the post. |
body){
"keyword": "booktok",
"source": "tiktok",
"count": 1,
"posts": [
{
"rank": 1,
"caption": "5 books that wrecked me",
"author": "readwithme",
"plays": 1840221,
"likes": 220114,
"posted": "2026-10-25",
"url": "https://www.tiktok.com/@readwithme/video/\u2026"
}
]
}Reference
Requests and plans
Every plan has a monthly pool of requests. Only successful calls count: errors are free.
| Tool | Cost |
|---|---|
get_time_series | 1 request per call |
get_growth | 1 request per call, every window included |
get_top_trends | MCP: 1 request per 10 rows, at most 10 per call. REST: 1 request per call |
get_context | MCP: 1 request per source, at most 5 per call. REST: one source per call, 1 request |
get_top_posts | 1 request per call · Business plan |
get_usage | Free. MCP only: your plan, requests used and left, reset date. |
Plans
| Free | Starter | Pro | Business | |
|---|---|---|---|---|
| Requests a month | 100 | 1,000 | 5,000 | 25,000 |
| Keyword alerts | – | 10 | 50 | 250 |
| Top trends rows | Top 10, 24h delay | Top 25 | Top 100 | Full board |
| Top Posts | – | – | – | ✓ |
Prices and yearly billing: Pricing. When the monthly pool is used up, calls return a plan-limit message until the next month or an upgrade.
Reference
Errors
REST answers HTTP 200 with an envelope: {"statusCode": 400, "body": "…"}. Read statusCode, then parse body. A missing or wrong key is the exception: HTTP 401 (missing_api_key) or 403 (invalid_api_key), with the error object as the body. Errors carry an error code and a message. Over MCP, a failed call sets isError on the tool result.
| Code | Meaning |
|---|---|
missing_parameter | A required field is missing, e.g. type on get_top_trends. |
invalid_source | The source or type is not one we serve; the message lists the allowed values. |
invalid_mode | The mode is not one of the tools. |
invalid_request | The body is malformed or a parameter value is not allowed. |
no_data | Nothing matched this keyword on this source. |
plan_required | The tool needs a higher plan (Top Posts: Business). |
source_unavailable | The upstream source did not answer; try again later. |
growth_calculation_failed | Growth could not be computed for that window (e.g. not enough history). |
internal_error | Unexpected error. The body has a request_id; send it to support. |
missing_api_key | No key was sent. Send it in the Authorization header as Bearer <key>. REST answers HTTP 401. |
invalid_api_key | The key is mistyped or was regenerated. Get or copy your key on /account. REST answers HTTP 403. |
monthly_limit_reached | The plan's monthly requests are used and there are no credits left. The message has links to buy credits (they never expire) or pick a plan. Over MCP the tool result has isError with the same text. get_usage shows what is left. |
{
"statusCode": 400,
"body": "{\"error\": \"missing_parameter\", \"message\": \"The 'type' parameter is required\"}"
}