Google Trends Intelligence avatar

Google Trends Intelligence

Pricing

from $3.00 / 1,000 google trends intelligence records

Go to Apify Store
Google Trends Intelligence

Google Trends Intelligence

Google Trends interest over time and related queries with trend direction, momentum, volatility, source proof, API output, scheduling, monitoring, and integrations.

Pricing

from $3.00 / 1,000 google trends intelligence records

Rating

0.0

(0)

Developer

Skootle

Skootle

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

6 days ago

Last modified

Share

Google Trends Intelligence

Built by Skootle for reliable, decision-ready data.

Google Trends Intelligence hero

TL;DR

  • Pulls Google Trends interest over time and related queries for up to 5 keywords in one run, then ships three record types: raw TREND_POINT rows, ranked RELATED_QUERY rows, and a per-keyword SUMMARY with the trend maths already done.
  • Direction, volatility, momentum, peak and trough are computed for you. Direction comes from an ordinary least squares fit across the whole window, not from comparing the first and last reading.
  • A block, a rate limit, or a captcha interstitial fails the run loudly with the HTTP status and a body snippet. It never returns as an empty dataset.
  • A genuine no-match is marked explicitly with zeroMatch: true and sourceStatus: "ok", so you can tell "Google has no data" apart from "the scraper got shut out".
  • Built for people who feed trend data into decisions: SEO and content teams sizing demand, brand and product teams tracking interest curves, and agents that need clean numeric fields plus a prewritten agentMarkdown summary.

If this Actor saves you analysis time, share what worked on the reviews page. Report bugs through Issues so they can be fixed with source evidence.


What does this actor return?

Every run writes one dataset. Filter on recordType to split the three shapes. Every record carries recordId, schemaVersion, sourceName, sourceQueryUrl, trendsUrl, retrievedAt, fieldCompletenessScore and agentMarkdown.

  • trendsUrl is the human Google Trends chart for that exact query, so any number can be opened at source.
  • sourceQueryUrl is the API URL the row came from.
  • fieldCompletenessScore is the percentage of scored fields populated, so you can filter thin rows without inspecting each one.
  • agentMarkdown is a short prewritten summary of the row, for piping records into an LLM instead of a spreadsheet.

TREND_POINT

One row per keyword per time bucket. The rolling average and the change against the previous bucket are precomputed.

{
"recordType": "TREND_POINT",
"recordId": "gtrends:point:cold-plunge:US:2026-05-18:1747526400",
"schemaVersion": "1.0.0",
"queryLabel": "cold plunge vs sauna | US | today 3-m",
"keyword": "cold plunge",
"keywordIndex": 0,
"geo": "US",
"geoLabel": "US",
"timeframe": "today 3-m",
"category": 0,
"property": "",
"propertyLabel": "web_search",
"dateIso": "2026-05-18",
"timestampSeconds": 1747526400,
"timestampIso": "2026-05-18T00:00:00.000Z",
"formattedTime": "May 18, 2026",
"bucketIndex": 47,
"interestValue": 68,
"interestFormatted": "68",
"hasData": true,
"isPartialBucket": false,
"changeFromPreviousPct": 9.7,
"changeFromPreviousAbs": 6,
"rollingAverage7": 63.14,
"fieldCompletenessScore": 100,
"sourceName": "Google Trends public web endpoints",
"sourceQueryUrl": "https://trends.google.com/trends/api/widgetdata/multiline?hl=en-US&tz=0&req=%7B%22time%22%3A%222026-02-18%202026-05-18%22%7D&token=APP6_UEAAAAA...",
"trendsUrl": "https://trends.google.com/trends/explore?q=cold+plunge&date=today+3-m&geo=US",
"retrievedAt": "2026-05-19T14:02:11.884Z",
"agentMarkdown": "## cold plunge on 2026-05-18: interest 68/100\n- Window: today 3-m in US\n- 7 bucket rolling average: 63.14\n- Change vs previous bucket: 9.7%\n- Bucket is complete.\n- Source: https://trends.google.com/trends/explore?q=cold+plunge&date=today+3-m&geo=US"
}

RELATED_QUERY

One row per related query, from either the top list or the rising list. Rising rows carry both the label Google printed and a parsed numeric growth, plus an explicit isBreakout boolean.

{
"recordType": "RELATED_QUERY",
"recordId": "gtrends:related:cold-plunge:rising:3:cold-plunge-tub-for-sale",
"schemaVersion": "1.0.0",
"queryLabel": "cold plunge vs sauna | US | today 3-m",
"keyword": "cold plunge",
"relatedQuery": "cold plunge tub for sale",
"listType": "rising",
"rankPosition": 3,
"relativeValue": 1350,
"formattedValue": "+1,350%",
"growthPct": 1350,
"isBreakout": false,
"hasData": true,
"geo": "US",
"geoLabel": "US",
"timeframe": "today 3-m",
"category": 0,
"property": "",
"propertyLabel": "web_search",
"relatedQueryUrl": "https://trends.google.com/trends/explore?q=cold+plunge+tub+for+sale&date=today+3-m&geo=US",
"fieldCompletenessScore": 100,
"sourceName": "Google Trends public web endpoints",
"sourceQueryUrl": "https://trends.google.com/trends/api/widgetdata/relatedsearches?hl=en-US&tz=0&req=%7B%22restriction%22%3A%7B%7D%7D&token=APP6_UEAAAAA...",
"trendsUrl": "https://trends.google.com/trends/explore?q=cold+plunge&date=today+3-m&geo=US",
"retrievedAt": "2026-05-19T14:02:13.201Z",
"agentMarkdown": "## cold plunge tub for sale (rising related query for \"cold plunge\")\n- Rank 3 in the rising list\n- Strength: growth 1350% over the window\n- Window: today 3-m in US\n- Open in Trends: https://trends.google.com/trends/explore?q=cold+plunge+tub+for+sale&date=today+3-m&geo=US"
}

For listType: "top", relativeValue is a 0 to 100 index against the strongest related query, and growthPct is null. For a query Google labels Breakout, formattedValue is "Breakout", isBreakout is true, and growthPct is null because Google does not publish an exact figure above 5000 percent.

SUMMARY

One row per keyword per run. This is the record most buyers actually consume.

{
"recordType": "SUMMARY",
"recordId": "gtrends:summary:cold-plunge:US:today-3-m",
"schemaVersion": "1.0.0",
"headline": "cold plunge: rising, peak 100, average 61.42, 2 breakout queries",
"queryLabel": "cold plunge vs sauna | US | today 3-m",
"keyword": "cold plunge",
"keywordIndex": 0,
"comparedAgainst": ["sauna"],
"geo": "US",
"geoLabel": "US",
"timeframe": "today 3-m",
"category": 0,
"property": "",
"propertyLabel": "web_search",
"observationCount": 89,
"partialBucketsExcluded": 1,
"windowStartDate": "2026-02-18",
"windowEndDate": "2026-05-19",
"peakInterest": 100,
"peakDate": "2026-05-11",
"troughInterest": 31,
"troughDate": "2026-02-24",
"averageInterest": 61.42,
"googleReportedAverage": 61,
"medianInterest": 60,
"latestInterest": 68,
"standardDeviation": 14.87,
"coefficientOfVariation": 0.2421,
"volatility": "moderate",
"slopePerBucket": 0.2913,
"slopeRSquared": 0.6104,
"totalChangeOverWindow": 25.63,
"direction": "rising",
"momentumPct": 34.8,
"dataCoveragePct": 100,
"topQueryCount": 25,
"risingQueryCount": 25,
"breakoutQueryCount": 2,
"topRisingQueries": [
{ "query": "cold plunge chiller", "formattedValue": "Breakout", "growthPct": null, "isBreakout": true },
{ "query": "portable cold plunge", "formattedValue": "Breakout", "growthPct": null, "isBreakout": true },
{ "query": "cold plunge tub for sale", "formattedValue": "+1,350%", "growthPct": 1350, "isBreakout": false },
{ "query": "cold plunge benefits", "formattedValue": "+480%", "growthPct": 480, "isBreakout": false },
{ "query": "diy cold plunge", "formattedValue": "+210%", "growthPct": 210, "isBreakout": false }
],
"topQueries": [
{ "query": "cold plunge tub", "relativeValue": 100 },
{ "query": "cold plunge benefits", "relativeValue": 74 },
{ "query": "ice bath", "relativeValue": 52 },
{ "query": "cold plunge near me", "relativeValue": 41 },
{ "query": "best cold plunge", "relativeValue": 33 }
],
"breakoutQueries": ["cold plunge chiller", "portable cold plunge"],
"sourceStatus": "ok",
"zeroMatch": false,
"interestOverTimeRequested": true,
"relatedQueriesRequested": true,
"interestOverTimeReturned": true,
"relatedQueriesReturned": true,
"notes": [],
"methodology": [
"Interest values are Google index numbers from 0 to 100 relative to the peak of this exact query, not search counts.",
"Averages, median, slope and volatility exclude any bucket Google flagged as still filling."
],
"fieldCompletenessScore": 100,
"sourceName": "Google Trends public web endpoints",
"sourceQueryUrl": "https://trends.google.com/trends/api/explore?hl=en-US&tz=0&req=%7B%22comparisonItem%22%3A%5B%5D%7D",
"trendsUrl": "https://trends.google.com/trends/explore?q=cold+plunge&date=today+3-m&geo=US",
"retrievedAt": "2026-05-19T14:02:13.204Z",
"agentMarkdown": "## cold plunge: rising, peak 100, average 61.42, 2 breakout queries\n- \"cold plunge\" is rising: the fitted line gains 25.63 interest points across today 3-m.\n- Peak 100 on 2026-05-11, trough 31 on 2026-02-24.\n- Average 61.42, median 60, latest 68 across 89 complete buckets.\n- Volatility moderate (coefficient of variation 0.2421), momentum 34.8%.\n- Related demand: 25 top queries, 25 rising, 2 breakout.\n- Fastest risers: cold plunge chiller (Breakout), portable cold plunge (Breakout), cold plunge tub for sale (+1,350%), cold plunge benefits (+480%), diy cold plunge (+210%).\n- Source status: ok.\n- Source: https://trends.google.com/trends/explore?q=cold+plunge&date=today+3-m&geo=US"
}

Every SUMMARY row ships six methodology notes. Two are shown here for space; all six are in the Methodology section below.


1. A block is never delivered as an empty result.

This is the main one. Most Trends scrapers classify anything that is not parseable JSON as "no data" and hand you an empty array with a 200-flavoured success. You then write a report saying interest collapsed, when in fact a residential exit node got burned and Google served a captcha page.

This actor classifies every HTTP response into one of four outcomes before parsing:

ClassTriggerAction
okBody looks like a Trends payloadParse it
retryHTTP 429, any 5xx, an empty 200, or a socket failureBack off, rotate proxy session, try again
blockedHTTP 403, or a 200 carrying an HTML interstitial, a /sorry/index redirect, a reCAPTCHA, or an "unusual traffic" noticeRotate and retry, then fail the run with the status and a body snippet
fatalA 4xx other than 403 and 429, or a body that is not JSON after the XSSI guard is strippedFail immediately, because retrying a malformed request cannot help

A JSON endpoint that answers with <!doctype html is an interstitial, not data, so it is treated as a block and can never be mistaken for an empty result.

2. Trend maths that survives a noisy day.

Direction is an OLS slope across every bucket in the window. A single spike or a single dead day cannot flip the label. You also get slopeRSquared so you can tell a clean trend from a scattered one before you act on it.

3. Partial buckets are excluded from the maths.

Google flags the trailing bucket while it is still filling. Include it and every average and slope drags toward a decline that has not happened. Those buckets are still emitted as TREND_POINT rows with isPartialBucket: true, so nothing is hidden, but the SUMMARY excludes them and reports how many it excluded in partialBucketsExcluded.

4. Breakout is a boolean, not a magic number.

Google prints Breakout and sends a large sentinel value alongside it. This actor derives isBreakout from the label Google actually printed rather than by threshold-guessing the sentinel, and sets growthPct to null rather than reporting a fake precise number.

5. Every row is traceable.

trendsUrl opens the exact chart. sourceQueryUrl is the API call. retrievedAt is the timestamp. If a number looks wrong you can check it in about ten seconds.


How do I know the numbers are real?

Real output: US interest over time for artificial intelligence and machine learning, with the SUMMARY fields printed underneath

Drawn from run Tw3XwwlVBKyWPVOuQ, 258 records, not a mockup. Every label under it is a field you can filter on. Here is how to check any run yourself.

  • Open the chart. Every record carries trendsUrl pointing at the human Google Trends page for that exact keyword, geo, timeframe, category and property. The page should match the record.
  • Cross-check the average. SUMMARY reports both averageInterest (computed here, partial buckets excluded) and googleReportedAverage. They should be close. A large gap means partial or missing buckets, which partialBucketsExcluded and dataCoveragePct confirm.
  • Check the run posture fields. sourceStatus, zeroMatch, interestOverTimeReturned, relatedQueriesReturned and notes describe what happened upstream. Any problem shows up there, and a blocked call fails the run instead of writing a record.
  • Check coverage. dataCoveragePct is the share of buckets Google reported real data for. Low-volume keywords give sparse series, and this makes that visible instead of silently averaging zeros.

What input does it take?

FieldTypeDefaultDescription
keywordsarray of stringsrequired1 to 5 keywords. Each is 1 to 100 characters. More than one keyword makes it a Google Trends comparison, and the 0 to 100 index is then relative across the whole set.
geostring"US"Google geo code, up to 10 characters. "US", "GB", "US-CA", "US-NY-501". Empty string means worldwide.
timeframeenum"today 3-m"Window to pull. See the valid values below.
categoryinteger0Google Trends category id, 0 to 1500. 0 is all categories.
propertyenum""Search surface. See the valid values below.
maxRelatedQueriesinteger250 to 50. Caps how many rows are emitted from each of the top and rising lists, per keyword.
includeInterestOverTimebooleantrueSet to false to skip the timeline call and emit only related queries plus the summary.
includeRelatedQueriesbooleantrueSet to false to skip the related-queries calls and emit only the timeline plus the summary.
languagestring"en-US"Passed to Google as hl. 2 to 10 characters. Affects the language of formatted labels.
proxyCountryCodestring"US"Two-letter country code for the proxy exit node. Match it to geo where you can, since Trends responses vary by request origin.
maxRetriesPerRequestinteger41 to 8. Attempts per HTTP call before the run fails. Each retry gets exponential backoff with jitter and a fresh proxy session.

Valid timeframe values

ValueWindow
now 1-HPast hour
now 4-HPast 4 hours
now 1-dPast day
now 7-dPast 7 days
today 1-mPast 30 days
today 3-mPast 90 days
today 12-mPast 12 months
today 5-yPast 5 years
all2004 to present

Google picks the bucket size from the window. Short now windows return sub-hourly or hourly buckets, today 1-m and today 3-m return daily buckets, today 12-m and today 5-y return weekly buckets, and all returns monthly buckets. That choice is Google's, not this actor's, and it is why row counts vary so much by timeframe.

Valid property values

ValueSurface
""Web search (the default, and what most buyers want)
imagesGoogle Images
newsGoogle News
froogleGoogle Shopping
youtubeYouTube search

Example input

{
"keywords": ["cold plunge", "sauna"],
"geo": "US",
"timeframe": "today 3-m",
"category": 0,
"property": "",
"maxRelatedQueries": 25,
"includeInterestOverTime": true,
"includeRelatedQueries": true,
"language": "en-US",
"proxyCountryCode": "US",
"maxRetriesPerRequest": 4
}

How much does a run cost?

Cost tracks the number of upstream HTTP calls and the number of dataset rows, so here are the drivers rather than a made-up figure.

HTTP calls per run:

  1. One landing-page call to pick up the consent and NID cookies. A failure here is a warning, not a stop.
  2. One explore call. This covers all of your keywords at once and returns the short-lived widget tokens.
  3. One interest-over-time call. Google's timeline widget covers every comparison item in a single response, so this does not multiply by keyword. Skipped if includeInterestOverTime is false.
  4. One related-queries call per keyword. This is the part that scales with keywords.length. Skipped if includeRelatedQueries is false.

So a 1-keyword run is about 4 calls and a 5-keyword run is about 8 calls. Comparing 5 keywords in one run is materially cheaper than 5 separate single-keyword runs, because the landing page, explore and timeline calls are shared.

What increases cost:

  • Longer timeframes and finer buckets. TREND_POINT rows equal buckets multiplied by keywords. A 5-year weekly window and a 90-day daily window produce broadly similar row counts, while now 1-d at sub-hourly resolution produces far more.
  • maxRelatedQueries. Up to maxRelatedQueries rows from the top list plus up to maxRelatedQueries from the rising list, per keyword.
  • Retries. Each retried attempt is another proxied request. Blocked and rate-limited attempts consume proxy traffic before the run fails.
  • Proxy traffic. Residential proxy egress is usually the larger line item, not compute. Trends payloads are small JSON documents, so this stays modest.

What reduces cost:

  • Set includeRelatedQueries: false if you only want the interest curve, or includeInterestOverTime: false if you only want the query lists.
  • Lower maxRelatedQueries.
  • Batch related keywords into one run rather than firing one run per keyword.

What are the limits?

  • 5 keywords per run. This is Google's comparison limit, not an artificial cap.
  • Interest values are relative, not absolute. There is no way to get search counts out of Google Trends. See Methodology below.
  • Comparison changes the numbers. In a multi-keyword run the 0 to 100 index is scaled across the whole set, so the same keyword run alone and run against a bigger keyword will report different values. Both are correct. They answer different questions.
  • No geographic breakdown or topic data yet. This actor covers interest over time and related queries. Interest by region and related topics are not in v0.1.0.
  • Low-volume keywords return sparse or empty series. Google withholds data below a volume floor. That surfaces as zeroMatch: true with sourceStatus: "ok", or as a low dataCoveragePct, not as an error.
  • Trends data is not real time. Even the shortest windows lag, and the trailing bucket is flagged partial until it fills.
  • Google can change the protocol. The three-call flow, the XSSI guard, and the widget naming are all undocumented surfaces. When they drift, this actor throws a fatal error naming the exact call that changed rather than returning a plausible-looking empty payload.
  • Rerunning the same query can shift values slightly. Google samples. Small movements between runs are normal and are not a bug in this actor.

Methodology

Interest values are a 0 to 100 relative index, not search counts. Google scales the series so that the highest point in the requested window equals 100 and everything else is a proportion of that. Change the timeframe, the geo, the category, the property, or the set of compared keywords, and every number in the series can change. A value of 50 means "half the interest of this query's own peak in this exact window". It does not mean 50 searches, 50 thousand searches, or 50 percent of anything else.

Partial buckets are excluded from the maths. Google flags the trailing bucket with isPartial while it is still filling. Those buckets are emitted as TREND_POINT rows so you can see them, but the SUMMARY computes average, median, standard deviation, slope, direction and volatility without them, and reports the count in partialBucketsExcluded. Including a half-collected day is the single most common way a Trends report invents a collapse that never happened.

Direction is an OLS slope, not an endpoint comparison. An ordinary least squares regression is fitted across every complete bucket, indexed by position. The reported slopePerBucket is interest points gained per bucket, and totalChangeOverWindow is that slope extended across the window. The label is assigned relative to the series mean, not in absolute points, because 0.2 points per day means something very different for a keyword averaging 5 than for one averaging 80:

  • rising when the fitted change over the window is at least 10 percent of the series mean
  • falling when it is at most negative 10 percent of the series mean
  • flat when it falls between those
  • unknown when there are fewer than 3 complete buckets

slopeRSquared reports how much of the variance the fitted line explains, so you can weigh the direction label by how well it actually describes the series.

Volatility is the coefficient of variation, banded. Standard deviation divided by the mean, reported raw as coefficientOfVariation and banded as volatility:

  • low below 0.15
  • moderate from 0.15 up to 0.35
  • high at 0.35 and above
  • unknown when the mean is zero or there are too few points

High volatility means the keyword spikes on events rather than holding a level, which changes whether you buy against it or wait for the next spike.

Momentum compares the recent quarter to the earliest quarter. momentumPct is the mean of the last quarter of the window against the mean of the first quarter, as a percentage change. It needs at least 4 complete buckets. This catches the case the slope misses: a keyword that fell for two months and turned around last week has a negative slope and a positive momentum, and both readings are useful.

Breakout means growth above 5000 percent. Google prints the literal string Breakout on a rising query when growth exceeds 5000 percent, and does not publish a figure. Those rows get isBreakout: true and growthPct: null. Every other rising query gets its percentage parsed out of the printed label into growthPct, with the original label preserved in formattedValue.


Silent zeros, and why this actor refuses to produce them

Worth stating plainly, because it is the design decision everything else follows from.

There are two very different reasons a Google Trends query comes back with nothing:

  1. Google answered normally and there is genuinely no data. The keyword is below the volume floor, or the geo is too narrow, or the window is too short. This is a real answer.
  2. Google refused to answer. The proxy exit node is burned, a rate limit hit, a captcha interstitial came back, or the protocol drifted. This is not an answer at all.

Most scrapers flatten both into the same empty array. That is what makes them dangerous in a pipeline. A silent zero looks exactly like a real zero, so it propagates into a dashboard, a report, or an agent's reasoning, and nobody finds out until someone makes a bad decision on it.

This actor separates them:

  • Case 1 produces a SUMMARY record with zeroMatch: true and sourceStatus: "ok". The agentMarkdown says so in plain language: Google answered normally and reported no data, this is a real answer and not a failure, try a broader timeframe or a wider geo.
  • Case 2 fails the run. The error names the HTTP status, the URL, the number of attempts, and includes a body snippet so you can see what Google actually served. Nothing is written to the dataset pretending to be data.

A failed run is cheap to notice and cheap to rerun. A silently zeroed run is neither.


FAQ

Can I get actual search volumes? No, and neither can anyone else from Google Trends. Trends publishes a relative index only. If you need absolute volumes you need Keyword Planner or a third-party volume dataset, and then Trends is the right tool for shape and timing rather than magnitude.

Why do the numbers change when I add a second keyword? Because the index rescales across the comparison set. With one keyword, 100 is that keyword's own peak. With two, 100 is the peak of whichever keyword is larger, and the smaller one gets squashed proportionally. Run keywords alone for individual shape, run them together for relative size.

Why is my last data point lower than the rest? It is probably a partial bucket that is still filling. Check isPartialBucket on that TREND_POINT row. The SUMMARY already excludes it from the trend maths for exactly this reason.

What happens if Google blocks the run? The run fails with a TrendsSourceError naming the HTTP status, the URL, the attempt count and a snippet of the body Google served. It does not write an empty dataset. Retrying later, or with a proxyCountryCode matched to your geo, usually clears it.

direction says rising but the chart looks flat to me. Which is right? Check slopeRSquared and totalChangeOverWindow. A rising label with a low R squared means the fitted line does drift upward, but the series is scattered enough that the line is a poor description of it. The threshold for rising is a fitted change of 10 percent of the series mean, which can be a small absolute movement on a high-average keyword.

Can I track a topic rather than a search term? Not in v0.1.0. Keywords are passed to Google as literal search terms. Trends entity and topic ids are not supported yet.

Does geo accept sub-regions? Yes. Google's geo codes nest, so US, US-CA and US-NY-501 (a metro code) all work. An empty string means worldwide. Narrower geos hit the data floor sooner, so expect more zeroMatch results at metro level.

How do I use this with an LLM or agent? Every record carries an agentMarkdown field: a short prewritten summary with the numbers, the caveats and the source link already in prose. Feed that in directly rather than asking the model to interpret raw fields. The numeric fields are still there when you want the model to compute something.


Tutorial: build a weekly demand brief

  1. Start with two to five terms that answer one commercial question, such as cold plunge, sauna, and ice bath.
  2. Use today 3-m for a campaign-planning view, today 12-m for seasonality, or now 7-d for a fast-moving launch.
  3. Keep includeInterestOverTime and includeRelatedQueries enabled. Set maxRelatedQueries to 10 for a compact brief or 25 for fuller research.
  4. Schedule the Actor weekly in Apify, then send the dataset to Sheets, a webhook, Make, Zapier, or your own API consumer.
  5. Filter recordType: "SUMMARY" for one decision row per keyword. Use direction, momentumPct, volatility, breakoutQueries, and topRisingQueries to decide what deserves action.
  6. Keep TREND_POINT rows for charts and RELATED_QUERY rows for content briefs, product language, and campaign expansion.

A useful operating rule is to treat direction as the long-window signal and momentumPct as the recent change. When they disagree, inspect slopeRSquared, the peak date, and the source chart before acting.

Pricing

Google Trends Intelligence uses pay-per-result pricing with a small Actor start fee. Dataset result charges apply to every emitted TREND_POINT, RELATED_QUERY, and SUMMARY row. The live pricing card in the Apify Store is authoritative.

The lowest buyer price is set from measured Cloud economics, including compute, residential proxy traffic, retries, storage, failed-run exposure, and Apify's creator share. Batching up to five related keywords is usually cheaper than running each keyword separately because the landing, explore, and timeline calls are shared.

Every run has a $5 maximum total charge. Usage passthrough is disabled, so buyers see the Store price instead of receiving separate platform-resource charges.

This Actor reads public Google Trends web endpoints and is not affiliated with, endorsed by, or sponsored by Google. Google Trends values are sampled relative indexes, not absolute search volumes. You are responsible for using the data in accordance with applicable law, Google's terms, and your own compliance requirements.

Do not use this Actor to infer sensitive traits about individuals, to evade access controls, or to make high-impact decisions without independent verification. Source URLs and retrieval timestamps are included so material findings can be checked against the human Google Trends interface.

More from Skootle

Pair this Actor with other Skootle data products when a workflow needs both demand and execution evidence:

For support, open an Issue on the Actor page with the run ID, input, and the specific field that looks wrong. Keep private data and credentials out of issue reports. Reviews belong on the reviews page, while reproducible defects belong in Issues so they can be fixed against source evidence.