Product Hunt Launch Pricing & Website Intel
Top Product Hunt launches with the product's resolved website, live pricing page, plan tiers and lowest paid price.
datagrit › Data › Google Trends Keyword Ranker and Compare Tool
DataRank up to 100 keywords on one comparable Google Trends scale, with interest by region and related queries, for many locations in one run.
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.
changePct and trendDirection per keyword over time.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.
rank, normalizedAverage, peakValue, peakDate, latestValue, changePct, trendDirection and scaleQuality.timeline in one field: date, raw 0 to 100 value, value on the shared scale and a flag for the period still running.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.
US, DE or GB, regions such as US-CA, or WORLDWIDE. Up to 10 locations can be compared in one run.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.
{
"keywords": ["python", "rust", "golang"],
"geos": ["US", "DE"],
"timeRange": "today 12-m",
"dataTypes": ["keywordSummary", "relatedQueries"],
"relatedQueryKind": "rising",
"maxRelatedPerKeyword": 5,
"maxItems": 100
}
| Field | Meaning |
|---|---|
type | keywordSummary, interestOverTime, interestByRegion, relatedQuery or status |
keyword, geo | The keyword and the location the row was measured in |
rank | Position among all keywords of the location, 1 is the most searched |
normalizedAverage | Average interest on the shared scale, where the strongest keyword peaks at 100 |
averageValue | Average of the raw 0 to 100 points of the keyword in its own group |
peakValue, peakDate | Highest point on the shared scale and when it happened |
changePct, trendDirection | Change 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, anchorKeyword | How the keyword was placed on the shared scale, and the anchor that linked it |
timeline | Interest over time rows: date, value, normalizedValue, isPartial for every point |
regionName, regionCode, regionValue, regionRank | Interest by region rows |
relatedQuery, relatedKind, relatedValue, relatedLabel, isBreakout | Related query rows |
found, reason, message | Status rows that explain why a keyword or location returned no data |
Every result is one flat record, so it drops straight into a spreadsheet, a database or a CRM.
| Field | Type | Description | Example |
|---|---|---|---|
type | string | Kind of row: keywordSummary, interestOverTime, interestByRegion, relatedQuery or status. | keywordSummary |
found | boolean | False only on status rows that explain why a keyword or location produced no data. | true |
keyword | string | The keyword the row describes. | python |
geo | string | Location code the row was measured in, or WORLDWIDE. | US |
timeRange | string | Time range the row was measured over. | today 12-m |
searchType | string | Google property the searches come from: web, images, news, youtube or shopping. | web |
category | integer | Google Trends category the searches were limited to; 0 means all. | 0 |
rank | integer | Position 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 |
averageValue | number | Average of the 0 to 100 points Google returned for this keyword in its own comparison group. | 54.2 |
normalizedAverage | number | Average interest on the single scale shared by all keywords of the run, where the strongest keyword peaks at 100. | 63.4 |
peakValue | number | Highest point of the keyword on the shared scale. | 100 |
peakDate | string | Date, or timestamp for ranges up to 7 days, of the highest point. | 2025-12-14 |
latestValue | number | Last complete point of the keyword on the shared scale. | 58.1 |
changePct | number | Change of the average between the first and last third of the range, in percent. Null when the first third averages 0. | -12.5 |
trendDirection | string | rising, falling or steady, with 10 percent as the threshold. For a keyword that starts from zero it follows the sign of the change. | steady |
dataPoints | integer | Number of points Google returned for the keyword. | 53 |
pointsWithData | integer | Number of points that had enough search volume to be reported. | 53 |
scaleQuality | string | How 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 |
anchorKeyword | string | Keyword that was repeated in each group to link the scale. Empty for the first group. | golang |
timeline | array | Interest 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 |
regionCode | string | Code of the region, such as US-CA or a country code. Empty for cities without a code. | US-WA |
regionName | string | Name of the country, state, metro area or city. | Washington |
regionValue | integer | Interest in the region on a 0 to 100 scale, where 100 is the region with the highest share of searches for this keyword. | 100 |
regionRank | integer | Position of the region among the returned regions for this keyword. | 1 |
latitude | number | Latitude of the region centre when Google returns it. | 47.6 |
longitude | number | Longitude of the region centre when Google returns it. | -122.3 |
relatedQuery | string | Search query people used together with the keyword. | python tutorial |
relatedKind | string | top for the most searched queries, rising for the fastest growing ones. | top |
relatedRank | integer | Position inside its top or rising list. | 1 |
relatedValue | integer | Score from Google: 0 to 100 for top queries, percent growth for rising queries. | 100 |
relatedLabel | string | Value as Google shows it, for example 100, +250% or Breakout. | 100 |
isBreakout | boolean | True when the rising query grew by more than 5,000 percent. | false |
relatedUrl | string | Google Trends page of the related query. | https://trends.google.com/trends/explore?q=python+tutorial&date=today+12-m&a |
sourceUrl | string | Google 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 |
scrapedAt | string | UTC timestamp of the run. | 2026-10-08T03:00:00.000Z |
reason | string | Present on status rows only: noData, fetchFailed or badLocation. | noData |
message | string | Present on status rows only: what happened and what to try. | Google Trends has too little search volume for this keyword in this location and |
{
"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."
}
| Field | Name | Type | What it does |
|---|---|---|---|
keywords | Keywords | array | Keywords 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. |
geos | Locations | array | Where 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. |
timeRange | Time range | string | Period to measure. Short ranges return hourly points, long ones weekly or monthly points. |
customTimeRange | Custom date range | string | Optional 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. |
searchType | Search type | string | Which Google property the searches come from. |
category | Category ID | integer | Optional Google Trends category number that narrows the searches, for example 5 for Computers and Electronics. 0 means all categories. |
dataTypes | Data to return | array | Row 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. |
regionResolution | Region detail | string | Granularity 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. |
maxRegionsPerKeyword | Regions per keyword | integer | Keep this many top regions for each keyword and location. |
relatedQueryKind | Related queries to return | string | Top queries are the most searched alongside the keyword; rising queries grew fastest and include breakout flags. |
maxRelatedPerKeyword | Related queries per keyword | integer | Keep this many related queries of each kind for each keyword and location. |
maxItems | Maximum rows | integer | Stop after this many rows in total across all keywords and locations. |
proxyConfiguration | Proxy configuration | object | Google 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. |
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.
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.
Top Product Hunt launches with the product's resolved website, live pricing page, plan tiers and lowest paid price.
Find EU public contracts approaching expiry from TED award notices: incumbent, buyer, value, end date and renewal options.
UK public contracts ending soon with incumbent supplier, buyer, value and contact - recompete leads from Contracts Finder award notices.
French company lead lists from Sirene screened by net result and revenue, with net margin, size, matching establishment and optional directors.