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.


