Google Trends lets you compare up to 5 search terms, and each comparison is scaled to its own peak of 100. So "air fryer" scoring 60 in one comparison and "heat pump" scoring 60 in another tells you nothing about which is searched more. If you are ranking 200 product ideas, blog topics or keywords, you need them all on the same scale.
The standard fix is an anchor keyword: put the same term in every group of 5 and rescale each group so the anchor matches across groups. This guide does that for any number of keywords, then exports the results.
Disclosure: I'm Aurelix, and I built the Google Trends Scraper used below, which does the anchoring for you. It is a paid tool, priced per result; the current price is on its tool page.
How the shared scale works
- Your first keyword is the anchor. It goes into every comparison of 5 (the anchor plus 4 others).
- Each comparison comes back on its own 0-100 scale. Every group is multiplied so the anchor's values match the first group.
- The whole set is rescaled so the overall peak is 100.
The result: every keyword's values are relative to every other keyword in the run. Choose an anchor of middling popularity. A very rare anchor gives coarse values; a very popular one pushes small keywords down to 0.
The input
{
"keywords": ["air fryer", "pickleball", "solar panels", "heat pump", "sourdough", "standing desk"],
"geo": "US",
"timeRange": "today 12-m",
"compareKeywords": true,
"includeInterestOverTime": true,
"includeInterestByRegion": true,
"includeRelatedQueries": true
}
compareKeywords: true is the shared scale; turn it off to get each keyword on its own 0-100 scale, exactly like typing it alone into Google Trends. geo takes a country or sub-region code (US, GB, US-CA, CA-ON), and property switches to YouTube, News, Images or Shopping search.
Real output
One record per keyword. From a US, past-12-months run with "air fryer" as the anchor:
| keyword | average_interest | peak_interest | latest_interest | top_related_query |
|---|---|---|---|---|
| air fryer | 64.15 | 100 | 54 | air fryer chicken |
| pickleball | 25.49 | 40 | 17 | pickleball paddle |
| solar panels | 8.57 | 24 | 8 | solar panels cost |
Because these share one scale, "air fryer" was searched on average roughly 2.5 times as much as "pickleball" over that year. Each record also contains on_shared_scale, anchor_keyword, compared_with, peak_time, the full interest_over_time timeline, interest_by_region, top_region, and the top and rising related queries (rising ones carry growth such as +250% or Breakout).
Rank keywords and export to CSV
pip install apify-client
import csv
import os
from apify_client import ApifyClient
keywords = [line.strip() for line in open("keywords.txt") if line.strip()] # first line = anchor
client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("aurelix/google-trends-scraper").call(run_input={
"keywords": keywords,
"geo": "US",
"timeRange": "today 12-m",
"compareKeywords": True,
"includeInterestByRegion": False,
})
rows = [r for r in client.dataset(run["defaultDatasetId"]).iterate_items() if r.get("record_type") == "keyword"]
for r in rows:
avg = r.get("average_interest") or 0
r["momentum"] = round((r.get("latest_interest") or 0) / avg, 2) if avg else None
rows.sort(key=lambda r: r.get("average_interest") or 0, reverse=True)
with open("trends-ranked.csv", "w", newline="", encoding="utf-8") as f:
w = csv.DictWriter(f, fieldnames=["keyword", "average_interest", "peak_interest", "latest_interest",
"momentum", "top_rising_query", "trends_url"], extrasaction="ignore")
w.writeheader()
w.writerows(rows)
print(f"{len(rows)} keywords ranked")
momentum above 1 means the latest complete week or month is above the keyword's own average for the period: a rough "rising now" flag. latest_interest skips a period that is still running, so a partial week does not drag it down.
Tips
- Weekly tracking. Schedule the same input weekly to follow a fixed keyword list;
peak_timeshows when each one peaked. - Values differ from the website? With the shared scale on, values are relative to the whole run, not to the keyword alone. Google also samples its data, so repeated runs can differ by a few points.
- Trending searches.
trendingCountriesadds Google's "Trending now" list for those countries, with Google's approximate search volume.
Limits
- Google Trends values are relative (0-100), not search counts.
- Related topics currently come back empty for automated visitors; related queries work.
- Google rate-limits Trends hard. The tool backs off, opens fresh sessions and moves to residential proxy only if the datacenter proxy keeps getting limited; keyword groups still refused are named in the run status and not charged.
- Keywords with very low search volume return no data (named in the run status, not charged).