Scraper API

Google Trends API

for interest over time on any term

Pull Google Trends data without PyTrends or your own proxies. One request returns interest over time for any term as clean JSON, timestamped and normalized, ready to chart, with the rate limits handled for you.

SUCCESS
97.9%

of requests succeed

P50
2.0s

median response

P95
3.5s

95% finish faster

PRICE
$0.37

per 1k trend reports at volume

Stop maintaining scrapers

PyTrends breaks, rate limits bite. Your code shouldn't care.

  • Proxies just to dodge rate limits
  • PyTrends breaking on Google changes
  • 429s and quotas mid-pull
  • Partial buckets and timestamps to normalize
  • Re-fix the scraper after each redesign
One integration commit replaces a backlog you’ll never finish.
scraper | git log
hotfix: PyTrends 429 storm, backfill failed
fix: partial bucket counted as final value
fix: timezone drift in timeline timestamps
chore: rotate proxies for trends pulls again
fix: PyTrends broke after Google response change
hotfix: empty timeline on rate limit
fix: value came back as string, not number
chore: re-run failed batch overnight
fix: geo filter silently ignored
fix: retry storm on quota reset
hotfix: PyTrends 429 storm, backfill failed
fix: partial bucket counted as final value
fix: timezone drift in timeline timestamps
chore: rotate proxies for trends pulls again
fix: PyTrends broke after Google response change
hotfix: empty timeline on rate limit
fix: value came back as string, not number
chore: re-run failed batch overnight
fix: geo filter silently ignored
fix: retry storm on quota reset
hotfix: PyTrends 429 storm, backfill failed
fix: partial bucket counted as final value
fix: timezone drift in timeline timestamps
chore: rotate proxies for trends pulls again
fix: PyTrends broke after Google response change
hotfix: empty timeline on rate limit
fix: value came back as string, not number
chore: re-run failed batch overnight
fix: geo filter silently ignored
fix: retry storm on quota reset
hotfix: PyTrends 429 storm, backfill failed
fix: partial bucket counted as final value
fix: timezone drift in timeline timestamps
chore: rotate proxies for trends pulls again
fix: PyTrends broke after Google response change
hotfix: empty timeline on rate limit
fix: value came back as string, not number
chore: re-run failed batch overnight
fix: geo filter silently ignored
fix: retry storm on quota reset
feat: integrate HasData API
Code Examples

One GET Request. That's the whole integration.

Start with just a query. Add more parameters when your use case needs them.

request example
curl -G 'https://api.hasdata.com/scrape/google-trends/search' \
	--data-urlencode 'q=Coffee' \
	--header 'x-api-key: <YOUR_API_KEY>' \
	--header 'Content-Type: application/json'
q * Search Query
Specify the search term for which you want to retrieve trends data.
geo Location
Specifies the location for the search. Defaults to Worldwide if not set or empty.
region Region
Used to get more specific results when using "Interest by region" data type. Other data types do not accept this parameter. The default value depends on the geo location that is set. Available options: - `country`: Country - `region`: Subregion - `dma`: Metro - `city`: City Note: Not all region options will return results for every geo location.
dataType Data Type
Defines the type of search to perform. Available options: - `timeseries`: Interest over time (default). Accepts both single and multiple queries per search. - `geoMap`: Interest by region. Accepts both single and multiple queries per search. - `relatedTopics`: Related topics. Accepts only single query per search. - `relatedQueries`: Related queries. Accepts only single query per search.
tz Time Zone
Defines a time zone offset in minutes. The default value is 420 (Pacific Daylight Time (PDT): UTC-7). The valid range for this parameter is from -1439 to 1439. To calculate the `tz` value for a specific time zone, you can use the time difference between UTC +0 and the desired time zone. Examples: - `420`: Pacific Daylight Time (PDT) - `60`: Central European Time (CET) - `-540`: Japan Standard Time
cat Category
Category of the search term. The default value is 0 ("All categories").
gprop Google Property
Sorts results by a specific property. The default property is Web Search (applied when the gprop parameter is not set or empty). Available options: - `images`: Image Search - `news`: News Search - `froogle`: Google Shopping - `youtube`: YouTube Search
date Date Range
Defines a date range for the search. Available options: - `now 1-H`: Past hour - `now 4-H`: Past 4 hours - `now 1-d`: Past day - `now 7-d`: Past 7 days - `today 1-m`: Past 30 days - `today 3-m`: Past 90 days - `today 12-m`: Past 12 months - `today 5-y`: Past 5 years - `all`: 2004 - present You can also specify a custom date range using one of the following formats: - `yyyy-mm-dd yyyy-mm-dd` - (e.g. 2021-10-15 2022-05-25) for dates from 2004 to present. - `yyyy-mm-ddThh yyyy-mm-ddThh` - (e.g. 2022-05-19T10 2022-05-24T22) for dates with hours within a week range. The hours will be calculated based on the tz (time zone) parameter.
TRY ALL 8 PARAMETERS FREE
No-Code Alternative

Get Google Trends data without code

Prefer no code? Pull the same interest data from a visual scraper. No API, no setup, just a search term and a timeframe.

Google Trends Scraper
Google Trends Scraper
Search term
web scraping
Timeframe
Past 12 months
Run scrape
Response

Interest over time, ready to chart

A normalized timeline comes back on every request, each bucket timestamped with its raw and extracted value. Map it once and plot it.

interestOverTime.json
// One bucket shown. A full report returns the whole timeline, 53 weekly points in this example.

{
  "timelineData": [
    {
      "date": "Jul 27 - Aug 2, 2025",
      "timestamp": "1753574400",
      "isPartial": false,
      "values": [
        {
          "query": "chatgpt",
          "value": "79",
          "extractedValue": 79,
          "hasData": true
        }
      ]
    }
  ]
}
Fields in interestOverTime
timelineData[] object[]

Ordered interest buckets over the range

timelineData[].date string

Human-readable label for the bucket

timelineData[].timestamp string

Unix timestamp for the bucket

timelineData[].isPartial boolean

True while the latest bucket is still forming

timelineData[].values[] object[]

One entry per compared term

values[].value / extractedValue string / number

Interest score, raw string and numeric

values[].hasData boolean

Whether the term had data in the bucket

What We Offer

An all-in-one scraping service

Every feature you need to collect data from thousands to millions of requests.

Loved by developers

Teams that deleted their scraper

Now it's the part of the pipeline they don't think about

4.8 ★★★★★
across 100+ reviews on 5 platforms
Trustpilot Trustpilot ★★★★★

HasData delivers exactly what we need: speed and comprehensive search features. It's the fastest API we've used in this space. Plus, their customer support is fantastic.

Denver Sinclair
Denver Sinclair
Capterra Capterra ★★★★★

We rely on HasData for search performance data and broader scraping needs. Their APIs deliver highly structured data that integrates directly into our platforms.

JN
Jacob N.
Trustpilot Trustpilot ★★★★★

Great web scraping API which is incredibly easy to use. It requires minimal effort to get up and running, and the documentation is very clear and helpful.

Arnold Foster
Arnold Foster
Trustpilot Trustpilot ★★★★★

I needed to scrape some information they didn't already support, and they wrote the code for me right away, which was super nice of them.

Hussein Ali
Hussein Ali
Clutch Clutch ★★★★★

We were particularly impressed with how easily we could integrate HasData into our existing workflow.

TB
Taras Bazyshyn
CEO at BAZTDL Sp. z o.o
Pricing

Plans that get cheaper at scale

Fixed price, fixed volume, no surprises at the end of the month. Upgrade when you need more.

Free
$0 /mo
One-time free trial
200 trend reports to start
1 concurrent request
Team seats
Community support
Start free
Startup
$41 /mo
$1.02 / 1k trend reports
40K trend reports / month
15 concurrent requests
Team seats
Email support
Get started
Business
Recommended
$83 /mo
$0.41 / 1k trend reports
200K trend reports / month
30 concurrent requests
Team seats
Priority email support
Get started
Growth
$208 /mo
$0.35 / 1k trend reports
50 concurrent requests
Team seats
Dedicated account manager
Get started
Monthly trend report volume
Free 200K 1M 4M 12M 20M
Best fit
Business
trend reports / mo
200K
Concurrency
30
$ / 1k trend reports
$0.41
$83 /mo
Get Started
Enterprise
Custom price based on required volume

Past 100M scrapes a month, or terms the self-serve plans do not cover. We shape the contract around your workload.

Credits rollover
Unused credits carry into the next billing period.
Concurrency 2000+
Parallel request limits set to your peak load.
#1 request priority
Highest speed, always first in the queue.
Personal manager
A direct line to the founding team.
SSO
SAML single sign-on for the whole team.
SOC-2 compliance
Security review, DPA, and audit reports.
Talk to sales Quote within one business day
FAQ

Questions, answered

1 Grab your API key 2 Send a GET request 3 Get structured JSON

Your first trend report
is minutes away

200 trend reports free · no credit card