SerpApi is a general SERP scraper that can return Google Trends HTML-shaped data. Trends API is a trends-native REST product: POST https://api.trendsapi.ai/api, Bearer auth, and three modes (get_time_series, get_growth, get_top_trends) across 15-plus sources. On 2026-08-06, "serpapi" Google Search interest sat at 45 on the 0-100 scale after a 30D decline of -36.62% and a 12M gain of +45.16%. The same day, "nike" showed Google Search at 58 (-35.56% over 3M), Amazon score 58.7 with 19,433,404 recent volume, YouTube at 47 (+2.17% over 3M), and TikTok at 28.4 (+82.05% over 7D). Parse body twice; that is the most common integration mistake.
What SerpApi covers for trends, and what it does not
SerpApi's value for many teams is organic and paid SERP results. Its Google Trends engine is a side path: scrape the Trends UI, normalize HTML into JSON, and hope selectors stay stable. That path answers interest-over-time for Google Search-adjacent series. It does not give Amazon product search volume, TikTok hashtag volume, or YouTube video search interest under the same auth model.
Trends API starts from the opposite design. One endpoint accepts a mode, a source (or comma-separated sources for growth), and a keyword. Scores land on a shared 0-100 scale. Absolute volume appears when the underlying source provides it. Source docs for the Google feed live at Google Trends. Amazon shopping interest is documented at Amazon Trends.
Competitor keyword interest is measurable the same way. On 2026-08-06, "google trends" Google Search sat at 37 (-50.0% over 30D, -56.47% over 3M, -13.95% over 12M). "pytrends" sat at 12 (-80.95% over 30D, -50.0% over 12M). Those figures are search interest in the tools themselves, not a quality score, but they show how quickly unofficial Trends clients move.
Map SerpApi Google Trends calls to Trends API modes
Keep the client thin. Post JSON, parse the envelope, then parse body.
import json
import os
import urllib.request
API = "https://api.trendsapi.ai/api"
KEY = os.environ["TRENDSAPI_API_KEY"]
def trends_api(payload: dict) -> dict:
req = urllib.request.Request(
API,
data=json.dumps(payload).encode(),
headers={
"Authorization": f"Bearer {KEY}",
"Content-Type": "application/json",
},
method="POST",
)
envelope = json.loads(urllib.request.urlopen(req).read().decode())
# body is a JSON string; parse it again
return json.loads(envelope["body"])
series = trends_api({
"mode": "get_time_series",
"source": "google search",
"keyword": "serpapi",
})
print(series[-1])
Live series checkpoint for "serpapi" on google search (pull date 2026-08-06): the latest weekly point is 2026-08-01 with value 45. Earlier peaks include 100 on 2026-06-20 and 97 on 2025-08-16. The series starts at 0 on 2021-08-07 and contains 261 weekly points used by growth math.
| SerpApi-style need | Trends API mode | Example payload fields |
|---|---|---|
| Interest over time | get_time_series |
source: google search, keyword |
| Rising or live board | get_top_trends |
type: Google Trends, limit |
| Period change | get_growth |
percent_growth: ["3M","12M"] |
| Shopping demand | get_growth / get_time_series |
source: amazon |
| Short social spike | get_growth |
source: tiktok, percent_growth: ["7D","14D"] |
Live Google Trends board on 2026-08-06T10:01:38+00:00 listed 15 terms. Rank 1 was "perez hilton". Rank 9 was "spirit halloween". Rank 11 was "spacex stock". That board call is the closest substitute for a rising-queries dashboard without scraping.
Multi-source pull SerpApi Google Trends cannot return alone
Brand monitoring rarely stops at Google. The dated Nike walkthrough at Nike multi-source brand signals in Python shows the same keyword across four sources. Summary from the 2026-08-06 pull:
| Source | Recent score | Window | Growth | Volume note |
|---|---|---|---|---|
| google search | 58.0 | 3M | -35.56% | est. volume 19,900,000 |
| google search | 58.0 | 12M | -14.71% | est. volume 19,900,000 |
| amazon | 58.7 | 3M | -1.34% | volume 19,433,404 (-1.27%) |
| amazon | 58.7 | 12M | -0.51% | volume 19,433,404 (-0.42%) |
| youtube | 47.0 | 3M | +2.17% | score only |
| youtube | 47.0 | 12M | +4.44% | score only |
| tiktok | 28.4 | 7D | +82.05% | volume 12,038,473 (+10.6%) |
| tiktok | 28.4 | 14D | +115.15% | volume 12,038,473 (+12.84%) |
TikTok 3M and 12M presets returned date_out_of_range because available TikTok history for that keyword only ran from 2026-07-06 to 2026-08-04 (30 points). Absence of a long window is a finding; short windows still ship.
AirPods shows a commerce vs search split on the same day. Amazon score 29.7 with 6,377,787 recent volume (-15.86% over 30D, -47.71% over 12M). Google Search score 54.0 (-18.18% over 3M, +3.85% over 12M) with estimated volume 8,510,000. A SerpApi-only Google Trends job would miss the Amazon volume drop.
growth = trends_api({
"mode": "get_growth",
"source": "google search, amazon, youtube",
"keyword": "nike",
"percent_growth": ["3M", "12M"],
})
for row in growth["results"]:
print(row.get("period"), row.get("growth"), row.get("recent_volume"))
Comma-separated sources on get_growth keep the client loop small. If one source errors, inspect that row's status instead of failing the whole job.
Quota, auth, and when to keep SerpApi
Trends API auth is Authorization: Bearer <api_key> on every POST. Pricing for capacity planning: free 100 successful requests per month, Starter 5,000, Pro 25,000, Business 100,000. Only 200 responses count.
Keep SerpApi when the job is SERP snippets, local pack, or ads copy. Switch the trends slice to Trends API when the pipeline needs stable JSON scores, growth windows, or non-Google sources. For the broader Google Trends API alternative framing, see Google Trends API alternative. For a seasonal demand-sensing cron that starts from the live board, see Spirit Halloween demand sensing in Python.
Minimal migration checklist
- Replace the SerpApi Google Trends engine URL with
POST https://api.trendsapi.ai/api. - Store
TRENDSAPI_API_KEYand send Bearer auth. - Map interest-over-time to
get_time_serieswithsource: "google search". - Map rising or realtime boards to
get_top_trendswithtype: "Google Trends". - Add Amazon, YouTube, and TikTok with the same helper once Google Search works.
- Always
json.loadsthebodystring after reading the envelope.
That is the full swap for trend-shaped traffic. SERP features stay on SerpApi. Trend scores, growth, volume, and multi-source boards move to Trends API.