A score of 72 on TikTok and 72 on Google Search look identical in a spreadsheet. They are not measuring the same population or the same behavior. This page explains how Trends MCP calibrates both sources to 0-100, when side-by-side comparison is valid, and where keyword mismatch breaks the read.
Analysts export two columns labeled value, both on a 0-100 scale, and treat them like exchange rates. That works only when the calibration model is understood. Trends MCP normalizes TikTok hashtag activity and Google Search query interest to the same numeric range so teams can scan a dashboard quickly. The number is comparable in rank, not in raw audience size.
The broader normalization model lives on https://www.trendsmcp.ai/normalize-trend-data-across-platforms. This page narrows to the TikTok and Google Search pair because that is the comparison content and commerce teams run most often.
On Google Search, the normalized value reflects where a keyword sits in the distribution of query interest over the selected history window. Trends MCP API snapshot for ozempic on 2026-07-25 returned a recent value of 57 with an estimated recent volume of 3,420,000 monthly queries. The value and volume move together on Google when volume is available.
On TikTok, the normalized value reflects hashtag use intensity relative to other hashtags in the pipeline's calibration set. TikTok does not always return a row for every keyword Google covers. A missing TikTok response means no series matched; it does not mean zero interest.
| Field | Google Search (google search) | TikTok (tiktok) |
|---|---|---|
| Normalized value | 0-100 relative query interest | 0-100 relative hashtag intensity |
| Typical volume field | Often present (estimated queries) | Often absent |
| Keyword format | Phrase or brand string | Hashtag or topic string (no #) |
| Best paired read | Intent and research demand | Discovery and creator momentum |
Side-by-side comparison fails quietly when the strings do not describe the same entity. A practical pairing workflow:
stanley cup tumbler, glp-1, ozempic).stanleycup, glp1, ozempic).Example REST bodies using the documented POST endpoint:
{
"mode": "get_time_series",
"source": "google search",
"keyword": "ozempic"
}
{
"mode": "get_time_series",
"source": "tiktok",
"keyword": "ozempic"
}
Run both calls separately. Compare value at the same date when both arrays return data.
Teams that want one JSON object with both platforms use get_growth and a comma-separated source list:
{
"mode": "get_growth",
"source": "google search,tiktok",
"keyword": "ozempic",
"percent_growth": ["3M", "12M"]
}
A Trends MCP API pull on 2026-07-26 returned Google Search success with 3M growth of -13.64% (recent value 57, baseline 66) and TikTok status unavailable for the same keyword string. The response metadata listed sources_successful: ["google search"] and sources_failed: ["tiktok"]. That shape is the correct output when coverage is partial. Pipelines should surface the failure flag instead of averaging the single successful source.
A gap is informative when keyword pairing is stable and both sources return data on the same dates. Common patterns:
TikTok leads Google. Hashtag value climbs while Google Search value stays flat. Creator attention arrived before search intent. Useful for early content briefs.
Google leads TikTok. Search value rises while TikTok stays muted. The topic may be technical, local, or poorly suited to short video formats.
Both rise, different slopes. Parallel uptrends with different growth percentages suggest the theme is broad but channel mix will differ. Paid and organic plans should not assume one channel's budget fits both.
Google volume falls while TikTok value holds. Search demand can cool after a news cycle even when social clips keep circulating. Read Google's volume field when present; do not infer search magnitude from TikTok value alone.
import requests
from datetime import datetime
API = "https://api.trendsmcp.ai/api"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY", "Content-Type": "application/json"}
def latest_point(source: str, keyword: str):
res = requests.post(
API,
headers=HEADERS,
json={"mode": "get_time_series", "source": source, "keyword": keyword},
timeout=30,
)
res.raise_for_status()
rows = res.json()
if not rows:
return None
last = rows[-1]
return {
"date": last["date"],
"value": last["value"],
"volume": last.get("volume"),
"source": source,
}
google = latest_point("google search", "ozempic")
tiktok = latest_point("tiktok", "ozempic")
if google and tiktok and google["date"] == tiktok["date"]:
print(f"{google['date']}: Google {google['value']}, TikTok {tiktok['value']}")
elif google and not tiktok:
print(f"Partial coverage on {google['date']}: Google {google['value']}, TikTok unavailable")
Store as_of_ts or the last row date in audit logs. Normalized scores drift as new weeks enter the series.
Configure the hosted MCP endpoint from https://www.trendsmcp.ai/mcp-server-for-cursor and ask for paired pulls via TrendsMCP so the client routes to live tools. Prompts should name both sources explicitly: "Using TrendsMCP, compare TikTok and Google Search normalized scores for ozempic over the last 12 months."
Cross-platform methodology: https://www.trendsmcp.ai/normalize-trend-data-across-platforms
Timing and publish windows: https://www.trendsmcp.ai/tiktok-vs-google-search-lag-mcp
TikTok source reference: https://www.trendsmcp.ai/tiktok-trends
Google Search source reference: https://www.trendsmcp.ai/google-trends
FAQ