Google Trends is one of the best free signals for demand: is a product category growing, which country searches for it most, and which queries are rising right now. Getting that data out of Google Trends is harder. The website gives you one small CSV per chart, and doing that by hand for 50 keywords is a lost afternoon.

This guide covers why exporting is awkward in 2026, how to export Trends data to CSV, JSON or Excel without code, and how to do the same from Python.

The problem: no open API, and pytrends is archived

There is still no generally available official API. In July 2025 Google announced a Google Trends API alpha. As of October 2026 it is still application-only: the page asks developers to apply as alpha testers, and Google has said it is onboarding a small group. If you have a research use case it is worth applying, but you can't count on access.

pytrends, the popular unofficial library, is no longer maintained. The GeneralMills/pytrends repository is archived, and the last PyPI release (4.9.2) is from April 2023. It can still work, but you are on your own with Google's frequent 429 Too Many Requests responses, changes to the internal endpoints, and proxy rotation.

Manual CSV downloads don't scale. Each chart on trends.google.com has its own download button, and every file has its own header layout.

One thing to remember whatever tool you use: Google Trends values are a relative index from 0 to 100, not search volumes. 100 is the peak popularity within that request (those keywords, that region, that time range). Change the comparison and the numbers change.

Option: a hosted Google Trends scraper

For this walkthrough I'll use Google Trends Explorer, an Actor on the Apify platform (disclosure: built by CleanData Labs). It reads the same public data you see on trends.google.com and returns:

  • interest over time (with isPartial flags and per-keyword averages),
  • interest by region (country, state, city or US metro),
  • related queries and related topics (top and rising, with a numeric growthPercent and an isBreakout flag),
  • daily Trending Now searches per country.

It retries rate-limited requests with a new session (and a new proxy IP when Apify Proxy is enabled), and failed queries are reported in the dataset instead of silently disappearing.

Pricing: $0.0025 per result, where one result is a complete data block (for example, a full 12-month timeline or a full region table), not one row per date. Error rows and "no data" rows are free, and Apify adds a $0.00005 Actor start fee per run. Apify's free plan includes $5 of monthly credit, so you can try it without paying.

Step-by-step: export Google Trends data in Apify Console

  1. Open the Actor page and click Try for free. Sign in or create a free Apify account.
  2. In Keywords / search terms, enter your terms, e.g. electric bike and e-scooter. You can also paste a full chart link into Google Trends URLs. The keywords, country, time range, category and property are read from the URL.
  3. Turn on Compare keywords together if you want the keywords on one shared 0–100 scale (up to 5 per comparison, like on the website). Leave it off to get a separate chart for each keyword.
  4. Set Countries / regions (e.g. US, GB, or US-CA for California; leave empty for worldwide) and a Time range, such as Past 12 months. Use Custom time range for exact dates (2025-01-01 2025-12-31).
  5. Tick the data you need: Interest over time, Interest by region, Related queries (top + rising), Related topics (top + rising). For daily trending searches, add country codes to Trending Now countries.
  6. If you plan to open the file in Excel or Google Sheets, turn on Flatten output (CSV / Sheets friendly). Each date or region then becomes its own row instead of a nested array. The price stays the same, because billing counts data blocks, not rows.
  7. Click Start. A small run like this usually finishes in well under a minute. Open the Output tab and export as JSON, CSV, Excel, XML or HTML.

Every row includes a trendsUrl, so you can open the same chart on trends.google.com and check it.

What the output looks like

Here is a shortened interest-over-time row from a real run (US, past 12 months, the two keywords compared):

{ "type": "interest_over_time", "keywords": ["electric bike", "e-scooter"], "geo": "US", "timeRange": "today 12-m", "timeline": [ {"date": "Oct 26 – Nov 1, 2025", "timestamp": 1761436800, "isPartial": false, "electric bike": 13, "e-scooter": 0}, {"date": "Nov 2 – 8, 2025", "timestamp": 1762041600, "isPartial": false, "electric bike": 16, "e-scooter": 1} ], "averages": {"electric bike": 31, "e-scooter": 1}, "pointCount": 53 } 

And one entry from the "rising" list of a related-queries row from the same run:

{"rank": 2, "query": "yozma", "value": 4100, "formattedValue": "+4,100%", "isBreakout": false, "growthPercent": 4100} 

"Breakout" entries (growth over 5,000%) come with isBreakout: true and growthPercent: null, so you can filter them without parsing strings.

Python example with apify-client

To automate this, install the official client (pip install apify-client) and get your API token from Settings → API & Integrations in Apify Console. I tested this with apify-client 3.4:

import os from apify_client import ApifyClient client = ApifyClient(os.environ["APIFY_TOKEN"]) run_input = { "keywords": ["electric bike", "e-scooter"], "compareKeywords": True, "geos": ["US"], "timeRange": "today 12-m", "interestOverTime": True, "interestByRegion": True, "regionResolution": "REGION", "relatedQueries": True, } run = client.actor("cleandata-labs/google-trends-explorer").call(run_input=run_input) for item in client.dataset(run.default_dataset_id).iterate_items(): if item["type"] == "interest_over_time": for point in item["timeline"]: print(point["date"], point["electric bike"], point["e-scooter"]) 

That run returned four results: one timeline, one table of 51 US regions, and one related-queries list per keyword.

To get a CSV file directly, call the dataset items endpoint with format=csv, for example https://api.apify.com/v2/datasets/<DATASET_ID>/items?format=csv. Combine it with flattenOutput: true for clean columns. With the JavaScript client the same call is client.actor("cleandata-labs/google-trends-explorer").call(input).

Tips for comparing keywords

  • Compare in one request. Values from separate requests are each scaled to their own peak, so "62" in one chart and "62" in another are not comparable. Put the terms in one comparison (compareKeywords: true).
  • Use an anchor term for more than 5 keywords. Split them into groups of 4 plus one shared reference keyword, then rescale each group by the anchor's values.
  • Watch the last data point. Points with isPartial: true cover a period that hasn't ended yet and usually look lower than they will end up.
  • Use topics for ambiguous words. Turn on Keyword / topic suggestions to get Google's topic IDs (e.g. /m/...). Topics group spellings and languages; plain search terms don't.
  • Look at the scale. In the run above, "e-scooter" averaged 1 next to "electric bike". That doesn't mean nobody searches for it. Next to a much bigger term, small ones get rounded down toward 0.

Tips for regional data

  • Use ISO codes in Countries / regions: DE for Germany, US-TX for Texas.
  • Region resolution controls the breakdown: COUNTRY (worldwide), REGION (states/provinces), CITY, or DMA (US metro areas).
  • Keep Only regions with data on (the default) to drop regions where Google reports nothing.
  • Region values are relative too: 100 is the region with the highest share of searches for the term, not the most searches.
  • For more than about 20 queries per run, enable Apify Proxy (residential works best), because Google rate-limits busy IP addresses.

Wrapping up

Until Google's official API is widely available, you can choose between doing it by hand, maintaining a scraper yourself, or using a hosted one. If you just need clean JSON or CSV for a list of keywords, a hosted Actor like Google Trends Explorer is quick to set up. You can schedule it in Apify Console or connect it to Google Sheets, Make, Zapier or n8n.

Whatever tool you use, the data is the public, aggregated information Google shows on its website. Check Google's terms and the rules that apply to your use.