If you've ever tried to pull Google Trends data in Python, you know the drill. Install pytrends, run it on a few keywords, feel great. Run it on a few hundred, get a wall of 429 errors.
Then pytrends got archived in April 2025. Google announced an official Trends API, but it's invite-only. So for most of us, the old way is just... gone.
I spent a long time on this problem, so here's what I learned, and what I use now.
First, the part most people miss: related topics
Everyone knows the Google Trends line chart. Fewer people use the bit underneath it: related topics.
Related queries show you what people typed. Related topics show you what they meant. "air fryer recipes", "best air fryer" and "ninja air fryer" are three queries, but Google groups them under topics like Air fryer (Cooking appliance) or Ninja (Brand). That's gold for content planning, because you see the real themes, not 50 variations of the same search.
The catch? It's the hardest part of Trends to get at scale. When I tested the Google Trends scrapers on the Apify Store, most returned related topics empty, or didn't return them at all. On my own first 1,000-keyword run, 424 came back blank.
So I built one that gets them
It took a lot of testing, but it works now. You give it a keyword list, and for every keyword you get the trend line, interest by state, US metro area and city, related queries and related topics, both top and rising.
My last 1,000-keyword run came back with every keyword complete. No proxies to manage, no 429s to babysit.
The no-code way
Open the page, paste your keywords, press Start, then download a CSV or Excel file.
https://apify.com/clean-fetch/google-trends-scraper
The Python way
pip install apify-client
from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN") # free account → Settings → API & Integrations
run = client.actor("clean-fetch/google-trends-scraper").call(run_input={
"keywords": ["air fryer", "pickleball", "ai agents"],
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item["keyword"], [t["title"] for t in item["relatedTopics"]["rising"][:5]])
Only after one thing? Ask for just that:
run_input = {"keywords": keywords, "preset": "custom", "components": ["relatedTopics"]}
3 things I actually do with this data
Find topics before they peak. I sort rising related topics across a whole keyword list. Anything marked "Breakout" gets written about that week.
Pick cities for local campaigns. Interest by metro area tells you where something is hot, and it's rarely spread evenly.
Prune dead keywords. Run a big list, and anything that comes back low_volume gets cut. Every result has a status, so "Google has no data" never gets mixed up with "the request failed".
Fair warning
I built this, and it's a paid tool. It's pay per use, and you only pay for data that actually comes back. Keywords Google has no data for cost nothing, and Apify's free plan gives you monthly credit, which is plenty to try it on a real list.
If you're still fighting pytrends, or you've found another way that works, tell me in the comments. Always curious what people are using.
Top comments (0)