# Google Trends Scraper

> Google Trends scraper: get interest over time, interest by region and related queries for up to 50 keywords. Compare 5 terms. Export to CSV or Excel.

URL: https://cliqtomedia.com/actors/google-trends-scraper/

Category: Search, SEO & ads · Status: live on Apify Store · Apify page: https://apify.com/cliqtomedia/google-trends-scraper?fpr=cliqto

Get Google Trends data for many keywords in one run. You get interest over time, by region and related queries. Open it as a table or export it.

## How to use it: 3 steps

1. **Make a free Apify account.** Apify is the cloud platform where our tools run. The free plan gives you $5 of usage every month, no credit card needed. You pay Apify, not us.
2. **Paste your input and press Start.** No code needed: you fill in a form (the input). It already has a working example. For example: `web scraping` in Search terms. Each start is one run.
3. **Download the results.** When the run ends, the results are in a table (the dataset). Open Output, press Export and pick Excel or CSV. JSON and the API are there too.

## What it does

Google Trends Scraper gets [Google Trends](https://trends.google.com/trends/) data for your keywords: interest over time, interest by country, region, metro or city, and related queries and topics. Add one or more search terms, pick a location and a time range, and the Actor returns clean rows that you can open as a table, export to CSV or Excel, or read with the API.

- Interest over time: one row per time point with a value from 0 to 100 (100 = the highest interest in the chosen period and place).
- Interest by region: one row per country, region, US metro area or city that has data.
- Related queries: top and rising searches that people also made.
- Related topics: top and rising topics, only when Google sends them.
- Summary: one row per term with its status, average interest and row counts.

### Good for

- Check how interest in a product, brand or topic changes over months or years.
- Find the countries or US states where a term is most popular.
- Collect rising queries for content and SEO ideas.
- Compare up to 5 brands or keywords on one scale.

### Not a good fit

- Google Trends shows relative interest (0–100), not the number of searches. It is not a keyword volume tool.
- It does not collect "Trending now" daily trends or real-time trending stories.
- Google gives no region data for some terms and filters (for example many terms at city level). The Actor then returns the other sections and explains it in a warning.
- Related topics: in our tests in October 2026, Google sent empty topic lists for most terms. The Actor returns topics only when Google sends them.

## Price

Pay per event. Apify bills you, not us.

| What you pay for | Price | When |
|---|---|---|
| Start fee | $0.01 | Charged once per run. This tool uses 1 GB of memory or less by default; more memory costs more. |
| Data row | $0.00005 (from $0.000043 on paid Apify plans) | Charged for each data row of a keyword with data: one point of interest over time, one region, or one related query or topic. The same count applies in grouped output. Per-keyword summary rows and keywords without enough search data or with an error are free. |

- One result: about $0.01.
- 1,000 results: about $0.06.
- Every day 100 results, for 30 days: about $0.45 a month.

Free to try: the Apify free plan gives you $5 of usage every month, no credit card needed.

Prices checked on 24 October 2026. Current price: https://apify.com/cliqtomedia/google-trends-scraper?fpr=cliqto

## Questions

### Does Google Trends show the number of searches?

No. It shows interest from 0 to 100. 100 is the top point for that term, place and time.

### Why are numbers a bit different each day?

Google Trends uses a sample of searches. Small changes between runs are normal.

### Does it get daily trending searches?

No. It does not collect Trending now lists or trending stories.

### How many keywords can I check?

Up to 50 terms per run. 50 terms took about 110 seconds in tests.

### Do I need a Google account or an API key?

No. The Actor reads public Google Trends data without login.

### Is this the number of searches?

No. Google Trends gives relative interest from 0 to 100. 100 is the highest point for the chosen term, place and period. It does not show search volume.

### Why are the numbers a little different from yesterday?

Google Trends uses a sample of searches and rescales each query. Small changes between runs are normal, mostly for small terms and short periods.

### Why are there no related topics?

Google sends related topics only for single terms (not for comparisons), and in our tests in October 2026 the topic lists were often empty. The Actor returns topics only when Google sends them.

### Why does a small country have 100?

Region values are the share of all searches in that place, not the number of searches. A small country with few searches can get 100. This is how Google Trends shows it; the Actor does not change values. Rising values like `23350` (+23,350%) and "Breakout" also come from Google.

### How fresh is the data?

Each run asks Google Trends at the time of the run. The latest time point is often not finished yet (`isPartial` `true`).

## Data fields

- `recordType` (string): What the row holds: a time point, a region, a related query or topic, the per-term summary (rows format) or one whole term (grouped format).
- `searchTerm` (string): The search term the row belongs to.
- `comparisonGroup` (string): All compared terms joined by " | " when "Compare terms" is on; otherwise null.
- `geo` (string): Location code, or WORLDWIDE.
- `timeRange` (string): Time range sent to Google, e.g. "today 12-m" or "2024-01-01 2024-06-30".
- `categoryId` (integer): Google Trends category id (0 = all categories).
- `searchType` (string): web, images, news, shopping or youtube.
- `exploreUrl` (string): The same query in the Google Trends UI.
- `sourceUrl` (string): Google Trends API endpoint the data came from.
- `fetchedAt` (string): When the data was fetched (ISO 8601, UTC).
- `date` (string): Start of the time point (ISO 8601, UTC).
- `formattedTime` (string): Time point label as Google shows it.
- `value` (integer): Interest 0–100 (time point or region) or related-item score; null when Google has no data — never 0 in place of missing.
- `hasData` (boolean): False when Google has no data for this time point.
- `isPartial` (boolean): True for the latest, still incomplete time point.
- `geoCode` (string): Region code (e.g. US-CA, or the metro number).
- `geoName` (string): Region name.
- `formattedValue` (string): Value as Google shows it, e.g. "<1", "+250%" or "Breakout".
- `comparisonShare` (integer): Comparison only: the term's share (%) of searches among the compared terms in this region.
- `latitude` (number): City level only: latitude.
- `longitude` (number): City level only: longitude.
- `regionResolution` (string): Region level of the region rows: COUNTRY, REGION, DMA or CITY.
- `rankType` (string): top = most searched with the term; rising = biggest growth.
- `query` (string): Related query text.
- `topicTitle` (string): Related topic name.
- `topicType` (string): Related topic type, e.g. "Programming language".
- `topicMid` (string): Google Knowledge Graph id of the topic.
- `isBreakout` (boolean): True when Google marks the rising item as Breakout (growth over 5000%).
- `link` (string): Google Trends link for the related item.
- `status` (string): Term result: complete, partial (some sections missing), not_found (not enough search data) or error. Only data rows of complete and partial terms are charged.
- `statusReason` (string): Why a term is partial, not_found or error.
- `errorCode` (string): Machine-readable error code for partial and error terms.
- `average` (integer): Average interest over the period (null when unknown).
- `timelinePoints` (integer): Number of time points received for the term.
- `regionRows` (integer): Region rows written for the term.
- `relatedQueryRows` (integer): Related query rows written for the term.
- `relatedTopicRows` (integer): Related topic rows written for the term.
- `interestOverTime` (array): Grouped format: time points.
- `interestByRegion` (array): Grouped format: regions with data.
- `relatedQueriesTop` (array): Grouped format: top related queries.

## Input settings

- `searchTerms` (array, required): Keywords or phrases to look up, e.g. web scraping. Each term is a separate Google Trends query unless "Compare terms" is on. Up to 50 terms per run; duplicates are removed.
- `compareTerms` (boolean): Put all terms (2–5) into one Google Trends comparison, like typing them side by side in the Google Trends UI. Values are then relative to the most popular term, and regions get each term's share of searches.
- `geo` (string): Google Trends location code: a country (US, GB, DE), a region (US-CA, DE-BY) or a US metro (US-NY-501). Leave empty for worldwide.
- `timeRange` (string): Period of the data. Short periods have hourly or minute points, long ones weekly or monthly points. Ignored when a custom time range is set.
- `customTimeRange` (string): Exact dates instead of the time range above: start and end date separated by a space, e.g. 2024-01-01 2024-06-30. Data starts on 2004-01-01.
- `category` (string): Limit the data to searches in one Google Trends category.
- `categoryId` (integer): Any Google Trends category id, including subcategories (e.g. 1227 for Android OS). Overrides "Category" when set.
- `searchType` (string): Which Google search to measure, as in the Google Trends UI.
- `includeTimeline` (boolean): One row per time point with the 0–100 interest value.
- `includeRegions` (boolean): One row per country, region, metro or city with data.
- `regionResolution` (string): Auto = countries for worldwide, subregions for a country (Google default). Metro (DMA) works for US locations only; country level only worldwide.
- `includeLowVolumeRegions` (boolean): Off (default) hides regions with too few searches, which otherwise often show a misleading 100. Same switch as in the Google Trends UI.
- `includeRelated` (boolean): Top and rising related queries, plus related topics (Google gives topics only for single terms, not for comparisons).
- `outputFormat` (string): Rows: one flat row per data point (best for spreadsheets). Grouped: one item per term with nested lists.
- `proxyConfiguration` (object): Apify Proxy is used by default and switches to residential IPs on its own if Google starts refusing requests. Change only if you know you need to.

## Step by step on Apify

1. Open the Input tab.
2. Keep the prefilled term `web scraping` in Search terms, or add your own terms (up to 50).
3. Keep Time range at Past 12 months, or choose another period. Leave Location empty for worldwide data.
4. Click Start.
5. Open the Output tab. Every row has a `recordType` column: `interest_over_time`, `interest_by_region`, `related_query`, `related_topic` or `term_summary`. Sort or filter by this column, or export and filter in a spreadsheet.

## Use cases

| Task | Input | You get | Key fields | Next step |
|---|---|---|---|---|
| Seasonality of a product | `searchTerms`, `timeRange` `today 5-y` | time rows | `date`, `value`, `isPartial` | chart in Google Sheets or BI |
| Where to launch | `searchTerms`, `regionResolution` | region rows | `geoName`, `geoCode`, `value` | map or market list |
| Content and SEO ideas | `searchTerms`, `includeRelated` | related query rows | `query`, `rankType`, `value`, `isBreakout` | keyword list |
| Brand comparison | `searchTerms` (2–5) + `compareTerms` | time and region rows | `value`, `comparisonShare`, `comparisonGroup` | dashboard |
| News and YouTube interest | `searchType` `news` or `youtube` | time rows | `date`, `value` | report |

## Tips

- Use the compare option to put up to 5 terms on one scale.
- Do not compare values from separate queries; they use different scales.
- Use a long time range for small terms; short ones jump more.

## Limits



- Up to 50 terms per run. 50 terms took about 110 seconds in our tests.
- Up to 5 terms in one comparison (Google Trends limit).
- Values are relative (0–100) inside one query. Values of terms from separate queries are not on the same scale; use `compareTerms` for that.
- A run works for up to about 4.5 minutes with the default 300-second timeout. If it has more terms, it stops with the rows it has and `RUN_SUMMARY` shows `CAPPED` with `DEADLINE`.
- A `partial` term is charged for the rows it has. `statusReason` tells you which section is missing.
- If Google refuses many requests, the Actor first switches to new connections and then to residential proxies. If Google still refuses, the run stops; terms that were not done get free `error` rows.

## Sample result

```json
[
  {
    "recordType": "interest_over_time",
    "searchTerm": "web scraping",
    "date": "2025-10-12T00:00:00.000Z",
    "formattedTime": "Oct 12 – 18, 2025",
    "value": 56,
    "hasData": true,
    "isPartial": false
  },
  {
    "recordType": "interest_by_region",
    "searchTerm": "web scraping",
    "geoCode": "US",
    "geoName": "United States",
    "value": 50,
    "formattedValue": "50",
    "comparisonShare": null,
    "latitude": null,
    "longitude": null,
    "regionResolution": "COUNTRY"
  },
  {
    "recordType": "related_query",
    "searchTerm": "web scraping",
    "rankType": "top",
    "query": "web data scraping",
    "value": 100,
    "formattedValue": "100",
    "isBreakout": false,
    "link": "https://trends.google.com/trends/explore?q=web+data+scraping&date=today+12-m"
  },
  {
    "recordType": "term_summary",
    "searchTerm": "web scraping",
    "exploreUrl": "https://trends.google.com/trends/explore?date=today+12-m&q=web+scraping&hl=en-US",
    "status": "complete",
    "statusReason": null,
    "errorCode": null,
    "average": 58,
    "timelinePoints": 53,
    "regionRows": 65,
    "relatedQueryRows": 45,
    "relatedTopicRows": 0
  }
]
```

## Use it from code

Actor ID: `cliqtomedia/google-trends-scraper`

```python
from apify_client import ApifyClient

client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("cliqtomedia/google-trends-scraper").call(run_input={
    "searchTerms": [
        "web scraping"
    ],
    "compareTerms": False
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
    print(item)
```

```bash
curl -X POST "https://api.apify.com/v2/acts/cliqtomedia~google-trends-scraper/run-sync-get-dataset-items?token=YOUR_APIFY_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"searchTerms": ["web scraping"], "compareTerms": false}'
```

```python
# pip install langchain-apify
# set APIFY_TOKEN in your environment
from langchain_apify import ApifyActorsTool

tool = ApifyActorsTool("cliqtomedia/google-trends-scraper")
result = tool.invoke({"run_input": {"searchTerms": ["web scraping"], "compareTerms": False}})
print(result)
```

run-sync waits up to 300 seconds; for longer runs start a run and use a webhook. LlamaIndex and MCP: https://cliqtomedia.com/actors/ai-agents/

## Use cases with this tool

- [SEO data without a big suite](https://cliqtomedia.com/actors/use-cases/seo-research/): Collect keyword ideas and check your pages and your rivals' pages. Search results and trends coming soon.

## Similar tools

- [Google Autocomplete Scraper](https://cliqtomedia.com/actors/google-autocomplete-scraper/)
- [Website JSON-LD Structured Data Scraper](https://cliqtomedia.com/actors/website-jsonld-structured-data-scraper/)
- [XML Sitemap URLs Extractor](https://cliqtomedia.com/actors/xml-sitemap-urls-extractor/)
- [Website Metadata & Open Graph Scraper](https://cliqtomedia.com/actors/website-metadata-open-graph-scraper/)
- [Google Ads Transparency Scraper - Ad Text, No Login](https://cliqtomedia.com/actors/google-ads-transparency-scraper/)
- [Google Images Scraper - Image URLs, Sizes & Source Pages](https://cliqtomedia.com/actors/google-images-scraper/)
