Google Trends is one of the most useful free datasets in marketing and one of the most annoying to automate. There is no official API, the website compares at most five keywords, and pytrends breaks whenever Google changes something. So most people check it by hand once in a while and forget about it.
Here is a small n8n workflow that turns it into a habit: every Monday it pulls the last 90 days for your keywords and appends one row per keyword to a Google Sheet, with this week vs. last week, change in %, the peak day and the top rising related searches. After a month you have a trend history that's easy to chart.
Disclosure: the data comes from the Google Trends Scraper on Apify, which I built. Costs are in the post.
The output
Real numbers from a test run (US, past 90 days, three note-taking apps):
| keyword | this_week | last_week | change_pct | period_avg | peak | rising_queries |
|---|---|---|---|---|---|---|
| notion | 52.9 | 53.4 | -1.1 | 61.1 | Aug 24, 2026 | notion ai workspace (+200%), ... |
| obsidian | 74.1 | 75.1 | -1.3 | 75.6 | Jul 26, 2026 | air jordan 12 obsidian 2027 (Breakout), ... |
| evernote | 2.9 | 3.7 | -23.1 | 3.4 | Aug 13, 2026 | how to delete evernote account (Breakout), ... |
Two things jump out, and they are exactly why I like having the rising queries next to the numbers:
- "obsidian" scores higher than "notion", but the rising queries are about sneakers, phones and Minecraft. The keyword is ambiguous, so its number tells you little about the app.
- Evernote is small and dropping, and the top rising query is "how to delete evernote account".
The numbers are Google's relative interest (0-100) on one shared scale, not search volumes. They are good for comparing terms and periods, not for "how many people searched".
The workflow
Four nodes:
Schedule (Monday 8:00) → HTTP Request (Google Trends Scraper) → Code → Google Sheets (append)
Fetching the data
The HTTP Request node calls Apify's run-sync-get-dataset-items endpoint for the Actor fast_data_asap~google-trends-scraper (Header Auth credential with Authorization: Bearer <token>) with this body:
{
"searchTerms": ["notion", "obsidian", "evernote"],
"geo": "US",
"timeRange": "today 3-m",
"includeInterestOverTime": true,
"includeInterestByRegion": false,
"includeRelatedQueries": true
}
The response contains one item of type interestOverTime (a timeline with values for every keyword) and one relatedQueries item per keyword, with top and rising lists.
Unlike the Trends website you can pass more than five keywords. The Actor splits them into batches that share an anchor keyword and rescales everything onto one 0-100 scale, so twenty competitors are still directly comparable.
The Code node
The interesting part is turning a timeline into "this week vs. last week":
const points = (t.timeline || []).filter(p => !p.isPartial);
const stepDays = points.length > 1 ? (points[1].time - points[0].time) / 86400 : 7;
const win = Math.max(1, Math.round(7 / stepDays)); // 7 for daily data, 1 for weekly data
for (const kw of t.keywords) {
const series = points.map(p => Number(p.values[kw] ?? 0));
const thisWeek = avg(series.slice(-win));
const lastWeek = avg(series.slice(-2 * win, -win));
// ... change_pct, peak, top 5 rising queries
}
Two details:
-
Drop the partial point. The most recent data point is usually incomplete (
isPartial: true) and always looks like a drop. Comparing it would give you a "-40%" panic every Monday. -
Detect the resolution. Google returns daily points for 90 days and weekly points for 12 months. Computing the step from the timestamps means you can change
timeRangewithout touching the code.
The result is one item per keyword, and the Google Sheets node appends them using automatic column mapping, so the header row just needs matching names.
Cost
The Actor charges $0.003 per result. A result is one timeline, one regional breakdown or one related-queries list. Three keywords with related queries = 4 results = $0.012 per run, about $0.05 a month for a weekly report. With related queries switched off, a run costs $0.003 no matter how many keywords you track.
Ideas
-
Spike alert: add an IF node
change_pct > 30→ Slack. -
Seasonality: a one-off run with
"timeRange": "today 5-y"before you plan campaigns or stock. -
Where to advertise:
"includeInterestByRegion": truewith"regionResolution": "REGION"or"CITY". -
YouTube or Shopping interest:
"searchProperty": "youtube"/"shopping". -
Brand tracking: your brand plus competitors on one scale, with a steady
anchorTermwhen you track more than five.
Get it
- Workflow JSON and setup guide: https://github.com/ichkifokkus/data-recipes/tree/main/3-weekly-trend-report
- Actor: https://apify.com/fast_data_asap/google-trends-scraper
If you track something interesting with it, tell me in the comments. I'm curious which keywords people watch.
Top comments (0)