DEV Community

Shrivardhan Hulswar
Shrivardhan Hulswar

Posted on Edited on AI-assisted

Google Trends for any number of keywords in one API call (curl, Python)

Google Trends has no official API, and its website compares only 5 terms at a time. I put my Google Trends scraper behind a plain REST endpoint on RapidAPI, so you can send a list of keywords from any language and get JSON back. The free plan gives you 20 calls a month.

One call, many keywords

curl -X POST "https://google-trends-bulk-unlimited-keywords-yoy-growth.p.rapidapi.com/run-sync-get-dataset-items" \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: google-trends-bulk-unlimited-keywords-yoy-growth.p.rapidapi.com" \
  -d '{"keywords": ["air fryer", "espresso machine", "stand mixer"], "geo": "US", "timeRange": "today 5-y"}'
Enter fullscreen mode Exit fullscreen mode

Python:

import requests

url = "https://google-trends-bulk-unlimited-keywords-yoy-growth.p.rapidapi.com/run-sync-get-dataset-items"
headers = {
    "X-RapidAPI-Key": "YOUR_RAPIDAPI_KEY",
    "X-RapidAPI-Host": "google-trends-bulk-unlimited-keywords-yoy-growth.p.rapidapi.com",
}
body = {"keywords": ["air fryer", "espresso machine", "stand mixer"], "geo": "US", "timeRange": "today 5-y"}

for row in requests.post(url, json=body, headers=headers, timeout=180).json():
    print(row["keyword"], row["relativePopularity"], row["yearOverYearChangePct"], row["trendDirection"])
Enter fullscreen mode Exit fullscreen mode

You get one JSON object per keyword: the weekly timeline, year-over-year change, trend direction, peak week and seasonal peak month, top regions, and rising, top and breakout related searches. All keywords are put on one 0-100 scale, even past Google's 5-term limit (the chaining method is explained here).

Real output (US, past 5 years, pulled 4 November 2026)

Keyword Popularity (top = 100) YoY % Trend Seasonal peak
air fryer 100 +3.2 falling January
espresso machine 10.99 +12.4 rising November
stand mixer 3.79 +12.5 rising April

The call took about 9 seconds.

One warning from this exact output: espresso machine and stand mixer both peak on 12 April 2026. That falls inside the 15 weeks (mid-March to early July 2026) when Google Trends US data was distorted, so treat that peak as an artifact, not real demand. How to spot and fix it.

A second endpoint: contacts from company websites

Same setup, different job. Send website URLs and get back emails, phone numbers, social profile links, the contact page and the company name:

curl -X POST "https://website-contact-extractor-emails-phones-socials.p.rapidapi.com/run-sync-get-dataset-items" \
  -H "Content-Type: application/json" \
  -H "X-RapidAPI-Key: YOUR_RAPIDAPI_KEY" \
  -H "X-RapidAPI-Host: website-contact-extractor-emails-phones-socials.p.rapidapi.com" \
  -d '{"websites": ["https://www.apify.com"], "maxPagesPerWebsite": 5}'
Enter fullscreen mode Exit fullscreen mode

My test call took about 7 seconds for two sites. For apify.com it returned hello@apify.com and their social profiles. It respects robots.txt by default.

Limits, honestly

  • Google Trends numbers are relative interest, not search counts.
  • Calls are synchronous and cut off at about 3 minutes, so if a big list times out, split it into smaller batches.
  • Free plan: 20 calls a month. Paid: $9 a month (150 calls for Trends, 200 for contacts).

Links:

Questions or feature requests are welcome in the comments.

Top comments (0)