Skip to main content

Free, open-source Python library for Google Trends data: trending now plus keyword interest over time, related queries, and interest by region. A maintained pytrends alternative with CLI and API.

Project description

trendspyg

PyPI version PyPI Downloads Python 3.8+ Tests License: MIT

Python library for Google Trends data — real-time trending topics and keyword analysis over time (interest over time, related queries, interest by region). A modern, actively-maintained alternative to the archived pytrends.

Using this library from a coding agent? See AGENTS.md for a concise, agent-ready reference.

Installation

pip install trendspyg

# With async support
pip install trendspyg[async]

# With CLI
pip install trendspyg[cli]

# All features
pip install trendspyg[all]

Quick Start

RSS Feed (Fast - 0.2s)

from trendspyg import download_google_trends_rss

# Get current trends with news articles
trends = download_google_trends_rss(geo='US')

for trend in trends[:3]:
    print(f"{trend['trend']} - {trend['traffic']}")
    if trend['news_articles']:
        print(f"  {trend['news_articles'][0]['headline']}")

CSV Export (Comprehensive - 10s)

from trendspyg import download_google_trends_csv

# Get 480+ trends with filtering (requires Chrome)
df = download_google_trends_csv(
    geo='US',
    hours=168,            # Past 7 days
    category='sports',
    output_format='dataframe'
)

Explore — interest over time (the pytrends use case)

from trendspyg import download_google_trends_interest_over_time

# Google's 0-100 relative-interest time series for a keyword (requires Chrome)
series = download_google_trends_interest_over_time("bitcoin", geo="US", timeframe="today 12-m")
for point in series[-3:]:
    print(point["date"], point["value"])   # {'date': '2026-05-31T00:00:00+00:00', 'value': 57, 'is_partial': True}
from trendspyg import download_google_trends_explore

# Full picture in one call: interest over time + related queries + interest by region
env = download_google_trends_explore("bitcoin", geo="US")
print(env["interest_over_time"][-1])
print(env["related_queries"]["rising"][0])     # {'query': '...', 'formatted_value': 'Breakout', ...}
print(env["interest_by_region"][0])            # {'geo_code': 'US-..', 'geo_name': '..', 'value': 100}

The Explore path drives a real browser against Google's Explore page and is rate-limit sensitive (~10–90s per call, with retries). Use it for analysis, not high-frequency polling — use the RSS path for fast, frequent real-time checks.

Async (Parallel Fetching)

import asyncio
from trendspyg import download_google_trends_rss_batch_async

async def main():
    results = await download_google_trends_rss_batch_async(
        ['US', 'GB', 'CA', 'DE', 'JP'],
        max_concurrent=5
    )
    for country, trends in results.items():
        print(f"{country}: {len(trends)} trends")

asyncio.run(main())

CLI

trendspyg rss --geo US
trendspyg csv --geo US-CA --category sports --hours 168
trendspyg explore --keyword bitcoin --output csv
trendspyg list --type countries

Data Sources

RSS CSV Explore
Answers "what's trending now?" "what's trending now?" "how is interest in X moving?"
Speed 0.2s ~10s ~10–90s (rate-limit sensitive)
Output 5–25 current trends 480+ current trends interest over time, related queries, regions
News articles Yes No No
Time filtering No Yes (4h/24h/48h/7d) Yes (any timeframe)
Category filter No Yes (20 categories) Yes
Requires Chrome No Yes Yes

Features

  • Real-time trending topics (RSS + CSV paths) and keyword analysis over time (Explore path)
  • Interest over time, related queries, and interest by region for any keyword — the core pytrends use case
  • 125 countries + 51 US states, 20 categories, 4 trending time periods (4h, 24h, 48h, 7 days)
  • Output formats: dict, DataFrame, JSON, CSV (+ Parquet on the CSV path)
  • Async support for parallel fetching
  • Built-in caching (5-min TTL)
  • Agent-ready: typed shapes, normalize=True, and a JSON-native Explore schema
  • CLI for terminal access

Normalized output (for agents & pipelines)

Pass normalize=True to get one unified, JSON-native schema that is identical for both the RSS and CSV paths — no need to learn two different shapes.

from trendspyg import download_google_trends_rss

env = download_google_trends_rss(geo='US', normalize=True)
# {'schema_version': '1.0', 'source': 'rss', 'geo': 'US',
#  'fetched_at': '2026-05-22T...Z', 'count': 10, 'trends': [...]}

for t in env['trends']:
    print(t['rank'], t['keyword'], t['volume_min'])  # volume_min is a real int

Every trend has a fixed, JSON-safe shape: keyword, rank, volume_text, volume_min (int), started_at / ended_at (ISO 8601 or None), is_active, related_queries (list), news (list), image, explore_url. normalize=True works on every entry point — RSS, CSV, async, and the batch functions (each geo then maps to its own envelope) — and on the CLI (trendspyg rss --geo US --normalize). It is opt-in — default output is unchanged.

Caching

from trendspyg import clear_rss_cache, get_rss_cache_stats

# Results are cached for 5 minutes by default
trends = download_google_trends_rss(geo='US')  # Network call
trends = download_google_trends_rss(geo='US')  # From cache

# Bypass cache
trends = download_google_trends_rss(geo='US', cache=False)

# Check cache stats
print(get_rss_cache_stats())

# Clear cache
clear_rss_cache()

Documentation

Requirements

  • Python 3.8+
  • Chrome browser (for the CSV and Explore paths; the RSS path needs no browser)

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

trendspyg-0.6.0.tar.gz (67.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

trendspyg-0.6.0-py3-none-any.whl (45.6 kB view details)

Uploaded Python 3

File details

Details for the file trendspyg-0.6.0.tar.gz.

File metadata

  • Download URL: trendspyg-0.6.0.tar.gz
  • Upload date:
  • Size: 67.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for trendspyg-0.6.0.tar.gz
Algorithm Hash digest
SHA256 6d19f5f6838205407ba03b9dc1cf4de52531a4fb52d92a3c0d1f887d71f7be7a
MD5 e2a91e80226a452c9a45e0156ccfd12b
BLAKE2b-256 197a1a0c8d019c7c423872dcd00e5ae8cad3fc7409848ec9a2c19ad5879998c0

See more details on using hashes here.

File details

Details for the file trendspyg-0.6.0-py3-none-any.whl.

File metadata

  • Download URL: trendspyg-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 45.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.13

File hashes

Hashes for trendspyg-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 2e37ed30d9c2daf26f723605085c4f786c8d34a7c4ee69f559c74098376356a3
MD5 94b75f3c9ca87dae626e2bbd6bc648b7
BLAKE2b-256 f0839f12f24ea36a29a9daf3ece1646d26567b14782b4fbdecbd8c5cad86782f

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page