datagrit

datagrit › Data › Google Trends Keyword Ranker and Compare Tool

Data

Google Trends Keyword Ranker and Compare Tool

Rank up to 100 keywords on one comparable Google Trends scale, with interest by region and related queries, for many locations in one run.

Run it on Apify StoreUse the APIfrom $1.75 per 1,000 results + $10 per run · no code needed
from $1.75 per 1,000 results + $10 per runpay only for trends rows you get
JSON · CSV · Excelexport or call via API
Scheduled runsdaily or weekly feeds with Apify schedules
v0.2updated 2026-10-08

Google Trends Keyword Ranker and Compare Tool takes a list of up to 100 keywords and ranks them against each other on one Google Trends scale, per location. Google Trends itself compares five terms at a time and rescales every chart to its own peak, so two charts cannot be compared. This Actor links the groups through a repeated anchor keyword and returns average interest, peak, trend direction, top regions and related queries as structured rows you can export as JSON, CSV or Excel, call through the Apify API, or plug into n8n, Make and AI agents through MCP. No browser and no API key are needed.

Why use Google Trends Keyword Ranker and Compare Tool?

What data does it return?

Pick the row types in Data to return. Every row has a type, the keyword, the geo it was measured in and a scrapedAt timestamp.

How the shared scale works

Keywords are read in groups of five. From the second group on, the middle keyword of the first group is repeated as an anchor, and the ratio between its two readings rescales the whole group. Each row says how reliable its placement is in scaleQuality: exact for the first group, good when the anchor had plenty of search volume, coarse when it was thin or when the keyword's own values average below 3 on Google's 0 to 100 scale (whole-number rounding then dominates), and unlinked when it was too thin to link at all. Unlinked keywords keep their own 0 to 100 values but get no rank. The run message lists how many keywords fell into each class, so you know how far to trust the ranking.

How to use the Actor

  1. Enter your keywords in Keywords, one per line. Phrases work as well as single words.
  2. Choose Locations as country codes such as US, DE or GB, regions such as US-CA, or WORLDWIDE. Up to 10 locations can be compared in one run.
  3. Set the Time range from the last hour to all time, or give a Custom date range as two dates.
  4. Select the Data to return and run the Actor. Open the Overview view of the dataset for the ranking, or use the Regions, Related and Series views for the other row types.

Searches can be limited to web, images, news, YouTube or shopping, and to a Google Trends Category ID, for example to separate the fruit from the phone brand.

Input example


{
  "keywords": ["python", "rust", "golang"],
  "geos": ["US", "DE"],
  "timeRange": "today 12-m",
  "dataTypes": ["keywordSummary", "relatedQueries"],
  "relatedQueryKind": "rising",
  "maxRelatedPerKeyword": 5,
  "maxItems": 100
}

Output fields

FieldMeaning
typekeywordSummary, interestOverTime, interestByRegion, relatedQuery or status
keyword, geoThe keyword and the location the row was measured in
rankPosition among all keywords of the location, 1 is the most searched
normalizedAverageAverage interest on the shared scale, where the strongest keyword peaks at 100
averageValueAverage of the raw 0 to 100 points of the keyword in its own group
peakValue, peakDateHighest point on the shared scale and when it happened
changePct, trendDirectionChange between the first and last third of the range, and rising, falling or steady. A keyword that starts from zero has no percentage but is rising
scaleQuality, anchorKeywordHow the keyword was placed on the shared scale, and the anchor that linked it
timelineInterest over time rows: date, value, normalizedValue, isPartial for every point
regionName, regionCode, regionValue, regionRankInterest by region rows
relatedQuery, relatedKind, relatedValue, relatedLabel, isBreakoutRelated query rows
found, reason, messageStatus rows that explain why a keyword or location returned no data

Output fields

Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.

FieldTypeDescriptionExample
typestringKind of row: keywordSummary, interestOverTime, interestByRegion, relatedQuery or status.keywordSummary
foundbooleanFalse only on status rows that explain why a keyword or location produced no data.true
keywordstringThe keyword the row describes.python
geostringLocation code the row was measured in, or WORLDWIDE.US
timeRangestringTime range the row was measured over.today 12-m
searchTypestringGoogle property the searches come from: web, images, news, youtube or shopping.web
categoryintegerGoogle Trends category the searches were limited to; 0 means all.0
rankintegerPosition of the keyword among all keywords of this location by normalized average, 1 is the most searched. Empty when the scale could not be linked.1
averageValuenumberAverage of the 0 to 100 points Google returned for this keyword in its own comparison group.54.2
normalizedAveragenumberAverage interest on the single scale shared by all keywords of the run, where the strongest keyword peaks at 100.63.4
peakValuenumberHighest point of the keyword on the shared scale.100
peakDatestringDate, or timestamp for ranges up to 7 days, of the highest point.2025-12-14
latestValuenumberLast complete point of the keyword on the shared scale.58.1
changePctnumberChange of the average between the first and last third of the range, in percent. Null when the first third averages 0.-12.5
trendDirectionstringrising, falling or steady, with 10 percent as the threshold. For a keyword that starts from zero it follows the sign of the change.steady
dataPointsintegerNumber of points Google returned for the keyword.53
pointsWithDataintegerNumber of points that had enough search volume to be reported.53
scaleQualitystringHow the keyword was placed on the shared scale: exact (first group), good or coarse (linked through the anchor keyword with enough or little volume, or a keyword whose own values average below 3) or unlinked.exact
anchorKeywordstringKeyword that was repeated in each group to link the scale. Empty for the first group.golang
timelinearrayInterest over time rows only: every data point of the range with its date (or UTC timestamp for ranges up to 7 days), the raw 0 to 100 value Google returned, the value on the shared scale of the run and a flag for the period still running.[{"date":"2025-10-05","value":61,"normalizedV
regionCodestringCode of the region, such as US-CA or a country code. Empty for cities without a code.US-WA
regionNamestringName of the country, state, metro area or city.Washington
regionValueintegerInterest in the region on a 0 to 100 scale, where 100 is the region with the highest share of searches for this keyword.100
regionRankintegerPosition of the region among the returned regions for this keyword.1
latitudenumberLatitude of the region centre when Google returns it.47.6
longitudenumberLongitude of the region centre when Google returns it.-122.3
relatedQuerystringSearch query people used together with the keyword.python tutorial
relatedKindstringtop for the most searched queries, rising for the fastest growing ones.top
relatedRankintegerPosition inside its top or rising list.1
relatedValueintegerScore from Google: 0 to 100 for top queries, percent growth for rising queries.100
relatedLabelstringValue as Google shows it, for example 100, +250% or Breakout.100
isBreakoutbooleanTrue when the rising query grew by more than 5,000 percent.false
relatedUrlstringGoogle Trends page of the related query.https://trends.google.com/trends/explore?q=python+tutorial&date=today+12-m&a
sourceUrlstringGoogle Trends page that shows the same keyword, location and range.https://trends.google.com/trends/explore?hl=en-US&date=today+12-m&q=pyth
scrapedAtstringUTC timestamp of the run.2026-10-08T03:00:00.000Z
reasonstringPresent on status rows only: noData, fetchFailed or badLocation.noData
messagestringPresent on status rows only: what happened and what to try.Google Trends has too little search volume for this keyword in this location and

Sample record

{
  "type": "keywordSummary",
  "found": true,
  "keyword": "python",
  "geo": "US",
  "timeRange": "today 12-m",
  "searchType": "web",
  "category": 0,
  "rank": 1,
  "averageValue": 54.2,
  "normalizedAverage": 63.4,
  "peakValue": 100,
  "peakDate": "2025-12-14",
  "latestValue": 58.1,
  "changePct": -12.5,
  "trendDirection": "steady",
  "dataPoints": 53,
  "pointsWithData": 53,
  "scaleQuality": "exact",
  "anchorKeyword": "golang",
  "timeline": [
    {
      "date": "2025-10-05",
      "value": 61,
      "normalizedValue": 30.1,
      "isPartial": false
    }
  ],
  "regionCode": "US-WA",
  "regionName": "Washington",
  "regionValue": 100,
  "regionRank": 1,
  "latitude": 47.6,
  "longitude": -122.3,
  "relatedQuery": "python tutorial",
  "relatedKind": "top",
  "relatedRank": 1,
  "relatedValue": 100,
  "relatedLabel": "100",
  "isBreakout": false,
  "relatedUrl": "https://trends.google.com/trends/explore?q=python+tutorial&date=today+12-m&geo=US",
  "sourceUrl": "https://trends.google.com/trends/explore?hl=en-US&date=today+12-m&q=python&geo=US",
  "scrapedAt": "2026-10-08T03:00:00.000Z",
  "reason": "noData",
  "message": "Google Trends has too little search volume for this keyword in this location and time range."
}

Input

FieldNameTypeWhat it does
keywordsKeywordsarrayKeywords or topics to compare, one per line, up to 100. Lists longer than five are linked automatically so every number is on the same 0 to 100 scale. Duplicates are ignored.
geosLocationsarrayWhere to measure interest: a country code such as "US" or "DE", a region such as "US-CA" or "GB-ENG", or "WORLDWIDE". Each location is a separate comparison, up to 10 per run.
timeRangeTime rangestringPeriod to measure. Short ranges return hourly points, long ones weekly or monthly points.
customTimeRangeCustom date rangestringOptional range "YYYY-MM-DD YYYY-MM-DD", start date first, for example "2024-01-01 2024-12-31". When filled it replaces the time range above.
searchTypeSearch typestringWhich Google property the searches come from.
categoryCategory IDintegerOptional Google Trends category number that narrows the searches, for example 5 for Computers and Electronics. 0 means all categories.
dataTypesData to returnarrayRow types to produce, one per line: keywordSummary (one ranked row per keyword and location), interestOverTime (one row per keyword and location with the whole timeline in one field), interestByRegion and relatedQueries (both read per keyword). Unknown values are ignored.
regionResolutionRegion detailstringGranularity of the interest by region rows: automatic picks countries for worldwide runs and states or provinces for a country; cities and metro areas give finer rows inside a country, and Google reports only cities with enough search volume, so rare keywords may return few or none.
maxRegionsPerKeywordRegions per keywordintegerKeep this many top regions for each keyword and location.
relatedQueryKindRelated queries to returnstringTop queries are the most searched alongside the keyword; rising queries grew fastest and include breakout flags.
maxRelatedPerKeywordRelated queries per keywordintegerKeep this many related queries of each kind for each keyword and location.
maxItemsMaximum rowsintegerStop after this many rows in total across all keywords and locations.
proxyConfigurationProxy configurationobjectGoogle Trends rate limits shared server addresses, so Apify Proxy is on by default. Switch it off only when you run the Actor from a home connection.

Call it from your code

Run the Actor and get the results in one request. Replace YOUR_APIFY_TOKEN with the token from your Apify account settings.

curl -X POST "https://api.apify.com/v2/acts/datagrit~google-trends-keyword-ranker/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"keywords":["python","rust","golang"],"geos":["US"],"dataTypes":["keywordSummary","relatedQueries"],"maxRelatedPerKeyword":5,"maxItems":30}'
import { ApifyClient } from 'apify-client';

const client = new ApifyClient({ token: process.env.APIFY_TOKEN });
const run = await client.actor('datagrit/google-trends-keyword-ranker').call({
  "keywords": [
    "python",
    "rust",
    "golang"
  ],
  "geos": [
    "US"
  ],
  "dataTypes": [
    "keywordSummary",
    "relatedQueries"
  ],
  "maxRelatedPerKeyword": 5,
  "maxItems": 30
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items.length, items[0]);

Install with npm i apify-client.

from apify_client import ApifyClient
import os

client = ApifyClient(os.environ["APIFY_TOKEN"])
run = client.actor("datagrit/google-trends-keyword-ranker").call(run_input={
  "keywords": [
    "python",
    "rust",
    "golang"
  ],
  "geos": [
    "US"
  ],
  "dataTypes": [
    "keywordSummary",
    "relatedQueries"
  ],
  "maxRelatedPerKeyword": 5,
  "maxItems": 30
})
items = client.dataset(run["defaultDatasetId"]).list_items().items
print(len(items), items[0] if items else None)

Install with pip install apify-client.

Try Google Trends Keyword Ranker and Compare Tool on Apify

Guide

How to compare more than 5 keywords on Google Trends with one scale — Rank up to 100 keywords on one comparable Google Trends scale, per country, with regions and related queries, in Python or cURL and without a browser.

Related Actors

Public procurement

UK Contract Expiry Radar - Recompete Leads

UK public contracts ending soon with incumbent supplier, buyer, value and contact - recompete leads from Contracts Finder award notices.

from $3.50 / 1,000 results
Company data

French Company Finder - Sirene Financials

French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.

from $5.60 / 1,000 results