Skip to main content
Glama
phalkmin

trendzeist-mcp

trendzeist-mcp

Turn Google Trends into your next 10 blog posts — in one call.

trendzeist-mcp gives your AI assistant ranked breakout / rising / evergreen topics, interest curves, related searches, regional demand and real-time trends. Free, local, private. No API key, no account, no browser.

You:   Give me blog post ideas about home espresso for US readers.
Agent: → discover_topics(["espresso", "espresso machine"], geo="US")
       ← 1 breakout, 14 rising, 14 evergreen candidates with growth %
       → compare_keywords(["how to descale espresso machine", "best coffee beans for espresso"])
       "1. How to Descale Your Espresso Machine (rising +120%, publish now) ..."

Quick start

# any one of these
uvx trendzeist-mcp
pipx run trendzeist-mcp
pip install trendzeist-mcp && trendzeist-mcp
docker run -i --rm ghcr.io/phalkmin/trendzeist-mcp

Claude Desktop — add under mcpServers in claude_desktop_config.json (macOS ~/Library/Application Support/Claude/, Windows %APPDATA%\Claude\, Linux ~/.config/Claude/):

"trendzeist": { "command": "uvx", "args": ["trendzeist-mcp"] }

Claude Code: claude mcp add trendzeist -- uvx trendzeist-mcp Cursor / VS Code / Codex: same command/args shape — see llms-install.md (written so you can paste it to an AI assistant and let it do the install).

Related MCP server: google-search-trends-mcp

Tools

Tool

What you get

discover_topics

Ranked blog topics from 1-5 seeds: breakout > rising > evergreen, deduped

interest_over_time

0-100 interest curve with mean, peak and direction

compare_keywords

Head-to-head share and winner for 2-5 keywords

related_queries

Top & rising related searches with breakout flags

related_topics

Top & rising Knowledge-Graph topics (best-effort)

interest_by_region

Where demand lives: COUNTRY / REGION / CITY / DMA

suggest_keywords

Disambiguate a term into Google entities (title, type, mid)

trending_now

What's trending right now, with news headlines

list_categories

Find Google Trends category ids to narrow any query

Prompt: blog_ideas_from_trends(topic, audience, geo) — a guided ideation workflow.

Why this one?

trendzeist-mcp

typical alternatives

Ranked topic discovery in one call

discover_topics

❌ raw primitives only

Guided ideation prompt

blog_ideas_from_trends

Related queries + breakout detection

often missing in hosted/paid servers

Cost / auth

free, none

API key, monthly quota

Browser required

no

Chrome for some Python libraries

Cache survives client restarts

✅ safe JSON disk cache

usually in-memory or none

Rate-limit friendly

✅ throttled per HTTP request

❌ bursts, frequent 429s

Run from source

git clone https://github.com/phalkmin/trendzeist-mcp && cd trendzeist-mcp
uv sync --group dev
uv run pytest -q                 # offline tests
uv run pytest -q -m live         # optional: live canary against Google
uv run trendzeist-mcp              # stdio server
npx @modelcontextprotocol/inspector uv run trendzeist-mcp   # interactive debugging

Point a client at the clone with "command": "uv", "args": ["--directory", "/path/to/trendzeist-mcp", "run", "trendzeist-mcp"].

Configuration (env vars)

Variable

Default

Meaning

TRENDZEIST_HL

en-US

UI language for Google Trends

TRENDZEIST_TZ

360

Timezone offset in minutes

TRENDZEIST_MIN_INTERVAL

2.0

Minimum seconds between every HTTP request to Google (cookie, token, data, RSS)

TRENDZEIST_RETRIES

3

Retry attempts on transient errors

TRENDZEIST_BACKOFF

1.5

Exponential backoff factor

TRENDZEIST_PROXIES

Comma-separated proxy URLs (rotated for explore calls; first one used for RSS)

TRENDZEIST_CACHE_DIR

OS user cache dir

Persistent JSON cache location (0700); off to disable

TRENDZEIST_LOG_LEVEL

WARNING

Python logging level (stderr)

Notes & limitations

  • Google rate-limits aggressively (HTTP 429). Every HTTP request is serialised and throttled; results are cached (15 min explore, 5 min RSS, 24 h categories) as plain JSON on disk so client restarts don't re-fetch. Memory cache is bounded and expired files are swept automatically. Errors come back as tool errors with guidance.

  • Values are Google's relative 0–100 index, not absolute search volume.

  • related_topics frequently returns nothing from Google; related_queries is reliable.

  • Google's legacy daily trending_searches endpoint is gone (404); trending_now uses the RSS feed.

  • Camoufox/browser mode from pytrends-modern is intentionally not used.

Disclaimer

This server talks to the same undocumented endpoints the trends.google.com frontend uses. They are unofficial and may change, rate-limit or disappear without notice. A weekly live canary runs in CI to catch breakage early. This project is not affiliated with, endorsed by, or sponsored by Google LLC. "Google Trends" is a trademark of Google LLC. You are responsible for complying with Google's terms of service in your jurisdiction.

Contributing

Issues and PRs welcome. Read AGENTS.md for architecture and conventions (also useful if you point a coding agent at the repo). Data-shape corrections after a Google change are the most valuable contribution — include the call you made and what came back.

License

MIT — see LICENSE. Built on pytrends-modern (MIT).

Available Tools

9 tools
compare_keywordsA

Compare 2-5 keywords head-to-head: relative share, leader and trend direction for each. Use to pick the strongest angle among alternatives.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNo
gpropNo
categoryNo
keywordsYes
timeframeNotoday 12-m

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the burden. It discloses the core behavior (comparison, relative share, leader, trend direction) but doesn't mention limitations like data availability, normalization, or how 'leader' is determined. It's adequate but not rich.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two sentences, front-loaded with the core action and output, followed by a clear use case. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool has an output schema, so return values are covered. However, with no annotations and 0% schema coverage, the description should explain more about the optional parameters and any constraints (e.g., keyword count limits, required format). It's adequate for a simple comparison tool but leaves some gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It explains the 'keywords' parameter implicitly (2-5 keywords) but doesn't explain 'geo', 'gprop', 'category', or 'timeframe'. The description adds some meaning for the main parameter but leaves the optional parameters undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description uses a specific verb ('Compare') and resource ('keywords head-to-head'), and clearly states what it produces: relative share, leader, and trend direction for each keyword. It also distinguishes itself from siblings by focusing on comparison rather than single-keyword trends or related queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly states when to use this tool: 'Use to pick the strongest angle among alternatives.' This gives clear context for selection. It doesn't explicitly name alternatives or exclusions, but the sibling list and the comparison-focused wording make the intended use clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

discover_topicsA

One-shot topic discovery for blog ideation. For 1-5 seed keywords, pulls trend direction plus rising/top related queries, de-duplicates and ranks candidates as breakout > rising > evergreen. Partial failures are reported per seed in errors instead of failing the call.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNo
gpropNo
categoryNo
timeframeNotoday 3-m
max_per_seedNo
seed_keywordsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden and does it well. It explains the ranking logic ('breakout > rising > evergreen'), the input constraint (1-5 seeds), and the failure mode ('partial failures reported per seed in errors instead of failing'). This gives the agent clear expectations about side effects and error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is compact and front-loaded: it identifies the operation, input constraint, output behavior, and error semantics in two sentences. Every clause earns its place, with no fluff or repetition.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

An output schema is present, so return-value structure does not need to be spelled out. The description gives the purpose, input shape, ranking semantics, and partial-failure behavior. What's missing is any guidance on how optional parameters affect resultscars, so an agent may not know how to use geo/timeframe/category effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description only clarifies seed_keywords (1-5) and that errors are reported per seed. The other five parameters—geo, gprop, category, timeframe, and max_per_seed—are left entirely undocumented in both schema and description. The description does not compensate for the schema's lack of parameter guidance.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description opens with a specific and complete statement: 'One-shot topic discovery for blog ideation.' It then details the exact input (1-5 seed keywords) and what the tool does with it — pulls trend direction and related queries, then de-duplicates and ranks candidates by breakout > rising > evergreen. This clearly identifies the tool's function and distinguishes it from sibling tools like related_queries or trending_now.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a clear use case ('blog ideation') and the input constraint (1-5 seed keywords), but gives no explicit guidance on when to prefer this tool over siblings such as related_queries, trending_now, or interest_over_time. There is a hint of differentiation via 'one-shot' and the ranking behavior, but an agent would have to infer the tool's unique fit.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interest_by_regionC

Where a keyword is searched most. resolution: COUNTRY (worldwide), REGION (states/provinces within geo), CITY, DMA (US metro areas).

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNo
gpropNo
limitNo
categoryNo
keywordsYes
timeframeNotoday 12-m
resolutionNoCOUNTRY

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description must disclose behavior itself. It only reveals that results are geographically aggregated and offers resolution choices; it does not state read-only behavior, output ordering, limits, pagination, or date-window handling. Too little behavioral context for a tool that could return anything from a ranking table to raw search-volume data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short and places the core purpose first, with the resolution semantics following immediately. It is compact and scannable, though it omits detail rather than wasting words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with seven parameters scrub coverage, no annotations, and no usage guidance, this description is materially incomplete. An agent would not know how to set geo, gprop, or time range, nor what the response structure implies. The presence of an output schema helps, but the invocation context is under-specified.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is effectively 0%, so the description must compensate. It explains the resolution parameter and hints at the keyword input, but leaves geo, gprop, limit, category, and timeframe entirely unexplained. This is insufficient for an agent to construct valid calls without extra inference.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the tool's purpose: locating where a keyword is searched most, which distinguishes it from the sibling interest and comparison tools. The resolution list adds concreteness by showing the geographic scopes it supports, though it never names an alternative tool explicitly.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The phrase 'Where a keyword is searched most' gives a reasonable indication to use this tool for geographic search-interest questions. However, there is no explicit guidance about when to choose it over siblings like compare_keywords or interest_over_time, and no exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

interest_over_timeB

Search-interest time series (0-100) for 1-5 keywords, with per-keyword summary (mean, latest, peak, direction: rising/stable/falling). Long series are downsampled to ~60 points. gprop: '' (web), 'news', 'youtube', 'images', 'froogle'.

ParametersJSON Schema
NameRequiredDescriptionDefault
geoNo
gpropNo
categoryNo
keywordsYes
timeframeNotoday 12-m

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries the behavioral burden. It discloses the 0-100 scale, per-keyword summary fields, downsampling to ~60 points, and valid gprop values — good behavioral context. However, it doesn't state that this is a read-only operation, any authentication prerequisites, rate limits, or behavior for invalid keyword counts, though the 'search-interest' wording makes mutation unlikely.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely succinct: three sentences contain zero filler and front-load the core purpose. The single-line gprop value list is an efficient way to convey allowed values. Every phrase earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a tool with 5 parameters, no annotations, and no schema description, the description leaves too much unexplained. It fails to explain the crucial optional parameters geo, category, and timeframe, and does not specify their formatting or intended use. While the output schema exists, the description is incomplete for correctly using the tool's full feature set.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 5 parameters and schema description coverage is 0%, so the description must compensate. It explains only gprop (with accepted string values) and keywords, while geo, category, and timeframe are completely absent. An agent cannot know what geo/category values mean or how timeframe strings like 'today 12-m' relate to output; thus the description only partially covers parameter semantics.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: search-interest time series for 1-5 keywords with per-keyword summaries. It differentiates from some siblings (e.g., interest_by_region) through temporal focus, but it does not explicitly contrast with closely related tools like compare_keywords, which could also provide time-series comparisons.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies a usage scenario — needing search interest over time — but doesn't explicitly say when to choose this over siblings. There are no exclusions or alternative recommendations. The 1-5 keyword limit gives a partial constraint, but won't guide an agent to prefer compare_keywords or related_queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_categoriesA

Browse/search Google Trends category ids (e.g. 'coffee' -> Food & Drink > Coffee & Tea). Pass the id as category to other tools to narrow results.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
searchNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

There are no annotations, so the description carries full responsibility for disclosing behavior. It does strongly indicate a read/browse/search action and gives an example of the output form. However, it says nothing about how the limit parameter behaves, whether the empty search returns all categories, or if the list is sorted—a moderate gap for a read-only tool with no pre-existing annotation context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The entire description fits into two sentences and carries immediate value. The first word is the primary verb, a concrete example is embedded naturally, and the final sentence tells exactly what to do with the result. No repetition or filler—every clause earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return fields. It sufficiently covers what the tool's purpose, how to invoke it, and how to apply results in the broader tool set. The only real gaps are the unresolved semantic of the limit parameter and some search matching details, which lower the score from a perfect context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must take on the burden of explaining parameters. It gives an example of what 'search' is for ('coffee' -> category path) and implies 'browse' covers the limit case, but it never mentions the limit parameter by name or explains its behavior. With only 2 parameters, both undocumented at schema level, a clear explanation of one is not enough; this is a meaningful gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description starts with a specific verb and resource: 'Browse/search Google Trends category ids.' It gives a concrete example ('coffee' -> Food & Drink > Coffee & Tea) and explicitly explains its output is used by passing the id to other tools. This clearly distinguishes the function from its trend-analysis siblings, which operate on time series and related terms.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description states when to use the tool: when you need category IDs to narrow other tools' results. It does not explicitly mention when not to use it or name alternate siblings like suggest_keywords, but the use case is clear enough. It provides a strong implication of usage but leaves exclusions and alternatives unstated.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

suggest_keywordsA

Google's entity suggestions for a keyword (title, type, mid). Use to disambiguate ambiguous terms or find the canonical topic id.

ParametersJSON Schema
NameRequiredDescriptionDefault
keywordYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are present, so the description carries the burden. It discloses that this is a read-style suggestion API and what it returns. It does not mention errors, limits, or external dependencies, but for this simple tool the core behavior is clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two dense sentences with no wasted words: output shape first, then concrete usage scenarios.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple one-parameter read tool with an output schema, the description covers purpose, response fields, and usage context. It stops short of documenting edge cases or output size limits, but the core calling context is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema gives no parameter descriptions, so the description compensates by clarifying that the keyword is used to retrieve entity suggestions and can disambiguate ambiguous terms. It could add input format details, but the one-parameter surface is simple.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a concrete operation—returning Google entity suggestions for a keyword—and identifies the response fields (title, type, mid), distinguishing it from trend/time-series siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Gives explicit use cases: disambiguate ambiguous terms or find the canonical topic ID. It doesn't name sibling tools or when not to use the tool, but the guidance is still actionable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv0.2.1
    • First observedcompare_keywords
    • First observeddiscover_topics
    • First observedinterest_by_region
    • First observedinterest_over_time
    • First observedlist_categories
    • First observedrelated_queries
    • First observedrelated_topics
    • First observedsuggest_keywords
    • First observedtrending_now

TDQS

A3.8/5.0

Scored across 9 tools

Disambiguation5/5

Each tool serves a distinct purpose in the Google Trends domain: time series, comparison, related queries/topics, regional breakdown, suggestions, real-time trends, category listing, and topic discovery. There is no overlap that would confuse an agent.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., interest_over_time, compare_keywords, related_queries), using snake_case throughout. The verbs clearly indicate the action, and nouns are domain-relevant.

Tool Count5/5

With 9 tools, the server is well-scoped for a Google Trends analysis domain. Each tool covers a distinct aspect of trend research without redundancy, making the count ideal for the purpose.

Completeness4/5

The toolset covers the core Google Trends workflows: time series, comparison, related terms, regional data, real-time trends, and suggestions. Missing would be something like historical category comparisons or multi-region breakdowns, but these are minor gaps that agents can work around.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    B
    maintenance
    Provides Google Search trend data as an MCP tool, with historical series, growth percentages, and live trending searches, no scraping or rate limits.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Provides free Google Trends data (interest over time, term comparison, related queries, trending now, regional breakdown) to MCP-compatible AI clients without needing an API key.
    5
    52
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server providing access to Google Trends, YouTube listings, Google Ads Transparency, and Google Play reviews via plain HTTP, with no API key required. It caches results and paces requests to work within Google's informal rate limits.
    7
    2
    MIT