Google keyword seasonality tracker · 5-Year Weekly avatar

Google keyword seasonality tracker · 5-Year Weekly

Pricing

from $0.012 / seasonality breakout keyword

Go to Apify Store
Google keyword seasonality tracker · 5-Year Weekly

Google keyword seasonality tracker · 5-Year Weekly

Track how search demand for your keywords moves through the year. One row per keyword: five years of weekly search interest, the peak and trough ISO weeks, year-over-year slope, a z-score breakout alert on the latest closed week, a 13-week outlook, plus monthly search volume and CPC.

Pricing

from $0.012 / seasonality breakout keyword

Rating

0.0

(0)

Developer

David S

David S

Maintained by Community

Actor stats

0

Bookmarked

1

Total users

0

Monthly active users

9 days ago

Last modified

Share

Google Keyword Seasonality Tracker: 5-year weekly seasonality and breakout alerts

Upload a keyword list and get five years of weekly search seasonality per keyword — the ISO weeks it peaks in, the ISO weeks it dies in, whether it is growing year over year, and a z-score breakout alert on the latest closed week — plus a 13-week outlook and absolute monthly search volume and CPC on the same row.

Built for SEO leads, category managers and PPC teams planning a calendar: up to 700 keywords per run, one billed row per keyword, no manual chart reading.

What does the keyword seasonality tracker do?

For every keyword it retrieves the weekly search-interest series for your market and turns it into decisions: a seasonal profile by ISO week (each week of the year averaged across the window and rescaled so 100 is the keyword's average week), the top four peak and trough weeks, a year-over-year slope and change, a breakout verdict against the keyword's own baseline, and a 13-week outlook with expected searches.

It does not hand you a chart to eyeball: every judgement you would make from that chart is already a column — when to publish, when to stock, when to bid, and whether last week was unusual enough to act on.

  • Portfolio, not one phrase at a time. Up to 700 keywords in a single run, one row each.
  • ISO weeks, not months. peak_weeks names the exact weeks — a category manager buys in week 45, not "autumn".
  • Alerts with a threshold you set. breakout_flag is breakout, decline or stable, from the z-score of the latest closed week against that keyword's own baseline, never against other keywords. The current, half-collected week is excluded everywhere, so a collection artefact is never read as a collapse.
  • Absolute volume next to the index. avg_monthly_searches, monthly_searches[], cpc and competition sit on the same row, so "seasonal" and "worth it" are answered together.
  • A forward window. outlook_13w[] projects the next 13 ISO weeks and, when volume is known, turns them into expected searches — otherwise null, never a zero that reads like a measurement.

How to track keyword seasonality and breakouts

  1. Click Try for free and open the Input tab.
  2. Paste your keywords into Keywords, one per line, up to 700 per run.
  3. Pick the Market and Language from the lists — you never type a numeric market code.
  4. Leave History window at 5 years, Breakout threshold at 2.0 and Outlook length at 13 weeks, or tighten the threshold to 1.5 for earlier, noisier alerts.
  5. Optionally switch on Add subregion heat map — included in the row price, off by default.
  6. Click Start, then read the Breakout alerts view first and Overview for the calendar.
  7. Add an Apify Schedule — weekly matches how fast the latest closed week moves.
{
"keywords": ["ski jacket", "air fryer", "halloween costumes"],
"market": "United States",
"language": "en",
"windowYears": 5,
"breakoutZ": 2,
"outlookWeeks": 13,
"includeSubregionMap": false
}

What seasonality data you get per keyword

One dataset row per keyword and market, 34 fields. A real row with the long arrays shortened for reading:

{
"keyword": "ski jacket",
"keyword_normalized": "ski jacket",
"market": "United States",
"language": "English",
"window_from_week": "2021-W31",
"window_to_week": "2026-W32",
"weekly_series": [{ "iso_week": "2026-W31", "week_start": "2026-07-27", "value": 38 }],
"weeks_covered": 262,
"seasonality_index": [{ "iso_week": "W01", "index": 93.61, "years_sampled": 5 }],
"peak_weeks": [{ "iso_week": "W47", "index": 188.91 }, { "iso_week": "W46", "index": 188.06 }],
"trough_weeks": [{ "iso_week": "W02", "index": 80.12 }, { "iso_week": "W03", "index": 80.12 }],
"yoy_slope_pct": 0.1,
"yoy_change_pct": -0.12,
"baseline_mean": 47.39,
"baseline_stdev": 16.52,
"latest_week": "2026-W31",
"latest_index": 38,
"latest_zscore": -0.57,
"breakout_flag": "stable",
"breakout_threshold_z": 2,
"outlook_13w": [{ "iso_week": "2026-W33", "expected_index": 80.12, "expected_searches": 13682 }],
"avg_monthly_searches": 74000,
"monthly_searches": [{ "year": 2026, "month": 6, "searches": 40500 }, { "year": 2026, "month": 7, "searches": 49500 }],
"cpc": 0.94,
"cpc_available": true,
"competition": "HIGH",
"competition_index": 87,
"top_subregions": [{ "subregion": "Colorado", "value": 100 }, { "subregion": "Utah", "value": 88 }],
"geo_concentration_pct": 18.4,
"geo_included": true,
"not_found": false,
"source": "primary",
"content_hash": "5525a622eae678fc8f7298ce67ba129a4de6cbf1071d8486b74703e4f99b834d",
"finished_at": "2026-08-05T09:12:44.031Z"
}
FieldTypeWhat it is
keyword, keyword_normalizedstringYour phrase, and the trimmed lowercased form used for joins
market, languagestringReadable names, never numeric codes
window_from_week, window_to_week, weeks_coveredstring, integerWindow boundaries as YYYY-Www, and how many weekly points arrived
weekly_series[]array{iso_week, week_start, value} — value is a 0-100 index, not searches
seasonality_index[]array{iso_week, index, years_sampled}, 100 = the keyword's average week
peak_weeks[], trough_weeks[]arrayFour strongest and four weakest ISO weeks
yoy_slope_pct, yoy_change_pctnumber/nullTrend per year, and last 52 weeks vs the 52 before
baseline_mean, baseline_stdev, latest_week, latest_index, latest_zscorenumber/string/nullThe keyword's own baseline, the latest closed ISO week and how unusual it was
breakout_flag, breakout_threshold_zstring/null, numberThe verdict, and the threshold that produced it
outlook_13w[]array{iso_week, expected_index, expected_searches} for the coming weeks
avg_monthly_searches, monthly_searches[]integer/arrayAbsolute volume and up to 12 months of history
cpc, cpc_available, competition, competition_indexnumber/bool/stringAdvertiser metrics; null = not measured
top_subregions[], geo_concentration_pct, geo_includedarray/number/boolOptional subregion heat map and how regional demand is
not_found, sourceboolean, stringNo series for this market (a delivered answer), and which path produced the series
content_hash, finished_atstringFingerprint of the data, and when the run finished

What the interest index is, and what it is not

weekly_series[].value is a relative interest index on a 0-100 scale, normalized by the data source — not a number of searches. The same holds for latest_index, baseline_mean, every index field and the value in top_subregions[].

  • Absolute volume lives in avg_monthly_searches and monthly_searches[] — those are search counts.
  • The index answers shape questions (when demand rises, how far last week sat from normal); the volume column answers size questions. Index values are not comparable across keywords as sizes.
  • expected_searches is where the two meet: seasonal index times known monthly volume, null without it.

Input parameters

InputTypeDefaultNotes
keywordsarrayrequired1-700 keywords, one per line
marketselectUnited States94 markets by name; a hidden numeric code is available for API runs
languageselectEnglishLanguage of the searches analysed
windowYearsinteger5Years of weekly history behind the seasonal profile
breakoutZnumber2.0Standard deviations from the keyword's own baseline before it is flagged
outlookWeeksinteger13How many upcoming ISO weeks to project
includeSubregionMapbooleanfalseAdds the subregion heat map at no extra charge per row

Full descriptions live on the Input tab. The Actor also runs from the API tab, the JavaScript and Python clients, and through mcp.apify.com.

How much does the keyword seasonality tracker cost?

Pay per event — you pay for answers, not for runtime.

EventWhen it firesPrice
Actor startOnce per run$0.005
Seasonality breakout keywordOnce per delivered row$0.018 or lower on higher plans
  • A keyword with no series is a delivered row and is billed — "no measurable history in this market" is an answer, and it stops you planning around a keyword nobody searches.
  • A keyword whose data could not be retrieved is not delivered and not billed, and repeating the same keyword and settings within 24 hours re-delivers the cached row unbilled.
  • The subregion heat map has no event of its own — a row that carries a map and a row that does not cost exactly the same.
This ActorFree trends web UISEO suites
Input size700 keywords per runOne phrase at a timeKeyword lists, monthly plan
Seasonal profileISO-week index, 5 years pooledA chart to read yourselfMonthly volume history
Breakout alertz-score verdict with your thresholdNoneSometimes, as a trend arrow
Forward outlook13 weeks, with expected searchesNoneRarely
Absolute volumeOn the same rowNot availableYes
Output and commitmentDataset/API, per delivered rowScreenshots, manual workDashboard, monthly plan

What this actor does not do

  • It does not return absolute search volume in the weekly series. The series is a normalized 0-100 index; the volume column is avg_monthly_searches, and the two answer different questions.
  • It does not report the current, partial ISO week. Alerts and baselines use closed weeks only, so the freshest verdict is about last week, not today.
  • It does not forecast demand shocks. outlook_13w[] projects the keyword's own seasonal shape and knows nothing about a launch, a news cycle or a competitor's campaign.
  • It does not invent data it does not have. Missing volume is null with expected_searches: null, an unmeasurable verdict is breakout_flag: null, and unspecified competition stays null, never "LOW".
  • It does not guarantee five full years per phrase: a young keyword returns fewer weeks_covered.
  • It does not cover more than one market per run, caps the subregion map at 10 subregions per keyword, and never logs into an account, drives a browser or bypasses any protection.

FAQ

How do I find out when a keyword peaks during the year?

Read peak_weeks[] — the four strongest ISO weeks of the five-year seasonal profile — and seasonality_index[] for the full 52-week shape. Week labels carry no year because the profile pools years; plan against the week number.

What exactly is a breakout here?

The latest closed week is compared with that keyword's own baseline mean and standard deviation. More than breakoutZ deviations above is breakout, the same below is decline, inside the band is stable.

Why is latest_zscore null on some rows?

Because the baseline has no spread to measure against: a keyword whose closed weeks are flat has a standard deviation of 0, so no z-score exists. The verdict is null too, deliberately not stable — an unmeasurable week is not a calm week.

The underlying data is the same kind, but the chart is one phrase at a time and exports nothing. This Actor takes 700 phrases per run, converts each into an ISO-week index, adds a breakout verdict, a 13-week outlook and absolute volume, and returns a dataset.

How often should I re-run it?

Weekly — the verdict is about the latest closed ISO week. Re-running a keyword inside 24 hours returns the cached row unbilled.

  • This Actor returns aggregated search-interest and keyword planning metrics. It collects no personal data and returns no end-user identities or individual search histories.
  • Data is retrieved through a licensed data API — no login, no account takeover, no anti-bot circumvention, no automated browsing of search engines.
  • Output is a point-in-time observation of aggregated demand, provided as-is for planning. The 13-week outlook projects past seasonality, is not a guarantee of future demand, and is not financial advice.
  • The weekly series is a normalized 0-100 index published by the source, not a count of searches; absolute volume is reported separately in avg_monthly_searches. Coverage limits are stated in the row itself — weeks_covered, not_found, cpc_available and geo_included.
  • You are responsible for using the output in line with the law in your jurisdiction and the terms of the platforms you advertise on. Google is a trademark of Google LLC; this Actor is not affiliated with or endorsed by Google.
  • Questions or a bug? Open an issue on the Issues tab; see API for integration.

SEO keywords

keyword seasonality tool, seasonal keyword trends, google trends api, search trend alerts, demand forecasting tool, keyword trend tracker, search demand seasonality, seasonal search volume, keyword breakout detection, bulk keyword trends, weekly search interest data, seasonal SEO planning, content calendar keyword research, ecommerce demand planning, peak season keyword research, year over year keyword trends, keyword trend monitoring, seasonal demand analysis.

Built by doesaiknow.