pytrends alternative
Managed Google Trends client for Python. Drop-in mindset for archived pytrends: history, growth, and 30+ other sources via the Trends API.
Key: trendsapi.ai/#get-key. HTTP contract: trendsapi-ai/trendsapi.
JS: pytrends-alternative.
Authentication
pip install pytrends-alternative
export TRENDSAPI_KEY=your_key
Python 3.9+. The wrapper re-exports TrendsAPI, AsyncTrendsAPI, and TrendsAPIError from the official client.
from pytrends_alternative import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
Keyword helpers default to source: "google search". Pass source= to hit any other platform with the same client. Official full client (every source, no preset): trendsapi.
Methods
| Method | REST mode |
Returns |
|---|---|---|
get_time_series(keyword, source=, data_mode=) |
get_time_series |
list[TrendsDataPoint] |
get_growth(keyword, percent_growth=, source=, data_mode=) |
get_growth |
GetGrowthResponse |
get_live(limit=, offset=, category=) |
get_top_trends |
GetTopTrendsResponse |
get_top_trends(type=, ...) |
get_top_trends |
GetTopTrendsResponse |
source is lowercase (google search). type is exact (Google Trends). Mixing them is a 400.
from pytrends_alternative import TrendsAPI
client = TrendsAPI() # TRENDSAPI_KEY
# client = TrendsAPI(api_key="YOUR_KEY")
series = client.get_time_series("electric vehicle")
print(series[-1].date, series[-1].value)
growth = client.get_growth("electric vehicle", percent_growth=["3M", "12M"])
print(growth.results[0].growth, growth.results[0].direction)
hot = client.get_live(limit=10)
print(hot.data) # [[1, "..."], ...]
get_time_series
points = client.get_time_series("electric vehicle")
Each point:
| Field | Always | Meaning |
|---|---|---|
date |
yes | YYYY-MM-DD |
value |
yes | 0-100 index for this series |
keyword |
yes | Echo |
volume |
no | Absolute volume when available |
source or datatype |
no | Pipeline label |
Python returns list[TrendsDataPoint]. Use .date and .value, not ["date"].
JS returns the same fields as object properties.
get_growth
g = client.get_growth("electric vehicle", percent_growth=["12M", "3M", "YTD"])
print(g.results[0].growth, g.results[0].direction)
percent_growth default: ["12M"]. Presets: 7D 14D 30D 1M 2M 3M 6M 9M 12M/1Y 18M 24M/2Y 36M/3Y 48M 60M/5Y MTD QTD YTD. Custom: {"name": "Launch", "recent": "2024-06-01", "baseline": "2024-01-01"}.
| Field | Meaning |
|---|---|
search_term |
Keyword |
data_source |
Source |
results |
One object per window (period, growth, direction, dates, values) |
metadata |
Counts / success flag |
Several windows still count as one request. Python: growth.results[0].growth. JS: growth.results[0].growth.
get_live
hot = client.get_live(limit=10)
| Field | Meaning |
|---|---|
as_of_ts |
Snapshot time |
type |
Feed name |
limit, offset, count |
Pagination |
data |
[rank, label] rows |
Python: hot.data. JS: hot.data. Optional offset= and category= (Amazon Best Sellers by Category, Top Websites only).
Async
import asyncio
from pytrends_alternative import AsyncTrendsAPI
async def main():
c = AsyncTrendsAPI()
return await asyncio.gather(
c.get_time_series("electric vehicle"),
)
asyncio.run(main())
Each 200 is one billed request.
Pandas
from dataclasses import asdict
import pandas as pd
from pytrends_alternative import TrendsAPI
df = pd.DataFrame(asdict(p) for p in TrendsAPI().get_time_series("electric vehicle"))
df["date"] = pd.to_datetime(df["date"])
print(df.set_index("date")["value"].resample("ME").mean().tail())
Mapping from pytrends
| pytrends | Here |
|---|---|
TrendReq(...) + build_payload(...) |
Not needed. One client call |
interest_over_time() |
get_time_series("term") |
DataFrame pct_change |
get_growth("term", percent_growth=["3M", "12M"]) |
trending_searches() |
get_live() or get_top_trends(type="Google Trends") |
interest_by_region() |
No equivalent |
related_queries() / related_topics() |
No equivalent |
proxies=, cookies, User-Agent |
Remove |
One keyword per request. Five terms in an old kw_list become five calls.
Call (curl)
| Field | Value |
|---|---|
| Endpoint | POST https://api.trendsapi.ai/api |
| Auth | Authorization: Bearer $TRENDSAPI_KEY |
| History | source: google search with get_time_series or get_growth |
| Keyword | Any phrase |
Live type |
Google Trends |
curl -sS -X POST https://api.trendsapi.ai/api \
-H "Authorization: Bearer $TRENDSAPI_KEY" \
-H "Content-Type: application/json" \
-d '{"mode":"get_time_series","source":"google search","keyword":"electric vehicle"}'
Source notes
- One keyword per request. Five terms in
kw_listbecome five calls. - 404 means no series for that spelling. Do not retry 404s.
- Indexes will not match an old pytrends CSV cell-for-cell. Compare shape and direction, not exact 0-100 values.
Errors
| HTTP | Client |
|---|---|
| 200 | Parsed payload. Python dataclasses / JS typed objects |
| 400 | Raises. Fix source or type spelling |
| 401 | Raises. Check TRENDSAPI_KEY |
| 404 | Raises. No series for that keyword. Do not retry |
| 429 | Raises. Quota |
| 5xx | Client retries, then raises |
The HTTP body field is a JSON string. SDKs decode it. Raw curl must parse body a second time.
Site: https://trendsapi.ai/trends/pytrends-alternative. GitHub: trendsapi-ai/pytrends-alternative.
License
MIT. See LICENSE.
Metadata
Release files for pytrends-alternative 1.0.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pytrends_alternative-1.0.2.tar.gz | 5.4 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pytrends_alternative-1.0.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 10.9 kB
Release files / pytrends_alternative-1.0.2.tar.gz
| Download URL | pytrends_alternative-1.0.2.tar.gz |
|---|---|
| Size | 5.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
52ba0273d04193b8da86551b07785bc3cd680b4b6099738d6e474d79583374a1
|
|
BLAKE2b-256 checksum How to use checksums |
577675424000014c703bb59e67d4d189a8660753f86118e4884a54a2c1cc422c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|
Release files / pytrends_alternative-1.0.2-py3-none-any.whl
| Download URL | pytrends_alternative-1.0.2-py3-none-any.whl |
|---|---|
| Size | 5.6 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
00494dba2cf81c352ee4fbc0f2f0a58f0c6bf851d6a12b2129d6aabea8c54419
|
|
BLAKE2b-256 checksum How to use checksums |
f2df1c6dbc82bb8bf21bb1bae56a43e451b4cb70ac6758871d889b3d0494b89e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.2
|