Skip to main content

trendkit

Token-Optimized Trends for AI

PyPI version Python 3.11+ License: MIT MCP Compatible

Google Trends aggregator designed for LLM tool calls with minimal token usage.


Why trendkit?

"Claude에게 트렌드를 물었더니 5,000 토큰을 썼다. 그래서 5토큰으로 줄였다."

Problem Before After (trendkit)
Token waste ~500 tokens/item ~5 tokens/item
Complex setup API keys, auth pip install and go
No MCP support Build your own Built-in MCP server
Limited bulk ~20 items max 100+ items

Comparison with Alternatives

Feature trendkit pytrends SerpAPI Tavily
Price Free Free $50/mo $20/mo
Token Optimized Yes No No No
MCP Native Yes No No Partial
Bulk Collection 100+ ~20 100+ No
Setup Complexity Easy Easy Medium Easy

Features

  • Token-optimized: Minimal output format for LLM function calling (~5 tokens/item)
  • Multiple backends: RSS (fast), Playwright with stealth (bulk), pytrends (analysis)
  • Anti-detection: playwright-stealth bypasses bot detection
  • Enriched export: News, images, related queries with metadata
  • Multiple interfaces: Python API, CLI, MCP server

Installation

# Basic
pip install trendkit

# With Playwright (bulk collection with anti-detection)
pip install trendkit[playwright]
playwright install chromium

# With CLI
pip install trendkit[cli]

# With MCP server
pip install trendkit[mcp]

# All features
pip install trendkit[all]
playwright install chromium

Quick Start

from trendkit import trending, trending_bulk, related, compare, interest

# Realtime trending (minimal tokens)
keywords = trending(limit=5)
# ['환율', '신한카드', '국민신문고', ...]

# Bulk collection (~100 items)
data = trending_bulk(limit=100, output="trends.csv")

# Enriched bulk export (with news, related queries, images)
data = trending_bulk(limit=10, enrich=True, output="trends.json")

# Related queries
related_kw = related("아이폰", limit=5)
# ['아이폰 17', '아이폰 디시', ...]

# Compare keywords
scores = compare(["삼성", "애플"])
# {"삼성": 45.6, "애플": 14.4}

# Interest over time
data = interest(["BTS"], days=7)
# {"dates": [...], "values": {"BTS": [42, 45, ...]}}

# YouTube search interest (via Google Trends)
data = interest(["BTS"], platform="youtube")

CLI Usage

# Trending keywords
trendkit trend --limit 5
trendkit trend --geo US --format standard

# Bulk collection
trendkit bulk --limit 100 --output trends.csv
trendkit bulk --limit 10 --enrich --output trends.json

# Related queries
trendkit rel 아이폰 --limit 5

# Compare keywords
trendkit cmp 삼성 애플 --days 90

# Interest history
trendkit hist BTS --days 7

MCP Server

Add to Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):

From source (current)

{
  "mcpServers": {
    "trendkit": {
      "command": "uv",
      "args": ["--directory", "/ABSOLUTE/PATH/TO/trendkit", "run", "trendkit-mcp"]
    }
  }
}

After PyPI release

{
  "mcpServers": {
    "trendkit": {
      "command": "uvx",
      "args": ["--from", "trendkit[mcp]", "trendkit-mcp"]
    }
  }
}

Available Tools

Tool Description
trends_trending Get realtime trending keywords
trends_related Get related search queries
trends_compare Compare keywords by interest
trends_interest Get interest over time

Token Optimization

The key design principle of trendkit is minimal token usage for LLM integrations.

Format Tokens/Item Example Output
minimal ~5 ["키워드1", "키워드2"]
standard ~15 [{"keyword": "키워드1", "traffic": "10만+"}]
full ~100 Full data with news, images, related

Real-world Impact

# Traditional approach: ~5,000 tokens for 10 items
# trendkit minimal: ~50 tokens for 10 items
# = 99% token reduction

Use Cases

AI News Bot

from trendkit import trending, related

# Get trending topics
topics = trending(limit=5, format="minimal")

# Expand with related queries
for topic in topics:
    queries = related(topic, limit=3)
    # Generate news summary for each...

Content Recommendation

from trendkit import compare

# Find which topic is more popular
scores = compare(["React", "Vue", "Svelte"])
# {"React": 67.2, "Vue": 24.1, "Svelte": 8.7}

Marketing Trend Analysis

from trendkit import trending_bulk

# Collect comprehensive trend data
data = trending_bulk(
    limit=100,
    enrich=True,
    output="weekly_trends.json"
)

Bulk Export

Basic (CSV)

trending_bulk(limit=100, output="trends.csv")
keyword,rank,traffic
내일 날씨,2,20만+
이노스페이스,3,5천+

Enriched (JSON)

trending_bulk(limit=10, enrich=True, output="trends.json")
{
  "metadata": {
    "geo": "KR",
    "hours": 168,
    "collected_at": "2025-12-23T23:01:17",
    "total_items": 10,
    "source": "google_trends"
  },
  "trends": [
    {
      "keyword": "내일 날씨",
      "rank": 2,
      "traffic": "20만+",
      "image": {"url": "...", "source": "Daum"},
      "news": [
        {"headline": "...", "url": "...", "source": "..."}
      ],
      "related": ["내일 서울 날씨", "대구 내일 날씨"],
      "explore_link": "https://trends.google.com/..."
    }
  ]
}

API Reference

trending(geo="KR", limit=10, format="minimal")

Get realtime trending keywords (via RSS, fast).

Returns:

  • minimal: ["keyword1", "keyword2", ...]
  • standard: [{"keyword": "...", "traffic": "..."}]
  • full: [{"keyword": "...", "traffic": "...", "news": [...]}]

Get bulk trending data (via Playwright with stealth, ~100 items).

Parameters:

  • hours: Time period (4, 24, 48, 168)
  • enrich: Add news, images, related queries
  • output: Save to file (.csv or .json)
  • headless: Run browser in headless mode (default: True, set False for debugging)

related(keyword, geo="KR", limit=10)

Get related search queries for a keyword.

compare(keywords, geo="KR", days=90, platform="web")

Compare keywords by average search interest.

interest(keywords, geo="KR", days=7, platform="web")

Get interest over time for keywords.

Platform options: "web", "youtube", "images", "news"


Architecture

trendkit/
├── src/trendkit/
│   ├── core.py              # Main API functions
│   ├── types.py             # Type definitions
│   ├── cli.py               # CLI (trendkit command)
│   ├── mcp_server.py        # MCP server
│   └── backends/
│       ├── rss.py               # RSS backend (fast, ~20 items)
│       ├── pytrends_backend.py  # Analysis features
│       └── playwright_backend.py # Bulk collection with stealth (~100 items)
└── tests/                   # 206 tests (86% coverage)

Contributing

We welcome contributions! See CONTRIBUTING.md for guidelines.

Development Setup

git clone https://github.com/seolcoding/trendkit.git
cd trendkit
uv sync --all-extras
uv run pytest

Roadmap

See ROADMAP.md for planned features.

Implemented:

  • ✅ Cache layer for reduced API calls
  • ✅ Playwright with stealth mode for anti-detection
  • ✅ Comprehensive error handling with helpful suggestions

Coming Soon:

  • LangChain Tool integration
  • Multi-geo support expansion

License

MIT

Metadata

Release files for trendkit 0.2.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for trendkit 0.2.1
File Size Uploaded
trendkit-0.2.1.tar.gz 49.9 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for trendkit 0.2.1
File Interpreter ABI Platform
trendkit-0.2.1-py3-none-any.whl Python 3 none any Details

Total release size: 75.7 kB

Release files / trendkit-0.2.1.tar.gz

Download URL trendkit-0.2.1.tar.gz
Size 49.9 kB
Tags Source
SHA-256 checksum
How to use checksums
df5fb50797e57338b8021f357c01d33620eda8d9f3f3f3ef3b1533b8dc25299d
BLAKE2b-256 checksum
How to use checksums
fb4f08eb07105a721e875ac07a877341dea98fcea38a470a2af525efd2072502
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 24, 2025.

Transparency log

Release files / trendkit-0.2.1-py3-none-any.whl

Download URL trendkit-0.2.1-py3-none-any.whl
Size 25.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
48dabf751d8df64aa2f6679af83956272984663b197fda200784f7561083d2dc
BLAKE2b-256 checksum
How to use checksums
f17192b4362e6a4d0e532870ccca511dd6eae8a6cb1df9ec647a334e04ed6c33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.7

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Dec 24, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.2.1 This release

2 release files

0.2.0

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page