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"}'
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"])
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}'
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:
- Google Trends Bulk on RapidAPI
- Website Contact Extractor on RapidAPI
- If you'd rather not write code, the same tools run on Apify: Google Trends Scraper, Website Contact Extractor
Questions or feature requests are welcome in the comments.
Top comments (0)